diff -Nrcpad gcc-16-20251102/ChangeLog gcc-16-20251109/ChangeLog
*** gcc-16-20251102/ChangeLog	Sun Nov  2 22:32:16 2025
--- gcc-16-20251109/ChangeLog	Sun Nov  9 22:32:42 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-30  Robin Dapp  <rdapp@ventanamicro.com>
  
  	* MAINTAINERS: Add myself to reviewers/maintainers.
diff -Nrcpad gcc-16-20251102/LAST_UPDATED gcc-16-20251109/LAST_UPDATED
*** gcc-16-20251102/LAST_UPDATED	Sun Nov  2 22:34:37 2025
--- gcc-16-20251109/LAST_UPDATED	Sun Nov  9 22:35:25 2025
***************
*** 1 ****
! Obtained from git: master revision d66209cee5dda39ac4add589f4535f35c5736c63
--- 1 ----
! Obtained from git: master revision d4b95151e0f9ab63ba4a87cadc63e9cc4f335af1
diff -Nrcpad gcc-16-20251102/MD5SUMS gcc-16-20251109/MD5SUMS
*** gcc-16-20251102/MD5SUMS	Sun Nov  2 22:34:46 2025
--- gcc-16-20251109/MD5SUMS	Sun Nov  9 22:35:30 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20251102.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-20251109.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
*** 23,33 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! e0703a4a2bb350e9a4578a0bfcb4bc72  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 83738a4f900f4c3ed0a2ea2c6f479df8  LAST_UPDATED
  c4d040796ef5e08dc8d7ea898235f87e  MAINTAINERS
  e4676e623f8df5efef68f36db1121a28  Makefile.def
  e602349d286d2792c339d5a6f514efde  Makefile.in
--- 23,33 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! e3b8f542752068f7deb76cb95b78478f  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! b7cafbe0dafdbeb9337deabe7c426999  LAST_UPDATED
  c4d040796ef5e08dc8d7ea898235f87e  MAINTAINERS
  e4676e623f8df5efef68f36db1121a28  Makefile.def
  e602349d286d2792c339d5a6f514efde  Makefile.in
*************** c5a60ac6626343968c4ef1fdf261bf62  c++too
*** 48,54 ****
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! 8da411405f9055f79368fa3212ae7764  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
  c52785ba62b3166f78b8b9747f3caa55  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
--- 48,54 ----
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! a054e3f62cc679052cf517460e61d082  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
  c52785ba62b3166f78b8b9747f3caa55  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
*************** ece3bc716fac1aca84326d40b97a4b4b  config
*** 77,83 ****
  f466ea6022e6627a2e3d94bb0cc7eeb9  config/bootstrap-time.mk
  065f6478cf9a6fdc999f666517cfb8b4  config/bootstrap-ubsan.mk
  2ef96b7f5ed3e6a5fd105f2cb18b1887  config/cet.m4
! df9dcb6ecbf8728bb57502042a8e2d58  config/clang-plugin.m4
  04bdbef77f5fd2e282f7dee0bde60444  config/codeset.m4
  b5a5c394536a15e50be1998bd341fd02  config/depstand.m4
  a763364d451e805a934f6520b8b4d602  config/dfp.m4
--- 77,83 ----
  f466ea6022e6627a2e3d94bb0cc7eeb9  config/bootstrap-time.mk
  065f6478cf9a6fdc999f666517cfb8b4  config/bootstrap-ubsan.mk
  2ef96b7f5ed3e6a5fd105f2cb18b1887  config/cet.m4
! ecf21fe4f75a80b0f2efc9bf3625a267  config/clang-plugin.m4
  04bdbef77f5fd2e282f7dee0bde60444  config/codeset.m4
  b5a5c394536a15e50be1998bd341fd02  config/depstand.m4
  a763364d451e805a934f6520b8b4d602  config/dfp.m4
*************** a763364d451e805a934f6520b8b4d602  config
*** 86,92 ****
  15b8d5adf53ad5ec75f055b193a6b1c2  config/extensions.m4
  2f2de833dd86bba89d64e5813be81550  config/futex.m4
  d3eafe382a46e6747e3644cf4a55d5cc  config/gc++filt.m4
! 8082646dfb4eeb203c0a05b59680009f  config/gcc-plugin.m4
  668132e429b5a64836ff6f2e6a52bcd2  config/gettext-sister.m4
  891029ae654600a455aee41cac4eb400  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
--- 86,92 ----
  15b8d5adf53ad5ec75f055b193a6b1c2  config/extensions.m4
  2f2de833dd86bba89d64e5813be81550  config/futex.m4
  d3eafe382a46e6747e3644cf4a55d5cc  config/gc++filt.m4
! e5bb8100763b19abf4b1367f96305a98  config/gcc-plugin.m4
  668132e429b5a64836ff6f2e6a52bcd2  config/gettext-sister.m4
  891029ae654600a455aee41cac4eb400  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 155,161 ****
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! 495ed9ecf8750f1291e5cc64eb777d4e  configure
  3fd655ec08ac4a6ad2ab9bd795775aaf  configure.ac
  c79879703bbd60d9b966a7770cffe1a4  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
--- 155,161 ----
  7ef51b0adb98e5c5f7aba46d2c7293f1  config/weakref.m4
  0163b672c888aaf1c8ad3e867a0ec9f1  config/zlib.m4
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
! 994218de941aecdc9dba8ca8ea457a31  configure
  3fd655ec08ac4a6ad2ab9bd795775aaf  configure.ac
  c79879703bbd60d9b966a7770cffe1a4  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 520,526 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 2f7e6d1cb3b6603b973d2e33f48997bb  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 520,526 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 79fb5bfdb7ab218342367d44c3b2981f  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 557,563 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 9cd2acde05f610c32470c0fbaef4f9a3  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 557,563 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 5a7a76866212269a133a73c244a2aef1  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** ec6799501b2eb2923d5de6a66169dbd2  gcc/ON
*** 569,575 ****
  23d99b5becf269aa690a91a6f95228b9  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 43c690ea7caa06a68a702600cd89706c  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 569,575 ----
  23d99b5becf269aa690a91a6f95228b9  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 97eb4a4cbea50e309beca8b2c7d45384  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** f8207765beac36c54d43698a11140afa  gcc/ad
*** 617,624 ****
  3150d7e2a4f0018bb92d065ed3aedcc0  gcc/ada/argv-lynxos178-raven-cert.c
  5470386a6301c0323b6ee66cf06c1e42  gcc/ada/argv.c
  be50b0b84a57af26b228093529d8228d  gcc/ada/aspects.adb
! 8c62ffc91a61d63a863ec2627bbc388a  gcc/ada/aspects.ads
! 07a8929ab2375e3afc95d4d6e5fedcf6  gcc/ada/atree.adb
  e06413c30b21b3ef9529c9b89592cca6  gcc/ada/atree.ads
  1a5f952bcb9d3c3529147729f3c4ef61  gcc/ada/atree.h
  557d2d802d51833ba752f2b05e30c591  gcc/ada/aux-io.c
--- 617,624 ----
  3150d7e2a4f0018bb92d065ed3aedcc0  gcc/ada/argv-lynxos178-raven-cert.c
  5470386a6301c0323b6ee66cf06c1e42  gcc/ada/argv.c
  be50b0b84a57af26b228093529d8228d  gcc/ada/aspects.adb
! 2d1903cb9cece64ed08500645f93048a  gcc/ada/aspects.ads
! 8acb3d52be1dbe6e3196253c4bc73128  gcc/ada/atree.adb
  e06413c30b21b3ef9529c9b89592cca6  gcc/ada/atree.ads
  1a5f952bcb9d3c3529147729f3c4ef61  gcc/ada/atree.h
  557d2d802d51833ba752f2b05e30c591  gcc/ada/aux-io.c
*************** e534e3e90407ece58cb74fbdc390f33d  gcc/ad
*** 658,664 ****
  ae344bff4834b9e2ef3c07f6dd01b59b  gcc/ada/butil.ads
  2acfb74c50c4563afcbe6a1bca3912a3  gcc/ada/casing.adb
  c576df64e1d6a2ac70b389cc10a835e6  gcc/ada/casing.ads
! e5125566eca3360d59cc5eb0c3984ce2  gcc/ada/checks.adb
  f963647952269416533799c6a5117ea3  gcc/ada/checks.ads
  4c0942bba88f786dffff9a3575759026  gcc/ada/cio.c
  10b93c3ec680bbe04e70ea0e2fb09ac7  gcc/ada/clean.adb
--- 658,664 ----
  ae344bff4834b9e2ef3c07f6dd01b59b  gcc/ada/butil.ads
  2acfb74c50c4563afcbe6a1bca3912a3  gcc/ada/casing.adb
  c576df64e1d6a2ac70b389cc10a835e6  gcc/ada/casing.ads
! 4bb3efdd2706978675dd27f8ae5aa64d  gcc/ada/checks.adb
  f963647952269416533799c6a5117ea3  gcc/ada/checks.ads
  4c0942bba88f786dffff9a3575759026  gcc/ada/cio.c
  10b93c3ec680bbe04e70ea0e2fb09ac7  gcc/ada/clean.adb
*************** c86fbf78ebbf4e22e6591e334888bd79  gcc/ad
*** 670,676 ****
  08509704a245c7fb15ecf43481261825  gcc/ada/contracts.ads
  09a5213fb46479fc00bc1e507f07c02d  gcc/ada/csets.adb
  c8fc2a7d00b9bdf2dfb05cf0fc1c945f  gcc/ada/csets.ads
! 8d28b50ecad95e5e409fd9a212c5d385  gcc/ada/cstand.adb
  d5cdeee41f4cce7791ad47380e922eac  gcc/ada/cstand.ads
  1812c1cc859b55d34f8be50223970490  gcc/ada/cstreams.c
  453f1af3f48533612fca76f44afc9122  gcc/ada/ctrl_c.c
--- 670,676 ----
  08509704a245c7fb15ecf43481261825  gcc/ada/contracts.ads
  09a5213fb46479fc00bc1e507f07c02d  gcc/ada/csets.adb
  c8fc2a7d00b9bdf2dfb05cf0fc1c945f  gcc/ada/csets.ads
! 90aac3a453d51d45c0c2e2f8aad0279f  gcc/ada/cstand.adb
  d5cdeee41f4cce7791ad47380e922eac  gcc/ada/cstand.ads
  1812c1cc859b55d34f8be50223970490  gcc/ada/cstreams.c
  453f1af3f48533612fca76f44afc9122  gcc/ada/ctrl_c.c
*************** cd313e8a12cdfb20b99eede7c5252f16  gcc/ad
*** 694,700 ****
  454fb365cfb751d8e03b8e972d3abef1  gcc/ada/doc/gnat_rm/interfacing_to_other_languages.rst
  d3ffb5a905c9520d87b68e10029eb023  gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst
  3b3b1a4a300ed753e0096fbbf83db984  gcc/ada/doc/gnat_rm/obsolescent_features.rst
! 952177853de529b7a2f483f0d195d2b4  gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
  1813c7ae4ff4245bfbeb8dcf9e475019  gcc/ada/doc/gnat_rm/security_hardening_features.rst
  4de72a3ff83ec3e42cb0d1eaffe486dd  gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst
  31e0ba409ca563e1717444ab64e1e253  gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
--- 694,700 ----
  454fb365cfb751d8e03b8e972d3abef1  gcc/ada/doc/gnat_rm/interfacing_to_other_languages.rst
  d3ffb5a905c9520d87b68e10029eb023  gcc/ada/doc/gnat_rm/intrinsic_subprograms.rst
  3b3b1a4a300ed753e0096fbbf83db984  gcc/ada/doc/gnat_rm/obsolescent_features.rst
! 4b681eebfd365c3633b63689afa61a5f  gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
  1813c7ae4ff4245bfbeb8dcf9e475019  gcc/ada/doc/gnat_rm/security_hardening_features.rst
  4de72a3ff83ec3e42cb0d1eaffe486dd  gcc/ada/doc/gnat_rm/specialized_needs_annexes.rst
  31e0ba409ca563e1717444ab64e1e253  gcc/ada/doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
*************** c7da61a05156d50b4888cdfaae4241d0  gcc/ad
*** 720,729 ****
  0a025bfec2a94c0fcd11a19d18f6c0c5  gcc/ada/doc/share/gnu_free_documentation_license.rst
  f1c71b64e1c84e240c7b5aea7331a32a  gcc/ada/doc/share/latex_elements.py
  90adfcde2feb6d6c090c2b18a1578145  gcc/ada/doc/share/sphinx.sty
! fee3119058c19cc04299b3c13c34fb19  gcc/ada/einfo-utils.adb
  76b28b93a0162cb31366aec9f77d5717  gcc/ada/einfo-utils.ads
  4f882a8b5e78253d5838b1a83e4af5bb  gcc/ada/einfo.adb
! 045f8ecf4fefc5ba82254175189ec192  gcc/ada/einfo.ads
  9fb4fb23a55081d07dc554eeb3253f91  gcc/ada/elists.adb
  1d7f8772477453dee268f8697433a589  gcc/ada/elists.ads
  2d6cb36d45dda0bf32d01725709f0007  gcc/ada/elists.h
--- 720,729 ----
  0a025bfec2a94c0fcd11a19d18f6c0c5  gcc/ada/doc/share/gnu_free_documentation_license.rst
  f1c71b64e1c84e240c7b5aea7331a32a  gcc/ada/doc/share/latex_elements.py
  90adfcde2feb6d6c090c2b18a1578145  gcc/ada/doc/share/sphinx.sty
! 1624ebd692cbdf84a719739c08b2e6ac  gcc/ada/einfo-utils.adb
  76b28b93a0162cb31366aec9f77d5717  gcc/ada/einfo-utils.ads
  4f882a8b5e78253d5838b1a83e4af5bb  gcc/ada/einfo.adb
! 2934582fa1e45b8f274276b8be2cd98a  gcc/ada/einfo.ads
  9fb4fb23a55081d07dc554eeb3253f91  gcc/ada/elists.adb
  1d7f8772477453dee268f8697433a589  gcc/ada/elists.ads
  2d6cb36d45dda0bf32d01725709f0007  gcc/ada/elists.h
*************** fee3119058c19cc04299b3c13c34fb19  gcc/ad
*** 733,745 ****
  8675f538842020e261f2081f1c21c995  gcc/ada/errid.adb
  35c49ed60b3f9ae236a2ad56efd667eb  gcc/ada/errid.ads
  0585186de44d58458e21d420cc29671b  gcc/ada/errno.c
! 2709f2e8b20cfc012b41a3e70076c438  gcc/ada/errout.adb
  753eaa33dd800ee24d257fc9480f25c5  gcc/ada/errout.ads
  3c46648d5df9f40c55424b81c1c34a31  gcc/ada/erroutc-pretty_emitter.adb
  5982702e01a95b6f1a9d43d315634f4e  gcc/ada/erroutc-pretty_emitter.ads
  7ff69fee60c99ef8c581bff41c6a2e59  gcc/ada/erroutc-sarif_emitter.adb
  4f1533723c09c587085c55610017eccb  gcc/ada/erroutc-sarif_emitter.ads
! 436897c81a6e613d8f8067b828bca9a1  gcc/ada/erroutc.adb
  e51a9a19184b2a73f27bb944998177e6  gcc/ada/erroutc.ads
  85388e3edfef44bd2d594c366d29305b  gcc/ada/errsw.adb
  718511a4ab2997da906bb1af2b9872f5  gcc/ada/errsw.ads
--- 733,745 ----
  8675f538842020e261f2081f1c21c995  gcc/ada/errid.adb
  35c49ed60b3f9ae236a2ad56efd667eb  gcc/ada/errid.ads
  0585186de44d58458e21d420cc29671b  gcc/ada/errno.c
! 16d45642cd2e8d5584009d277bf64d02  gcc/ada/errout.adb
  753eaa33dd800ee24d257fc9480f25c5  gcc/ada/errout.ads
  3c46648d5df9f40c55424b81c1c34a31  gcc/ada/erroutc-pretty_emitter.adb
  5982702e01a95b6f1a9d43d315634f4e  gcc/ada/erroutc-pretty_emitter.ads
  7ff69fee60c99ef8c581bff41c6a2e59  gcc/ada/erroutc-sarif_emitter.adb
  4f1533723c09c587085c55610017eccb  gcc/ada/erroutc-sarif_emitter.ads
! 699cf6f5fa87764d6f78687ee4140545  gcc/ada/erroutc.adb
  e51a9a19184b2a73f27bb944998177e6  gcc/ada/erroutc.ads
  85388e3edfef44bd2d594c366d29305b  gcc/ada/errsw.adb
  718511a4ab2997da906bb1af2b9872f5  gcc/ada/errsw.ads
*************** e51a9a19184b2a73f27bb944998177e6  gcc/ad
*** 748,788 ****
  8745064abd42114e7f2f12824abd58f8  gcc/ada/eval_fat.adb
  04c8399e5b8f5b974be325af4fc5793b  gcc/ada/eval_fat.ads
  5062429d8789169d01db0423985a5e99  gcc/ada/exit.c
! c22f123f2da404cf9434264f134ffca8  gcc/ada/exp_aggr.adb
  738bfb6669a1b696ef62dbecd858300a  gcc/ada/exp_aggr.ads
  f5cfbe3c80cc2c7ded2440a52b2b9cf0  gcc/ada/exp_atag.adb
  17872534d797a09463e33092ff3c4b9c  gcc/ada/exp_atag.ads
! 90941e4d6649d4debafab00b279def1d  gcc/ada/exp_attr.adb
  16622dd90fd58bfbfa68224d0bfaf8b2  gcc/ada/exp_attr.ads
  4cb08de59df5f8d0a124038dcbb392f0  gcc/ada/exp_cg.adb
  b18d9873e8e43583acd0e69ba6635023  gcc/ada/exp_cg.ads
  b5c7eb2b5e6d898d5afe2d0e6ae5f382  gcc/ada/exp_ch10.ads
! 63a24d70794d9b56acd7830261a3816d  gcc/ada/exp_ch11.adb
  60bdf7b43270fd45b2cc28489113a581  gcc/ada/exp_ch11.ads
  bdf1e45828c56644b32ac57ae50d5710  gcc/ada/exp_ch12.adb
  855ab7be8dea970234057b661c2254a2  gcc/ada/exp_ch12.ads
  fce186389d317dec9c580f569a2a845a  gcc/ada/exp_ch13.adb
  c6728830f0888dc3385e474b5925c01f  gcc/ada/exp_ch13.ads
! b9d5bddaa9aa52397a9d53cb0da957ed  gcc/ada/exp_ch2.adb
  476e299ea88b583859604d0071046143  gcc/ada/exp_ch2.ads
! 0f5e724b195c5715de8d54f1d58acee4  gcc/ada/exp_ch3.adb
  d1b7c8ba53a4cc5868e87b17370562ce  gcc/ada/exp_ch3.ads
! 475f8a69e03954635fb817f229ff8699  gcc/ada/exp_ch4.adb
  ef982b9647c35560ae7ff386e547bd16  gcc/ada/exp_ch4.ads
  a6101b8ff6b37d2b8018d7081f04151a  gcc/ada/exp_ch5.adb
  f0c7dc0ade3f9639e946e709a9288f31  gcc/ada/exp_ch5.ads
! 2532b1067847e1dc9ed9ff2accacd529  gcc/ada/exp_ch6.adb
! 54a1ff576d38d91bbd44c24ee1a6a5ff  gcc/ada/exp_ch6.ads
! c57a021ec5e6cc614c6092d2b1d41b56  gcc/ada/exp_ch7.adb
  31ee5e50c565d4788d9b794acb5bfebb  gcc/ada/exp_ch7.ads
! ff5f2710ba824ff8ef979c388663bac2  gcc/ada/exp_ch8.adb
  c1f464d28d24669bfe156f13cabe5fca  gcc/ada/exp_ch8.ads
  768f9b1c43ef40d2645d3c44c892d48a  gcc/ada/exp_ch9.adb
  e26475f86b42d59910afddd6b59f6f2f  gcc/ada/exp_ch9.ads
  f47ce79d25dbb4d2f5cc6c375ee8c103  gcc/ada/exp_code.adb
  983664237ff0b38442a164f60d531514  gcc/ada/exp_code.ads
  c5f46927bfde5cfdba7070186c0a3890  gcc/ada/exp_dbug.adb
! 7d55b512bc6b963b537cd44b692b8a54  gcc/ada/exp_dbug.ads
  cc3726d13e05b448f2aafd3e2d176496  gcc/ada/exp_disp.adb
  7151f16c23b394a2f2eef990ebee4e20  gcc/ada/exp_disp.ads
  f8d7c73c2eb136405382e9f889d15683  gcc/ada/exp_dist.adb
--- 748,788 ----
  8745064abd42114e7f2f12824abd58f8  gcc/ada/eval_fat.adb
  04c8399e5b8f5b974be325af4fc5793b  gcc/ada/eval_fat.ads
  5062429d8789169d01db0423985a5e99  gcc/ada/exit.c
! d2a40233452ab7a167be3fb4ec97c4f1  gcc/ada/exp_aggr.adb
  738bfb6669a1b696ef62dbecd858300a  gcc/ada/exp_aggr.ads
  f5cfbe3c80cc2c7ded2440a52b2b9cf0  gcc/ada/exp_atag.adb
  17872534d797a09463e33092ff3c4b9c  gcc/ada/exp_atag.ads
! bca7d093c0b8d273eeada79fa4f01490  gcc/ada/exp_attr.adb
  16622dd90fd58bfbfa68224d0bfaf8b2  gcc/ada/exp_attr.ads
  4cb08de59df5f8d0a124038dcbb392f0  gcc/ada/exp_cg.adb
  b18d9873e8e43583acd0e69ba6635023  gcc/ada/exp_cg.ads
  b5c7eb2b5e6d898d5afe2d0e6ae5f382  gcc/ada/exp_ch10.ads
! 8872c1c66f5020e054a7c9e89ce348c7  gcc/ada/exp_ch11.adb
  60bdf7b43270fd45b2cc28489113a581  gcc/ada/exp_ch11.ads
  bdf1e45828c56644b32ac57ae50d5710  gcc/ada/exp_ch12.adb
  855ab7be8dea970234057b661c2254a2  gcc/ada/exp_ch12.ads
  fce186389d317dec9c580f569a2a845a  gcc/ada/exp_ch13.adb
  c6728830f0888dc3385e474b5925c01f  gcc/ada/exp_ch13.ads
! 554b13411e0db645844aa504d3260d0f  gcc/ada/exp_ch2.adb
  476e299ea88b583859604d0071046143  gcc/ada/exp_ch2.ads
! 205beff1a4bd7dcba2726eb5409736c9  gcc/ada/exp_ch3.adb
  d1b7c8ba53a4cc5868e87b17370562ce  gcc/ada/exp_ch3.ads
! 7ea49619ef3664bf01ce8e807e344399  gcc/ada/exp_ch4.adb
  ef982b9647c35560ae7ff386e547bd16  gcc/ada/exp_ch4.ads
  a6101b8ff6b37d2b8018d7081f04151a  gcc/ada/exp_ch5.adb
  f0c7dc0ade3f9639e946e709a9288f31  gcc/ada/exp_ch5.ads
! a79ce2e1b9f7db5ec2ca45de924185f5  gcc/ada/exp_ch6.adb
! 4a10c6dc6840a4fb29cd1b8a6b191865  gcc/ada/exp_ch6.ads
! e689c007fdbafa4cd1e55834518a9ad0  gcc/ada/exp_ch7.adb
  31ee5e50c565d4788d9b794acb5bfebb  gcc/ada/exp_ch7.ads
! 273b4eb2c6bce53164ea7f4427c65eb7  gcc/ada/exp_ch8.adb
  c1f464d28d24669bfe156f13cabe5fca  gcc/ada/exp_ch8.ads
  768f9b1c43ef40d2645d3c44c892d48a  gcc/ada/exp_ch9.adb
  e26475f86b42d59910afddd6b59f6f2f  gcc/ada/exp_ch9.ads
  f47ce79d25dbb4d2f5cc6c375ee8c103  gcc/ada/exp_code.adb
  983664237ff0b38442a164f60d531514  gcc/ada/exp_code.ads
  c5f46927bfde5cfdba7070186c0a3890  gcc/ada/exp_dbug.adb
! 3677ab097250ba7eea73ad4042759fff  gcc/ada/exp_dbug.ads
  cc3726d13e05b448f2aafd3e2d176496  gcc/ada/exp_disp.adb
  7151f16c23b394a2f2eef990ebee4e20  gcc/ada/exp_disp.ads
  f8d7c73c2eb136405382e9f889d15683  gcc/ada/exp_dist.adb
*************** adda0da8d4f449351c0486c3277f39bd  gcc/ad
*** 805,817 ****
  5eb50023abeda9a76f66518671ad1d05  gcc/ada/exp_smem.ads
  6089fb5771e4cd54334f73ef36cfe220  gcc/ada/exp_spark.adb
  0365865a8be979f0a1db6a61cadbe940  gcc/ada/exp_spark.ads
! cd856c9dca28a3bb7cb71b6e61da98d8  gcc/ada/exp_strm.adb
  ee769a63f7ef20a179accef0a80ef873  gcc/ada/exp_strm.ads
  59000e9704cdc65241a4bceab3308eb3  gcc/ada/exp_tss.adb
  52a5741c37559d0398594d7baa1c99ac  gcc/ada/exp_tss.ads
! a55ae41c0e68be209828e4229c2bbae3  gcc/ada/exp_unst.adb
  d2f34876e61000e49299ef9b2569cbbf  gcc/ada/exp_unst.ads
! 1ca4619225f7904dbe870fa84f33746f  gcc/ada/exp_util.adb
  24baec8a8e8188bc72055a6a83ac20fb  gcc/ada/exp_util.ads
  46d0480b64db4c72cf1f08b18e3c33cf  gcc/ada/expander.adb
  53bb0eb5c4feebf8b5fbef639f5827bd  gcc/ada/expander.ads
--- 805,817 ----
  5eb50023abeda9a76f66518671ad1d05  gcc/ada/exp_smem.ads
  6089fb5771e4cd54334f73ef36cfe220  gcc/ada/exp_spark.adb
  0365865a8be979f0a1db6a61cadbe940  gcc/ada/exp_spark.ads
! 4058e947a8b3223678aa69eca8595d0f  gcc/ada/exp_strm.adb
  ee769a63f7ef20a179accef0a80ef873  gcc/ada/exp_strm.ads
  59000e9704cdc65241a4bceab3308eb3  gcc/ada/exp_tss.adb
  52a5741c37559d0398594d7baa1c99ac  gcc/ada/exp_tss.ads
! 1958eceb4f7e06ddd110ee84a21012ef  gcc/ada/exp_unst.adb
  d2f34876e61000e49299ef9b2569cbbf  gcc/ada/exp_unst.ads
! 65b77f2794924ebc2a58a3e1914b7b4a  gcc/ada/exp_util.adb
  24baec8a8e8188bc72055a6a83ac20fb  gcc/ada/exp_util.ads
  46d0480b64db4c72cf1f08b18e3c33cf  gcc/ada/expander.adb
  53bb0eb5c4feebf8b5fbef639f5827bd  gcc/ada/expander.ads
*************** e0c5e28f92b1d5fad283ec608aceb807  gcc/ad
*** 824,832 ****
  4132ae09b3f8d374f31e34bfa2c3c6a4  gcc/ada/fname-sf.ads
  1dad044977a804680354018afa5d62c8  gcc/ada/fname-uf.adb
  576d7463667fc4c859a05f9e19146427  gcc/ada/fname-uf.ads
! ec7cf235c00294fe67198b9bf264f3d9  gcc/ada/fname.adb
  5ef403dc7e6540ad58ec4ccec10de65c  gcc/ada/fname.ads
! 23164f1041375dce6fd4430bb4601931  gcc/ada/freeze.adb
  0cfb73b82bc6277eb801329c392229d2  gcc/ada/freeze.ads
  5f9e0e6d3b96540c54ba9e0ca89941e4  gcc/ada/frontend.adb
  6f776be1d84e9d8c996b576c19a4349f  gcc/ada/frontend.ads
--- 824,832 ----
  4132ae09b3f8d374f31e34bfa2c3c6a4  gcc/ada/fname-sf.ads
  1dad044977a804680354018afa5d62c8  gcc/ada/fname-uf.adb
  576d7463667fc4c859a05f9e19146427  gcc/ada/fname-uf.ads
! 6aaa208cd2b84362faa2525028094cc9  gcc/ada/fname.adb
  5ef403dc7e6540ad58ec4ccec10de65c  gcc/ada/fname.ads
! 98545697ec547fb8b75bcd812c250c23  gcc/ada/freeze.adb
  0cfb73b82bc6277eb801329c392229d2  gcc/ada/freeze.ads
  5f9e0e6d3b96540c54ba9e0ca89941e4  gcc/ada/frontend.adb
  6f776be1d84e9d8c996b576c19a4349f  gcc/ada/frontend.ads
*************** b350a6fd65cafe8bd47dc42192437310  gcc/ad
*** 851,862 ****
  d7f5374a67a40e0ebecaf6ba95369af1  gcc/ada/gcc-interface/trans.cc
  266cd844950bb1df51718e65e78177aa  gcc/ada/gcc-interface/utils.cc
  0b638ee76fd250092e4f0077d2deb899  gcc/ada/gcc-interface/utils2.cc
! 7f457b4dfdc40122d286fdd928bdad0b  gcc/ada/gen_il-fields.ads
! 71efadf4579df758ff3d06f657397f1f  gcc/ada/gen_il-gen-gen_entities.adb
! 3d4e50ccf4f53a8711b946ad7fcb2f89  gcc/ada/gen_il-gen-gen_nodes.adb
! fa07e4c6240b8cfff6d7d98112fee236  gcc/ada/gen_il-gen.adb
! c979a98c6b57608c79d578871fa0c58a  gcc/ada/gen_il-gen.ads
! 46571b946dd81b69b575b6c3618032df  gcc/ada/gen_il-internals.adb
  df0beb95a99f054fd498bb3fc0b8fccc  gcc/ada/gen_il-internals.ads
  6f79de1a05bf91310c857e93030b71e6  gcc/ada/gen_il-main.adb
  8c6b2242472f0e1b3a9a24b609a86723  gcc/ada/gen_il-types.ads
--- 851,862 ----
  d7f5374a67a40e0ebecaf6ba95369af1  gcc/ada/gcc-interface/trans.cc
  266cd844950bb1df51718e65e78177aa  gcc/ada/gcc-interface/utils.cc
  0b638ee76fd250092e4f0077d2deb899  gcc/ada/gcc-interface/utils2.cc
! 04cd290576574ac52b92f4be4c411b72  gcc/ada/gen_il-fields.ads
! cb15cb17f05d990b652fea67a129850e  gcc/ada/gen_il-gen-gen_entities.adb
! 8ec84c33f7fdcfd609907357c560f5ef  gcc/ada/gen_il-gen-gen_nodes.adb
! a34dfe8183cd92cbf3a1b3bd307ad987  gcc/ada/gen_il-gen.adb
! f12cc477a1b44809e41831bc2d51d242  gcc/ada/gen_il-gen.ads
! a2d89b8f2815cb0a787f37754f315053  gcc/ada/gen_il-internals.adb
  df0beb95a99f054fd498bb3fc0b8fccc  gcc/ada/gen_il-internals.ads
  6f79de1a05bf91310c857e93030b71e6  gcc/ada/gen_il-main.adb
  8c6b2242472f0e1b3a9a24b609a86723  gcc/ada/gen_il-types.ads
*************** a1d2619ccca21c06754f3cdd326876e1  gcc/ad
*** 867,873 ****
  0930ee3acae3e581cd90b4ea71d36c46  gcc/ada/get_scos.ads
  c30d04e8e72b6ecb391a5f74ed43baa6  gcc/ada/get_targ.adb
  1033bc14018eca0ac6056a8955c8e228  gcc/ada/get_targ.ads
! 919e7f166c3737b5506ce72e3a9547e9  gcc/ada/ghost.adb
  1109d7291e3ece3ae8cb7b668e16d9cd  gcc/ada/ghost.ads
  6f5b1925a8a5b030703dd62acb3e37cc  gcc/ada/gnat-style.texi
  be98a1e6f04922fb22c79c4540070fe5  gcc/ada/gnat1drv.adb
--- 867,873 ----
  0930ee3acae3e581cd90b4ea71d36c46  gcc/ada/get_scos.ads
  c30d04e8e72b6ecb391a5f74ed43baa6  gcc/ada/get_targ.adb
  1033bc14018eca0ac6056a8955c8e228  gcc/ada/get_targ.ads
! edb8d147c2dac67cc28d546f33545c95  gcc/ada/ghost.adb
  1109d7291e3ece3ae8cb7b668e16d9cd  gcc/ada/ghost.ads
  6f5b1925a8a5b030703dd62acb3e37cc  gcc/ada/gnat-style.texi
  be98a1e6f04922fb22c79c4540070fe5  gcc/ada/gnat1drv.adb
*************** be98a1e6f04922fb22c79c4540070fe5  gcc/ad
*** 875,882 ****
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  49c5329fd360e2bf4e549bc7de93aab7  gcc/ada/gnat_cuda.adb
  de69fc271ce889490809004600fcac0f  gcc/ada/gnat_cuda.ads
! d7e1b723c1f4358fc995ff9ca981c3ad  gcc/ada/gnat_rm.texi
! fa1f249efe6a66c215950ac5d3c89e30  gcc/ada/gnat_ugn.texi
  957e02fdb4684d592d9172cea8dfb4cb  gcc/ada/gnatbind.adb
  fff8dfca966e9d6f779ce90e57344a0f  gcc/ada/gnatbind.ads
  4fea416b1232ad73eeb5e21f09d13496  gcc/ada/gnatchop.adb
--- 875,882 ----
  917ea7311a30ec4c5cec3e610ca640c2  gcc/ada/gnat2.gpr
  49c5329fd360e2bf4e549bc7de93aab7  gcc/ada/gnat_cuda.adb
  de69fc271ce889490809004600fcac0f  gcc/ada/gnat_cuda.ads
! b917690c0fd159638595ba89dc6c12a2  gcc/ada/gnat_rm.texi
! a88da1cfc2d016043c397e15da52bef0  gcc/ada/gnat_ugn.texi
  957e02fdb4684d592d9172cea8dfb4cb  gcc/ada/gnatbind.adb
  fff8dfca966e9d6f779ce90e57344a0f  gcc/ada/gnatbind.ads
  4fea416b1232ad73eeb5e21f09d13496  gcc/ada/gnatchop.adb
*************** ea767dec8fd43eff8cefde339b3a7d04  gcc/ad
*** 912,918 ****
  8c188167519fcde228e7406b86ad3c4f  gcc/ada/indepsw.ads
  bba82adc9fdf0fc509eaae42d763da79  gcc/ada/init.c
  c45e7a63e33e0bdb85ff3e50d0220aa4  gcc/ada/initialize.c
! 2665b7c28653e7dd79dc37269c935ab4  gcc/ada/inline.adb
  91cdabaa5b703885dad7b8dc5df17446  gcc/ada/inline.ads
  8d71a48789cbec10ceabfe68770803c1  gcc/ada/itypes.adb
  f62835b6268c11341ad683753a9d7acd  gcc/ada/itypes.ads
--- 912,918 ----
  8c188167519fcde228e7406b86ad3c4f  gcc/ada/indepsw.ads
  bba82adc9fdf0fc509eaae42d763da79  gcc/ada/init.c
  c45e7a63e33e0bdb85ff3e50d0220aa4  gcc/ada/initialize.c
! 926d80f7dd2d6f0fbbef830c2e750685  gcc/ada/inline.adb
  91cdabaa5b703885dad7b8dc5df17446  gcc/ada/inline.ads
  8d71a48789cbec10ceabfe68770803c1  gcc/ada/itypes.adb
  f62835b6268c11341ad683753a9d7acd  gcc/ada/itypes.ads
*************** d731f2a00c2328507e1708628b8f8534  gcc/ad
*** 1185,1191 ****
  ae4142c1ed4537f1eb124c9eac394129  gcc/ada/libgnat/a-cbhama.ads
  9223e8d2808faab558fea487a6f7533a  gcc/ada/libgnat/a-cbhase.adb
  2618731613309e98934dd5386b4dc20c  gcc/ada/libgnat/a-cbhase.ads
! 47d4b5a405ecab1cb8ba5d73e8fd812f  gcc/ada/libgnat/a-cbmutr.adb
  dde74adfde60cdcf3f792ddea6aad929  gcc/ada/libgnat/a-cbmutr.ads
  f4075ce629781e290f28b39f1b2a6aa9  gcc/ada/libgnat/a-cborma.adb
  2df8a2fc821610d9db32e1a1852338f7  gcc/ada/libgnat/a-cborma.ads
--- 1185,1191 ----
  ae4142c1ed4537f1eb124c9eac394129  gcc/ada/libgnat/a-cbhama.ads
  9223e8d2808faab558fea487a6f7533a  gcc/ada/libgnat/a-cbhase.adb
  2618731613309e98934dd5386b4dc20c  gcc/ada/libgnat/a-cbhase.ads
! db36da5e4b7c3b0bc50541723defa003  gcc/ada/libgnat/a-cbmutr.adb
  dde74adfde60cdcf3f792ddea6aad929  gcc/ada/libgnat/a-cbmutr.ads
  f4075ce629781e290f28b39f1b2a6aa9  gcc/ada/libgnat/a-cborma.adb
  2df8a2fc821610d9db32e1a1852338f7  gcc/ada/libgnat/a-cborma.ads
*************** d1ae04dc56ccbba0038600f2e2bc41fe  gcc/ad
*** 1234,1240 ****
  b18e96e35fcb925ca150d3a1b32e279c  gcc/ada/libgnat/a-cihama.ads
  b0299538595207b1e6ba4305c043e666  gcc/ada/libgnat/a-cihase.adb
  ca8a149112ba305fa8ee892f586746a6  gcc/ada/libgnat/a-cihase.ads
! 15c61d7220f581219c7b8ade1a0894c6  gcc/ada/libgnat/a-cimutr.adb
  8b1c496d15fa7c31acedf4db9c1df927  gcc/ada/libgnat/a-cimutr.ads
  662527cf8705f553c701a91ececa7159  gcc/ada/libgnat/a-ciorma.adb
  26c4bbb8e43ebe9f47924cff66ecb85a  gcc/ada/libgnat/a-ciorma.ads
--- 1234,1240 ----
  b18e96e35fcb925ca150d3a1b32e279c  gcc/ada/libgnat/a-cihama.ads
  b0299538595207b1e6ba4305c043e666  gcc/ada/libgnat/a-cihase.adb
  ca8a149112ba305fa8ee892f586746a6  gcc/ada/libgnat/a-cihase.ads
! f5acfe5d74644aabbd33334318066c82  gcc/ada/libgnat/a-cimutr.adb
  8b1c496d15fa7c31acedf4db9c1df927  gcc/ada/libgnat/a-cimutr.ads
  662527cf8705f553c701a91ececa7159  gcc/ada/libgnat/a-ciorma.adb
  26c4bbb8e43ebe9f47924cff66ecb85a  gcc/ada/libgnat/a-ciorma.ads
*************** b0391354444679bfac18cce7aea1e885  gcc/ad
*** 1271,1277 ****
  832829f6fccb40d533732b8457cbe400  gcc/ada/libgnat/a-colire.ads
  a85935467cf30ff32bc26677c0bb63e2  gcc/ada/libgnat/a-comlin.adb
  16175445e74d542a497bea1c8d6a9ad4  gcc/ada/libgnat/a-comlin.ads
! ae97d474872fe60157fb2d45c33d1ca2  gcc/ada/libgnat/a-comutr.adb
  0d7d222a6957753146cc9a2f38dab198  gcc/ada/libgnat/a-comutr.ads
  39bdaf4aeeed37537b6c19275a89edf7  gcc/ada/libgnat/a-conhel.adb
  c1664afdaf6327fe46438712972cbd75  gcc/ada/libgnat/a-conhel.ads
--- 1271,1277 ----
  832829f6fccb40d533732b8457cbe400  gcc/ada/libgnat/a-colire.ads
  a85935467cf30ff32bc26677c0bb63e2  gcc/ada/libgnat/a-comlin.adb
  16175445e74d542a497bea1c8d6a9ad4  gcc/ada/libgnat/a-comlin.ads
! 66edb08a9c39ba38949d150dd1074a4c  gcc/ada/libgnat/a-comutr.adb
  0d7d222a6957753146cc9a2f38dab198  gcc/ada/libgnat/a-comutr.ads
  39bdaf4aeeed37537b6c19275a89edf7  gcc/ada/libgnat/a-conhel.adb
  c1664afdaf6327fe46438712972cbd75  gcc/ada/libgnat/a-conhel.ads
*************** b0b674397e26b47a258b47ad3b083697  gcc/ad
*** 2117,2124 ****
  8930dc9ab66638afc307f0a959893637  gcc/ada/libgnat/s-dourea.adb
  4763b5f304cf8156e3a866ce4ea1c455  gcc/ada/libgnat/s-dourea.ads
  2654f7f798aa6b6284b7f6771f4f6d8d  gcc/ada/libgnat/s-dsaser.ads
! 3e781036600adf86098ec5566c389b4d  gcc/ada/libgnat/s-dwalin.adb
! 0373020c8c333bc4c9aff4cdf70eb4bd  gcc/ada/libgnat/s-dwalin.ads
  b0582ed9e0f3716923001a5b20910ff6  gcc/ada/libgnat/s-elaall.adb
  0914a0a7b14d9140d662a98df793863b  gcc/ada/libgnat/s-elaall.ads
  b113fd6de80586dce1c76c636b0bd835  gcc/ada/libgnat/s-excdeb.adb
--- 2117,2124 ----
  8930dc9ab66638afc307f0a959893637  gcc/ada/libgnat/s-dourea.adb
  4763b5f304cf8156e3a866ce4ea1c455  gcc/ada/libgnat/s-dourea.ads
  2654f7f798aa6b6284b7f6771f4f6d8d  gcc/ada/libgnat/s-dsaser.ads
! ec924c2a84055b08af1e006bf2038fa7  gcc/ada/libgnat/s-dwalin.adb
! ce6294afc315f24c8c2e650c453fa795  gcc/ada/libgnat/s-dwalin.ads
  b0582ed9e0f3716923001a5b20910ff6  gcc/ada/libgnat/s-elaall.adb
  0914a0a7b14d9140d662a98df793863b  gcc/ada/libgnat/s-elaall.ads
  b113fd6de80586dce1c76c636b0bd835  gcc/ada/libgnat/s-excdeb.adb
*************** bda6e6153863f28fe5e93d505727b03b  gcc/ad
*** 2617,2625 ****
  ab8076ad0a066bb0ba933bcc88fd663a  gcc/ada/libgnat/s-stopoo.ads
  4ca21e4a3c1fea6cfa36b7bc6a6b66b7  gcc/ada/libgnat/s-stposu.adb
  8fafaa1105e5a56cc9b863a5d50b553a  gcc/ada/libgnat/s-stposu.ads
! d37cb5009fbf6cc86d2d4380f5882ad9  gcc/ada/libgnat/s-stratt.adb
! ab6a28dbd6b37651186442d1595a4e9d  gcc/ada/libgnat/s-stratt.ads
! 2e6c6d9ef14ea33da34b09de00160ed3  gcc/ada/libgnat/s-stratt__cheri.adb
  a5ac1a661b8910fd3e257096fdbc2b19  gcc/ada/libgnat/s-strcom.adb
  a5962b65b082efdd807e1e78406c8276  gcc/ada/libgnat/s-strcom.ads
  3c2868bef8c0b5736a45c3827118a72d  gcc/ada/libgnat/s-strhas.adb
--- 2617,2625 ----
  ab8076ad0a066bb0ba933bcc88fd663a  gcc/ada/libgnat/s-stopoo.ads
  4ca21e4a3c1fea6cfa36b7bc6a6b66b7  gcc/ada/libgnat/s-stposu.adb
  8fafaa1105e5a56cc9b863a5d50b553a  gcc/ada/libgnat/s-stposu.ads
! 825cd21458430301eb4f3a73c228ae79  gcc/ada/libgnat/s-stratt.adb
! 04e13ea2fa0980c0638f05c70eed410d  gcc/ada/libgnat/s-stratt.ads
! 57976a26c07418930af1d6bfcef19e95  gcc/ada/libgnat/s-stratt__cheri.adb
  a5ac1a661b8910fd3e257096fdbc2b19  gcc/ada/libgnat/s-strcom.adb
  a5962b65b082efdd807e1e78406c8276  gcc/ada/libgnat/s-strcom.ads
  3c2868bef8c0b5736a45c3827118a72d  gcc/ada/libgnat/s-strhas.adb
*************** ea699eaacddd94e44af5fb519361ad4d  gcc/ad
*** 2636,2644 ****
  6a1035fe9e9be79742beda804e67a3f2  gcc/ada/libgnat/s-traceb__mastop.adb
  ed9803237b06bc4a3d390e2358fd3b27  gcc/ada/libgnat/s-traent.adb
  26134f1dafdbc6f3bfdee2d8a3d691c7  gcc/ada/libgnat/s-traent.ads
! 42dec61edfcb9d86beb94f9f2774d3df  gcc/ada/libgnat/s-trasym.adb
! ba0f0e2b49a2abcb11276ca13680a9ca  gcc/ada/libgnat/s-trasym.ads
! 26744f51263f2faad92d59a019131dc6  gcc/ada/libgnat/s-trasym__dwarf.adb
  ae31c644571f5bd80e55212954450689  gcc/ada/libgnat/s-tsmona.adb
  d24397c620e7798c862b39526b3374cd  gcc/ada/libgnat/s-tsmona__linux.adb
  8991c7832c179d6caa3de959bccd9ca2  gcc/ada/libgnat/s-tsmona__mingw.adb
--- 2636,2644 ----
  6a1035fe9e9be79742beda804e67a3f2  gcc/ada/libgnat/s-traceb__mastop.adb
  ed9803237b06bc4a3d390e2358fd3b27  gcc/ada/libgnat/s-traent.adb
  26134f1dafdbc6f3bfdee2d8a3d691c7  gcc/ada/libgnat/s-traent.ads
! 9be9fcf4a553b63888b7dc6ab568f5dd  gcc/ada/libgnat/s-trasym.adb
! 6bdd60923ef3551574ca1eba13714123  gcc/ada/libgnat/s-trasym.ads
! 70ca1954c25d834a999746841983260f  gcc/ada/libgnat/s-trasym__dwarf.adb
  ae31c644571f5bd80e55212954450689  gcc/ada/libgnat/s-tsmona.adb
  d24397c620e7798c862b39526b3374cd  gcc/ada/libgnat/s-tsmona__linux.adb
  8991c7832c179d6caa3de959bccd9ca2  gcc/ada/libgnat/s-tsmona__mingw.adb
*************** b9fd1f536d8f1c867c911cbe2996ebeb  gcc/ad
*** 2827,2850 ****
  57985da6ee6f2d437d610b1b9249f436  gcc/ada/output.ads
  cf568cc3ccf1e3077d0124147b5eb011  gcc/ada/par-ch10.adb
  90ae3c6fcf255101ea0bd2dfc118762f  gcc/ada/par-ch11.adb
! 9e92e3caaf4f98cafb66351a63bd06ec  gcc/ada/par-ch12.adb
! 726417eeba8f4e1ae6310601195b55e4  gcc/ada/par-ch13.adb
  ed9e0f33947385dfddd6c98bc7c51a92  gcc/ada/par-ch2.adb
! 20f2d1c603041e115215f1f16853c42c  gcc/ada/par-ch3.adb
  8008dff554d7685ade76fc72487b4a60  gcc/ada/par-ch4.adb
  63a4bee77501bbe0cb76503f22893cbd  gcc/ada/par-ch5.adb
! f7eb7f9dffd732f17489bd09047572f9  gcc/ada/par-ch6.adb
  156c49bfe462052c8f4cfb04419e91ee  gcc/ada/par-ch7.adb
  c1753ff5c32c0be63d9986ae33c03316  gcc/ada/par-ch8.adb
  07d24cdeaf20bb48b3a9d4a2e11fd748  gcc/ada/par-ch9.adb
! 0f10c72440816216759b417e23acf069  gcc/ada/par-endh.adb
  6f12aeb2c6db21d91040dfb1bf2e74ce  gcc/ada/par-labl.adb
  43aa6209cff7b408262fff979f2f6699  gcc/ada/par-load.adb
  edca7d5bed3893390e3732eb691f2817  gcc/ada/par-prag.adb
  ee1279472214ff7ca5b61685a2ada15f  gcc/ada/par-sync.adb
  47b402373c995a1c6df9226ae6e02ff2  gcc/ada/par-tchk.adb
  4604f1e5c60129438742f4320d848ce8  gcc/ada/par-util.adb
! b320d7c9a2a8a1bfeb97bc4d96d18b65  gcc/ada/par.adb
  cc0b4ae85eb0edbcce886d13c925cbf3  gcc/ada/par.ads
  ab580cbf09f85961d85ea5be3ea8e5a6  gcc/ada/par_sco.adb
  2674a374e947c03703d34f6603994424  gcc/ada/par_sco.ads
--- 2827,2850 ----
  57985da6ee6f2d437d610b1b9249f436  gcc/ada/output.ads
  cf568cc3ccf1e3077d0124147b5eb011  gcc/ada/par-ch10.adb
  90ae3c6fcf255101ea0bd2dfc118762f  gcc/ada/par-ch11.adb
! 89ccc6fe9c46763a5febbd1013a01a1e  gcc/ada/par-ch12.adb
! 8ba431a53d85708c550368659f57c490  gcc/ada/par-ch13.adb
  ed9e0f33947385dfddd6c98bc7c51a92  gcc/ada/par-ch2.adb
! 8800956e746f8c66bcfd81ee2c7e3bcc  gcc/ada/par-ch3.adb
  8008dff554d7685ade76fc72487b4a60  gcc/ada/par-ch4.adb
  63a4bee77501bbe0cb76503f22893cbd  gcc/ada/par-ch5.adb
! 412c27bd941532b189e7f171a0fe23b7  gcc/ada/par-ch6.adb
  156c49bfe462052c8f4cfb04419e91ee  gcc/ada/par-ch7.adb
  c1753ff5c32c0be63d9986ae33c03316  gcc/ada/par-ch8.adb
  07d24cdeaf20bb48b3a9d4a2e11fd748  gcc/ada/par-ch9.adb
! b2d8cc76446084856eb4b47dea2b8cc3  gcc/ada/par-endh.adb
  6f12aeb2c6db21d91040dfb1bf2e74ce  gcc/ada/par-labl.adb
  43aa6209cff7b408262fff979f2f6699  gcc/ada/par-load.adb
  edca7d5bed3893390e3732eb691f2817  gcc/ada/par-prag.adb
  ee1279472214ff7ca5b61685a2ada15f  gcc/ada/par-sync.adb
  47b402373c995a1c6df9226ae6e02ff2  gcc/ada/par-tchk.adb
  4604f1e5c60129438742f4320d848ce8  gcc/ada/par-util.adb
! 865fa27e067e3a490e4dfeeeef0c71dd  gcc/ada/par.adb
  cc0b4ae85eb0edbcce886d13c925cbf3  gcc/ada/par.ads
  ab580cbf09f85961d85ea5be3ea8e5a6  gcc/ada/par_sco.adb
  2674a374e947c03703d34f6603994424  gcc/ada/par_sco.ads
*************** bb35d323ecf448aa8fb7025a4bc206ac  gcc/ad
*** 2870,2876 ****
  32312ab752a2a0382c9276e387b389e1  gcc/ada/rtfinal.c
  1654d90a151d0c2c0664a7033460833c  gcc/ada/rtinit.c
  1e27242a4b1e6be20b3aee25a5d9b8d7  gcc/ada/rtsfind.adb
! c848cd1773f49a8a38c701a95c624aee  gcc/ada/rtsfind.ads
  66e987f268458746a6afb190c151af7a  gcc/ada/runtime.h
  e76c7dbbf67be8a63281bb1cb3093034  gcc/ada/s-oscons-tmplt.c
  6c6bc69518c778cd3f35ca2095dc1ce1  gcc/ada/s-pack.adb.tmpl
--- 2870,2876 ----
  32312ab752a2a0382c9276e387b389e1  gcc/ada/rtfinal.c
  1654d90a151d0c2c0664a7033460833c  gcc/ada/rtinit.c
  1e27242a4b1e6be20b3aee25a5d9b8d7  gcc/ada/rtsfind.adb
! 359c6afc76f2b2ddecfb45b309c955e9  gcc/ada/rtsfind.ads
  66e987f268458746a6afb190c151af7a  gcc/ada/runtime.h
  e76c7dbbf67be8a63281bb1cb3093034  gcc/ada/s-oscons-tmplt.c
  6c6bc69518c778cd3f35ca2095dc1ce1  gcc/ada/s-pack.adb.tmpl
*************** a424011f3e6f5e5a1163e2a9e1324779  gcc/ad
*** 2891,2931 ****
  b1230ac9f3cae75bd98a0fc5e0fabdcf  gcc/ada/sem.ads
  486e7e3521da672c20bea967001436f9  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! a8711f7fb984bc63c1374e002600d27f  gcc/ada/sem_attr.adb
  2a239613f39312b54ea82d1e690a3ea2  gcc/ada/sem_attr.ads
! 67c9535c9fd384cc23ba9aafbc93defb  gcc/ada/sem_aux.adb
  e15b069fa2ff472febda85c8b9cacb81  gcc/ada/sem_aux.ads
  a42bf57eedc6f047301e698b7b6c4924  gcc/ada/sem_case.adb
  88daa5c9b6e135316b52695cae25a496  gcc/ada/sem_case.ads
  84667b3de209c0b04f82a349c6125ab0  gcc/ada/sem_cat.adb
  e364f4e3ae92066699cc93a8f7b828c1  gcc/ada/sem_cat.ads
! efb8983a0d800885901944d42ede5985  gcc/ada/sem_ch10.adb
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! e0be4107974a73e2585447a532b6d50f  gcc/ada/sem_ch12.adb
  f981520c42b732545be8bb5c8813ccfd  gcc/ada/sem_ch12.ads
! 334e2dbdd3a003c4678f8a6afa7a65a6  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
  14326c522718c8cb8415b13a79c07972  gcc/ada/sem_ch2.adb
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
! 20cf3666c4848c38abeebc0c1cd30f04  gcc/ada/sem_ch3.adb
  76abe89b089728c6eaca6f7593348732  gcc/ada/sem_ch3.ads
! 653f5332c66bb880af0f354966c2ee7d  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  e8573b06cd7059d6bbde030175ab1a71  gcc/ada/sem_ch5.adb
  ec8d5a42c27c46e4969c16d6e18ed276  gcc/ada/sem_ch5.ads
! 9c8edc8418e17cd1a5fbd65b77454574  gcc/ada/sem_ch6.adb
  165c2ff9990d74ba204881b7983566c7  gcc/ada/sem_ch6.ads
! 094693c34e742c148fdf5b20cf4aca98  gcc/ada/sem_ch7.adb
  24a1265e6a25756265643858abcf7ded  gcc/ada/sem_ch7.ads
! 2c9b2a1f1c1756414860aa04cd92905b  gcc/ada/sem_ch8.adb
  f0b4e317e5d5515a6ec337bc5acf5fe0  gcc/ada/sem_ch8.ads
  546c616e1a0e3e76b6220644a605da51  gcc/ada/sem_ch9.adb
  7b283bd6453de444c7075a8c6f215dda  gcc/ada/sem_ch9.ads
  a3ec3b68d1191d6cfaaaa4ba524b8896  gcc/ada/sem_dim.adb
  d0ed9c569455451ee26c8e2565b7125b  gcc/ada/sem_dim.ads
! afc0c6c63f3b4af535cbedd72c00385e  gcc/ada/sem_disp.adb
  40937cb7584e45e4c545aa3e4c20fbb2  gcc/ada/sem_disp.ads
  8f677120e0bcecbdcfa5b9c4f44cb282  gcc/ada/sem_dist.adb
  a38c4ce4bc2936bd0a73c28ff1b0df61  gcc/ada/sem_dist.ads
--- 2891,2931 ----
  b1230ac9f3cae75bd98a0fc5e0fabdcf  gcc/ada/sem.ads
  486e7e3521da672c20bea967001436f9  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! e5998262bbb642df72b609cbb3652b2c  gcc/ada/sem_attr.adb
  2a239613f39312b54ea82d1e690a3ea2  gcc/ada/sem_attr.ads
! 9933f6b1c6d6ebb417929ba3ed154bff  gcc/ada/sem_aux.adb
  e15b069fa2ff472febda85c8b9cacb81  gcc/ada/sem_aux.ads
  a42bf57eedc6f047301e698b7b6c4924  gcc/ada/sem_case.adb
  88daa5c9b6e135316b52695cae25a496  gcc/ada/sem_case.ads
  84667b3de209c0b04f82a349c6125ab0  gcc/ada/sem_cat.adb
  e364f4e3ae92066699cc93a8f7b828c1  gcc/ada/sem_cat.ads
! 01668ba02287a6dc67950a0ea7d6f44a  gcc/ada/sem_ch10.adb
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! 2272b7c3128993772b1404bd7b0051a4  gcc/ada/sem_ch12.adb
  f981520c42b732545be8bb5c8813ccfd  gcc/ada/sem_ch12.ads
! 0e65da33ccc905007076453dfc7a4668  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
  14326c522718c8cb8415b13a79c07972  gcc/ada/sem_ch2.adb
  2471d629be4739ff5135aa87a2ec9166  gcc/ada/sem_ch2.ads
! a737376791b02b0cea08e0982541cef2  gcc/ada/sem_ch3.adb
  76abe89b089728c6eaca6f7593348732  gcc/ada/sem_ch3.ads
! 92ce1e2ad8d12526945acea155e28ae8  gcc/ada/sem_ch4.adb
  adba03aae1f439b9e9db8cea05d8e03f  gcc/ada/sem_ch4.ads
  e8573b06cd7059d6bbde030175ab1a71  gcc/ada/sem_ch5.adb
  ec8d5a42c27c46e4969c16d6e18ed276  gcc/ada/sem_ch5.ads
! c562011f69d365bea521812b7109c09e  gcc/ada/sem_ch6.adb
  165c2ff9990d74ba204881b7983566c7  gcc/ada/sem_ch6.ads
! 3883f8e98e883801346bbdd9e4ecf027  gcc/ada/sem_ch7.adb
  24a1265e6a25756265643858abcf7ded  gcc/ada/sem_ch7.ads
! f2d24cffe7b77ee6449ec3210c419d9c  gcc/ada/sem_ch8.adb
  f0b4e317e5d5515a6ec337bc5acf5fe0  gcc/ada/sem_ch8.ads
  546c616e1a0e3e76b6220644a605da51  gcc/ada/sem_ch9.adb
  7b283bd6453de444c7075a8c6f215dda  gcc/ada/sem_ch9.ads
  a3ec3b68d1191d6cfaaaa4ba524b8896  gcc/ada/sem_dim.adb
  d0ed9c569455451ee26c8e2565b7125b  gcc/ada/sem_dim.ads
! 60adabcc73c4a57b33d70d10f01035fb  gcc/ada/sem_disp.adb
  40937cb7584e45e4c545aa3e4c20fbb2  gcc/ada/sem_disp.ads
  8f677120e0bcecbdcfa5b9c4f44cb282  gcc/ada/sem_dist.adb
  a38c4ce4bc2936bd0a73c28ff1b0df61  gcc/ada/sem_dist.ads
*************** a38c4ce4bc2936bd0a73c28ff1b0df61  gcc/ad
*** 2933,2947 ****
  c074ec7450863300eff2a21c036a624b  gcc/ada/sem_elab.ads
  1623b94463e7ca1496ecde7010db85fc  gcc/ada/sem_elim.adb
  c837e01542a712c622bac1cd152fc080  gcc/ada/sem_elim.ads
! e6fdae4f1a2b5f4d99f3cf365e0d5e79  gcc/ada/sem_eval.adb
  6ad36871bb495808ea611c6c620fc482  gcc/ada/sem_eval.ads
  e8e79e2a818321d7816e27eed8d17404  gcc/ada/sem_intr.adb
  66ccba8e3b77fa8d6e0e13f6368d804a  gcc/ada/sem_intr.ads
  4a954a685009a9b0bcf72a8517dc3bdf  gcc/ada/sem_mech.adb
  bcb22deebc83b966e7be367087d9fd7b  gcc/ada/sem_mech.ads
! 29b8a2860cd4db4784ebf12088d434ee  gcc/ada/sem_prag.adb
  d16256f1e0a8b84763e3ccc0653e1c4b  gcc/ada/sem_prag.ads
! 4ec88812296adfa216b478a7141c3990  gcc/ada/sem_res.adb
  bb01f11ceaa352a8b99f95fcbcfe97d9  gcc/ada/sem_res.ads
  28d33ede4288814374d1909847798c7d  gcc/ada/sem_scil.adb
  db6f5a37bd59fd83ff3286e71ab985fe  gcc/ada/sem_scil.ads
--- 2933,2947 ----
  c074ec7450863300eff2a21c036a624b  gcc/ada/sem_elab.ads
  1623b94463e7ca1496ecde7010db85fc  gcc/ada/sem_elim.adb
  c837e01542a712c622bac1cd152fc080  gcc/ada/sem_elim.ads
! 8c30b65694da59f237b43f9d95914bad  gcc/ada/sem_eval.adb
  6ad36871bb495808ea611c6c620fc482  gcc/ada/sem_eval.ads
  e8e79e2a818321d7816e27eed8d17404  gcc/ada/sem_intr.adb
  66ccba8e3b77fa8d6e0e13f6368d804a  gcc/ada/sem_intr.ads
  4a954a685009a9b0bcf72a8517dc3bdf  gcc/ada/sem_mech.adb
  bcb22deebc83b966e7be367087d9fd7b  gcc/ada/sem_mech.ads
! 115df084cef921c567f9d7093b8cb0cb  gcc/ada/sem_prag.adb
  d16256f1e0a8b84763e3ccc0653e1c4b  gcc/ada/sem_prag.ads
! 4b9c47c09c575b9c1b4d2255b127e0a4  gcc/ada/sem_res.adb
  bb01f11ceaa352a8b99f95fcbcfe97d9  gcc/ada/sem_res.ads
  28d33ede4288814374d1909847798c7d  gcc/ada/sem_scil.adb
  db6f5a37bd59fd83ff3286e71ab985fe  gcc/ada/sem_scil.ads
*************** db6f5a37bd59fd83ff3286e71ab985fe  gcc/ad
*** 2949,2956 ****
  89d73c108bd8921f6d6cd84d98726ea5  gcc/ada/sem_smem.ads
  1f62b0ecc5ebe8e9b39be89d56094a6c  gcc/ada/sem_type.adb
  dee50852181adfada17fb5b7423ed973  gcc/ada/sem_type.ads
! 67437f4a2b6765741ec3233490f36686  gcc/ada/sem_util.adb
! 4c258be138ab7760a8329aa8913fe358  gcc/ada/sem_util.ads
  9668d6a37fe84f41a81a7ffcb66d5ecc  gcc/ada/sem_warn.adb
  441e0f80657ef72324e40dd20cebfc82  gcc/ada/sem_warn.ads
  239ca67ac9aa430abfe5120a8d4302d9  gcc/ada/set_targ.adb
--- 2949,2956 ----
  89d73c108bd8921f6d6cd84d98726ea5  gcc/ada/sem_smem.ads
  1f62b0ecc5ebe8e9b39be89d56094a6c  gcc/ada/sem_type.adb
  dee50852181adfada17fb5b7423ed973  gcc/ada/sem_type.ads
! 6b04965fc138d9a506bcda88cb490101  gcc/ada/sem_util.adb
! ce5344869562fc546f789ee6a1cdc048  gcc/ada/sem_util.ads
  9668d6a37fe84f41a81a7ffcb66d5ecc  gcc/ada/sem_warn.adb
  441e0f80657ef72324e40dd20cebfc82  gcc/ada/sem_warn.ads
  239ca67ac9aa430abfe5120a8d4302d9  gcc/ada/set_targ.adb
*************** f32c4d3d5df9ad9663b4978f7f8a2573  gcc/ad
*** 2970,2976 ****
  5508690394c02353c472f15fdd05b280  gcc/ada/sinfo-utils.adb
  df1aa3814d8c5281deb3b526c99368fc  gcc/ada/sinfo-utils.ads
  e6d5c3ccb5893bb3943fbdf529b298d6  gcc/ada/sinfo.adb
! e5139f344ba5d7c2e812dafda8f43a44  gcc/ada/sinfo.ads
  ebb37a07fb72782f86b0c141d3f6077c  gcc/ada/sinput-c.adb
  ec9033e4caebeb446063de16e18918f4  gcc/ada/sinput-c.ads
  2fec6a5fbe7c9e765ea70c82814b0fd3  gcc/ada/sinput-d.adb
--- 2970,2976 ----
  5508690394c02353c472f15fdd05b280  gcc/ada/sinfo-utils.adb
  df1aa3814d8c5281deb3b526c99368fc  gcc/ada/sinfo-utils.ads
  e6d5c3ccb5893bb3943fbdf529b298d6  gcc/ada/sinfo.adb
! a09fdbe7c3f9c0e609f8f6f7ea279634  gcc/ada/sinfo.ads
  ebb37a07fb72782f86b0c141d3f6077c  gcc/ada/sinput-c.adb
  ec9033e4caebeb446063de16e18918f4  gcc/ada/sinput-c.ads
  2fec6a5fbe7c9e765ea70c82814b0fd3  gcc/ada/sinput-d.adb
*************** f6ff4b8bae7d2f10bf04f58ae4efb096  gcc/ad
*** 2979,2991 ****
  69397f052fca6f376ab0c93aa830f6f5  gcc/ada/sinput-l.ads
  bb43802a54a3cfd9cb953188a875da3d  gcc/ada/sinput.adb
  ba7717c1c0a8bd7b1c3feee6580246e6  gcc/ada/sinput.ads
! 45dd977b503b08503733b2a881ffc73a  gcc/ada/snames.adb-tmpl
! b6c2c8048a20845da038e67e918b8afc  gcc/ada/snames.ads-tmpl
  0eae6e077005b627eacdbc0d53788ac6  gcc/ada/snames.h-tmpl
  efc103042b1bc17447f48a276dc860ab  gcc/ada/socket.c
  8bdf1e57c628c071b503b49f5c5078f6  gcc/ada/spark_xrefs.adb
  2753ed3eddef50a315406d42f653c5d3  gcc/ada/spark_xrefs.ads
! 42caacb8fde838870ec1ce0cb72052b5  gcc/ada/sprint.adb
  3e9a55e0b0a74656ccf4d6b370f9f3b9  gcc/ada/sprint.ads
  ced5aeedc927cb85d789249204874ea1  gcc/ada/stand.ads
  995259a03fc6743547480930ff72b93a  gcc/ada/standard.ads.h
--- 2979,2991 ----
  69397f052fca6f376ab0c93aa830f6f5  gcc/ada/sinput-l.ads
  bb43802a54a3cfd9cb953188a875da3d  gcc/ada/sinput.adb
  ba7717c1c0a8bd7b1c3feee6580246e6  gcc/ada/sinput.ads
! 55cd95f89206cd7da39013028d699c07  gcc/ada/snames.adb-tmpl
! 05d422939959f967c0437c1823012351  gcc/ada/snames.ads-tmpl
  0eae6e077005b627eacdbc0d53788ac6  gcc/ada/snames.h-tmpl
  efc103042b1bc17447f48a276dc860ab  gcc/ada/socket.c
  8bdf1e57c628c071b503b49f5c5078f6  gcc/ada/spark_xrefs.adb
  2753ed3eddef50a315406d42f653c5d3  gcc/ada/spark_xrefs.ads
! bdb75059fdd5d67fd8e953d8f303c62d  gcc/ada/sprint.adb
  3e9a55e0b0a74656ccf4d6b370f9f3b9  gcc/ada/sprint.ads
  ced5aeedc927cb85d789249204874ea1  gcc/ada/stand.ads
  995259a03fc6743547480930ff72b93a  gcc/ada/standard.ads.h
*************** ceaa52edf6355622601cd30f7c096b06  gcc/ad
*** 2994,3000 ****
  9b1436b62e189c7719fe06539a961935  gcc/ada/stringt.h
  627ba2b2c1dc5a33ccd14d5a62dad5bc  gcc/ada/strub.adb
  426fe1648aa969a711bc91b140c31950  gcc/ada/strub.ads
! 8afc1c7d58bdd832cfc07e0b7f154b20  gcc/ada/style.adb
  47034d64868bf09604f7cf41bfa8f20b  gcc/ada/style.ads
  68cb599e2bce9af2fffbe9686938edc4  gcc/ada/styleg.adb
  93df3efe29025f787333e334faf17c55  gcc/ada/styleg.ads
--- 2994,3000 ----
  9b1436b62e189c7719fe06539a961935  gcc/ada/stringt.h
  627ba2b2c1dc5a33ccd14d5a62dad5bc  gcc/ada/strub.adb
  426fe1648aa969a711bc91b140c31950  gcc/ada/strub.ads
! 8b54969ef9e1867def686f297cb74c54  gcc/ada/style.adb
  47034d64868bf09604f7cf41bfa8f20b  gcc/ada/style.ads
  68cb599e2bce9af2fffbe9686938edc4  gcc/ada/styleg.adb
  93df3efe29025f787333e334faf17c55  gcc/ada/styleg.ads
*************** d9d7a0f9b8ac29d8f1e477d6b53076c1  gcc/ad
*** 3020,3026 ****
  6f122fca818bdd0608fc8391dbb411ba  gcc/ada/tempdir.ads
  9926751851ed0d0e60e63eeb59a3c547  gcc/ada/terminals.c
  90388b2ce8b02dc01b5f589caaff07ec  gcc/ada/tracebak.c
! c9ba3419b694441662c69e58af06ae07  gcc/ada/treepr.adb
  fffc3c236eb600b5b36d78fbe10f489d  gcc/ada/treepr.ads
  6f3fd20323108cb95757cc42a1514191  gcc/ada/ttypes.ads
  e02948c9347a91c37c4f24e7d4356a02  gcc/ada/types.adb
--- 3020,3026 ----
  6f122fca818bdd0608fc8391dbb411ba  gcc/ada/tempdir.ads
  9926751851ed0d0e60e63eeb59a3c547  gcc/ada/terminals.c
  90388b2ce8b02dc01b5f589caaff07ec  gcc/ada/tracebak.c
! 5dbb85c8243352d9860a128ce9659fa7  gcc/ada/treepr.adb
  fffc3c236eb600b5b36d78fbe10f489d  gcc/ada/treepr.ads
  6f3fd20323108cb95757cc42a1514191  gcc/ada/ttypes.ads
  e02948c9347a91c37c4f24e7d4356a02  gcc/ada/types.adb
*************** df3f6c6882fc8f715d4cc537af0f6442  gcc/ad
*** 3060,3066 ****
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! 7fb76c248aee3840a23933ab83ae7018  gcc/analyzer/ChangeLog
  99ca8e9358149d619a543e45725f689f  gcc/analyzer/access-diagram.cc
  58f352acafda673d24da4113c4f80b8d  gcc/analyzer/access-diagram.h
  d3f3112562b7552a583d7d995ed2f2d1  gcc/analyzer/ana-state-to-diagnostic-state.cc
--- 3060,3066 ----
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! adf6f5ffffd71177e382cd74b5ac0191  gcc/analyzer/ChangeLog
  99ca8e9358149d619a543e45725f689f  gcc/analyzer/access-diagram.cc
  58f352acafda673d24da4113c4f80b8d  gcc/analyzer/access-diagram.h
  d3f3112562b7552a583d7d995ed2f2d1  gcc/analyzer/ana-state-to-diagnostic-state.cc
*************** a82a71ab7f96ca02b70fd75fd951ea5f  gcc/an
*** 3088,3095 ****
  850dcfdb7202d7b55db64d1dbe5cf586  gcc/analyzer/call-string.h
  7c69fc14b63442e77b2aff4f54aa775d  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
! 167e286646f36dd35ee7a5c7725901f5  gcc/analyzer/checker-event.cc
! 55206f539e6dc12c4379dd09712a1f0f  gcc/analyzer/checker-event.h
  3ab3510c119841ad20bbfcab82653f7c  gcc/analyzer/checker-path.cc
  717c8ea5a0fcd626c448dd37a593cfda  gcc/analyzer/checker-path.h
  458fdaf5604da3f5885623bb7f034d40  gcc/analyzer/common.h
--- 3088,3095 ----
  850dcfdb7202d7b55db64d1dbe5cf586  gcc/analyzer/call-string.h
  7c69fc14b63442e77b2aff4f54aa775d  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
! 76c44c3b5ccad647f5937ea1f6fe8d06  gcc/analyzer/checker-event.cc
! 37a9579d3b2db2bdd4d8f7782aadf287  gcc/analyzer/checker-event.h
  3ab3510c119841ad20bbfcab82653f7c  gcc/analyzer/checker-path.cc
  717c8ea5a0fcd626c448dd37a593cfda  gcc/analyzer/checker-path.h
  458fdaf5604da3f5885623bb7f034d40  gcc/analyzer/common.h
*************** ab9fdb6ff2584fb7c564bdd3d5546c02  gcc/bt
*** 3189,3202 ****
  1f5d04ed09772ef8cff71c5a2d838b85  gcc/builtins.cc
  52ff6fb92e162a8ad41a1af1dfb0171a  gcc/builtins.def
  08bacecaf5d3527bf3df15480fb78537  gcc/builtins.h
! bf1ee20ba886403dce2b3c27578b231f  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  9c7ff39ab2ffc5f0938f59efc3657201  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
  d44a12a363aa3f6d21f2be5e2ff91306  gcc/c-family/c-attribs.cc
  c897c985c1212b96852d374531b546a3  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
! eef2a6baa49f9e2a37689fab581e698b  gcc/c-family/c-common.h
  5ce5bb7aedbac710588ce288b03d426e  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  19059a85545bb95b391e68da0cbc670c  gcc/c-family/c-format.cc
--- 3189,3202 ----
  1f5d04ed09772ef8cff71c5a2d838b85  gcc/builtins.cc
  52ff6fb92e162a8ad41a1af1dfb0171a  gcc/builtins.def
  08bacecaf5d3527bf3df15480fb78537  gcc/builtins.h
! c881828d1eef1c604ba04ab2cb0fbdcb  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  9c7ff39ab2ffc5f0938f59efc3657201  gcc/c-family/c-ada-spec.cc
  4e83011bee68d9607834ed5335191d65  gcc/c-family/c-ada-spec.h
  d44a12a363aa3f6d21f2be5e2ff91306  gcc/c-family/c-attribs.cc
  c897c985c1212b96852d374531b546a3  gcc/c-family/c-common.cc
  c273c4ad95ccdbfe677146505900c62e  gcc/c-family/c-common.def
! a1556e72a17e2e7a5496c8eaa0f4dc8a  gcc/c-family/c-common.h
  5ce5bb7aedbac710588ce288b03d426e  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  19059a85545bb95b391e68da0cbc670c  gcc/c-family/c-format.cc
*************** fc808567009babd00ebcf49b5b985691  gcc/c-
*** 3224,3249 ****
  2716f2dd9d461ac6da32e9185698bbb2  gcc/c-family/c-type-mismatch.h
  48e5431bc15452653e41b37b5c3643e5  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
! 47faafdef0d76034184e171880096959  gcc/c-family/c-warn.cc
! 85791f4868dc6cc94bff9ac360d0a37b  gcc/c-family/c.opt
! be7f7be2479df6718f5fff59312996f8  gcc/c-family/c.opt.urls
  22bd7478421befafcfbd805e3ca373ac  gcc/c-family/cppspec.cc
  801075b0f2da341a38f761b3b7ffd7cd  gcc/c-family/known-headers.cc
  ac5daa4f7d7788a3f68dde7fe7a25316  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 7d024d3274247a7a2d34ca3bec587ee5  gcc/c/ChangeLog
  a1ab86dd79d40d45839823afe798673a  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! f752ad8376c3c65fa3b8a8765f8c3c80  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
  c2644975781d9f78ae4c387d01a3270e  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! 1183dfb2453d4ffc484127c7bf73e3cb  gcc/c/c-parser.cc
  4cd2bf432e96f0de530e0ea4e8b44aa2  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  2ff9ae091101b4377a806073d2e89d3f  gcc/c/c-tree.h
--- 3224,3249 ----
  2716f2dd9d461ac6da32e9185698bbb2  gcc/c-family/c-type-mismatch.h
  48e5431bc15452653e41b37b5c3643e5  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
! 0c00c0332bed675baf2792a1a37fb8ea  gcc/c-family/c-warn.cc
! cbf79792c0cc4e865e62ffd31f364db6  gcc/c-family/c.opt
! 48e89373ef611774b44bd1bfdcf71d21  gcc/c-family/c.opt.urls
  22bd7478421befafcfbd805e3ca373ac  gcc/c-family/cppspec.cc
  801075b0f2da341a38f761b3b7ffd7cd  gcc/c-family/known-headers.cc
  ac5daa4f7d7788a3f68dde7fe7a25316  gcc/c-family/known-headers.h
  f09c431056b5138e7cfe8376e05de9a6  gcc/c-family/name-hint.h
  d71f74b5b48d9ec5e4e6463e7330121d  gcc/c-family/stub-objc.cc
! 4adaa769661dc05f43eea5075053a4ee  gcc/c/ChangeLog
  a1ab86dd79d40d45839823afe798673a  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! 0b7204173b2636cacb46db19df861258  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
  c2644975781d9f78ae4c387d01a3270e  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! 23ffaaa1b6ff17b13a76c60f7bca8c0d  gcc/c/c-parser.cc
  4cd2bf432e96f0de530e0ea4e8b44aa2  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  2ff9ae091101b4377a806073d2e89d3f  gcc/c/c-tree.h
*************** b6c3335dfa12561fab963bf22e16df60  gcc/cg
*** 3283,3297 ****
  f260ce27ba36b1e6d964fe6ba1552cb6  gcc/cgraphclones.cc
  4e2f7703a23f2c2483098ddb6edac479  gcc/cgraphunit.cc
  bd38ef84be4e8351bde3ee96f062c357  gcc/cif-code.def
! 79709c1784dbcec6ee6a3e22ddae41c3  gcc/cobol/ChangeLog
! 3702fe656ebbd5b61ccb5f70dfd85ed4  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  b5d944951cc226cf4f33fdd1494aa7e7  gcc/cobol/cbldiag.h
  030342886cc720f11f17d7691f6f24ae  gcc/cobol/cdf-copy.cc
! eb87793987ac10a2a49de7bb10412ec0  gcc/cobol/cdf.y
  b916ef498fa1cc9821e56ab612f00f3a  gcc/cobol/cdfval.h
  fb65c7259141f1223fa29175a2e441ed  gcc/cobol/cobol-system.h
! 700d96c955db2d85a4da3d00138a4e5a  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
  bdd6fbf13776c7983a16ac857615424c  gcc/cobol/copybook.h
--- 3283,3297 ----
  f260ce27ba36b1e6d964fe6ba1552cb6  gcc/cgraphclones.cc
  4e2f7703a23f2c2483098ddb6edac479  gcc/cgraphunit.cc
  bd38ef84be4e8351bde3ee96f062c357  gcc/cif-code.def
! bea513ad5f6cc0d64874539ff7f10b28  gcc/cobol/ChangeLog
! 569631bd4020aa574ed66319ac5e67f3  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  b5d944951cc226cf4f33fdd1494aa7e7  gcc/cobol/cbldiag.h
  030342886cc720f11f17d7691f6f24ae  gcc/cobol/cdf-copy.cc
! 4f5259ec428b699363e277df1f9d11b6  gcc/cobol/cdf.y
  b916ef498fa1cc9821e56ab612f00f3a  gcc/cobol/cdfval.h
  fb65c7259141f1223fa29175a2e441ed  gcc/cobol/cobol-system.h
! cf18ccae4998b9a3dde6cb12300516d6  gcc/cobol/cobol1.cc
  5985e1898b04e553a91bdc474c56311f  gcc/cobol/config-lang.in
  aab9bcdb44bef72e1c3a8cd069bfcccd  gcc/cobol/convert.cc
  bdd6fbf13776c7983a16ac857615424c  gcc/cobol/copybook.h
*************** bdd6fbf13776c7983a16ac857615424c  gcc/co
*** 3302,3314 ****
  fa246be77803ddea6f093e99f50df33e  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  d7c8a533dca0074af1f74be3f2ef9dce  gcc/cobol/gcobolspec.cc
! 5edb91f0bb7429670e460862f29f6abd  gcc/cobol/genapi.cc
! 639e89143b700cfc48ccb8fa5a27aa58  gcc/cobol/genapi.h
  a11b45ded2381dbcad1f1d4ea77d346d  gcc/cobol/gengen.cc
  eeb2d20d7d0d4521acb2468dee246887  gcc/cobol/gengen.h
! 057d976c1f81a36cc540a6417c772369  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! 7e6bde69310049611167174a5feae65a  gcc/cobol/genutil.cc
  37f3bc2a2f07d757ac3f9e33027c2e3b  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0fa33dbe050697f40b5e8df91896da9a  gcc/cobol/inspect.h
--- 3302,3314 ----
  fa246be77803ddea6f093e99f50df33e  gcc/cobol/gcobol.1
  527925049a81a36c06220d368570f55a  gcc/cobol/gcobol.3
  d7c8a533dca0074af1f74be3f2ef9dce  gcc/cobol/gcobolspec.cc
! cdaef633ff45ae046ad4826e4fbf6f7d  gcc/cobol/genapi.cc
! d77aff76631397333b43e387383acce2  gcc/cobol/genapi.h
  a11b45ded2381dbcad1f1d4ea77d346d  gcc/cobol/gengen.cc
  eeb2d20d7d0d4521acb2468dee246887  gcc/cobol/gengen.h
! 2d93a2650a93b8fc3da87f5ba15d0780  gcc/cobol/genmath.cc
  d44e8c86d57fb704b6c1fbab3464fb9a  gcc/cobol/genmath.h
! fc78b78c0e88e56d8a5bc08ac67ee843  gcc/cobol/genutil.cc
  37f3bc2a2f07d757ac3f9e33027c2e3b  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0fa33dbe050697f40b5e8df91896da9a  gcc/cobol/inspect.h
*************** d44e8c86d57fb704b6c1fbab3464fb9a  gcc/co
*** 3317,3337 ****
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
  7bab28df69a22be2ad0a8d95ec263e2d  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
! 15e952ea997cbfeb6241d2ab608d19fa  gcc/cobol/parse.y
! e26f67eac3d6d40b064f992a5e5e754c  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
! eb799f1d384755ab46d81f29ec55182c  gcc/cobol/scan.l
  a12042e240a17e29296ee8240d1304ca  gcc/cobol/scan_ante.h
  14bb03f129087e74fce03c0d52e31a5c  gcc/cobol/scan_post.h
! 197fd99a62b2440c1460f4ffbf664806  gcc/cobol/show_parse.h
  c53ffb5b1f39680588d8ace8a3a44953  gcc/cobol/structs.cc
  6a12fdf051ff87867b239b5ae272fd55  gcc/cobol/structs.h
! 181fc3ca4fead7642e06e83ee4646006  gcc/cobol/symbols.cc
! b5655c320f409aceb3a10654d07f0d92  gcc/cobol/symbols.h
  56876c7f6bf3230239c8142eb049a183  gcc/cobol/symfind.cc
  38d63d19b4869696c6123c90b1ab8b92  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! b364793337120bd28acd27f2c8bbdd27  gcc/cobol/util.cc
  ed3f467605b997678af9e5189497d41b  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
--- 3317,3337 ----
  746a2d46b3bc2a5f5663a9d64a78a674  gcc/cobol/lang.opt.urls
  7bab28df69a22be2ad0a8d95ec263e2d  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
! a2131f2e6106c4b5c734f2b2274c003e  gcc/cobol/parse.y
! b579f69e8cafd2d2dfc567f43f9e1014  gcc/cobol/parse_ante.h
  e141e23293fb343e7ccbaa2fe6bcef33  gcc/cobol/parse_util.h
! 950a05f04a5458ec8d515f8371b5271e  gcc/cobol/scan.l
  a12042e240a17e29296ee8240d1304ca  gcc/cobol/scan_ante.h
  14bb03f129087e74fce03c0d52e31a5c  gcc/cobol/scan_post.h
! 2281970a3bcdaefbd54f7dc641aec071  gcc/cobol/show_parse.h
  c53ffb5b1f39680588d8ace8a3a44953  gcc/cobol/structs.cc
  6a12fdf051ff87867b239b5ae272fd55  gcc/cobol/structs.h
! af9497c3c6fd20ea939a8459b2ebff41  gcc/cobol/symbols.cc
! 414b35a9f9cd2a23cd16f7ad675abe08  gcc/cobol/symbols.h
  56876c7f6bf3230239c8142eb049a183  gcc/cobol/symfind.cc
  38d63d19b4869696c6123c90b1ab8b92  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 55591943a6dc41b427e72d94e5742c79  gcc/cobol/util.cc
  ed3f467605b997678af9e5189497d41b  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
*************** b5a916bb9dd788754ac9e4ad7174ee74  gcc/co
*** 3404,3410 ****
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! c3b0346a69226471d1507b48f3d1a49f  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  9c5069f4e36f97d3c2a9c40414f67a4e  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
--- 3404,3410 ----
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 51a65bc6b11018a6cc5694278912068a  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  9c5069f4e36f97d3c2a9c40414f67a4e  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
*************** eb027b43f3e6788c44aa2d2b7e11943f  gcc/co
*** 3436,3442 ****
  3c95e830c849ee5787b2e1d5128a4bc6  gcc/config/aarch64/aarch64-modes.def
  64c80b1b7cd981b4fb4b76f7c36c9428  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
! fd3b89b2d66ea57bd77a12740d2748d6  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  a349e9ba39f96f10f6c9f5e13bb8b661  gcc/config/aarch64/aarch64-passes.def
  a29e8a2ccb74ff2bba522f8c2a794afd  gcc/config/aarch64/aarch64-protos.h
--- 3436,3442 ----
  3c95e830c849ee5787b2e1d5128a4bc6  gcc/config/aarch64/aarch64-modes.def
  64c80b1b7cd981b4fb4b76f7c36c9428  gcc/config/aarch64/aarch64-neon-sve-bridge-builtins.def
  f931bc8e97c2f1358ad3ad91e902d553  gcc/config/aarch64/aarch64-netbsd.h
! a1976079127ae261204af8cdddd28c03  gcc/config/aarch64/aarch64-option-extensions.def
  eb901cf32e942a31db5999eda012dc00  gcc/config/aarch64/aarch64-opts.h
  a349e9ba39f96f10f6c9f5e13bb8b661  gcc/config/aarch64/aarch64-passes.def
  a29e8a2ccb74ff2bba522f8c2a794afd  gcc/config/aarch64/aarch64-protos.h
*************** ae7ea468046099ae99d717e107a85497  gcc/co
*** 3469,3476 ****
  bb99d6fe2d4e8eaffacc71689325d35c  gcc/config/aarch64/aarch64-tune.md
  586e3b2fd446baa0a6fb8da7c8cdd660  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! a6e08c90c5962f9af8496d8294c716f4  gcc/config/aarch64/aarch64.cc
! a067c840ab3dda8249e5a52a6d2e79e1  gcc/config/aarch64/aarch64.h
  79c93476404c0822020c37da243fdd02  gcc/config/aarch64/aarch64.md
  826e25677a47d91542c89828074d668c  gcc/config/aarch64/aarch64.opt
  be545ebdbead749c3365e9729990237b  gcc/config/aarch64/aarch64.opt.urls
--- 3469,3476 ----
  bb99d6fe2d4e8eaffacc71689325d35c  gcc/config/aarch64/aarch64-tune.md
  586e3b2fd446baa0a6fb8da7c8cdd660  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! 78f70a11fe7390c6d5bf50a25f7a6f20  gcc/config/aarch64/aarch64.cc
! bb0828c96d48c6a01dd1c6dc035d2095  gcc/config/aarch64/aarch64.h
  79c93476404c0822020c37da243fdd02  gcc/config/aarch64/aarch64.md
  826e25677a47d91542c89828074d668c  gcc/config/aarch64/aarch64.opt
  be545ebdbead749c3365e9729990237b  gcc/config/aarch64/aarch64.opt.urls
*************** b2e606b88879370871146df60afc66a7  gcc/co
*** 3585,3591 ****
  e54824657551f1b95cd19d0a50bef8b3  gcc/config/arc/arc-simd.h
  e4a75970451275f37c431cddbd360dce  gcc/config/arc/arc-tables.opt
  6704645d075bf670b5ed5d77f0a88b86  gcc/config/arc/arc-tables.opt.urls
! ca9c4d0d766fbdffac7a35699768f3c6  gcc/config/arc/arc.cc
  7571a4c51258ecb3cc685c010427e67b  gcc/config/arc/arc.h
  d037b2cbfd8562434b1c937a45f34116  gcc/config/arc/arc.md
  5e49444e76be2e50b3f491529836f101  gcc/config/arc/arc.opt
--- 3585,3591 ----
  e54824657551f1b95cd19d0a50bef8b3  gcc/config/arc/arc-simd.h
  e4a75970451275f37c431cddbd360dce  gcc/config/arc/arc-tables.opt
  6704645d075bf670b5ed5d77f0a88b86  gcc/config/arc/arc-tables.opt.urls
! 10101c6b4f78c63a29742fb0a11bdae0  gcc/config/arc/arc.cc
  7571a4c51258ecb3cc685c010427e67b  gcc/config/arc/arc.h
  d037b2cbfd8562434b1c937a45f34116  gcc/config/arc/arc.md
  5e49444e76be2e50b3f491529836f101  gcc/config/arc/arc.opt
*************** d037b2cbfd8562434b1c937a45f34116  gcc/co
*** 3597,3603 ****
  24f87f0cf0dc6ab8583da8e9515f8505  gcc/config/arc/arcHS4x.md
  49f9fe3009ce6bd15448290c1d587784  gcc/config/arc/atomic.md
  194276594fc7635e6e57a1395de35ff8  gcc/config/arc/big.h
! b691f6a4fed6c15885417095e9f63c2e  gcc/config/arc/builtins.def
  a9fe0abac9b90f9c485da8811cd76bbe  gcc/config/arc/constraints.md
  f669ddf41e66a667f130064e83781f2f  gcc/config/arc/driver-arc.cc
  8e333384ed8458af908c61aed2e58ae1  gcc/config/arc/elf.h
--- 3597,3603 ----
  24f87f0cf0dc6ab8583da8e9515f8505  gcc/config/arc/arcHS4x.md
  49f9fe3009ce6bd15448290c1d587784  gcc/config/arc/atomic.md
  194276594fc7635e6e57a1395de35ff8  gcc/config/arc/big.h
! f9ff1fa6e20b988c73c517546fcc7ae2  gcc/config/arc/builtins.def
  a9fe0abac9b90f9c485da8811cd76bbe  gcc/config/arc/constraints.md
  f669ddf41e66a667f130064e83781f2f  gcc/config/arc/driver-arc.cc
  8e333384ed8458af908c61aed2e58ae1  gcc/config/arc/elf.h
*************** ece8354f31c69ce2bad8b1af869d70b7  gcc/co
*** 3607,3613 ****
  af77dcb21d43cb0e647fb24fcba56e57  gcc/config/arc/genoptions.awk
  47b2c36765c0f4b5eb537a72bc32e9c4  gcc/config/arc/linux.h
  c09775c76420a32368d668660a3f5a4b  gcc/config/arc/predicates.md
! cadfbc5633eee7fc0d364e10df21da63  gcc/config/arc/simdext.md
  fe307ea249223c9530e784c8fc5c6fc0  gcc/config/arc/t-arc
  efbc0ac68a9a367ae71e2270f5e67e97  gcc/config/arc/t-multilib
  e8f60792d98bc24662b34c7928104624  gcc/config/arc/t-multilib-linux
--- 3607,3613 ----
  af77dcb21d43cb0e647fb24fcba56e57  gcc/config/arc/genoptions.awk
  47b2c36765c0f4b5eb537a72bc32e9c4  gcc/config/arc/linux.h
  c09775c76420a32368d668660a3f5a4b  gcc/config/arc/predicates.md
! c3548c2bc3f38c0f5390d334a28da865  gcc/config/arc/simdext.md
  fe307ea249223c9530e784c8fc5c6fc0  gcc/config/arc/t-arc
  efbc0ac68a9a367ae71e2270f5e67e97  gcc/config/arc/t-multilib
  e8f60792d98bc24662b34c7928104624  gcc/config/arc/t-multilib-linux
*************** d37f092206fc4c0379cee5e5fc01b654  gcc/co
*** 3760,3766 ****
  6b425f8df921557284017d42be8efc3c  gcc/config/avr/avr-passes.def
  65447cdb57d64c621846dbfaece9c7f6  gcc/config/avr/avr-protos.h
  eb753641e5bf09dbcc2be97e61be8767  gcc/config/avr/avr-stdint.h
! 82b5402175d18b85940965f0fea60a3c  gcc/config/avr/avr.cc
  bee0e6e1aecf816b3bc39ba11e67566f  gcc/config/avr/avr.h
  b945bd3677c52afb1d50d329250126cb  gcc/config/avr/avr.md
  9b16afc684b8a6d301aa731ed7683f93  gcc/config/avr/avr.opt
--- 3760,3766 ----
  6b425f8df921557284017d42be8efc3c  gcc/config/avr/avr-passes.def
  65447cdb57d64c621846dbfaece9c7f6  gcc/config/avr/avr-protos.h
  eb753641e5bf09dbcc2be97e61be8767  gcc/config/avr/avr-stdint.h
! 49d1ad299e55ad19de3b2cbd6db25664  gcc/config/avr/avr.cc
  bee0e6e1aecf816b3bc39ba11e67566f  gcc/config/avr/avr.h
  b945bd3677c52afb1d50d329250126cb  gcc/config/avr/avr.md
  9b16afc684b8a6d301aa731ed7683f93  gcc/config/avr/avr.opt
*************** e29c33fe5d0d32a0d578ef5a092a9836  gcc/co
*** 3769,3775 ****
  441eaa03acda9ba9c8febfe4aab09aaf  gcc/config/avr/builtins.def
  66196007356392102d57b2751db19590  gcc/config/avr/constraints.md
  c6568ca3d3967dc4577de343df313df3  gcc/config/avr/driver-avr.cc
! 2433491b0fd4d18db35f0d52566471c8  gcc/config/avr/elf.h
  28aee5cb582edae79e10d384f4fa3141  gcc/config/avr/gen-avr-mmcu-specs.cc
  16aa5070fa9fc0e8ea08da2e81fa07ed  gcc/config/avr/gen-avr-mmcu-texi.cc
  6d9c1db61d58bad0e31aa7b00e2e9ffb  gcc/config/avr/genmultilib.awk
--- 3769,3775 ----
  441eaa03acda9ba9c8febfe4aab09aaf  gcc/config/avr/builtins.def
  66196007356392102d57b2751db19590  gcc/config/avr/constraints.md
  c6568ca3d3967dc4577de343df313df3  gcc/config/avr/driver-avr.cc
! 6ed585b465646e6ca546cf3c7dfb041d  gcc/config/avr/elf.h
  28aee5cb582edae79e10d384f4fa3141  gcc/config/avr/gen-avr-mmcu-specs.cc
  16aa5070fa9fc0e8ea08da2e81fa07ed  gcc/config/avr/gen-avr-mmcu-texi.cc
  6d9c1db61d58bad0e31aa7b00e2e9ffb  gcc/config/avr/genmultilib.awk
*************** f564f4fdf8d82c60a526de3aeb908531  gcc/co
*** 3803,3809 ****
  5da1b60956f8f62fccf4b5c5d0e0fe9b  gcc/config/bpf/bpf-opts.h
  989a5af9790ad469a8ad1954f7b9cbaa  gcc/config/bpf/bpf-passes.def
  9a5cadb0cb322fae6b6177fc361f00c1  gcc/config/bpf/bpf-protos.h
! dc95f92031a6d2a1e1276f37aac367ef  gcc/config/bpf/bpf.cc
  88a80edc8d111617067abb5a0b95d469  gcc/config/bpf/bpf.h
  0e05ae54f1a8ca63ad1533179b4b4571  gcc/config/bpf/bpf.md
  d0866c4d53c2fdcec825b3485236d9a1  gcc/config/bpf/bpf.opt
--- 3803,3809 ----
  5da1b60956f8f62fccf4b5c5d0e0fe9b  gcc/config/bpf/bpf-opts.h
  989a5af9790ad469a8ad1954f7b9cbaa  gcc/config/bpf/bpf-passes.def
  9a5cadb0cb322fae6b6177fc361f00c1  gcc/config/bpf/bpf-protos.h
! 844f14bb1fb06151715b504aaacc7291  gcc/config/bpf/bpf.cc
  88a80edc8d111617067abb5a0b95d469  gcc/config/bpf/bpf.h
  0e05ae54f1a8ca63ad1533179b4b4571  gcc/config/bpf/bpf.md
  d0866c4d53c2fdcec825b3485236d9a1  gcc/config/bpf/bpf.opt
*************** d3fb594d11281112ff8d8f304a000c4e  gcc/co
*** 4170,4176 ****
  10a38f2a86740708977ea6a86051e67e  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! e88db062dae9809fbbcaabc9573e2cf6  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  fde5fb5a01b2656dc490a5581799a6b2  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
--- 4170,4176 ----
  10a38f2a86740708977ea6a86051e67e  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! 1b2d74cce621225f76c616b18765bf5c  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  fde5fb5a01b2656dc490a5581799a6b2  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
*************** a9cacf6e415119ba617274c394a15b3d  gcc/co
*** 4182,4194 ****
  636d7cce4cd0b632fee9d490d15da86b  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  3c7d0006f2f31d8607f2c9e74557fbee  gcc/config/i386/i386-passes.def
! 8cebb1520a2af0d79c07912261577eae  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
  24c863315a4ba6b94189d6cf5f6a33e2  gcc/config/i386/i386.cc
  532590c62b232e0546b5d8396d44c6b7  gcc/config/i386/i386.h
! e12d1ce6a257756bf9d6328808bbfdd9  gcc/config/i386/i386.md
  079c7adc6dcd21f8ccfb4c0135f16460  gcc/config/i386/i386.opt
  ae2f0e6cc1882dbf736469a6378cb3d1  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
--- 4182,4194 ----
  636d7cce4cd0b632fee9d490d15da86b  gcc/config/i386/i386-options.h
  02c486451c524cfc143358e07b88cd70  gcc/config/i386/i386-opts.h
  3c7d0006f2f31d8607f2c9e74557fbee  gcc/config/i386/i386-passes.def
! fb6d632066a5383c0ec89e867a9cc9c6  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
  24c863315a4ba6b94189d6cf5f6a33e2  gcc/config/i386/i386.cc
  532590c62b232e0546b5d8396d44c6b7  gcc/config/i386/i386.h
! 453d40cae07b804f3fe6fe38015c11c8  gcc/config/i386/i386.md
  079c7adc6dcd21f8ccfb4c0135f16460  gcc/config/i386/i386.opt
  ae2f0e6cc1882dbf736469a6378cb3d1  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
*************** e3b42a852449963bd9c243b0491ada0c  gcc/co
*** 4398,4408 ****
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
  2da06c6340275c1c0670ab82a7252f77  gcc/config/loongarch/larchintrin.h
! 4b8507766acb32c5fff10254b4b1b88d  gcc/config/loongarch/lasx.md
! 64deba47bb6c4537af9a962db8e160d1  gcc/config/loongarch/lasxintrin.h
  a11605122c3f864d3527acf829c67179  gcc/config/loongarch/linux.h
! ac0512e8b259ed63d386edaa0457a5ad  gcc/config/loongarch/loongarch-builtins.cc
! 514549db1d124f4f93b3859fca40e770  gcc/config/loongarch/loongarch-c.cc
  59c96fed2f7df8b17e509bfec3c4edcb  gcc/config/loongarch/loongarch-cpu.cc
  0857d194516733f19458bb44bfdeabc4  gcc/config/loongarch/loongarch-cpu.h
  7c361340005dd5b26e9175a99e44f1f9  gcc/config/loongarch/loongarch-d.cc
--- 4398,4408 ----
  dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
  2da06c6340275c1c0670ab82a7252f77  gcc/config/loongarch/larchintrin.h
! 1d5b333a725a85380fab7d91d6a26bbf  gcc/config/loongarch/lasx.md
! c10d06d896b117c45d2d741d1550a990  gcc/config/loongarch/lasxintrin.h
  a11605122c3f864d3527acf829c67179  gcc/config/loongarch/linux.h
! 2278f243d08dd119ac7b1db12bb9c344  gcc/config/loongarch/loongarch-builtins.cc
! 1619b93765ac0aa7dc56d3084e40d0cc  gcc/config/loongarch/loongarch-c.cc
  59c96fed2f7df8b17e509bfec3c4edcb  gcc/config/loongarch/loongarch-cpu.cc
  0857d194516733f19458bb44bfdeabc4  gcc/config/loongarch/loongarch-cpu.h
  7c361340005dd5b26e9175a99e44f1f9  gcc/config/loongarch/loongarch-d.cc
*************** b9324da4da2e361b6f6b42ab32c89139  gcc/co
*** 4414,4436 ****
  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
! 9b41ec5d5ef71ae3a468aab574ba2469  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
! 3933ee7206f08eea43a4dd60be93feb3  gcc/config/loongarch/loongarch.cc
  d4fcc746efc8475a01557c5c09179c9a  gcc/config/loongarch/loongarch.h
! c8a7e0ed33060af80085e6abfcd8720f  gcc/config/loongarch/loongarch.md
  8f1046a4d0739e3dafbb7e4db3055397  gcc/config/loongarch/loongarch.opt
  e5595d4b88b68429f6fe778dc601f49e  gcc/config/loongarch/loongarch.opt.urls
  33106e72929bb187a7c4f12d69d1f0bb  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
! b060a0b1a295190643157fde3f8ecfc2  gcc/config/loongarch/predicates.md
  f95be1657846ff90106e8941fbdc72de  gcc/config/loongarch/simd.md
  0e1638a9f434cbb353f1b31e3dc6683b  gcc/config/loongarch/sync.md
  e2aad9f2fd1ee2a4668948f381da109c  gcc/config/loongarch/t-linux
--- 4414,4436 ----
  9034667d3a99adb6488a0cf70a9c572c  gcc/config/loongarch/loongarch-driver.h
  4f8a9dd15d7b6450b31b1ce0b62e5438  gcc/config/loongarch/loongarch-evolution.cc
  23b0fa524fdc462c6fc9647fa1e71394  gcc/config/loongarch/loongarch-evolution.h
! a02aacfb9805dd0efab3f6f9e96176da  gcc/config/loongarch/loongarch-ftypes.def
  d7cf3f5e6d8c9402706533b8bbd7093d  gcc/config/loongarch/loongarch-modes.def
! 8be7856de731f309106734abd0f1f195  gcc/config/loongarch/loongarch-opts.cc
  084ba7e2ad2ac804b5f596bca0df06b3  gcc/config/loongarch/loongarch-opts.h
! 4a6ba66f33f4b90dafa203e9252cedcf  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
! 4fc7f12d4abc30176d2e774ea0d2837a  gcc/config/loongarch/loongarch.cc
  d4fcc746efc8475a01557c5c09179c9a  gcc/config/loongarch/loongarch.h
! 29489d6183ff2a8fdfe0c316596f774e  gcc/config/loongarch/loongarch.md
  8f1046a4d0739e3dafbb7e4db3055397  gcc/config/loongarch/loongarch.opt
  e5595d4b88b68429f6fe778dc601f49e  gcc/config/loongarch/loongarch.opt.urls
  33106e72929bb187a7c4f12d69d1f0bb  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
! a6649c21c6e9e1a67cfe549375fbef96  gcc/config/loongarch/predicates.md
  f95be1657846ff90106e8941fbdc72de  gcc/config/loongarch/simd.md
  0e1638a9f434cbb353f1b31e3dc6683b  gcc/config/loongarch/sync.md
  e2aad9f2fd1ee2a4668948f381da109c  gcc/config/loongarch/t-linux
*************** ccf120397e978f8cd4ed98cbe2c0d4f5  gcc/co
*** 4892,4899 ****
  96a9b8701199ede652cadbcdeec423d7  gcc/config/riscv/andes.md
  7444da2915b734a807ab2b707fe0fe35  gcc/config/riscv/andes_vector.h
  3d4ef2c5571dbf0e4bb86d09917f7c07  gcc/config/riscv/arch-canonicalize
! 111c94b19a4f72afc23ff2b3e44ab780  gcc/config/riscv/autovec-opt.md
! 0a8d3bb5c92b40519d869bae882cf263  gcc/config/riscv/autovec.md
  d4306030a8879ce9aa1e6cc18aff56eb  gcc/config/riscv/bitmanip.md
  3d4917c0a2efee97aaca242060652e02  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
--- 4892,4899 ----
  96a9b8701199ede652cadbcdeec423d7  gcc/config/riscv/andes.md
  7444da2915b734a807ab2b707fe0fe35  gcc/config/riscv/andes_vector.h
  3d4ef2c5571dbf0e4bb86d09917f7c07  gcc/config/riscv/arch-canonicalize
! 34e747805ffb6d00e833e358b5572df7  gcc/config/riscv/autovec-opt.md
! a1db1d46e9b4e46a19596815e4af3378  gcc/config/riscv/autovec.md
  d4306030a8879ce9aa1e6cc18aff56eb  gcc/config/riscv/bitmanip.md
  3d4917c0a2efee97aaca242060652e02  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
*************** da4e034d23a8f2754b1dfce0122f286e  gcc/co
*** 4950,4956 ****
  f565a42da3474d73faf1ea727e2d7dcb  gcc/config/riscv/riscv-string.cc
  645c73713edeee965f139d7c0825f76d  gcc/config/riscv/riscv-subset.h
  94d10cea518da6cdd8058f2f6f5f4290  gcc/config/riscv/riscv-target-attr.cc
! 4285d6caea3cccf0e3cfcac93c1ab26e  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  84e4728d93f1871a385271859cdee594  gcc/config/riscv/riscv-vector-builtins-bases.cc
--- 4950,4956 ----
  f565a42da3474d73faf1ea727e2d7dcb  gcc/config/riscv/riscv-string.cc
  645c73713edeee965f139d7c0825f76d  gcc/config/riscv/riscv-subset.h
  94d10cea518da6cdd8058f2f6f5f4290  gcc/config/riscv/riscv-target-attr.cc
! 825f46ee578eef7b2d810af106cd3429  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  84e4728d93f1871a385271859cdee594  gcc/config/riscv/riscv-vector-builtins-bases.cc
*************** f51037a9e437f8e9ce7215b2da5ad4e2  gcc/co
*** 4968,4976 ****
  3d83e85c22d3c9da7a43e8a19a5c8232  gcc/config/riscv/riscv-vsetvl.cc
  d120ed6eb2847b636271b3a1ef82ecbf  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 61c2df8f149411c5c946da9918990b85  gcc/config/riscv/riscv.cc
  4b6b168bb5f0a493f2a81f63dff567cf  gcc/config/riscv/riscv.h
! d83a8ed43f14b803732bc83dfebc7c6d  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
--- 4968,4976 ----
  3d83e85c22d3c9da7a43e8a19a5c8232  gcc/config/riscv/riscv-vsetvl.cc
  d120ed6eb2847b636271b3a1ef82ecbf  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 3341e42dad056ac89aa26a80bd613a44  gcc/config/riscv/riscv.cc
  4b6b168bb5f0a493f2a81f63dff567cf  gcc/config/riscv/riscv.h
! 093fcb090270c744be4562e2e7a99b57  gcc/config/riscv/riscv.md
  fec1c87bba727131a45d4ec4a9ae5490  gcc/config/riscv/riscv.opt
  d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
*************** bcf728ad2379630774fd5bb529d4ee86  gcc/co
*** 5006,5012 ****
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
  272e0e076fad4b77c195a95427b2a0d8  gcc/config/riscv/vector-iterators.md
! 395b25929ee906c435acae8a04bcb635  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
--- 5006,5012 ----
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
  272e0e076fad4b77c195a95427b2a0d8  gcc/config/riscv/vector-iterators.md
! 383536306774f19ff79be6c1f6e0f6b1  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
*************** f154c7dc9175c4e8204205bb4fbd2cbc  gcc/co
*** 5501,5510 ****
  23de1a423f72982c1a7ec04a2cf54364  gcc/config/xtensa/xtensa-protos.h
  49d78213dc9f09252fa92ac80408f9b0  gcc/config/xtensa/xtensa.cc
  1c1ce8236bb94fc6c2784ab209bff598  gcc/config/xtensa/xtensa.h
! b233bf2d4575c3be18c67a2b1a1e047d  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! e5d39fd574064c8870895192451abcbd  gcc/configure
  83847d495eef6221d68f4511930e4956  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
--- 5501,5510 ----
  23de1a423f72982c1a7ec04a2cf54364  gcc/config/xtensa/xtensa-protos.h
  49d78213dc9f09252fa92ac80408f9b0  gcc/config/xtensa/xtensa.cc
  1c1ce8236bb94fc6c2784ab209bff598  gcc/config/xtensa/xtensa.h
! 0e227e351d2efea226ca8c249e52aff3  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 25604a2484bc0d00e9d4b9ee426cc5b3  gcc/configure
  83847d495eef6221d68f4511930e4956  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5515,5521 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 852f6a6e8399c38fe8e71b82690cfec7  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5515,5521 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 948ce4c70fc54da301fbaf6a281bb40d  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** b81a93d025cceb5b80d17336759de93c  gcc/cp
*** 5569,5575 ****
  acb30767d403ad5a0d7ae97437159ebe  gcc/cp/cp-objcp-common.h
  1bf2efeed9215bc88d193d37414dcc2b  gcc/cp/cp-trait.def
  d219c7261c4e8b7d170b10d9b450f256  gcc/cp/cp-tree.def
! 25882e448beb74713a57b22129836307  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
  b7ae95468b0150bbe2b3cba351e96a2c  gcc/cp/cvt.cc
  8e454e3f7746836df899a46698f5af3e  gcc/cp/cxx-pretty-print.cc
--- 5569,5575 ----
  acb30767d403ad5a0d7ae97437159ebe  gcc/cp/cp-objcp-common.h
  1bf2efeed9215bc88d193d37414dcc2b  gcc/cp/cp-trait.def
  d219c7261c4e8b7d170b10d9b450f256  gcc/cp/cp-tree.def
! f23e7962572ba9d1b19b9a5faf0513fc  gcc/cp/cp-tree.h
  e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp/cp-ubsan.cc
  b7ae95468b0150bbe2b3cba351e96a2c  gcc/cp/cvt.cc
  8e454e3f7746836df899a46698f5af3e  gcc/cp/cxx-pretty-print.cc
*************** b7ae95468b0150bbe2b3cba351e96a2c  gcc/cp
*** 5577,5583 ****
  c5f1614ded8bb57480eb7d1afecb7c7c  gcc/cp/cxxapi-data.csv
  42bf63dc3759bb23709892d9c600bcfd  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! 1ad50dbadddadc9085cd8c4db0602941  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  839ddc69347ac968987974eedc0ea5a7  gcc/cp/error.cc
  856ffef082c6d62b43386d99e03e94b0  gcc/cp/except.cc
--- 5577,5583 ----
  c5f1614ded8bb57480eb7d1afecb7c7c  gcc/cp/cxxapi-data.csv
  42bf63dc3759bb23709892d9c600bcfd  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! b60fb404fc796e3de23c680095440d54  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  839ddc69347ac968987974eedc0ea5a7  gcc/cp/error.cc
  856ffef082c6d62b43386d99e03e94b0  gcc/cp/except.cc
*************** aaf76a9b03fd0532d2904aef004fd66a  gcc/cp
*** 5595,5608 ****
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  0456b59fb105d3d30371131d063a685a  gcc/cp/method.cc
! 591e9b1b557847c9faad7479e97687c5  gcc/cp/module.cc
! 6b11f42e6b7d506e0ec6e292677347db  gcc/cp/name-lookup.cc
  6fdcf6a217e83566683fbec935637de3  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! c1221aef922ffbdf49810e8f4bc70aea  gcc/cp/parser.cc
  db6ae85b922989f89eda229cb29e4690  gcc/cp/parser.h
! 567f2a034821422fb4613e2ecb3b9441  gcc/cp/pt.cc
  b606903e35fe6806362fe4eee7a89fef  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  9c5477f737d2c390510c3fe72454f657  gcc/cp/search.cc
--- 5595,5608 ----
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  0456b59fb105d3d30371131d063a685a  gcc/cp/method.cc
! b616ad06d89894d0c4b06ccda778e37e  gcc/cp/module.cc
! aa09e0ec58b60df673175ac9fac560be  gcc/cp/name-lookup.cc
  6fdcf6a217e83566683fbec935637de3  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 87048ca67636b3f559d17940d88fe1a5  gcc/cp/parser.cc
  db6ae85b922989f89eda229cb29e4690  gcc/cp/parser.h
! bf24e7506f4ec92ccc2d137de40f650f  gcc/cp/pt.cc
  b606903e35fe6806362fe4eee7a89fef  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  9c5477f737d2c390510c3fe72454f657  gcc/cp/search.cc
*************** cc65ae2ee101a218fd768c2fee83af6e  gcc/di
*** 5950,5957 ****
  1c427c862326e67131cb6c0ef580a196  gcc/diagnostics/output-spec.cc
  3c1b8a8328a8a02562ad8a353c71a1c6  gcc/diagnostics/output-spec.h
  f804348b86b5dda4ae2b27490ef6174a  gcc/diagnostics/paths-output.cc
! 51d4d6e54884c6e6761d5dc2cdffa683  gcc/diagnostics/paths.cc
! ab20f8a7e64efd9ea6670e6447014d6f  gcc/diagnostics/paths.h
  738ad4f4cd936bbac8c974a26b276b81  gcc/diagnostics/sarif-sink.cc
  2e5b6abdac74dd6e43e3985e6a54b648  gcc/diagnostics/sarif-sink.h
  997b3f6b08ca5f0365ad8829b73c5f3f  gcc/diagnostics/selftest-context.cc
--- 5950,5957 ----
  1c427c862326e67131cb6c0ef580a196  gcc/diagnostics/output-spec.cc
  3c1b8a8328a8a02562ad8a353c71a1c6  gcc/diagnostics/output-spec.h
  f804348b86b5dda4ae2b27490ef6174a  gcc/diagnostics/paths-output.cc
! de4a955194bb4b0417d906ee181de3b0  gcc/diagnostics/paths.cc
! 4fb4afb161f7382c1b6fffa57f6a8de4  gcc/diagnostics/paths.h
  738ad4f4cd936bbac8c974a26b276b81  gcc/diagnostics/sarif-sink.cc
  2e5b6abdac74dd6e43e3985e6a54b648  gcc/diagnostics/sarif-sink.h
  997b3f6b08ca5f0365ad8829b73c5f3f  gcc/diagnostics/selftest-context.cc
*************** acdfc663791e4321372e79932070d05d  gcc/do
*** 5988,5994 ****
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! ad94f3d51121a84eb81b61647590ee55  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
--- 5988,5994 ----
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  1a2d44757bb0f40b09493ac3863eba93  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! 5ad56f46db608c9ee41f5b75c95acca6  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 6010,6018 ****
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 37d1ea8f3672c644c9e9c2cfa630dcf3  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 1efe296832646bbf7c583df91f809a63  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  8783f1b0b6c204d4417b00f3b772beea  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6010,6018 ----
  9512a9fe27682edff7dd2ed171bbb853  gcc/doc/include/gcc-common.texi
  95c90bf85d3eab67f348ee3ce0bf4050  gcc/doc/include/gpl_v3.texi
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
! 15e2cf98dadc41f0beb83ef5bc46bdb9  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 6c8ce9ddeb8308889ad659b4f3522628  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  8783f1b0b6c204d4417b00f3b772beea  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** bd20fd07c5ee8f444bf1d3f5e64e066a  gcc/do
*** 6067,6073 ****
  c6eb228a6da301194f3963b6d42729e7  gcc/doc/standards.texi
  60892135dd93bb0e6d2d4d1b1fe11cb1  gcc/doc/tm.texi
  0801b698039cc220174c1b6ec339c77c  gcc/doc/tm.texi.in
! f3114c1d21828ab3242b20310ee407e7  gcc/doc/tree-ssa.texi
  5f62752970e47d350c8cbce47123d1cf  gcc/doc/trouble.texi
  7f44041407f24d2851135ae497914475  gcc/doc/ux.texi
  a1be2415e4997dcc307935ed9a162b33  gcc/dojump.cc
--- 6067,6073 ----
  c6eb228a6da301194f3963b6d42729e7  gcc/doc/standards.texi
  60892135dd93bb0e6d2d4d1b1fe11cb1  gcc/doc/tm.texi
  0801b698039cc220174c1b6ec339c77c  gcc/doc/tm.texi.in
! 173ab0ec22dd651701e36e43ed21375f  gcc/doc/tree-ssa.texi
  5f62752970e47d350c8cbce47123d1cf  gcc/doc/trouble.texi
  7f44041407f24d2851135ae497914475  gcc/doc/ux.texi
  a1be2415e4997dcc307935ed9a162b33  gcc/dojump.cc
*************** b7bf1ecba30babcca6fcc9e9a66bebfb  gcc/fo
*** 6125,6131 ****
  c6bcf556650bd15e73728fb68b1276cc  gcc/fold-const.cc
  1d6c2807b0d1d4dbc716459c64abe92f  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! b18a2c79addeb3c0e3ce6096054ce903  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6125,6131 ----
  c6bcf556650bd15e73728fb68b1276cc  gcc/fold-const.cc
  1d6c2807b0d1d4dbc716459c64abe92f  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 0a5a1ee1d25ea10a3144f17ab737c99a  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** aed3aedb6378a970055dff9e11eedc2d  gcc/fo
*** 6166,6172 ****
  b7e224f665bb5044ce35ed09435bd4fb  gcc/fortran/cpp.h
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
! 8c54bdec3922757b4d86c50a70140220  gcc/fortran/decl.cc
  917fd2716f1eef2f47d4f032e14958ad  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  9f708de69558a334a8fec77d40a2a376  gcc/fortran/dump-parse-tree.cc
--- 6166,6172 ----
  b7e224f665bb5044ce35ed09435bd4fb  gcc/fortran/cpp.h
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
! 04e5b48bc4c6a0a5479324581ef6ba77  gcc/fortran/decl.cc
  917fd2716f1eef2f47d4f032e14958ad  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  9f708de69558a334a8fec77d40a2a376  gcc/fortran/dump-parse-tree.cc
*************** b3beb0a8e06a71d205d3639a1bc35738  gcc/fo
*** 6176,6182 ****
  7ff99bd8794c2d5f2533f516ec00306b  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
! 9a9f5e719cb3aa62b35a762b196ad6f7  gcc/fortran/gfortran.h
  d29bb6813221f46b4cde9df77292c412  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
  e4fe6ce0303cd182ebd328bdb0ae5743  gcc/fortran/interface.cc
--- 6176,6182 ----
  7ff99bd8794c2d5f2533f516ec00306b  gcc/fortran/frontend-passes.cc
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
! 3f5a4cdf35856ace7a0973a097df9f14  gcc/fortran/gfortran.h
  d29bb6813221f46b4cde9df77292c412  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
  e4fe6ce0303cd182ebd328bdb0ae5743  gcc/fortran/interface.cc
*************** d2a28ef98f6f78d1608fb52204e013a5  gcc/fo
*** 6199,6225 ****
  763c37f838e32f5ed8ad600157a0d951  gcc/fortran/mathbuiltins.def
  6e89e2e347d7f6e1576cbda0e958b5bd  gcc/fortran/misc.cc
  27910247f948e0af2baebd9c279bec80  gcc/fortran/module.cc
! a9cab8b108323b809b370629f7f05504  gcc/fortran/openmp.cc
  97facac1dd9ae327c6c4547b527e4527  gcc/fortran/options.cc
! 44ee980cc04645c25872621b20fc36fa  gcc/fortran/parse.cc
! c1b40e866a8bbe611aa65278fe2508d3  gcc/fortran/parse.h
! 4e4d304de614df4c3283e1c5331c7c2f  gcc/fortran/primary.cc
! 5c7f928e1cb32ae1bb6266fdf13adf35  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
  ebfc538fb0470443c527273e8a50c2a1  gcc/fortran/st.cc
! 72c617ddd58e2640f57a4c4a8f0fe1f0  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! 085093abd52c6213fb87ca7e559f1b7d  gcc/fortran/trans-array.cc
  682d93b7e921d709d88b7e5219a69d53  gcc/fortran/trans-array.h
  dfe1e1950e068389ed73663e9a11ad88  gcc/fortran/trans-common.cc
  fa8521f4c98868ee5fa7e9dea5a35e37  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
! 4676a3ce7cc7bd4ad728303adf614548  gcc/fortran/trans-decl.cc
  2fc7abc1a31c7f7ad6cc9e0fe34591f6  gcc/fortran/trans-expr.cc
! 080622546de640ae05ba0bb197fa9577  gcc/fortran/trans-intrinsic.cc
  2d29342f65aeef2af368527483b2d4f1  gcc/fortran/trans-io.cc
  27df041e4caff610df844e7a22e291e3  gcc/fortran/trans-openmp.cc
  cd091509b69239b87561c8695ce522ca  gcc/fortran/trans-stmt.cc
--- 6199,6225 ----
  763c37f838e32f5ed8ad600157a0d951  gcc/fortran/mathbuiltins.def
  6e89e2e347d7f6e1576cbda0e958b5bd  gcc/fortran/misc.cc
  27910247f948e0af2baebd9c279bec80  gcc/fortran/module.cc
! ccd0b5f4e68c698b61eed503fe66e0ec  gcc/fortran/openmp.cc
  97facac1dd9ae327c6c4547b527e4527  gcc/fortran/options.cc
! 6d861bb72dba054f1f018f41dbbc9dcb  gcc/fortran/parse.cc
! 718f4db6bea1b398551c501068f61597  gcc/fortran/parse.h
! c9d22da97e7dd6a7d6a14a49e9b5dcb0  gcc/fortran/primary.cc
! 53237eb62ec4e76b084b7d8bea9f63d6  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
  ebfc538fb0470443c527273e8a50c2a1  gcc/fortran/st.cc
! 76bd60bda1a0da5f68971673945c44c1  gcc/fortran/symbol.cc
  c9238712914e77b971fde08221a31bf7  gcc/fortran/target-memory.cc
  50451f5a575ab606948f8e72d8cc4721  gcc/fortran/target-memory.h
! d14450908282463ad3a46c36f6148d4d  gcc/fortran/trans-array.cc
  682d93b7e921d709d88b7e5219a69d53  gcc/fortran/trans-array.h
  dfe1e1950e068389ed73663e9a11ad88  gcc/fortran/trans-common.cc
  fa8521f4c98868ee5fa7e9dea5a35e37  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
! dce57ac907b72b9dd8c78e63e9d717a3  gcc/fortran/trans-decl.cc
  2fc7abc1a31c7f7ad6cc9e0fe34591f6  gcc/fortran/trans-expr.cc
! 2889ceeab429a8d9e062daa88b51dd03  gcc/fortran/trans-intrinsic.cc
  2d29342f65aeef2af368527483b2d4f1  gcc/fortran/trans-io.cc
  27df041e4caff610df844e7a22e291e3  gcc/fortran/trans-openmp.cc
  cd091509b69239b87561c8695ce522ca  gcc/fortran/trans-stmt.cc
*************** cd091509b69239b87561c8695ce522ca  gcc/fo
*** 6227,6233 ****
  24751fdbf5162757525888384f73dfd7  gcc/fortran/trans-types.cc
  422959ab20fd75df3766a03597227fd2  gcc/fortran/trans-types.h
  47d7a4f95fe5f62d3f8d58763509ad3d  gcc/fortran/trans.cc
! 8a38c2ad1fcb6836d2f0f58ff2080f22  gcc/fortran/trans.h
  6f893e67fc7e5f247079bd418e61d1e2  gcc/fortran/trigd_fe.inc
  2ddfa7f2ac232123d67959795d85aaa6  gcc/fortran/types.def
  f574663ce227d0be2e77015c008d708b  gcc/fp-test.cc
--- 6227,6233 ----
  24751fdbf5162757525888384f73dfd7  gcc/fortran/trans-types.cc
  422959ab20fd75df3766a03597227fd2  gcc/fortran/trans-types.h
  47d7a4f95fe5f62d3f8d58763509ad3d  gcc/fortran/trans.cc
! 1a2c63f64bd9b08b64cf30a60250d6ea  gcc/fortran/trans.h
  6f893e67fc7e5f247079bd418e61d1e2  gcc/fortran/trigd_fe.inc
  2ddfa7f2ac232123d67959795d85aaa6  gcc/fortran/types.def
  f574663ce227d0be2e77015c008d708b  gcc/fp-test.cc
*************** d6ef278998f9a4cf5f6d12d0ec72b842  gcc/gc
*** 6262,6268 ****
  a44c1a607d9b75afc7b5bd869ae5342a  gcc/gcse.cc
  e5a3a3a1ad466d441c8c2f6c2ac6c208  gcc/gcse.h
  af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
! 73e9039221d34e77933a5626ce0294a5  gcc/gdbhooks.py
  4a86e68e2feba4a0e46f5d39616a00ae  gcc/gdbinit.in
  bc7dc03662da0207b2f137311e3d44ff  gcc/gen-pass-instances.awk
  243e310c8de5ec89a275b8a8fdaa3f23  gcc/genattr-common.cc
--- 6262,6268 ----
  a44c1a607d9b75afc7b5bd869ae5342a  gcc/gcse.cc
  e5a3a3a1ad466d441c8c2f6c2ac6c208  gcc/gcse.h
  af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
! a14b3087cd1329eb6f128a9e406d8816  gcc/gdbhooks.py
  4a86e68e2feba4a0e46f5d39616a00ae  gcc/gdbinit.in
  bc7dc03662da0207b2f137311e3d44ff  gcc/gen-pass-instances.awk
  243e310c8de5ec89a275b8a8fdaa3f23  gcc/genattr-common.cc
*************** b52f7521af68ee0d5854c1573d8b7f91  gcc/gi
*** 6321,6328 ****
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
  46c40ebab120d543476a2e46ac063bba  gcc/gimple-if-to-switch.cc
! cf24f4f4b153671619afe0af59496130  gcc/gimple-isel.cc
! 319a859d4c4eb6948afa93d70a5c97ec  gcc/gimple-iterator.cc
  a0c225f8a1deb41873e5984a058b0f45  gcc/gimple-iterator.h
  4ab554af77b78b1a5d2948c9f0632680  gcc/gimple-laddress.cc
  468251f890cf1a4c5fb81ecfb55e3356  gcc/gimple-loop-interchange.cc
--- 6321,6328 ----
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
  46c40ebab120d543476a2e46ac063bba  gcc/gimple-if-to-switch.cc
! 0c4b12895536294d385322d91bea2a2a  gcc/gimple-isel.cc
! a73e428c3f5211d6dbb9d7ce06f4cd52  gcc/gimple-iterator.cc
  a0c225f8a1deb41873e5984a058b0f45  gcc/gimple-iterator.h
  4ab554af77b78b1a5d2948c9f0632680  gcc/gimple-laddress.cc
  468251f890cf1a4c5fb81ecfb55e3356  gcc/gimple-loop-interchange.cc
*************** eb7c233acdcae81b02395e856a9cfa3b  gcc/gi
*** 6362,6368 ****
  146ce8532311064e53fbcfd9f47c5f93  gcc/gimple-range.cc
  a4e263e8871b92796b1fb32a725e3eaa  gcc/gimple-range.h
  0a74fcfb6f542e62384811b3713681ce  gcc/gimple-ssa-backprop.cc
! 3cfaaa2decd6de2542a919cfb8bdb93d  gcc/gimple-ssa-isolate-paths.cc
  b417ca4d3d865879d0e642790dafa8cf  gcc/gimple-ssa-nonnull-compare.cc
  7dd0743b16bda4385fcd5e8a34f22bb3  gcc/gimple-ssa-pta-constraints.cc
  805d5854da4b225bb3c0ca1f01ba7c29  gcc/gimple-ssa-pta-constraints.h
--- 6362,6368 ----
  146ce8532311064e53fbcfd9f47c5f93  gcc/gimple-range.cc
  a4e263e8871b92796b1fb32a725e3eaa  gcc/gimple-range.h
  0a74fcfb6f542e62384811b3713681ce  gcc/gimple-ssa-backprop.cc
! 625c4d4e2ee935199518dada95221148  gcc/gimple-ssa-isolate-paths.cc
  b417ca4d3d865879d0e642790dafa8cf  gcc/gimple-ssa-nonnull-compare.cc
  7dd0743b16bda4385fcd5e8a34f22bb3  gcc/gimple-ssa-pta-constraints.cc
  805d5854da4b225bb3c0ca1f01ba7c29  gcc/gimple-ssa-pta-constraints.h
*************** c46e71acb17764a720ac6a68007b7298  gcc/gi
*** 6383,6391 ****
  b5b13ba4f92b3ef5294cee911b571925  gcc/gimple-walk.cc
  898d5f9cd9c732cb06cb7e84ca28c99b  gcc/gimple-walk.h
  b5ed1ca4ba5f0f56cd7e3ec1d2a1d01f  gcc/gimple-warn-recursion.cc
! 88214ebd3ca28a6fdc7fdacd301ce526  gcc/gimple.cc
  ed9c9a9b8efbcca1621cb38f6a7f739b  gcc/gimple.def
! be633b87f7ece32432e172828e9af9cd  gcc/gimple.h
  69057cf60d71bd04ced5e457138629e1  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
  bdc0fe03a3523bc1412d967a0232373c  gcc/gimplify.cc
--- 6383,6391 ----
  b5b13ba4f92b3ef5294cee911b571925  gcc/gimple-walk.cc
  898d5f9cd9c732cb06cb7e84ca28c99b  gcc/gimple-walk.h
  b5ed1ca4ba5f0f56cd7e3ec1d2a1d01f  gcc/gimple-warn-recursion.cc
! 0809761e93e784b8b311ec9cfaab0e63  gcc/gimple.cc
  ed9c9a9b8efbcca1621cb38f6a7f739b  gcc/gimple.def
! fff83c47fd0320d8175084caf95f1b1d  gcc/gimple.h
  69057cf60d71bd04ced5e457138629e1  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
  bdc0fe03a3523bc1412d967a0232373c  gcc/gimplify.cc
*************** f2a9985147f87fd566d4ae2dd8fceabc  gcc/lt
*** 6731,6738 ****
  c123d330c230c1e0fe188e9143a9dcf8  gcc/lto-streamer-out.cc
  8caf9a68892d64dc294b20c27291b749  gcc/lto-streamer.cc
  a02ffd191761acac63f19c981da24abf  gcc/lto-streamer.h
! 4b39d90bb231d099b0fc04c8ded93cee  gcc/lto-wrapper.cc
! fbd3fcf29f5d2197380e59583081b6a8  gcc/lto/ChangeLog
  3e7816807401da2506930719e6dc8b3d  gcc/lto/Make-lang.in
  705d8eaa74b456d79367c2c42b7a2fef  gcc/lto/common.cc
  3d201b30f0538a8cfddc450739b1c8c5  gcc/lto/common.h
--- 6731,6738 ----
  c123d330c230c1e0fe188e9143a9dcf8  gcc/lto-streamer-out.cc
  8caf9a68892d64dc294b20c27291b749  gcc/lto-streamer.cc
  a02ffd191761acac63f19c981da24abf  gcc/lto-streamer.h
! 83090028348934d032ead727241d7ad7  gcc/lto-wrapper.cc
! cdd7a37ab63bb1fda8af231f9ac0c431  gcc/lto/ChangeLog
  3e7816807401da2506930719e6dc8b3d  gcc/lto/Make-lang.in
  705d8eaa74b456d79367c2c42b7a2fef  gcc/lto/common.cc
  3d201b30f0538a8cfddc450739b1c8c5  gcc/lto/common.h
*************** fbd3fcf29f5d2197380e59583081b6a8  gcc/lt
*** 6740,6762 ****
  a1977e121a895c3241becf0d3e41bd3a  gcc/lto/lang-specs.h
  d93ec20c141afe4ec8419083e7e5427d  gcc/lto/lang.opt
  e09c982f34fcc53d88fb9b974a77d569  gcc/lto/lang.opt.urls
! e9e3e1c53895933c30b602dfb27942ff  gcc/lto/lto-common.cc
  1bbd724bce4771513f0a356074d52d51  gcc/lto/lto-common.h
  24353553f316f6efb9d7f42253a3ec7c  gcc/lto/lto-dump.cc
  6f7bac8568b01539cfeadad94e94aa6e  gcc/lto/lto-lang.cc
! abba0d56cf42c70d1983f247453576cd  gcc/lto/lto-object.cc
  29cb2a19e49d9b14ca5733e55827c0c5  gcc/lto/lto-partition.cc
  6bdee5523aaa6e7091e15f5270e1ef9f  gcc/lto/lto-partition.h
  3890271ac10891e53209884724fcb93a  gcc/lto/lto-symtab.cc
  37534ae509993637d7af9690433de15c  gcc/lto/lto-symtab.h
  b153638c23972a22ca31986c1b49348d  gcc/lto/lto-tree.h
  ed501b04d194414b59e75eba36ddbac6  gcc/lto/lto.cc
! 46fbea4008689ba8af9f80d1cdce438a  gcc/lto/lto.h
  890758104e7697865dd110259fee0af5  gcc/m2/COPYING.FDL
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 3de9c086913b18ad11093ea946db7a1f  gcc/m2/ChangeLog
  1b9fd55a4978f2f62717ca706fc999f4  gcc/m2/Make-lang.in
  e212443a3231afc28440b22d94debe50  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6740,6762 ----
  a1977e121a895c3241becf0d3e41bd3a  gcc/lto/lang-specs.h
  d93ec20c141afe4ec8419083e7e5427d  gcc/lto/lang.opt
  e09c982f34fcc53d88fb9b974a77d569  gcc/lto/lang.opt.urls
! 2fd282b2a033ddbb7f9b8f52ee01125e  gcc/lto/lto-common.cc
  1bbd724bce4771513f0a356074d52d51  gcc/lto/lto-common.h
  24353553f316f6efb9d7f42253a3ec7c  gcc/lto/lto-dump.cc
  6f7bac8568b01539cfeadad94e94aa6e  gcc/lto/lto-lang.cc
! 3b697054907d273bdcb6e5026d3bc875  gcc/lto/lto-object.cc
  29cb2a19e49d9b14ca5733e55827c0c5  gcc/lto/lto-partition.cc
  6bdee5523aaa6e7091e15f5270e1ef9f  gcc/lto/lto-partition.h
  3890271ac10891e53209884724fcb93a  gcc/lto/lto-symtab.cc
  37534ae509993637d7af9690433de15c  gcc/lto/lto-symtab.h
  b153638c23972a22ca31986c1b49348d  gcc/lto/lto-tree.h
  ed501b04d194414b59e75eba36ddbac6  gcc/lto/lto.cc
! ff9a9ca6ac5fa2e371f831911c148f9b  gcc/lto/lto.h
  890758104e7697865dd110259fee0af5  gcc/m2/COPYING.FDL
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 5a7569496f6a5d20cecb4de1341c5b4f  gcc/m2/ChangeLog
  1b9fd55a4978f2f62717ca706fc999f4  gcc/m2/Make-lang.in
  e212443a3231afc28440b22d94debe50  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7731,7737 ****
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  550bdb35d0e034ca0050c574ba896d61  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 1661317da327a28ca6a454f554efcc62  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
--- 7731,7737 ----
  88e10618d6f39a411b34e2245b93307b  gcc/machmode.def
  550bdb35d0e034ca0050c574ba896d61  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! bc429f936218a9421e1ce9726424cb82  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
*************** cd641a4dec9a0a4cf7cf888cfa37e386  gcc/pr
*** 7887,7895 ****
  be6c71b25f10a45cfc8d05a37affe9ed  gcc/pta-andersen.cc
  06e1fae8a3a5e17b39e472f88eb11819  gcc/pta-andersen.h
  555a319d44f0f4857aa378a1691e1d27  gcc/range-op-float.cc
! 53d455d802bac0f8785f4bad4e26dd45  gcc/range-op-mixed.h
  111e7e65fb598a1d21148e1b0f23744b  gcc/range-op-ptr.cc
! be8b28fb67b0931819808433991d33af  gcc/range-op.cc
  24fea5bf4be00e9dba7bbeb8d52b4677  gcc/range-op.h
  e1edfa2841ce0f9e30db7b34a3a5a6d7  gcc/range.cc
  e1ebdb36533cc50099a4b487e7c70c49  gcc/range.h
--- 7887,7895 ----
  be6c71b25f10a45cfc8d05a37affe9ed  gcc/pta-andersen.cc
  06e1fae8a3a5e17b39e472f88eb11819  gcc/pta-andersen.h
  555a319d44f0f4857aa378a1691e1d27  gcc/range-op-float.cc
! 3be61f60793064d60015eff52eb39468  gcc/range-op-mixed.h
  111e7e65fb598a1d21148e1b0f23744b  gcc/range-op-ptr.cc
! 7a52f07d8e2f048fbc824bd3b69bb8ef  gcc/range-op.cc
  24fea5bf4be00e9dba7bbeb8d52b4677  gcc/range-op.h
  e1edfa2841ce0f9e30db7b34a3a5a6d7  gcc/range.cc
  e1ebdb36533cc50099a4b487e7c70c49  gcc/range.h
*************** fdc04e5af7ee387dce07c6ba9a99eaa8  gcc/se
*** 8481,8487 ****
  50d9999185408bcae454174489317b68  gcc/signop.h
  97a13c24fa48c474198b5767f228fd93  gcc/simple-diagnostic-path.cc
  4daee3acc61f789d9c4c04a27a5bb351  gcc/simple-diagnostic-path.h
! 22e961880747bd72db90dd1a02f02758  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
  599fc125220850c86939202313a6f733  gcc/sparseset.cc
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
--- 8481,8487 ----
  50d9999185408bcae454174489317b68  gcc/signop.h
  97a13c24fa48c474198b5767f228fd93  gcc/simple-diagnostic-path.cc
  4daee3acc61f789d9c4c04a27a5bb351  gcc/simple-diagnostic-path.h
! 69a29f59506f7264f438d7229bc2afa7  gcc/simplify-rtx.cc
  456e0937ae4b3a0f49fd44fb0d05eb52  gcc/sort.cc
  599fc125220850c86939202313a6f733  gcc/sparseset.cc
  430469e71b555502fe14de847bb52093  gcc/sparseset.h
*************** ac49ee54195f30bc26eaa8fcf56ba0b1  gcc/sp
*** 8494,8500 ****
  84bd78cc881371c105169fb8707256d3  gcc/splay-tree-utils.tcc
  a3bbacd1506c9f377db1aaaa81c58912  gcc/sreal.cc
  f5e5ba1329ffae51d286f6c8932308d6  gcc/sreal.h
! b3fac3a9d5880bf3ffb3620c08f59c3c  gcc/ssa-iterators.h
  3f0c5b46b37a88cbf05365761c63c6cc  gcc/ssa.h
  d0b55fa9a0f86f4f03bdbfcff3e068d8  gcc/stack-ptr-mod.cc
  bbd5abaa55463a5497e6ff9d14de3a1b  gcc/statistics.cc
--- 8494,8500 ----
  84bd78cc881371c105169fb8707256d3  gcc/splay-tree-utils.tcc
  a3bbacd1506c9f377db1aaaa81c58912  gcc/sreal.cc
  f5e5ba1329ffae51d286f6c8932308d6  gcc/sreal.h
! 4f6e88d58dbecf2c26dcfe41086f78f2  gcc/ssa-iterators.h
  3f0c5b46b37a88cbf05365761c63c6cc  gcc/ssa.h
  d0b55fa9a0f86f4f03bdbfcff3e068d8  gcc/stack-ptr-mod.cc
  bbd5abaa55463a5497e6ff9d14de3a1b  gcc/statistics.cc
*************** d52852ab0122f14cd4f7658db8b9c6df  gcc/sy
*** 8522,8528 ****
  5dcfbac7f32752af3034f02319af81d7  gcc/symtab-clones.h
  f849345d69b622ff9e7b96095bc2c34e  gcc/symtab-thunks.cc
  c9829745147a0b8ec026a3c5029fe2ff  gcc/symtab-thunks.h
! 1e5cd3d72b84a1e5c326ba2cce88fc91  gcc/symtab.cc
  b3a965e425e6cf7888319667faf58da9  gcc/sync-builtins.def
  b1497a03867668af210c32280876fdd7  gcc/system.h
  480d916fe042a150001ad88e88521c08  gcc/target-def.h
--- 8522,8528 ----
  5dcfbac7f32752af3034f02319af81d7  gcc/symtab-clones.h
  f849345d69b622ff9e7b96095bc2c34e  gcc/symtab-thunks.cc
  c9829745147a0b8ec026a3c5029fe2ff  gcc/symtab-thunks.h
! 054c30e2e7fa451a3ce7a9753686fd0a  gcc/symtab.cc
  b3a965e425e6cf7888319667faf58da9  gcc/sync-builtins.def
  b1497a03867668af210c32280876fdd7  gcc/system.h
  480d916fe042a150001ad88e88521c08  gcc/target-def.h
*************** f917b1b792e38f03fb6b295105203e25  gcc/ta
*** 8535,8541 ****
  598920a18a05f11271f5dd4aa453e76a  gcc/targhooks.cc
  96ddcc694ec42272d51a10664cd73f89  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 33aff3834b5c4e2f0ccdf03bb6c4bd7f  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8535,8541 ----
  598920a18a05f11271f5dd4aa453e76a  gcc/targhooks.cc
  96ddcc694ec42272d51a10664cd73f89  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 46381f27bfbb1f612f31f052b80897a9  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** c57345fa3b5ca1a7540c77ee0ce25605  gcc/te
*** 21134,21140 ****
  b1579268264426b91fb29ca4a7ae6672  gcc/testsuite/g++.dg/abi/offsetof.C
  ed79cf5bf3c45230ee9187c4cf51338e  gcc/testsuite/g++.dg/abi/packed1.C
  a6094bf319c105760bebe41768865b66  gcc/testsuite/g++.dg/abi/param1.C
! dc8d04461395fe21c8df3c3ddc0eaefb  gcc/testsuite/g++.dg/abi/param2.C
  c6ee91a6fae5891b271cf08faea94bc7  gcc/testsuite/g++.dg/abi/pr121801.C
  4f8a99ff3fb06bd92fa2824ba0222b0d  gcc/testsuite/g++.dg/abi/pr39188-1.h
  0b334e68ad96b9b585797769690bad26  gcc/testsuite/g++.dg/abi/pr39188-1a.C
--- 21134,21140 ----
  b1579268264426b91fb29ca4a7ae6672  gcc/testsuite/g++.dg/abi/offsetof.C
  ed79cf5bf3c45230ee9187c4cf51338e  gcc/testsuite/g++.dg/abi/packed1.C
  a6094bf319c105760bebe41768865b66  gcc/testsuite/g++.dg/abi/param1.C
! 82df7ba960283a3a341017a053d2e918  gcc/testsuite/g++.dg/abi/param2.C
  c6ee91a6fae5891b271cf08faea94bc7  gcc/testsuite/g++.dg/abi/pr121801.C
  4f8a99ff3fb06bd92fa2824ba0222b0d  gcc/testsuite/g++.dg/abi/pr39188-1.h
  0b334e68ad96b9b585797769690bad26  gcc/testsuite/g++.dg/abi/pr39188-1a.C
*************** dac03e4bc7d4682a3de3e86e75f32a05  gcc/te
*** 21220,21229 ****
  21cb105a9af4c5ad140e076e8041cf46  gcc/testsuite/g++.dg/analyzer/exception-leak-5.C
  7255780786b3a0b5451a1fc6b8f3333f  gcc/testsuite/g++.dg/analyzer/exception-leak-6.C
  7e79b38e5b1b7a3c8d25e5683c3dcb74  gcc/testsuite/g++.dg/analyzer/exception-nothrow.C
! 5508a9208505ef8d8e40f27b4270765b  gcc/testsuite/g++.dg/analyzer/exception-path-1.C
  39d8173227e01a954ba7d2c4b435fedb  gcc/testsuite/g++.dg/analyzer/exception-path-catch-all-1.C
  9219aa6a5030d49b03e40458fe07ac86  gcc/testsuite/g++.dg/analyzer/exception-path-catch-all-2.C
! f7a989d886271010beb2152b8877fd64  gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2.C
  9b950900022e1f3b8b27e17519f218fe  gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple.C
  c5db7a60c83a4e066bc1ef093a602a52  gcc/testsuite/g++.dg/analyzer/exception-path-unwind-single.C
  c0c6c8a9744bdada89df289a7570f5e0  gcc/testsuite/g++.dg/analyzer/exception-path-with-cleanups.C
--- 21220,21231 ----
  21cb105a9af4c5ad140e076e8041cf46  gcc/testsuite/g++.dg/analyzer/exception-leak-5.C
  7255780786b3a0b5451a1fc6b8f3333f  gcc/testsuite/g++.dg/analyzer/exception-leak-6.C
  7e79b38e5b1b7a3c8d25e5683c3dcb74  gcc/testsuite/g++.dg/analyzer/exception-nothrow.C
! 8825e519ef508bac6f04957c8fd895bb  gcc/testsuite/g++.dg/analyzer/exception-path-1-sarif.py
! 0fc933d5d3de38da64b99e87f333dda0  gcc/testsuite/g++.dg/analyzer/exception-path-1.C
  39d8173227e01a954ba7d2c4b435fedb  gcc/testsuite/g++.dg/analyzer/exception-path-catch-all-1.C
  9219aa6a5030d49b03e40458fe07ac86  gcc/testsuite/g++.dg/analyzer/exception-path-catch-all-2.C
! 1ac06deb8b2689e032efad4984d05413  gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2-sarif.py
! ee58a97d53ad4d63b2762fb6124de32a  gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2.C
  9b950900022e1f3b8b27e17519f218fe  gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple.C
  c5db7a60c83a4e066bc1ef093a602a52  gcc/testsuite/g++.dg/analyzer/exception-path-unwind-single.C
  c0c6c8a9744bdada89df289a7570f5e0  gcc/testsuite/g++.dg/analyzer/exception-path-with-cleanups.C
*************** b4c9a3125082aac3aa6b866492a89640  gcc/te
*** 31648,31653 ****
--- 31650,31656 ----
  13b993a64fc2cc91de616884657a007a  gcc/testsuite/g++.dg/lookup/koenig13.C
  6f6f54957497ff01c410e425ceb5eb0a  gcc/testsuite/g++.dg/lookup/koenig14.C
  c10e651a50b7b681144be5c6638dd98c  gcc/testsuite/g++.dg/lookup/koenig15.C
+ 48b0b97c8d7394c97480e31d456c7aa4  gcc/testsuite/g++.dg/lookup/koenig16.C
  c44c726de3c9ebad9efc6f0268a223d3  gcc/testsuite/g++.dg/lookup/koenig2.C
  0efd4ef624e1a631dad2972522c30301  gcc/testsuite/g++.dg/lookup/koenig3.C
  634eca78a66aff86cb1d96384411430c  gcc/testsuite/g++.dg/lookup/koenig4.C
*************** cb6fd3c7fff8631ed4460da9de6e631e  gcc/te
*** 32216,32221 ****
--- 32219,32226 ----
  3317b0bbfaacf10662d5994de76ea820  gcc/testsuite/g++.dg/modules/adhoc-1_b.C
  d27e4ee4f5f5e0db3eac539e5050b624  gcc/testsuite/g++.dg/modules/adl-10_a.C
  d975bcfcc66f10d16ed8c046fec4ba04  gcc/testsuite/g++.dg/modules/adl-10_b.C
+ 314ee1208d31d73f6b8581612ceea903  gcc/testsuite/g++.dg/modules/adl-11_a.C
+ d5e6364be38f2a4bd3ffc35aed9b8edd  gcc/testsuite/g++.dg/modules/adl-11_b.C
  9c824c1a28f6bcf79fd72186d79fe93c  gcc/testsuite/g++.dg/modules/adl-1_a.C
  3bb31e23ac383185d41cda2c5fcbdaf3  gcc/testsuite/g++.dg/modules/adl-1_b.C
  46103f57f3287176308fc33634d7da8e  gcc/testsuite/g++.dg/modules/adl-1_c.C
*************** d30b2aaa5892cbc8534763261c64ebf0  gcc/te
*** 32347,32352 ****
--- 32352,32359 ----
  5b3d707477991d6e1a4567469533efd8  gcc/testsuite/g++.dg/modules/builtin-7_a.H
  76a5f994255832c37033d000bf5a15c2  gcc/testsuite/g++.dg/modules/builtin-7_b.C
  9a54c1b4b76940fc134470af4ebd9072  gcc/testsuite/g++.dg/modules/builtin-8.C
+ 7371834a262ba84ca7eba4a2c371f433  gcc/testsuite/g++.dg/modules/builtin-9_a.C
+ 59bff66079e0d6ebb6c006a6e3f52489  gcc/testsuite/g++.dg/modules/builtin-9_b.C
  c260a7dd28df40b7c5b61dcd0901fff3  gcc/testsuite/g++.dg/modules/by-name-1.C
  0b5e2f8be888204ea96851f7d171ff72  gcc/testsuite/g++.dg/modules/cexpr-1_a.C
  6f4f6f034ae6c6f611a1b844eb7146ed  gcc/testsuite/g++.dg/modules/cexpr-1_b.C
*************** f4151476d383dfa58ec57d84af229960  gcc/te
*** 32399,32404 ****
--- 32406,32413 ----
  43bdc6e1ffd552c18c3f46ba0d9b6353  gcc/testsuite/g++.dg/modules/clone-3_b.C
  1dbe55cb66e8ff8caec75c9be7f2c9e3  gcc/testsuite/g++.dg/modules/clone-4_a.C
  2dcd18d0e8acb35a37c7d8189b2a1450  gcc/testsuite/g++.dg/modules/clone-4_b.C
+ cd6c431aae535838aca8d9e035cb7081  gcc/testsuite/g++.dg/modules/clone-5_a.C
+ d673b7bf33a6d7efdbab448420401ec5  gcc/testsuite/g++.dg/modules/clone-5_b.C
  a7ee3a8d76bc139c4cf52d3492a2aff4  gcc/testsuite/g++.dg/modules/concept-10_a.H
  2006efa004cac463749325d18b100fdd  gcc/testsuite/g++.dg/modules/concept-10_b.C
  c2514fb24a7f14f1f1edfc9217a858f2  gcc/testsuite/g++.dg/modules/concept-11_a.H
*************** c087af9321ac0e24731d2a4d1bb3e319  gcc/te
*** 32801,32806 ****
--- 32810,32818 ----
  0863236aba9d92e0d01c941e4cf63d25  gcc/testsuite/g++.dg/modules/internal-14_c.C
  2a172eac2717752bc776e5d72e639579  gcc/testsuite/g++.dg/modules/internal-15_a.C
  8c3b4a86df0992edb91ffe5c31e3c519  gcc/testsuite/g++.dg/modules/internal-15_b.C
+ 88ee381d96387e16394444459f265bfd  gcc/testsuite/g++.dg/modules/internal-16.C
+ de8b65b21e105d140eb3a6820d4aff13  gcc/testsuite/g++.dg/modules/internal-17_a.C
+ 8114f1020d3c84955efc22dd7c18c4cb  gcc/testsuite/g++.dg/modules/internal-17_b.C
  c66d17d0fb2dc80371978510d0cc1f0f  gcc/testsuite/g++.dg/modules/internal-2_a.H
  21bb55995bb6fa8ed6a8fa69368f7f36  gcc/testsuite/g++.dg/modules/internal-2_b.H
  ba3bc4f8f333742fb78f03db052c4ffa  gcc/testsuite/g++.dg/modules/internal-2_c.C
*************** f92c13ff85afb4a0161600875f67c936  gcc/te
*** 33143,33148 ****
--- 33155,33162 ----
  49c5b9733a2750cf56cc92934b796714  gcc/testsuite/g++.dg/modules/namespace-14_b.C
  80cafb329c9ed370e4f5bc57bf2fb820  gcc/testsuite/g++.dg/modules/namespace-14_c.C
  70c50f0547e248c3eace148df0ffe4d5  gcc/testsuite/g++.dg/modules/namespace-14_d.C
+ 7f12f718e48c2e857ea3368e196a30e3  gcc/testsuite/g++.dg/modules/namespace-15_a.C
+ b02e012e3fe6df1deadb2b6c08aee478  gcc/testsuite/g++.dg/modules/namespace-15_b.C
  ebce3d8effe71472ad6b1910c0b435f6  gcc/testsuite/g++.dg/modules/namespace-1_a.C
  c34c17e18223f5c84607e68a5f2dd81a  gcc/testsuite/g++.dg/modules/namespace-1_b.C
  d35b80efe49eb34a9b0c6be1e97ef76a  gcc/testsuite/g++.dg/modules/namespace-1_c.C
*************** f298eddbaaad3dfdc15f6cf9683ff08a  gcc/te
*** 37941,37946 ****
--- 37955,37961 ----
  34ccf862a19942e4a76e7409c03669c6  gcc/testsuite/g++.dg/torture/pr120119-1.C
  a7a00125ef903c9e5ba25788e8c60eab  gcc/testsuite/g++.dg/torture/pr120721.C
  75b55c517ba9c0f47c83851f084cb294  gcc/testsuite/g++.dg/torture/pr121870.C
+ 335f20fd55847f9861ff378b9be0f1bc  gcc/testsuite/g++.dg/torture/pr122589.C
  161154ed9f6193a2a7da119e068c3f3f  gcc/testsuite/g++.dg/torture/pr27218.C
  a84e9fff95df4801f8e582fbc33303b8  gcc/testsuite/g++.dg/torture/pr30252.C
  e980bf95890544d46879b89f7aa98df6  gcc/testsuite/g++.dg/torture/pr30567.C
*************** f9c816e11be2c3ccda058034e7d7ced9  gcc/te
*** 43289,43295 ****
  5996f76c5dc2c10268e90ada8a82f601  gcc/testsuite/g++.target/aarch64/mv-and-mvc2.C
  a1a60bca035f8f311226147d1158241e  gcc/testsuite/g++.target/aarch64/mv-and-mvc3.C
  b19ce4ea0a0bc08bdd001978bf2abb12  gcc/testsuite/g++.target/aarch64/mv-and-mvc4.C
! ca19a153be1c3b13d8d571904f321ec1  gcc/testsuite/g++.target/aarch64/mv-cpu-features.C
  8d2a32642ea29e8bd5424824b7cca34c  gcc/testsuite/g++.target/aarch64/mv-error1.C
  ea0619cbe10911dcca70e535067d6e46  gcc/testsuite/g++.target/aarch64/mv-error2.C
  979c02e9b8d1a3dc5d30ec5b6188db42  gcc/testsuite/g++.target/aarch64/mv-error3.C
--- 43304,43310 ----
  5996f76c5dc2c10268e90ada8a82f601  gcc/testsuite/g++.target/aarch64/mv-and-mvc2.C
  a1a60bca035f8f311226147d1158241e  gcc/testsuite/g++.target/aarch64/mv-and-mvc3.C
  b19ce4ea0a0bc08bdd001978bf2abb12  gcc/testsuite/g++.target/aarch64/mv-and-mvc4.C
! 324c59e0d0a4884680f51d50c00d9869  gcc/testsuite/g++.target/aarch64/mv-cpu-features.C
  8d2a32642ea29e8bd5424824b7cca34c  gcc/testsuite/g++.target/aarch64/mv-error1.C
  ea0619cbe10911dcca70e535067d6e46  gcc/testsuite/g++.target/aarch64/mv-error2.C
  979c02e9b8d1a3dc5d30ec5b6188db42  gcc/testsuite/g++.target/aarch64/mv-error3.C
*************** fb915623fe5d0c1208c53c6de33e722a  gcc/te
*** 43934,43939 ****
--- 43949,43974 ----
  3c447d71c9dbea654422b220051c773d  gcc/testsuite/g++.target/pru/minrt-3.cc
  609362d8197d8c5fa5f35cfe90497bd5  gcc/testsuite/g++.target/pru/pru.exp
  4b11a77cc6e6a6d127ce6f11252f605a  gcc/testsuite/g++.target/riscv/_Float16.C
+ 7ad236bbb073e375a26917238b5d3b48  gcc/testsuite/g++.target/riscv/abi/empty-struct+union-1.cc
+ 051947fc5192875d9ad4b0dc07aed862  gcc/testsuite/g++.target/riscv/abi/empty-struct+union-2.cc
+ 78ca50d563f26a17b07d6b86e08e95db  gcc/testsuite/g++.target/riscv/abi/empty-struct+union-3.cc
+ 888a26663657dd1c15bdd3fa77087303  gcc/testsuite/g++.target/riscv/abi/empty-struct+union-4.cc
+ ad089dd7b8ee3d4c84e9efe2c4e32936  gcc/testsuite/g++.target/riscv/abi/empty-struct-1.cc
+ 37d95628f67cab1eb5bf82d0d71cadf4  gcc/testsuite/g++.target/riscv/abi/empty-struct-10.cc
+ e2fd6c66e6cefa5e7180d038a858e702  gcc/testsuite/g++.target/riscv/abi/empty-struct-11.cc
+ 193cb91f2209b416aaebbed7b482cf8a  gcc/testsuite/g++.target/riscv/abi/empty-struct-12.cc
+ c7763dd23aa37ce6119c30e1bf4a6c00  gcc/testsuite/g++.target/riscv/abi/empty-struct-2.cc
+ 7c8f30103aeafca45c080562ae153d56  gcc/testsuite/g++.target/riscv/abi/empty-struct-3.cc
+ 0438c564f35e317fbd501e576e6b8f84  gcc/testsuite/g++.target/riscv/abi/empty-struct-4.cc
+ d983e99999e28de158c7765bddefeaa7  gcc/testsuite/g++.target/riscv/abi/empty-struct-5.cc
+ 8982ca01eba30b34b9d6a64295399440  gcc/testsuite/g++.target/riscv/abi/empty-struct-6.cc
+ 4cfaba5ab9ae28b0e0363c0e1f03dccd  gcc/testsuite/g++.target/riscv/abi/empty-struct-7.cc
+ 0fe46c098c4b7de812563a3f0aaf071e  gcc/testsuite/g++.target/riscv/abi/empty-struct-8.cc
+ 4e46d18fbffbca723075e0ab43180071  gcc/testsuite/g++.target/riscv/abi/empty-struct-9.cc
+ ab72ab4063586af4a9bb4ed9537b4e52  gcc/testsuite/g++.target/riscv/abi/empty-union-1.cc
+ efdc2d04c4ec3a467d6143dee9cea8fd  gcc/testsuite/g++.target/riscv/abi/empty-union-2.cc
+ 34295d3b8f08063041be20094ab9d8a3  gcc/testsuite/g++.target/riscv/abi/empty-union-3.cc
+ 6a13c963d0bd67b527dca4993c7dda4f  gcc/testsuite/g++.target/riscv/abi/empty-union-4.cc
  84541f8edc35b61b62256dbd71b731b8  gcc/testsuite/g++.target/riscv/call-with-empty-struct-float.C
  0224a15f72de72af47e3eeb572c2d4eb  gcc/testsuite/g++.target/riscv/call-with-empty-struct-int.C
  13fbd035f1483c414ba4dab326db8f4e  gcc/testsuite/g++.target/riscv/call-with-empty-struct.H
*************** daceaf1f0da7e5c955e4b13180536bca  gcc/te
*** 43956,43962 ****
  7079827a2e9106d7dd26baf0312903e6  gcc/testsuite/g++.target/riscv/redundant-bitmap-2.C
  5e656f7ba916750fdf3fd708236e7e9a  gcc/testsuite/g++.target/riscv/redundant-bitmap-3.C
  005a07d6ed445202a5333c84693b6d73  gcc/testsuite/g++.target/riscv/redundant-bitmap-4.C
! 80ae0326fddeb5164903866ac677522c  gcc/testsuite/g++.target/riscv/riscv.exp
  33bc1e793360d958223c97bd0dd123ad  gcc/testsuite/g++.target/riscv/rvv/autovec/bug-1.C
  bbffb78a05c981886c82c4d7bb1ab46a  gcc/testsuite/g++.target/riscv/rvv/autovec/bug-2.C
  7744443172f2d7cb1157b8661f646acc  gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C
--- 43991,43997 ----
  7079827a2e9106d7dd26baf0312903e6  gcc/testsuite/g++.target/riscv/redundant-bitmap-2.C
  5e656f7ba916750fdf3fd708236e7e9a  gcc/testsuite/g++.target/riscv/redundant-bitmap-3.C
  005a07d6ed445202a5333c84693b6d73  gcc/testsuite/g++.target/riscv/redundant-bitmap-4.C
! dcdcb86378374338efcef1486419a551  gcc/testsuite/g++.target/riscv/riscv.exp
  33bc1e793360d958223c97bd0dd123ad  gcc/testsuite/g++.target/riscv/rvv/autovec/bug-1.C
  bbffb78a05c981886c82c4d7bb1ab46a  gcc/testsuite/g++.target/riscv/rvv/autovec/bug-2.C
  7744443172f2d7cb1157b8661f646acc  gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C
*************** ae878ea349c8f9f2a197bf59dcff9d3a  gcc/te
*** 45138,45143 ****
--- 45173,45179 ----
  4e917b913d6f56bf343a7bff79797c93  gcc/testsuite/gcc.c-torture/compile/pr119226.c
  ba307c947af4df2e0ff2f70272caf68a  gcc/testsuite/gcc.c-torture/compile/pr120807.c
  b20dd8a4cdcf6dd51489456d26453893  gcc/testsuite/gcc.c-torture/compile/pr122066.c
+ 46eb20294e18878710a761cb15ba8fd5  gcc/testsuite/gcc.c-torture/compile/pr122588-1.c
  33c7141fcf5b1add3ddd2be0100f1f0d  gcc/testsuite/gcc.c-torture/compile/pr12517.c
  ec16b12ab11c499bf321be18ea59da33  gcc/testsuite/gcc.c-torture/compile/pr12578.c
  86f3d5cf87d24e97aa663b79f2d0ac5d  gcc/testsuite/gcc.c-torture/compile/pr12899.c
*************** ee83b0853d986fe0890fb91652c83334  gcc/te
*** 49183,49189 ****
  ee803c3283890e05fed6552fbff9532c  gcc/testsuite/gcc.dg/analyzer/read-pr108661.c
  3594d7bfa2b29dcb6db7f3fa6fbd4c2a  gcc/testsuite/gcc.dg/analyzer/sensitive-1.c
  235b23e579165b5bc29ded1884282ac0  gcc/testsuite/gcc.dg/analyzer/setjmp-1.c
! 179069b5df1a39fd4f81202fade56325  gcc/testsuite/gcc.dg/analyzer/setjmp-3.c
  fc3a3a42af2e0edb17f7af2cf30f4343  gcc/testsuite/gcc.dg/analyzer/setjmp-4.c
  c04d5fc1dea77f1e99f32e5ee47e000f  gcc/testsuite/gcc.dg/analyzer/setjmp-6.c
  27cf1c2faaa334e8717833bc2394aa77  gcc/testsuite/gcc.dg/analyzer/setjmp-7.c
--- 49219,49226 ----
  ee803c3283890e05fed6552fbff9532c  gcc/testsuite/gcc.dg/analyzer/read-pr108661.c
  3594d7bfa2b29dcb6db7f3fa6fbd4c2a  gcc/testsuite/gcc.dg/analyzer/sensitive-1.c
  235b23e579165b5bc29ded1884282ac0  gcc/testsuite/gcc.dg/analyzer/setjmp-1.c
! fe4be8124d5734512798cf22dfcdb323  gcc/testsuite/gcc.dg/analyzer/setjmp-3-sarif.py
! 13e31ba970fb55743f999be7f7c61fc0  gcc/testsuite/gcc.dg/analyzer/setjmp-3.c
  fc3a3a42af2e0edb17f7af2cf30f4343  gcc/testsuite/gcc.dg/analyzer/setjmp-4.c
  c04d5fc1dea77f1e99f32e5ee47e000f  gcc/testsuite/gcc.dg/analyzer/setjmp-6.c
  27cf1c2faaa334e8717833bc2394aa77  gcc/testsuite/gcc.dg/analyzer/setjmp-7.c
*************** d9e45b781a97ee5ac71b788011eae52c  gcc/te
*** 50960,50967 ****
  63f9f4f172f1c35d6e9325335509bbae  gcc/testsuite/gcc.dg/cleanup-7.c
  4b3f3381c96015f94c259a34b69db093  gcc/testsuite/gcc.dg/cleanup-8.c
  2b48928f2bd195ac844588f7ca503b99  gcc/testsuite/gcc.dg/cleanup-9.c
! d97c7a7f40ee37cdc08f53d694b5b6c4  gcc/testsuite/gcc.dg/cmp-mem-const-1.c
! 58abb24caf7c9dea1b8dd01beb6a4c64  gcc/testsuite/gcc.dg/cmp-mem-const-2.c
  0e0404e574882e746f083b4e342b199e  gcc/testsuite/gcc.dg/cmp-mem-const-3.c
  1e7f131c6c9aac4217b1aa657fe6deac  gcc/testsuite/gcc.dg/cmp-mem-const-4.c
  fbf489c058782ade1afff9b3e1a414f1  gcc/testsuite/gcc.dg/cmp-mem-const-5.c
--- 50997,51004 ----
  63f9f4f172f1c35d6e9325335509bbae  gcc/testsuite/gcc.dg/cleanup-7.c
  4b3f3381c96015f94c259a34b69db093  gcc/testsuite/gcc.dg/cleanup-8.c
  2b48928f2bd195ac844588f7ca503b99  gcc/testsuite/gcc.dg/cleanup-9.c
! 511209a2170cfb8d8b536d67b3012d4b  gcc/testsuite/gcc.dg/cmp-mem-const-1.c
! ff9b76460e8f733216b81ea35e9a0e97  gcc/testsuite/gcc.dg/cmp-mem-const-2.c
  0e0404e574882e746f083b4e342b199e  gcc/testsuite/gcc.dg/cmp-mem-const-3.c
  1e7f131c6c9aac4217b1aa657fe6deac  gcc/testsuite/gcc.dg/cmp-mem-const-4.c
  fbf489c058782ade1afff9b3e1a414f1  gcc/testsuite/gcc.dg/cmp-mem-const-5.c
*************** d74b89e56176fb529e8bb7e7a09ce41d  gcc/te
*** 51016,51026 ****
  c7861cb9c33a40ea18f9ec149a743d3e  gcc/testsuite/gcc.dg/compat/pr38736_y.c
  4b4f71db780c1bc3362df9cd3b1def0d  gcc/testsuite/gcc.dg/compat/pr83487-1.h
  5aefef89b7f6fcc39055c1c13e62beb0  gcc/testsuite/gcc.dg/compat/pr83487-1_main.c
! fd52b0802e292ace71c85d5851e68895  gcc/testsuite/gcc.dg/compat/pr83487-1_x.c
! d6b2b417ba65a5d7347f0a752ff6f92e  gcc/testsuite/gcc.dg/compat/pr83487-1_y.c
  e6ec5fd8a835190c85e1459361275004  gcc/testsuite/gcc.dg/compat/pr83487-2_main.c
! 6a9d90ad6f1a85dc86df7105f60b8b3f  gcc/testsuite/gcc.dg/compat/pr83487-2_x.c
! 326f9f7b07c245c3d1a881e59bb69309  gcc/testsuite/gcc.dg/compat/pr83487-2_y.c
  fc5dafe10d6650cf4d9a8fd5fb187f59  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_main.c
  34b45138296b5aa7dd411fa08de1df98  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_x.c
  ebfa2ff6c25bd35bc7465e300b17eb47  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_y.c
--- 51053,51063 ----
  c7861cb9c33a40ea18f9ec149a743d3e  gcc/testsuite/gcc.dg/compat/pr38736_y.c
  4b4f71db780c1bc3362df9cd3b1def0d  gcc/testsuite/gcc.dg/compat/pr83487-1.h
  5aefef89b7f6fcc39055c1c13e62beb0  gcc/testsuite/gcc.dg/compat/pr83487-1_main.c
! 411c60b5048001a92e29a155931a4f8a  gcc/testsuite/gcc.dg/compat/pr83487-1_x.c
! bdd724dfe84caf9ba4748600cfe3e3f3  gcc/testsuite/gcc.dg/compat/pr83487-1_y.c
  e6ec5fd8a835190c85e1459361275004  gcc/testsuite/gcc.dg/compat/pr83487-2_main.c
! c0537193758bec02c372c8e6562b8fdb  gcc/testsuite/gcc.dg/compat/pr83487-2_x.c
! 2bed7d8454da35d29b23e6055a60a8ea  gcc/testsuite/gcc.dg/compat/pr83487-2_y.c
  fc5dafe10d6650cf4d9a8fd5fb187f59  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_main.c
  34b45138296b5aa7dd411fa08de1df98  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_x.c
  ebfa2ff6c25bd35bc7465e300b17eb47  gcc/testsuite/gcc.dg/compat/scalar-by-value-1_y.c
*************** d043bebe314f4799a1f686632b791cca  gcc/te
*** 54914,54919 ****
--- 54951,54966 ----
  fc62f9b04cc5a79673dbe5e5bdabbe49  gcc/testsuite/gcc.dg/lto/pr117199_0.c
  6d71a1f58a218031bc3d4d7e09342e22  gcc/testsuite/gcc.dg/lto/pr117201_0.c
  5e48b5b5f991fe6ba63af683c6381505  gcc/testsuite/gcc.dg/lto/pr117288_0.c
+ f5f860d71dee47b53b433d6f33223758  gcc/testsuite/gcc.dg/lto/pr122515_0.c
+ 42ad058eb75d3c988533e8f8eecd45c5  gcc/testsuite/gcc.dg/lto/pr122515_1.c
+ c8348d97dcd57b983e2c4c696a5e8450  gcc/testsuite/gcc.dg/lto/pr122515_2.c
+ bc6aab4d748ab26c406bcfcfd94e43f4  gcc/testsuite/gcc.dg/lto/pr122515_3.c
+ b58dd1aaa3132751d46233b1e6a00a3e  gcc/testsuite/gcc.dg/lto/pr122515_4.c
+ e93496b3dab62466b11fccc4eb64033f  gcc/testsuite/gcc.dg/lto/pr122515_5.c
+ ce39b21091008775415dbe099db0aaf5  gcc/testsuite/gcc.dg/lto/pr122515_6.c
+ 7f03e9f210325e44859aafac7ad2f239  gcc/testsuite/gcc.dg/lto/pr122515_7.c
+ 6028a2dec4dfcb2bf14d8b228fb95959  gcc/testsuite/gcc.dg/lto/pr122515_8.c
+ ba260514a6f9ba02270018e5ccb3fc9c  gcc/testsuite/gcc.dg/lto/pr122515_9.c
  5192817b2492ca93ffadce3b4a5e4794  gcc/testsuite/gcc.dg/lto/pr27898_0.c
  c5f48897247dfaec60df4e32beffcd8e  gcc/testsuite/gcc.dg/lto/pr27898_1.c
  2ad724786bc4b555a7f31e8b3bf164b6  gcc/testsuite/gcc.dg/lto/pr28706_0.c
*************** b3bff2025ea2829f369b883345a9ac4d  gcc/te
*** 56166,56171 ****
--- 56213,56219 ----
  09c144492c54d8c957d2554d144ab1fe  gcc/testsuite/gcc.dg/pr113492.c
  2540e8b10d6e78d08e6fe572298fb0b7  gcc/testsuite/gcc.dg/pr113596.c
  78dd45f553f44492c5c325398210f4ec  gcc/testsuite/gcc.dg/pr113602.c
+ 54e0b10dfff1e49ad643460e0c38599e  gcc/testsuite/gcc.dg/pr113632.c
  df6f93c285d5bce25f758e2e93482ded  gcc/testsuite/gcc.dg/pr113659.c
  5fb0ea265bfa7fd7916b4541b551b5bc  gcc/testsuite/gcc.dg/pr113688.c
  57d872032d8ecee35cd1542ada8db1b5  gcc/testsuite/gcc.dg/pr113693.c
*************** a0e82361440276cacba8161b406fa08c  gcc/te
*** 56356,56361 ****
--- 56404,56411 ----
  596e137d1ef1fc5f142c61692ba512ae  gcc/testsuite/gcc.dg/pr121678.c
  6fcab1257c633aee2384f0d8fa3854e0  gcc/testsuite/gcc.dg/pr121921-1.c
  1268172e76401131acc77ad9fccb845f  gcc/testsuite/gcc.dg/pr121987.c
+ 3675df2622072bf0e5cccbf94e93a50f  gcc/testsuite/gcc.dg/pr122126_vextr.c
+ b975ebfa27ac446e553bacbb75421590  gcc/testsuite/gcc.dg/pr122126_vset.c
  ea90b28181a941740c845e0095310a27  gcc/testsuite/gcc.dg/pr122200.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
*************** bcd4b5d9c82e28d29459255dca15732c  gcc/te
*** 58126,58132 ****
  afa570e1edc03a94c45eb741b09cab0a  gcc/testsuite/gcc.dg/pr90756.c
  a5cf54d159902a526ee7923257cf4b92  gcc/testsuite/gcc.dg/pr90760.c
  1c5d999cbda5348ede38dd1e44c25c67  gcc/testsuite/gcc.dg/pr90838-2.c
! 81b44ab453a09a64e473e49022c941bc  gcc/testsuite/gcc.dg/pr90838.c
  e25de604fa47d4cbf21b04eb8d96eedc  gcc/testsuite/gcc.dg/pr90866-2.c
  1e31e24165ead8e639abcd53299950b0  gcc/testsuite/gcc.dg/pr90866.c
  e2ae67eb39b2578af8765a01c6e6dd08  gcc/testsuite/gcc.dg/pr90892.c
--- 58176,58182 ----
  afa570e1edc03a94c45eb741b09cab0a  gcc/testsuite/gcc.dg/pr90756.c
  a5cf54d159902a526ee7923257cf4b92  gcc/testsuite/gcc.dg/pr90760.c
  1c5d999cbda5348ede38dd1e44c25c67  gcc/testsuite/gcc.dg/pr90838-2.c
! beae814e6dc914f051a52e4cc97fc212  gcc/testsuite/gcc.dg/pr90838.c
  e25de604fa47d4cbf21b04eb8d96eedc  gcc/testsuite/gcc.dg/pr90866-2.c
  1e31e24165ead8e639abcd53299950b0  gcc/testsuite/gcc.dg/pr90866.c
  e2ae67eb39b2578af8765a01c6e6dd08  gcc/testsuite/gcc.dg/pr90892.c
*************** a53ed0c2a08c21b00c8d5487bbc823d7  gcc/te
*** 60143,60149 ****
--- 60193,60201 ----
  d4560440fd7b3647f8780537a59e4716  gcc/testsuite/gcc.dg/torture/pr122188.c
  fcc3a6f68a967a257f515d11f06532c2  gcc/testsuite/gcc.dg/torture/pr122212.c
  86ec8497180b8c6845f5efb789a8d30e  gcc/testsuite/gcc.dg/torture/pr122497-1.c
+ 9c3c67f35d37e9bc1f80a29aa6076d40  gcc/testsuite/gcc.dg/torture/pr122502-2.c
  d9ab318bf88df260c040cad6b5bc8c90  gcc/testsuite/gcc.dg/torture/pr122502.c
+ 71ac92084dafbcb1599ceaab894a55dd  gcc/testsuite/gcc.dg/torture/pr122599-1.c
  ded4330fd1cd52783bd9b1761db038ef  gcc/testsuite/gcc.dg/torture/pr16104-1.c
  fc265ee05da2f29f0e92804661cd1f28  gcc/testsuite/gcc.dg/torture/pr17526.c
  01c583edb41b632b835aa892b9c1cb14  gcc/testsuite/gcc.dg/torture/pr17933-1.c
*************** b52155a2e58c25fbabea9977d45c5677  gcc/te
*** 60196,60202 ****
  49f6a0851e080912fd19062f488cbc0f  gcc/testsuite/gcc.dg/torture/pr28045.c
  afdecf17af13f7482a9ea8034efdb7d5  gcc/testsuite/gcc.dg/torture/pr28230.c
  fbe642db16b19b53febbbec0c7658be4  gcc/testsuite/gcc.dg/torture/pr28268.c
! 8ab611a96c384922f3aab35d30f30d0c  gcc/testsuite/gcc.dg/torture/pr28814.c
  17758d320a330406d6d6b9da0e52672e  gcc/testsuite/gcc.dg/torture/pr28900.c
  01c896608ef1e0d48c4fabba4d2e5b61  gcc/testsuite/gcc.dg/torture/pr29119.c
  af880fd7ebbdfbb729ee37825f5025fe  gcc/testsuite/gcc.dg/torture/pr29446.c
--- 60248,60254 ----
  49f6a0851e080912fd19062f488cbc0f  gcc/testsuite/gcc.dg/torture/pr28045.c
  afdecf17af13f7482a9ea8034efdb7d5  gcc/testsuite/gcc.dg/torture/pr28230.c
  fbe642db16b19b53febbbec0c7658be4  gcc/testsuite/gcc.dg/torture/pr28268.c
! 126e761a8506e4df0e1899f24010f13c  gcc/testsuite/gcc.dg/torture/pr28814.c
  17758d320a330406d6d6b9da0e52672e  gcc/testsuite/gcc.dg/torture/pr28900.c
  01c896608ef1e0d48c4fabba4d2e5b61  gcc/testsuite/gcc.dg/torture/pr29119.c
  af880fd7ebbdfbb729ee37825f5025fe  gcc/testsuite/gcc.dg/torture/pr29446.c
*************** cb909e7812f73f90414b63042c95d199  gcc/te
*** 61922,61927 ****
--- 61974,61980 ----
  eb894750e8c2c762096d861a6009f51a  gcc/testsuite/gcc.dg/tree-ssa/forwprop-40.c
  de3171692db53449fdcaa8f1c1e1676c  gcc/testsuite/gcc.dg/tree-ssa/forwprop-41.c
  4c3d8a17c3c05c47aeb8205fb8aca518  gcc/testsuite/gcc.dg/tree-ssa/forwprop-42.c
+ e79a497d4614d3d2319f6c0f94ff5a31  gcc/testsuite/gcc.dg/tree-ssa/forwprop-43.c
  d56422e63543fcf4bf4b78d825c534da  gcc/testsuite/gcc.dg/tree-ssa/forwprop-5.c
  0f6dc2b3b3469af9cd27d5b5cd97353c  gcc/testsuite/gcc.dg/tree-ssa/forwprop-6.c
  a9096c4b5b756bdc9dcc196398730d73  gcc/testsuite/gcc.dg/tree-ssa/forwprop-7.c
*************** f4c56a02709c699f81b07b81dd1a2c1e  gcc/te
*** 62508,62513 ****
--- 62561,62567 ----
  1f4ed1b8fa56e5300281263805887fd0  gcc/testsuite/gcc.dg/tree-ssa/pr122033-2.c
  6564cdc8a2e0bef445546d4a4df278f9  gcc/testsuite/gcc.dg/tree-ssa/pr122153-1.c
  73226ac793de9237622d64ee6a7399cc  gcc/testsuite/gcc.dg/tree-ssa/pr122478.c
+ de81b2d2951773077a5d5e6d9db8a8e4  gcc/testsuite/gcc.dg/tree-ssa/pr122588-1.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
  eab19e0c04884cd782c9879cbe292109  gcc/testsuite/gcc.dg/tree-ssa/pr14341.c
  9945ed7002a5f7d4918e8ff5eb4cb647  gcc/testsuite/gcc.dg/tree-ssa/pr14490-1.c
*************** b6ce92f01b0a8720a15a8af7995a1dde  gcc/te
*** 64482,64488 ****
  53c115ab260300dfb7fb6a17a5b91fb9  gcc/testsuite/gcc.dg/vect/complex/complex-mla-template.c
  d296c18a5121519fc5fa6c393b6ca043  gcc/testsuite/gcc.dg/vect/complex/complex-mls-template.c
  62214c964d5fe67dd941ceaf38c0af04  gcc/testsuite/gcc.dg/vect/complex/complex-mul-template.c
- 470ca12a06e049b67c0f0a2ed5f247ba  gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
  b663bc81b4270defc2534ee4b697c313  gcc/testsuite/gcc.dg/vect/complex/complex-operations.c
  bcab411363bc3c2ec903bc891c30b398  gcc/testsuite/gcc.dg/vect/complex/complex.exp
  a76ed3fa83075708a8c8ca971851a15c  gcc/testsuite/gcc.dg/vect/complex/fast-math-bb-slp-complex-add-double.c
--- 64536,64541 ----
*************** ef1e47c49bc248403363127fd2733ae0  gcc/te
*** 64533,64538 ****
--- 64586,64592 ----
  bcb67819eb28363a86adad46990edf31  gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-int.c
  eb33c9aba50486ac13a7328fde376230  gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-long.c
  dc4950313316b732f84a3dbc6a45f70d  gcc/testsuite/gcc.dg/vect/complex/vect-complex-add-pattern-unsigned-short.c
+ 470ca12a06e049b67c0f0a2ed5f247ba  gcc/testsuite/gcc.dg/vect/complex/vect-complex-operations-run.c
  05fc220f1ddbdb4d47d859b5d07869e2  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-fast-math-vect-pr29925.c
  f69c055c238cc0217c98e86380f16061  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-31.c
  68ed88a7ee41dc1a8fca3bc8ec542481  gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c
*************** f1a49246f84d8fbab3d2b6aa5c89949e  gcc/te
*** 64978,64983 ****
--- 65032,65038 ----
  8cbd2daa28dcf298c1e79004b6ec12cf  gcc/testsuite/gcc.dg/vect/pr122023.c
  08c808506725be00bdf4d84893d5e2e2  gcc/testsuite/gcc.dg/vect/pr122158.c
  98753a41f3e4540c72096a83675cd6cc  gcc/testsuite/gcc.dg/vect/pr122419.c
+ e03974cf820416eaa10caff64b08ab41  gcc/testsuite/gcc.dg/vect/pr122475.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
  915cf38408eaa7fee5013d90ec1c3251  gcc/testsuite/gcc.dg/vect/pr18400.c
*************** ef0aa33c5f3ea85c398891ed13668325  gcc/te
*** 65856,65861 ****
--- 65911,65917 ----
  025744c3d46021403ca00270449bf8e6  gcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c
  154c42706e014b10ba6740d5b2ec9fb1  gcc/testsuite/gcc.dg/vect/vect-bool-1.c
  d0422c0263c295269585cec70422c7ad  gcc/testsuite/gcc.dg/vect/vect-bool-2.c
+ 8f28274cdb2e8ee92a556e4c19774a25  gcc/testsuite/gcc.dg/vect/vect-bool-3.c
  88ece9587087a3d3d1b4461a490bb1e1  gcc/testsuite/gcc.dg/vect/vect-bool-cmp-2.c
  82c9fa09f07b7ac0c20bd2080ce597ea  gcc/testsuite/gcc.dg/vect/vect-bool-cmp-3.c
  07295e97e2dfc59a2f69862dcdd70ce5  gcc/testsuite/gcc.dg/vect/vect-bool-cmp-4.c
*************** c3c69a71f2670cdbe2550868228987d2  gcc/te
*** 68244,68252 ****
  7b71af44f426c02a57a50cd617031d72  gcc/testsuite/gcc.target/aarch64/fmul_intrinsic_1.c
  465c5e93e0d87400182fa5e10e3467e7  gcc/testsuite/gcc.target/aarch64/fmul_lane_1.c
  182fe810e18e017fc4848760aa7c4615  gcc/testsuite/gcc.target/aarch64/fmul_scvtf_1.c
! 2e7714cf639e1d62162263ff11337e77  gcc/testsuite/gcc.target/aarch64/fmv_priority.in
! fd67f7113885f34480eb1b6e6ea6bf51  gcc/testsuite/gcc.target/aarch64/fmv_priority1.c
! aa2f91f4262e5a5339f11ebd5fa40232  gcc/testsuite/gcc.target/aarch64/fmv_priority2.c
  b075be33bb3dd3fe6cfc7fed03f4e7bd  gcc/testsuite/gcc.target/aarch64/fneg-abs_1.c
  f96e03a40f939bd623a2e40d36788b87  gcc/testsuite/gcc.target/aarch64/fneg-abs_2.c
  0d030dfc7300a0c8f233b0c19df84323  gcc/testsuite/gcc.target/aarch64/fneg-abs_3.c
--- 68300,68308 ----
  7b71af44f426c02a57a50cd617031d72  gcc/testsuite/gcc.target/aarch64/fmul_intrinsic_1.c
  465c5e93e0d87400182fa5e10e3467e7  gcc/testsuite/gcc.target/aarch64/fmul_lane_1.c
  182fe810e18e017fc4848760aa7c4615  gcc/testsuite/gcc.target/aarch64/fmul_scvtf_1.c
! 4b072ad4f5f24b3ae258dfeec3cf71fd  gcc/testsuite/gcc.target/aarch64/fmv_priority.in
! 676aefd4d27baa1c246f6b3c56b6214e  gcc/testsuite/gcc.target/aarch64/fmv_priority1.c
! 3d897ec851e12175c8d0dac7529b977d  gcc/testsuite/gcc.target/aarch64/fmv_priority2.c
  b075be33bb3dd3fe6cfc7fed03f4e7bd  gcc/testsuite/gcc.target/aarch64/fneg-abs_1.c
  f96e03a40f939bd623a2e40d36788b87  gcc/testsuite/gcc.target/aarch64/fneg-abs_2.c
  0d030dfc7300a0c8f233b0c19df84323  gcc/testsuite/gcc.target/aarch64/fneg-abs_3.c
*************** be30d927e2df67d4fe2786d0d026bbaa  gcc/te
*** 68848,68853 ****
--- 68904,68916 ----
  1f95766b4ed5bfb5f2cf1f168a607a8d  gcc/testsuite/gcc.target/aarch64/predefine_large.c
  d38e476730748c653068e7cb2d8d6ca6  gcc/testsuite/gcc.target/aarch64/predefine_small.c
  29e7dbfba15c0f945488b33400b908b4  gcc/testsuite/gcc.target/aarch64/predefine_tiny.c
+ da19e78ba6b795bf6d056fba82d425f7  gcc/testsuite/gcc.target/aarch64/preserve_none_1.c
+ e8cef49c693fcaea364b5c6a5f1b0ba5  gcc/testsuite/gcc.target/aarch64/preserve_none_2.c
+ 6666e04f1fc6734c26f86b5bcfb57eaa  gcc/testsuite/gcc.target/aarch64/preserve_none_3.c
+ 81531e915fe63718751a4ae5e0976253  gcc/testsuite/gcc.target/aarch64/preserve_none_4.c
+ ca87a92f658f31bd2868ad52e53005a1  gcc/testsuite/gcc.target/aarch64/preserve_none_5.c
+ 5fba9467f68256235ee9fec318000547  gcc/testsuite/gcc.target/aarch64/preserve_none_6.c
+ ed3b3e076aa90a5fdffe91d0217a74e8  gcc/testsuite/gcc.target/aarch64/preserve_none_mingw_1.c
  d0bcbc3d9ff4ecc6817a33d0d9f3aed3  gcc/testsuite/gcc.target/aarch64/prfm_imm_offset_1.c
  70cc2797179c765a9f3a6178b9cedc73  gcc/testsuite/gcc.target/aarch64/prfm_imm_offset_2.c
  86a8787839e88d2267f016ea88262ae8  gcc/testsuite/gcc.target/aarch64/profile.c
*************** cce0e0d17f23232b9c556c2da6266969  gcc/te
*** 68934,68939 ****
--- 68997,69003 ----
  57e434af27228fcb7e2c9f0c3879026b  gcc/testsuite/gcc.target/aarch64/simd/armv9p5.c
  72be1ebc64d79e94982f9d78b63cf762  gcc/testsuite/gcc.target/aarch64/simd/bcax_d.c
  0ec852a5bebc92dc4db3c9cef0bf4621  gcc/testsuite/gcc.target/aarch64/simd/bic_orn_1.c
+ 01b72f15b2160b080aed7f803e4707ac  gcc/testsuite/gcc.target/aarch64/simd/combine_ext.c
  16006fd02427e5686f254ac115ef7715  gcc/testsuite/gcc.target/aarch64/simd/eor3_d.c
  6aef5c8c46a252fab1f15291c3545ce4  gcc/testsuite/gcc.target/aarch64/simd/ext_f32.x
  ddc6725ef357d85f1e09e4c10067f0cd  gcc/testsuite/gcc.target/aarch64/simd/ext_f32_1.c
*************** a75e80a6f56f3083cb6d7d2db92cb36c  gcc/te
*** 74060,74066 ****
--- 74124,74132 ----
  ebb36b287466899ae93cef8461c6dc39  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-16.c
  edca110eb8b8a42667ca01f1e0d4aaf8  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-17.c
  bf992986a2da0a21868958cee0d10443  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-18.c
+ 9ced1e55612b89a283e2b6ea9cf544f2  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-19.c
  547dd9c0ba17b467338150696968e057  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-2.c
+ 81ad7f960099d07db1bd4733ebc4083c  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-20.c
  974136ef96e8b61574685039177914b1  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-3.c
  6d532b8553d36f2e590e6728927bb649  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-4.c
  55ec67030deaea7c01ba0643728aefa3  gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-5.c
*************** b39c0e6513279f1844d9242a3025b258  gcc/te
*** 76001,76006 ****
--- 76067,76073 ----
  8eefae5f99500e9e022dd899051be8c9  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-2.c
  c63670e596c246f3002a0f44ce341617  gcc/testsuite/gcc.target/arc/builtin_arc_aligned-3.c
  dff840d406fa0b5fbf3926a7ff2acda2  gcc/testsuite/gcc.target/arc/builtin_eh.c
+ 8b0e508a7e5d50f852a79f5b84ee4c74  gcc/testsuite/gcc.target/arc/builtin_fls_const.c
  f6f24cca348367d018fd26540705d2d6  gcc/testsuite/gcc.target/arc/builtin_general.c
  a174cff0daf5e9c6bdff55dd5c147b70  gcc/testsuite/gcc.target/arc/builtin_norm-1.c
  2fae32f7bc16961fe85e3b052588e81c  gcc/testsuite/gcc.target/arc/builtin_norm-2.c
*************** a529c2ffb799aba9d11091bc1d38ee4f  gcc/te
*** 76101,76106 ****
--- 76168,76174 ----
  012f554a21500528757f52f4fe9e6f6a  gcc/testsuite/gcc.target/arc/movbi_cl-1.c
  ea02e52a5a6f8e2ca3e8ad695065812f  gcc/testsuite/gcc.target/arc/movh_cl-1.c
  2e66e2adbfa68ec4f18f2f3cbc6da26b  gcc/testsuite/gcc.target/arc/movl-1.c
+ 4e91dc8406a53fb1ba577a128c8fcca5  gcc/testsuite/gcc.target/arc/movv2hi-be.c
  b28f6252aaf3288f7754a0c50786df34  gcc/testsuite/gcc.target/arc/mspfp.c
  2da9746a54337c45dfb1f4da6bd37fd5  gcc/testsuite/gcc.target/arc/mswape.c
  4ee070d89a7b3e774eaf40214625cf03  gcc/testsuite/gcc.target/arc/mul64-1.c
*************** ed8f53ad845cace075e82259961588c1  gcc/te
*** 76711,76720 ****
  07838a70a70c703269fa0783335a34b7  gcc/testsuite/gcc.target/arm/ivopts-5.c
  371c001d833d940cd40d8aa3fee9915d  gcc/testsuite/gcc.target/arm/ivopts-orig_biv-inc.c
  945ef3f3dcc8a43bf5273258fd73ecdf  gcc/testsuite/gcc.target/arm/ivopts.c
! 629878f590b6027b463fdc14a2b3bd9f  gcc/testsuite/gcc.target/arm/lceil-vcvt_1.c
  a38561d69fa262860777d4da466d538e  gcc/testsuite/gcc.target/arm/ldrd-strd-offset.c
  02b9352efc9d3dded38ac3a6281bcdd1  gcc/testsuite/gcc.target/arm/ldrd-strd-pair-1.c
! cd5d776718748bd9e5c15d1b763fac4a  gcc/testsuite/gcc.target/arm/lfloor-vcvt_1.c
  3b99d425390b2c010e9f67c320c6651b  gcc/testsuite/gcc.target/arm/lob.h
  30eb8bf7f61ddb2c4d5226a9bb14e1c7  gcc/testsuite/gcc.target/arm/lob1.c
  21a0d38f913fade2adb9df1b375a0b15  gcc/testsuite/gcc.target/arm/lob2.c
--- 76779,76788 ----
  07838a70a70c703269fa0783335a34b7  gcc/testsuite/gcc.target/arm/ivopts-5.c
  371c001d833d940cd40d8aa3fee9915d  gcc/testsuite/gcc.target/arm/ivopts-orig_biv-inc.c
  945ef3f3dcc8a43bf5273258fd73ecdf  gcc/testsuite/gcc.target/arm/ivopts.c
! f34b883201d67907215163e81a1e647d  gcc/testsuite/gcc.target/arm/lceil-vcvt_1.c
  a38561d69fa262860777d4da466d538e  gcc/testsuite/gcc.target/arm/ldrd-strd-offset.c
  02b9352efc9d3dded38ac3a6281bcdd1  gcc/testsuite/gcc.target/arm/ldrd-strd-pair-1.c
! b6d21b184b9363ec63310029743b3ec8  gcc/testsuite/gcc.target/arm/lfloor-vcvt_1.c
  3b99d425390b2c010e9f67c320c6651b  gcc/testsuite/gcc.target/arm/lob.h
  30eb8bf7f61ddb2c4d5226a9bb14e1c7  gcc/testsuite/gcc.target/arm/lob1.c
  21a0d38f913fade2adb9df1b375a0b15  gcc/testsuite/gcc.target/arm/lob2.c
*************** bf821309d2cd93b8c0d6b0704742bc45  gcc/te
*** 76727,76733 ****
  045075d4c4f653f51cab15b6c12b3e09  gcc/testsuite/gcc.target/arm/long-calls-3.c
  856b2cad766c5a53d737088d9056031b  gcc/testsuite/gcc.target/arm/long-calls-4.c
  bda0b982c40bee2fd28b1750fa6bc2bf  gcc/testsuite/gcc.target/arm/lp1189445.c
! b4f8ad85c07f7be61a90747a85bd0be4  gcc/testsuite/gcc.target/arm/lround-vcvt_1.c
  8d549d0367ca6688329df1257420972a  gcc/testsuite/gcc.target/arm/lto/lto.exp
  fd9597acaf90b4fc0a611739248cecea  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_0.c
  636cbd6b191957f3f94b3734e71688a5  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_1.c
--- 76795,76801 ----
  045075d4c4f653f51cab15b6c12b3e09  gcc/testsuite/gcc.target/arm/long-calls-3.c
  856b2cad766c5a53d737088d9056031b  gcc/testsuite/gcc.target/arm/long-calls-4.c
  bda0b982c40bee2fd28b1750fa6bc2bf  gcc/testsuite/gcc.target/arm/lp1189445.c
! 907fdd46667ce02cd530e6e361337e71  gcc/testsuite/gcc.target/arm/lround-vcvt_1.c
  8d549d0367ca6688329df1257420972a  gcc/testsuite/gcc.target/arm/lto/lto.exp
  fd9597acaf90b4fc0a611739248cecea  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_0.c
  636cbd6b191957f3f94b3734e71688a5  gcc/testsuite/gcc.target/arm/lto/pr61123-enum-size_1.c
*************** ad889dc702c92663961bc564b883d787  gcc/te
*** 79989,79995 ****
  05c3589a49c42a1f66dba99c2e67575f  gcc/testsuite/gcc.target/arm/volatile-bitfields-2.c
  f0d030e6fbffef2383334d1424090ccf  gcc/testsuite/gcc.target/arm/volatile-bitfields-3.c
  56d8ff7bdf563dcd918699bd8ae01ee9  gcc/testsuite/gcc.target/arm/volatile-bitfields-4.c
! ff14f375f3415d01a476840f37b062b0  gcc/testsuite/gcc.target/arm/vrinta-ce.c
  22c159438f9959b6666b395d5c6aecbe  gcc/testsuite/gcc.target/arm/vrintaf32.c
  c9f286d71ee58c4562f8ce595d9435f7  gcc/testsuite/gcc.target/arm/vrintaf64.c
  7ae924766d744675519935afb228f3db  gcc/testsuite/gcc.target/arm/vrintmf32.c
--- 80057,80063 ----
  05c3589a49c42a1f66dba99c2e67575f  gcc/testsuite/gcc.target/arm/volatile-bitfields-2.c
  f0d030e6fbffef2383334d1424090ccf  gcc/testsuite/gcc.target/arm/volatile-bitfields-3.c
  56d8ff7bdf563dcd918699bd8ae01ee9  gcc/testsuite/gcc.target/arm/volatile-bitfields-4.c
! 76aa87f069cd2a3471fd342b14dd01ec  gcc/testsuite/gcc.target/arm/vrinta-ce.c
  22c159438f9959b6666b395d5c6aecbe  gcc/testsuite/gcc.target/arm/vrintaf32.c
  c9f286d71ee58c4562f8ce595d9435f7  gcc/testsuite/gcc.target/arm/vrintaf64.c
  7ae924766d744675519935afb228f3db  gcc/testsuite/gcc.target/arm/vrintmf32.c
*************** a173627a728a3a28f74aa74c158b1ec4  gcc/te
*** 80243,80249 ****
  690d69546d72db49fcb1141d42087a75  gcc/testsuite/gcc.target/avr/torture/pr85624.c
  a09e14ca01139fcd5c0b1d1207a7dfe0  gcc/testsuite/gcc.target/avr/torture/pr87376.c
  5d2bc63be2e80e5f8c7eaa5b5c067aae  gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c
! 0d8d502c204ab4a95f6aa9fde8efcbe4  gcc/testsuite/gcc.target/avr/torture/pr92606.c
  bf4a21c7b034c6a9f298493a177f78cc  gcc/testsuite/gcc.target/avr/torture/pr98762.c
  21a45d34960ba9567b9f2483d22c843f  gcc/testsuite/gcc.target/avr/torture/progmem-1.c
  564c71a894aff68e98d5c4a6db2b47ae  gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp
--- 80311,80317 ----
  690d69546d72db49fcb1141d42087a75  gcc/testsuite/gcc.target/avr/torture/pr85624.c
  a09e14ca01139fcd5c0b1d1207a7dfe0  gcc/testsuite/gcc.target/avr/torture/pr87376.c
  5d2bc63be2e80e5f8c7eaa5b5c067aae  gcc/testsuite/gcc.target/avr/torture/pr88236-pr115726.c
! 5b81d3a02d06e237e2778e155887df2f  gcc/testsuite/gcc.target/avr/torture/pr92606.c
  bf4a21c7b034c6a9f298493a177f78cc  gcc/testsuite/gcc.target/avr/torture/pr98762.c
  21a45d34960ba9567b9f2483d22c843f  gcc/testsuite/gcc.target/avr/torture/progmem-1.c
  564c71a894aff68e98d5c4a6db2b47ae  gcc/testsuite/gcc.target/avr/torture/progmem-1.cpp
*************** eeb2c795579e4b693eed6b471e041925  gcc/te
*** 85522,85527 ****
--- 85590,85624 ----
  eb024e3b157728adf6d4f14b1bd4c69d  gcc/testsuite/gcc.target/i386/builtin-fabs-2.c
  83540904d3592a74a85860a8850ad325  gcc/testsuite/gcc.target/i386/builtin-has-attribute.c
  c9f542098c7044c5b8ac4b18be20d199  gcc/testsuite/gcc.target/i386/builtin-issignaling-1.c
+ ca049dba246647f466b555cffb5f9965  gcc/testsuite/gcc.target/i386/builtin-memmove-10.c
+ 2a909144f356c6abe5101ec9e2880e24  gcc/testsuite/gcc.target/i386/builtin-memmove-11a.c
+ ca4ac7cac7f4e2b202119db822204403  gcc/testsuite/gcc.target/i386/builtin-memmove-11b.c
+ 8c5a3a00914eebf9c467039b0b0987b6  gcc/testsuite/gcc.target/i386/builtin-memmove-11c.c
+ 54fcc4020c47dc36da532c4160b9ac7c  gcc/testsuite/gcc.target/i386/builtin-memmove-12.c
+ 05b0d32979110b5ab3fd318ac565c8cf  gcc/testsuite/gcc.target/i386/builtin-memmove-13.c
+ e581bb0a3fb7e1eadbb5e26f9c5c052c  gcc/testsuite/gcc.target/i386/builtin-memmove-14.c
+ 1d87b6b25a81ad08639d03f16914edf9  gcc/testsuite/gcc.target/i386/builtin-memmove-15.c
+ b3d1977118e8680a2aa93f5ff59f54af  gcc/testsuite/gcc.target/i386/builtin-memmove-1a.c
+ 91dc1ae7b1d3070536b853d79edb3060  gcc/testsuite/gcc.target/i386/builtin-memmove-1b.c
+ c7486eacb8f21a9faa7a88250552d23b  gcc/testsuite/gcc.target/i386/builtin-memmove-1c.c
+ 6bdd536952c2a8eb5975c34eebd15a0e  gcc/testsuite/gcc.target/i386/builtin-memmove-1d.c
+ f73a93ec62af5ae41a5046bcc328c0be  gcc/testsuite/gcc.target/i386/builtin-memmove-2a.c
+ 5e9483d04c4a21df8b31d28648afaeaf  gcc/testsuite/gcc.target/i386/builtin-memmove-2b.c
+ de3164ecd3be295985d7aadbc5f41a0a  gcc/testsuite/gcc.target/i386/builtin-memmove-2c.c
+ b8bd69970a6b76026107ef7ba02ae2ba  gcc/testsuite/gcc.target/i386/builtin-memmove-2d.c
+ a538fe2d8abdd7fa19fa485990726483  gcc/testsuite/gcc.target/i386/builtin-memmove-3a.c
+ e0fe444ebdf0dd4dc4e547345b869e96  gcc/testsuite/gcc.target/i386/builtin-memmove-3b.c
+ 55f3f7a4602bcb5dc5b779fd88212679  gcc/testsuite/gcc.target/i386/builtin-memmove-3c.c
+ 0415fd8e64b63a61e4d5289c4af50fd5  gcc/testsuite/gcc.target/i386/builtin-memmove-4a.c
+ 89992b12904103593be6d4e1562973a6  gcc/testsuite/gcc.target/i386/builtin-memmove-4b.c
+ 84c4509c935b8caa039b51c612657711  gcc/testsuite/gcc.target/i386/builtin-memmove-4c.c
+ f0ee0e5daef7ee8c6951c3cfbecf1139  gcc/testsuite/gcc.target/i386/builtin-memmove-5a.c
+ cbc44aa23dbce368b5bad58ae5527dcc  gcc/testsuite/gcc.target/i386/builtin-memmove-5b.c
+ c36a1c5fbd04d1c977fd48a82c782b23  gcc/testsuite/gcc.target/i386/builtin-memmove-5c.c
+ 67ced6d25a48687099d02468966de034  gcc/testsuite/gcc.target/i386/builtin-memmove-6.c
+ ee4f3b3c9dd2fc966fd73009122dc04a  gcc/testsuite/gcc.target/i386/builtin-memmove-7.c
+ a21a2135b5311d84b5e4be4d33156711  gcc/testsuite/gcc.target/i386/builtin-memmove-8.c
+ b41d9e6002dd46f3c6c0d6d39dea37ee  gcc/testsuite/gcc.target/i386/builtin-memmove-9.c
  07c7b1b786ccb4b67484b353aa40d9c7  gcc/testsuite/gcc.target/i386/builtin-ucmp.c
  c8f91a97e3f4734a3595572bab26a3e7  gcc/testsuite/gcc.target/i386/builtin-unreachable.c
  55be2ef508fc3d2430c006ffb361f6b6  gcc/testsuite/gcc.target/i386/builtin_target.c
*************** ae9cefa4d949ae63e9380aeb14fae221  gcc/te
*** 87426,87433 ****
--- 87523,87533 ----
  ff0a586f8aaac7078fb79402d3f0df4b  gcc/testsuite/gcc.target/i386/pr122320-mask4.c
  9a861d0f957f59a5dc5e7cafeddd1343  gcc/testsuite/gcc.target/i386/pr122320-mask64.c
  f6a03ec739c3c632b84006aa8e240dae  gcc/testsuite/gcc.target/i386/pr122320-mask8.c
+ a23e3aee9cb7b8d2fe5895c930cac402  gcc/testsuite/gcc.target/i386/pr122390-1.c
+ 160b6bb9cb1df1775f284996fcddbc62  gcc/testsuite/gcc.target/i386/pr122390.c
  beaa59876937a489a8ce9f276a586c83  gcc/testsuite/gcc.target/i386/pr122457.c
  b5fef8fb540e17f32442a50d6ee40f1e  gcc/testsuite/gcc.target/i386/pr122518.c
+ 93c2651b636b33af98942b4d04ed3a85  gcc/testsuite/gcc.target/i386/pr122534.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
*************** edff9e226673b891726d5eea3e541e34  gcc/te
*** 89531,89537 ****
  4c0d248ab3aafed2f2b94f6389657ab5  gcc/testsuite/gcc.target/i386/shift-v16qi-4.c
  11a4bd4138e7963e0cd81b6e0197cfe6  gcc/testsuite/gcc.target/i386/shift_mask.c
  b39a3b78ac05770ba2a7d8dbc79d20ff  gcc/testsuite/gcc.target/i386/shrink-wrap-separate-mingw.c
! f858aa5fd5dada286b5f5b92a2f85d77  gcc/testsuite/gcc.target/i386/shrink_wrap_1.c
  7e3a3c43c01a63ddc2a276fb376d9486  gcc/testsuite/gcc.target/i386/shrink_wrap_separate_check_lea.c
  db687b7347e27fd960300505daa014ee  gcc/testsuite/gcc.target/i386/shuf-concat.c
  2a6e1d7c1d6cc43b2c0c5bc706ded8a7  gcc/testsuite/gcc.target/i386/sibcall-1.c
--- 89631,89637 ----
  4c0d248ab3aafed2f2b94f6389657ab5  gcc/testsuite/gcc.target/i386/shift-v16qi-4.c
  11a4bd4138e7963e0cd81b6e0197cfe6  gcc/testsuite/gcc.target/i386/shift_mask.c
  b39a3b78ac05770ba2a7d8dbc79d20ff  gcc/testsuite/gcc.target/i386/shrink-wrap-separate-mingw.c
! c61417c2c76f6531fd55ba0d9dd50c27  gcc/testsuite/gcc.target/i386/shrink_wrap_1.c
  7e3a3c43c01a63ddc2a276fb376d9486  gcc/testsuite/gcc.target/i386/shrink_wrap_separate_check_lea.c
  db687b7347e27fd960300505daa014ee  gcc/testsuite/gcc.target/i386/shuf-concat.c
  2a6e1d7c1d6cc43b2c0c5bc706ded8a7  gcc/testsuite/gcc.target/i386/sibcall-1.c
*************** fdc09cb25851254e708f2d7b35b30157  gcc/te
*** 90672,90677 ****
--- 90772,90778 ----
  a6d76184ab8ab5eabc181a864d04aac5  gcc/testsuite/gcc.target/loongarch/add-const.c
  50a420804148a8a49953e00f95110c7d  gcc/testsuite/gcc.target/loongarch/alsl-cost.c
  c16fea0d740f8946249d8d3ff6230152  gcc/testsuite/gcc.target/loongarch/alsl_wu.c
+ 15ee798ecf70fcf1ff54f0779a16f074  gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c
  78d4e82afd447d6a8daeacd48e58bc86  gcc/testsuite/gcc.target/loongarch/arch-func-attr-1.c
  09e65435c71217bb197e267e1389d15f  gcc/testsuite/gcc.target/loongarch/arch-pragma-attr-1.c
  39f421554134b131cd8ad8f5f2b6e2a1  gcc/testsuite/gcc.target/loongarch/attr-check-error-message.c
*************** a0974c41c2d76b1294fb1d2efc48bd2f  gcc/te
*** 90742,90747 ****
--- 90843,90849 ----
  b90d585b99c59a2e3f6f7cce1bac5d6a  gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-auto-tls-ld-gd.c
  aaabc24a35d397c6567d048e65a87c90  gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c
  ad5117326114603de5f0e93ecd058244  gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c
+ b3b1176da6306a0ff9bbd0410c4995b3  gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c
  119ee122b14ed99349ce1179d5100a0e  gcc/testsuite/gcc.target/loongarch/fclass-compile.c
  2adb5c2fba43850d5c2b753f7a75ef1b  gcc/testsuite/gcc.target/loongarch/fclass-run.c
  ddf9ecd0daf6d14ef98de40e7fd68f34  gcc/testsuite/gcc.target/loongarch/fcopysign.c
*************** ff0e2aebfb4d1d5589a93141d243ada3  gcc/te
*** 90780,90786 ****
  6649897103ef58074cf4038c9f752b73  gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c
  6ab9f24cca6a9ec8103e6ba80f494143  gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c
  b9e59385233aedda5e9e3d95bfa2f29c  gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c
! 20eb2c7e6db324194da4ebec3b44baf8  gcc/testsuite/gcc.target/loongarch/imm-load.c
  d7a3a4b5e884b4ba96b4ba493eb19316  gcc/testsuite/gcc.target/loongarch/imm-load1.c
  c74ac6255a37860200cb087c773ff537  gcc/testsuite/gcc.target/loongarch/invariant-recip.c
  5ba70284a6a6ec5af264e116cc217292  gcc/testsuite/gcc.target/loongarch/jump-table-annotate.c
--- 90882,90888 ----
  6649897103ef58074cf4038c9f752b73  gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c
  6ab9f24cca6a9ec8103e6ba80f494143  gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c
  b9e59385233aedda5e9e3d95bfa2f29c  gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c
! 1ca3c467f8697ea29a6e96864e967c97  gcc/testsuite/gcc.target/loongarch/imm-load.c
  d7a3a4b5e884b4ba96b4ba493eb19316  gcc/testsuite/gcc.target/loongarch/imm-load1.c
  c74ac6255a37860200cb087c773ff537  gcc/testsuite/gcc.target/loongarch/invariant-recip.c
  5ba70284a6a6ec5af264e116cc217292  gcc/testsuite/gcc.target/loongarch/jump-table-annotate.c
*************** dd89cf931606852d264a068d0da89f48  gcc/te
*** 90794,90799 ****
--- 90896,90902 ----
  50e5afd436ad3b4f977fbbe4b5538229  gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-1.c
  906d80bea4f1077ff428fa3626503bcb  gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-2.c
  de06cc3da65946f38baaa81bb163fca6  gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c
+ 253049b59bb1e2fdd28eb33f646c488d  gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c
  dc97748644c9f046ca9df34db59dd8fc  gcc/testsuite/gcc.target/loongarch/loongarch.exp
  d4c4c9d0b9ae0369cd930c837d2425b7  gcc/testsuite/gcc.target/loongarch/lsx-andn-iorn.c
  4000dc14b31fce222ef708b8954c6b31  gcc/testsuite/gcc.target/loongarch/lsx-func-attr-1.c
*************** d4c4c9d0b9ae0369cd930c837d2425b7  gcc/te
*** 90801,90814 ****
--- 90904,90920 ----
  7fcb4a95a2d9dce2bbad3443335383e2  gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-1.c
  2ff50940f45f70c1c0e511eeb9f27d97  gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-2.c
  6fd3a91ad4fcbff919f3f7121bd94819  gcc/testsuite/gcc.target/loongarch/math-float-128.c
+ 6c85cdc89871ad17739456446ddcbeab  gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c
  9fb3b8610b37b8332c61ea243a7f7eef  gcc/testsuite/gcc.target/loongarch/memcpy-vec-1.c
  f8e85c0fabedb15da4e203ea4c1d6792  gcc/testsuite/gcc.target/loongarch/memcpy-vec-2.c
  9bdb8bae55f19f1a7d359c4bf87a4ba8  gcc/testsuite/gcc.target/loongarch/memcpy-vec-3.c
+ 99b1919a6979934ee049264960691fb7  gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c
  99145c3f37b9ab131e0ed0ffe3cb707d  gcc/testsuite/gcc.target/loongarch/mov-zero-1.c
  e26420568eb59260ac109ca747ecbf46  gcc/testsuite/gcc.target/loongarch/mov-zero-2.c
  4931eef8fe508d14b75d3631fe8bbafc  gcc/testsuite/gcc.target/loongarch/movcf2gr-via-fr.c
  bb6ea01b244f2c3e617730a44580a7bc  gcc/testsuite/gcc.target/loongarch/movcf2gr.c
  d23b33973d13d263ab78b5b4e0b94ef3  gcc/testsuite/gcc.target/loongarch/mul-const-reduction.c
+ a81bb88e2af3a8501ccdfe54556bf467  gcc/testsuite/gcc.target/loongarch/mulh_wu.c
  ab8d85a261f0846c278e2d6db2c6ab77  gcc/testsuite/gcc.target/loongarch/mulw_d_w.c
  a82bd0c91438f0a8e295e7cb52d0c28d  gcc/testsuite/gcc.target/loongarch/mulw_d_wu.c
  fd0c004c00698c398646c63b4784aec2  gcc/testsuite/gcc.target/loongarch/popcnt.c
*************** da965754e87b0f0ce1cc22b3fbb7298a  gcc/te
*** 90868,90878 ****
--- 90974,90989 ----
  f46bb4d68c80f94cd959f7aefc8389e4  gcc/testsuite/gcc.target/loongarch/shrink-wrap.c
  294f8a20e4eec5c0c40de71226677399  gcc/testsuite/gcc.target/loongarch/sign-extend-1.c
  ff53d68fc0f97e1b389fbdfc6b733d9e  gcc/testsuite/gcc.target/loongarch/sign-extend-2.c
+ 3205391a09a9ea1564d339b7462d3608  gcc/testsuite/gcc.target/loongarch/sign-extend-3.c
+ 6368cb5faa231e38fa7ec80586084a64  gcc/testsuite/gcc.target/loongarch/sign-extend-4.c
+ 32bfdab51a9d5ec46f98aa105f20cad2  gcc/testsuite/gcc.target/loongarch/sign-extend-5.c
+ 91be18c4ce300ca642ff3c3d69ce4acc  gcc/testsuite/gcc.target/loongarch/sign-extend-6.c
  503978ebbda9df9f9d2896d9898ab7b0  gcc/testsuite/gcc.target/loongarch/sign-extend-bitwise.c
  6f84ea4a3d11d3be47a589d544ec42f5  gcc/testsuite/gcc.target/loongarch/sign_extend_ashift.c
  969f8c63d5313b0ef2802d00df27886a  gcc/testsuite/gcc.target/loongarch/slt-sign-extend.c
  bf64f97d74ef11f20bfde63932d56667  gcc/testsuite/gcc.target/loongarch/smuldi3_highpart.c
  e1615ec0889043a33798fc33df9c0c5e  gcc/testsuite/gcc.target/loongarch/smulsi3_highpart.c
+ 2f74f2f5fe892da58b8f6baf6aa297c8  gcc/testsuite/gcc.target/loongarch/spill-less.c
  803ffb89ba4bbdbdb90c999bf781d4cc  gcc/testsuite/gcc.target/loongarch/sqrtf.c
  3df56316dc4cc5cf945f0b9f6e4238db  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-1.c
  7b5305d29424075188fad0ef59ab43f4  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-2.c
*************** d3511a1f030e8253dbf6b20c73d33105  gcc/te
*** 90908,90921 ****
  bb57d24452eb2fea309f990edfa5de1c  gcc/testsuite/gcc.target/loongarch/umulsi3_highpart.c
  20592e6b1e8a0f3b8742b7beb0f51ae2  gcc/testsuite/gcc.target/loongarch/va_arg.c
  bbbc51cc2b6669a160c181fc1ab12412  gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_128.c
! fe27736a5c22d2b3c8ae857ee379248b  gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c
  13cec58c7391a5cef41368197f850947  gcc/testsuite/gcc.target/loongarch/vect-extract.c
! b6bfa37f9af27452a2a4b02fe436d406  gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c
! da64d29140771aaa088d1e71efc3c471  gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c
! 8fed305a623c3d8aa8671e2f1ca58806  gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c
! 5b7d4139ebfdb98e583f6b953ed4a02c  gcc/testsuite/gcc.target/loongarch/vect-frint.c
! 27009f16c075543914978dfab3406875  gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c
! e54bae204bdb1c4dc0d6593893901a8f  gcc/testsuite/gcc.target/loongarch/vect-ftint.c
  e174ae75eabb1baa10e7ef9e75e93275  gcc/testsuite/gcc.target/loongarch/vect-ld-st-imm12.c
  537c2448576790bc3b9448c2a930f5f0  gcc/testsuite/gcc.target/loongarch/vect-muh.c
  1f7b7228148fe23bb98c9ae0d151646c  gcc/testsuite/gcc.target/loongarch/vect-rotr.c
--- 91019,91032 ----
  bb57d24452eb2fea309f990edfa5de1c  gcc/testsuite/gcc.target/loongarch/umulsi3_highpart.c
  20592e6b1e8a0f3b8742b7beb0f51ae2  gcc/testsuite/gcc.target/loongarch/va_arg.c
  bbbc51cc2b6669a160c181fc1ab12412  gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_128.c
! 70483635c3588614c2e0a2041be7876c  gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c
  13cec58c7391a5cef41368197f850947  gcc/testsuite/gcc.target/loongarch/vect-extract.c
! e938ebb81df2ed0b44e7fabc3afc2107  gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c
! 28d0cf4f00f5bdd8404d0daedaac3307  gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c
! a065ef972535f71ed1b7b9d5a37c43be  gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c
! 179412aced110fd38bdd89629658990a  gcc/testsuite/gcc.target/loongarch/vect-frint.c
! 2edf870f7beff0da25d59180ebfb5e0c  gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c
! f6f3d1bdc697b2c550948539a48d2ed4  gcc/testsuite/gcc.target/loongarch/vect-ftint.c
  e174ae75eabb1baa10e7ef9e75e93275  gcc/testsuite/gcc.target/loongarch/vect-ld-st-imm12.c
  537c2448576790bc3b9448c2a930f5f0  gcc/testsuite/gcc.target/loongarch/vect-muh.c
  1f7b7228148fe23bb98c9ae0d151646c  gcc/testsuite/gcc.target/loongarch/vect-rotr.c
*************** c4a5bf3904159f6c4f6e17ee0da90889  gcc/te
*** 90927,90933 ****
  3ed720b4bc387e4269bf3226dd3fdfe5  gcc/testsuite/gcc.target/loongarch/vect-widen-sub.c
  a78d6c1fd79f5c1d8a67aa38a8dc8943  gcc/testsuite/gcc.target/loongarch/vector-func-attr-1.c
  58826efcc90333c707edc8514608dfc0  gcc/testsuite/gcc.target/loongarch/vector-pragma-attr-1.c
! 82d89dd9b72fa18cc532f758e7a3de51  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c
  fe6faa6ba0306efed8c468b31f250333  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-divf.c
  63c0a41070b08339598b12401f6f0275  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-frecipe-builtin.c
  269e58b3141de7803fd2da2ee4583a7c  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-recip-divf.c
--- 91038,91044 ----
  3ed720b4bc387e4269bf3226dd3fdfe5  gcc/testsuite/gcc.target/loongarch/vect-widen-sub.c
  a78d6c1fd79f5c1d8a67aa38a8dc8943  gcc/testsuite/gcc.target/loongarch/vector-func-attr-1.c
  58826efcc90333c707edc8514608dfc0  gcc/testsuite/gcc.target/loongarch/vector-pragma-attr-1.c
! e76c202c8341e3db8dceb097f5fb590e  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c
  fe6faa6ba0306efed8c468b31f250333  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-divf.c
  63c0a41070b08339598b12401f6f0275  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-frecipe-builtin.c
  269e58b3141de7803fd2da2ee4583a7c  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-recip-divf.c
*************** eb7720d1ee0f7dde86471e1b8ad3b82f  gcc/te
*** 91146,91151 ****
--- 91257,91268 ----
  41959494be952fe2706930c383d4bb72  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvsubwod-2.c
  601d1dad0996e42f64abfcea74b57e97  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvxor.c
  2b866f80af5cafa566ed2bbd75936c79  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvxori.c
+ 590522d9e3f47096ccc8e0a658c2812f  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256-result.c
+ be2f81347a1bc18228cbe68f8a6676df  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256.c
+ 4978a46fd91b35d00996d6af20419bc4  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128-result.c
+ afb34e017ce38a8c38b1f7c758f72da6  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128.c
+ d67d0b2dd1af9cfdc8605e911d35033d  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256-result.c
+ 77fb9fd3de6fc5b3b1a643753b89d93c  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256.c
  d26741a5156634ff29c61fea114bc141  gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp
  5d55305c4d66b32dd004f424d4a0a0fb  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-abs.c
  e9f9a02f0c23d753d9f3a17d45f85db1  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-builtin.c
*************** c08e307370de6dd5122f517ca9b88bd3  gcc/te
*** 91364,91370 ****
  6ec0b39b5b4b1a97f39db6ffa8466e62  gcc/testsuite/gcc.target/loongarch/vrepli.c
  a005b26aa548eee07a39a18e458d0abc  gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-1.c
  c1d9bd83ec7fb2ffe482949572f2b0d3  gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-2.c
! 435ecc6bf3bdf44b71d9d56c8d3fc036  gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c
  85b7855a23d37a98585aa5df332a0722  gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-unsigned.c
  10ce9c8f9619651c9d46b51e45ae26da  gcc/testsuite/gcc.target/loongarch/xorsign-run.c
  9b099d473b8bfb835da7cb656ac3e3f3  gcc/testsuite/gcc.target/loongarch/xorsign.c
--- 91481,91487 ----
  6ec0b39b5b4b1a97f39db6ffa8466e62  gcc/testsuite/gcc.target/loongarch/vrepli.c
  a005b26aa548eee07a39a18e458d0abc  gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-1.c
  c1d9bd83ec7fb2ffe482949572f2b0d3  gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-2.c
! da307b3ed6f25b19b64faf3b5b9c456e  gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c
  85b7855a23d37a98585aa5df332a0722  gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-unsigned.c
  10ce9c8f9619651c9d46b51e45ae26da  gcc/testsuite/gcc.target/loongarch/xorsign-run.c
  9b099d473b8bfb835da7cb656ac3e3f3  gcc/testsuite/gcc.target/loongarch/xorsign.c
*************** bbd1992756a4c4fe9d76f64a98906a99  gcc/te
*** 94196,94202 ****
  1a34cb04196163f6d0a2e3709cc44498  gcc/testsuite/gcc.target/powerpc/rldimi.h
  0b98b15bfe27a9531df238b5d463e141  gcc/testsuite/gcc.target/powerpc/rlwimi-0.c
  2e2e5c64753a3b7795f80767d6dcafa7  gcc/testsuite/gcc.target/powerpc/rlwimi-1.c
! 0c3e4164fb0b167d67ef2c5b562a311e  gcc/testsuite/gcc.target/powerpc/rlwimi-2.c
  070c5b1cc8767dba79b14177a49b6c62  gcc/testsuite/gcc.target/powerpc/rlwimi.h
  cb9311ea78ac15dc0539eca763a2e985  gcc/testsuite/gcc.target/powerpc/rlwinm-0.c
  bbfaa45598e85e85311c592cd3685c70  gcc/testsuite/gcc.target/powerpc/rlwinm-1.c
--- 94313,94319 ----
  1a34cb04196163f6d0a2e3709cc44498  gcc/testsuite/gcc.target/powerpc/rldimi.h
  0b98b15bfe27a9531df238b5d463e141  gcc/testsuite/gcc.target/powerpc/rlwimi-0.c
  2e2e5c64753a3b7795f80767d6dcafa7  gcc/testsuite/gcc.target/powerpc/rlwimi-1.c
! 3912c03f1d277e71a8ed7b841789773d  gcc/testsuite/gcc.target/powerpc/rlwimi-2.c
  070c5b1cc8767dba79b14177a49b6c62  gcc/testsuite/gcc.target/powerpc/rlwimi.h
  cb9311ea78ac15dc0539eca763a2e985  gcc/testsuite/gcc.target/powerpc/rlwinm-0.c
  bbfaa45598e85e85311c592cd3685c70  gcc/testsuite/gcc.target/powerpc/rlwinm-1.c
*************** cd709a10461254ddf2db66c3d68f0ea1  gcc/te
*** 95245,95250 ****
--- 95362,95387 ----
  2fd1f87bd278901534285a57812f87d2  gcc/testsuite/gcc.target/riscv/_Float16-zhinxmin-4.c
  3ff3e986a97f4269e8ce353c4d141360  gcc/testsuite/gcc.target/riscv/_Float16.c
  5728414c152ee60b1244ec815d886d4f  gcc/testsuite/gcc.target/riscv/__bf16-nanboxing.c
+ 0cfdc07acceee424bc655ccb693726aa  gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-1.c
+ b575b2237dc9a77e278ba7542ff78aa1  gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-2.c
+ d8713b1117dde94d4267571bbb989106  gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-3.c
+ 3086d6d838454c98b3b708c48b7018c5  gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-4.c
+ 474b1ecf53f04d466d872ffc0ff74140  gcc/testsuite/gcc.target/riscv/abi/empty-struct-1.c
+ 721bd41b4c077a8714b91d9f2df325d2  gcc/testsuite/gcc.target/riscv/abi/empty-struct-10.c
+ 0fb40a84190c25281b6f54471a3ae39f  gcc/testsuite/gcc.target/riscv/abi/empty-struct-11.c
+ ec83bb39b50a227cf46fe26bbe15f2f1  gcc/testsuite/gcc.target/riscv/abi/empty-struct-12.c
+ 0fa834ff9cdad61c19364b0abce41223  gcc/testsuite/gcc.target/riscv/abi/empty-struct-2.c
+ fc20762b9bff6ab11eb9a14b3e232ca8  gcc/testsuite/gcc.target/riscv/abi/empty-struct-3.c
+ 8fc01206b67801489ded6b65e0b6387a  gcc/testsuite/gcc.target/riscv/abi/empty-struct-4.c
+ d983e99999e28de158c7765bddefeaa7  gcc/testsuite/gcc.target/riscv/abi/empty-struct-5.c
+ 8982ca01eba30b34b9d6a64295399440  gcc/testsuite/gcc.target/riscv/abi/empty-struct-6.c
+ 4cfaba5ab9ae28b0e0363c0e1f03dccd  gcc/testsuite/gcc.target/riscv/abi/empty-struct-7.c
+ 0fe46c098c4b7de812563a3f0aaf071e  gcc/testsuite/gcc.target/riscv/abi/empty-struct-8.c
+ 8c861603152f93c12da6e26599ffcb1e  gcc/testsuite/gcc.target/riscv/abi/empty-struct-9.c
+ e98f2d19ed80ab018f96ccb526890413  gcc/testsuite/gcc.target/riscv/abi/empty-union-1.c
+ 721df8213c987d55dc1efd55bfbafae1  gcc/testsuite/gcc.target/riscv/abi/empty-union-2.c
+ 7d48ff4649bb5427ff973053ef53e5d2  gcc/testsuite/gcc.target/riscv/abi/empty-union-3.c
+ 53023d2cb0d32036037f60841e0d7247  gcc/testsuite/gcc.target/riscv/abi/empty-union-4.c
  e576467327b6885418c9d8748492593a  gcc/testsuite/gcc.target/riscv/add-synthesis-1.c
  615a0e0c970edc01fb1779359e6d4069  gcc/testsuite/gcc.target/riscv/add-synthesis-2.c
  d93c3e1c3636a89154ff39eafab30b70  gcc/testsuite/gcc.target/riscv/adddibeq.c
*************** fe7b0d6a20bcf36ecad16f21e83f9bd1  gcc/te
*** 95823,95828 ****
--- 95960,95966 ----
  ecd6e84eb56477df4903f802ee263ba9  gcc/testsuite/gcc.target/riscv/cv-simd-xor-h-compile-1.c
  a4c468f0dabef5849f00b0ea4f2d7f34  gcc/testsuite/gcc.target/riscv/cv-simd-xor-sc-b-compile-1.c
  17b7c1576f018ab4efdccb6753514ad2  gcc/testsuite/gcc.target/riscv/cv-simd-xor-sc-h-compile-1.c
+ 46e194f9e717407cdd4260454ee4b571  gcc/testsuite/gcc.target/riscv/czero-bext.c
  32eaba242b02f0d41f419865f53ea9a3  gcc/testsuite/gcc.target/riscv/divmod-1.c
  563117792f9d6ea0cadd47fbafeed890  gcc/testsuite/gcc.target/riscv/divmod-2.c
  5436f7a25300f600f9163405e8836b6f  gcc/testsuite/gcc.target/riscv/ext-dce-1.c
*************** d8e76b4cd45daa82499151eedc966298  gcc/te
*** 96318,96323 ****
--- 96456,96462 ----
  0cdcf97373ed486ded9f3c10ef04348d  gcc/testsuite/gcc.target/riscv/pr120714.c
  f87f98ceea03639b9d09f120d310a5b9  gcc/testsuite/gcc.target/riscv/pr120811.c
  6437d8ec53cc1530c20baacd9ca47eba  gcc/testsuite/gcc.target/riscv/pr121113.c
+ b0a08bcc636090d105d825a0a3d1b159  gcc/testsuite/gcc.target/riscv/pr121136.c
  25c459137bd9938c72fff727f3c7b5d4  gcc/testsuite/gcc.target/riscv/pr121160.c
  0b64699a31b25d6d22c6908dabe89a74  gcc/testsuite/gcc.target/riscv/pr121531.c
  772299c8bb90d3144f704368bdbc7dff  gcc/testsuite/gcc.target/riscv/pr121778-1.c
*************** bc59de83765bb844925a1922677b3910  gcc/te
*** 96331,96336 ****
--- 96470,96476 ----
  0f5f042a5df3f42e8e3634b538a557e9  gcc/testsuite/gcc.target/riscv/pr122114.c
  cddeabddc47c1e2e434be321884dbb80  gcc/testsuite/gcc.target/riscv/pr122147.c
  37a08389ba95284cc27832767dfc1430  gcc/testsuite/gcc.target/riscv/pr43644.c
+ 8eba488c3d26a288644785954ea86af2  gcc/testsuite/gcc.target/riscv/pr52345.c
  db206807e7e87fc388e039471812c6e0  gcc/testsuite/gcc.target/riscv/pr58727.c
  ae7832d0dbfbabb51f555f2e9c3138bc  gcc/testsuite/gcc.target/riscv/pr64345.c
  9a44cd39f0fe595fcf632b001e4b7d12  gcc/testsuite/gcc.target/riscv/pr67731.c
*************** fc3ba1bab139687a4821b5159329f0f5  gcc/te
*** 96412,96418 ****
  bfe26b189e1e97e1aed9586d1a3cb44d  gcc/testsuite/gcc.target/riscv/redundant-ori.c
  b580f8dab6f61b557391fae5ccca96f0  gcc/testsuite/gcc.target/riscv/reg_subreg_costs.c
  e8ebc752cb2e6780fd9c69554a100b3e  gcc/testsuite/gcc.target/riscv/ret-1.c
! d2ba5d477727955f263602f1c81e6b36  gcc/testsuite/gcc.target/riscv/riscv.exp
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/riscv_vector.h
  ed620c4f55825e25a83e8fdf8b8790fd  gcc/testsuite/gcc.target/riscv/round.c
  f954ad3d5990ac59183db40e044ebb5b  gcc/testsuite/gcc.target/riscv/round_64.c
--- 96552,96558 ----
  bfe26b189e1e97e1aed9586d1a3cb44d  gcc/testsuite/gcc.target/riscv/redundant-ori.c
  b580f8dab6f61b557391fae5ccca96f0  gcc/testsuite/gcc.target/riscv/reg_subreg_costs.c
  e8ebc752cb2e6780fd9c69554a100b3e  gcc/testsuite/gcc.target/riscv/ret-1.c
! 600d0bb81375e286edadf5f39ed2e302  gcc/testsuite/gcc.target/riscv/riscv.exp
  979e78c5ed1d2ba91a46584480362b26  gcc/testsuite/gcc.target/riscv/riscv_vector.h
  ed620c4f55825e25a83e8fdf8b8790fd  gcc/testsuite/gcc.target/riscv/round.c
  f954ad3d5990ac59183db40e044ebb5b  gcc/testsuite/gcc.target/riscv/round_64.c
*************** eda1f0d5c82c50988ede53858da3cabd  gcc/te
*** 97183,97188 ****
--- 97323,97335 ----
  cbc44c5c7fa77e3f0d3efc55779bba4b  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121781.c
  ca9ef4de6ed36716b972a6b4efc63e85  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121845.c
  357366e34138686786040d7711285496  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121910.c
+ 4391e6797005cb9bdd7698ba6f01b338  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-1.c
+ 1385d31da5b11692f4c684335afd7eef  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-2.c
+ 403ae1b13c73ca937a46464ccd97b4d4  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-3.c
+ 040be8cae021f68719b780ccd836b646  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-4.c
+ ff34ed0a7c5ef570af53aaf279c855c0  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-5.c
+ b8902d3044b75540ee1f52c004853935  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-run-1.c
+ e69ac673a560685af831869d72b01154  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959.h
  505e3d028e24b575ded98597fbccdbfd  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122124.c
  e990c042b373d09f16b69f4b30f0ac20  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122321.c
  a46c21828339f41cac3054a662eefb70  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122445.c
*************** dd58b7a375ca415fa00dec0460c50c24  gcc/te
*** 98792,98816 ****
  f8449da573246d363e4443b9f32f0f06  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
  4abdc71a4d78eff367f15f9be04fb7fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
  b231dddff3540c987b251cf413e96a0c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
! 36a134ffcfb36efd28e0552acf2d3336  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! 96e8935819891e0d4235977406d78440  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! 3e58d2068625261b3c22dfb2e3aa41f2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
  4bd4d8465912fd31ef999b199164b3c7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
  97a4318491ad584290f2b2bef781322e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
  935c9835493916f219759aed3d339ec9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
  59608a9e1c34d3e1d054335c9a90bd97  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
  b1a59a3d1b37b0c7a1ff38505ab7a17b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! cf159763d31526004ebd59c5345a5296  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! 48bbedaf2970f121258d2a4714e5eabf  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! 20cd54f7873e0f6d5a2a5d56533d80b6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
  d1b35f2120d5335127cbce417dff6c98  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
  769f16086c2330f7eed8a44c27fa3c3b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
  e9accde0ee3be9cea5d61ed620a02fff  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
  3dcfb7e0adab0b03f0b2f2534ea342c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
  0f06236cd498b25686910d051c5a135a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! 0d9f8dbe0d2ffaab9eccdce62fa67d0c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! 868d3693ec0b78dd2a2ff794de5e1f96  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! 9679c875dfe78722c59f458ef7f41351  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
  66f491f5982578d81d43f48cb849b7e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
  ddbdedd0bcd1b2f07c63e57ea3edd7f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
  ecb91086db90af95d3f46740e36b1ce2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
--- 98939,98963 ----
  f8449da573246d363e4443b9f32f0f06  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
  4abdc71a4d78eff367f15f9be04fb7fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
  b231dddff3540c987b251cf413e96a0c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
! c753cfeab3166cdff6130cea027bedda  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
! 60448e64d048feab9cecc572d9429141  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
! 9e25345f25ec6ed66a6337c9ead1b355  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
  4bd4d8465912fd31ef999b199164b3c7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
  97a4318491ad584290f2b2bef781322e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
  935c9835493916f219759aed3d339ec9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
  59608a9e1c34d3e1d054335c9a90bd97  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
  b1a59a3d1b37b0c7a1ff38505ab7a17b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
! c7ea61b43e1fc89aac59f53e4e16197f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
! 4aea84d65dcda9a6431a6d88638c23ce  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
! 5f1c5beb1ceb02e553b097fc07b7cc11  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
  d1b35f2120d5335127cbce417dff6c98  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
  769f16086c2330f7eed8a44c27fa3c3b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
  e9accde0ee3be9cea5d61ed620a02fff  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
  3dcfb7e0adab0b03f0b2f2534ea342c1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
  0f06236cd498b25686910d051c5a135a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
! 7c010ef8e790f6da8525aacc0fefec05  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
! 0897b3fbf1cf51a37076e87ac4816313  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
! 903b8c2002126b98abbc68ee09180b7b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
  66f491f5982578d81d43f48cb849b7e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u8.c
  ddbdedd0bcd1b2f07c63e57ea3edd7f9  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i16.c
  ecb91086db90af95d3f46740e36b1ce2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-4-i32.c
*************** e0a029ed9e4f9f4ab4383ebb4a63f046  gcc/te
*** 99024,99029 ****
--- 99171,99177 ----
  0e5d7afeb387b9c36c90fcf1d8fd7134  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsub-run-1-u64.c
  d8e11260f6cbaa9942a95a889d2d3dcd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vsub-run-1-u8.c
  cd9582a571be922d7f5168551101aad8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwaddu-run-1-u64.c
+ 2da13652edcde5941995c901f9ba3fe2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmaccu-run-1-u64.c
  7227b4aa0c31514a16902df6b7f2b746  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmulu-run-1-u64.c
  ad1022e3817bd53fd617f6f5d70c099e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwsubu-run-1-u64.c
  a0289a49fbec6d012c69ed3175a98cc5  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-i16.c
*************** a0289a49fbec6d012c69ed3175a98cc5  gcc/te
*** 99034,99041 ****
  8f2d02d5d8980d2c4e052c4379664339  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u32.c
  8d7233deaa2c5490a9767684770727ae  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u64.c
  840249b053ac4f1f4bb99aa3c0ecdc82  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u8.c
! fc0aa3bd7527efefaf136ad65a7a0584  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h
! 3bdccb85bd8d14f5ab8de9c5120f7bd3  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h
  817a372ed3135f20efb96a1ef454973c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_vx_run.h
  91e3cccb4807b06cfb9b970d64abd56a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h
  68c2c33e731d54fe3dbede7e8039c3fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c
--- 99182,99189 ----
  8f2d02d5d8980d2c4e052c4379664339  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u32.c
  8d7233deaa2c5490a9767684770727ae  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u64.c
  840249b053ac4f1f4bb99aa3c0ecdc82  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vxor-run-1-u8.c
! 042f499f6f2875387a35ceff604c562d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h
! 5b6b67defbdc3e91c7af0a868e29d490  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h
  817a372ed3135f20efb96a1ef454973c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_vx_run.h
  91e3cccb4807b06cfb9b970d64abd56a  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_wx_run.h
  68c2c33e731d54fe3dbede7e8039c3fc  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/wx_vwaddu-run-1-u64.c
*************** c68a73138459484ead0cddce6ce27d08  gcc/te
*** 99760,99766 ****
  0ea7fc8373cc416a901c6d640c340d2f  gcc/testsuite/gcc.target/riscv/rvv/base/pr118540-2.c
  eaed30eccbeb952165411cfd2c789b72  gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
  96272d16f134fa97f27114f27089793a  gcc/testsuite/gcc.target/riscv/rvv/base/pr118931-run-1.c
! b8ddadeddd15bd6f079e943b9036825d  gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c
  abe5cb852d5c8b368720c2010f7dde5c  gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
  3086321c9a12d3eecd8f1f9ad8ecac7a  gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c
  250f19182eb5aac9b6a01d7c594e8f5f  gcc/testsuite/gcc.target/riscv/rvv/base/pr122270-1.c
--- 99908,99914 ----
  0ea7fc8373cc416a901c6d640c340d2f  gcc/testsuite/gcc.target/riscv/rvv/base/pr118540-2.c
  eaed30eccbeb952165411cfd2c789b72  gcc/testsuite/gcc.target/riscv/rvv/base/pr118872.c
  96272d16f134fa97f27114f27089793a  gcc/testsuite/gcc.target/riscv/rvv/base/pr118931-run-1.c
! 9e9d5697b1d1ba9cb4041f8ebf17039b  gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c
  abe5cb852d5c8b368720c2010f7dde5c  gcc/testsuite/gcc.target/riscv/rvv/base/pr119164.c
  3086321c9a12d3eecd8f1f9ad8ecac7a  gcc/testsuite/gcc.target/riscv/rvv/base/pr120436.c
  250f19182eb5aac9b6a01d7c594e8f5f  gcc/testsuite/gcc.target/riscv/rvv/base/pr122270-1.c
*************** b094c95e67c7236f65fdb03707497d4f  gcc/te
*** 101695,101700 ****
--- 101843,101849 ----
  55464a1a60268f3df9e4c34893965e56  gcc/testsuite/gcc.target/riscv/smin.c
  6bdd3e0dc6b0f53ca23248ab17fdebaa  gcc/testsuite/gcc.target/riscv/sminf-ieee.c
  ff5bbc31f569f4e1b8286fe3e8f4153b  gcc/testsuite/gcc.target/riscv/sminf.c
+ 66e4f2f8f9704c3bf9d940e3ac922074  gcc/testsuite/gcc.target/riscv/snez.c
  cff495903638733441945501e9bd26a2  gcc/testsuite/gcc.target/riscv/ssp-1.c
  84381e92e922deea2f324e0fdee58532  gcc/testsuite/gcc.target/riscv/ssp-2.c
  b0e5d3a4a7cc05529173660fe2976220  gcc/testsuite/gcc.target/riscv/stack-check-12.c
*************** a44209b4b22b50ba22251b2901229b35  gcc/te
*** 108467,108472 ****
--- 108616,108624 ----
  291144a665a881ed73c245a048408de6  gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_2.f03
  63268580aa4691498e32913a93d4c74e  gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_3.f03
  d2341b7ea8968ac02843b2dcb31e3e80  gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_4.f03
+ df4655cdf0da8093c3495e5877ee9173  gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_5.f90
+ 8f2be3ec4b7bad3787c333ced3c30747  gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_6.f90
+ 44f92878d8c6c52798e461918976dd97  gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_7.f90
  4d1758fe9739756fdf38a4fc8d5687bb  gcc/testsuite/gfortran.dg/alloc_comp_default_init_1.f90
  3ac49823c9b600313f371a6ed0f57568  gcc/testsuite/gfortran.dg/alloc_comp_default_init_2.f90
  bb1218e53c344866c49d1bec5ea6f283  gcc/testsuite/gfortran.dg/alloc_comp_init_expr.f03
*************** cfb56bed1db04d96734deed0393fb2a1  gcc/te
*** 108786,108792 ****
  f3a0a84d4a4a1d1fba1105d21046304c  gcc/testsuite/gfortran.dg/array_initializer_2.f90
  2b4bef0c22c911f907559277d9291ac5  gcc/testsuite/gfortran.dg/array_initializer_3.f90
  021599e65323169090e12174251e8a88  gcc/testsuite/gfortran.dg/array_memcpy_1.f90
! 6db23df20fcfa5ffcb500ca0fd0be821  gcc/testsuite/gfortran.dg/array_memcpy_2.f90
  8765b47c330e73bab802dd963be5347e  gcc/testsuite/gfortran.dg/array_memcpy_3.f90
  bf6adc4a22ea07b1ef96cd964979323f  gcc/testsuite/gfortran.dg/array_memcpy_4.f90
  b6760654ceec06f2d9d8da1fb2905d41  gcc/testsuite/gfortran.dg/array_memcpy_5.f90
--- 108938,108944 ----
  f3a0a84d4a4a1d1fba1105d21046304c  gcc/testsuite/gfortran.dg/array_initializer_2.f90
  2b4bef0c22c911f907559277d9291ac5  gcc/testsuite/gfortran.dg/array_initializer_3.f90
  021599e65323169090e12174251e8a88  gcc/testsuite/gfortran.dg/array_memcpy_1.f90
! c10f6e3d819439ff21c4c62df821a4fb  gcc/testsuite/gfortran.dg/array_memcpy_2.f90
  8765b47c330e73bab802dd963be5347e  gcc/testsuite/gfortran.dg/array_memcpy_3.f90
  bf6adc4a22ea07b1ef96cd964979323f  gcc/testsuite/gfortran.dg/array_memcpy_4.f90
  b6760654ceec06f2d9d8da1fb2905d41  gcc/testsuite/gfortran.dg/array_memcpy_5.f90
*************** fc500f0e1e015dc2b1ccf8395cd8f271  gcc/te
*** 109502,109507 ****
--- 109654,109661 ----
  2b3338eacfff7cc2972bf1ab2bbbc35d  gcc/testsuite/gfortran.dg/c-interop/pr103390-7.f90
  bd423adafd725c2228e295920c0db510  gcc/testsuite/gfortran.dg/c-interop/pr103390-8.f90
  7a18ab512bbfa99610eab9a334ac7e3c  gcc/testsuite/gfortran.dg/c-interop/pr103390-9.f90
+ b683abf61ea06d7efc3e4062b47b0cc5  gcc/testsuite/gfortran.dg/c-interop/pr113338-c.c
+ 4ee30ba0bc2fe3e733eb7b12ab782b15  gcc/testsuite/gfortran.dg/c-interop/pr113338.f90
  018d95c070c83cb9218fee64ae6c8a08  gcc/testsuite/gfortran.dg/c-interop/rank-class.f90
  5d109d67e9b883cd251cc70baa52140c  gcc/testsuite/gfortran.dg/c-interop/rank.f90
  62fad9ceb8076e8ceaf3276465cad430  gcc/testsuite/gfortran.dg/c-interop/removed-restrictions-1.f90
*************** d8441305cc895069c13e58f9c1ac4a87  gcc/te
*** 112295,112300 ****
--- 112449,112461 ----
  9c2ce128fe51a9730eeae1c0fbc874c7  gcc/testsuite/gfortran.dg/gomp/pr121452-3.f90
  e08b5cb5191d39e48e3ab1627a6218e0  gcc/testsuite/gfortran.dg/gomp/pr122306-1.f90
  e3b3c69a2373d8201d048f4a790adc2d  gcc/testsuite/gfortran.dg/gomp/pr122306-2.f90
+ 2b5d02b88f2eb6639bfe155113a237ae  gcc/testsuite/gfortran.dg/gomp/pr122369-1.f90
+ 9da7fda92bce49d154e8d89e5eba94e1  gcc/testsuite/gfortran.dg/gomp/pr122369-2.f90
+ e4bbe444c8eb024e8bf626c941dab7fb  gcc/testsuite/gfortran.dg/gomp/pr122369-3.f90
+ c5e8d48c22353973cc8de5fcf02acbc7  gcc/testsuite/gfortran.dg/gomp/pr122369-4.f90
+ e9d70b4aa944dcb0ee140243cbe8d9c5  gcc/testsuite/gfortran.dg/gomp/pr122508-1.f90
+ b6b48bf58535134c6b2959754f728508  gcc/testsuite/gfortran.dg/gomp/pr122508-2.f90
+ c5dea1d96afbb344ea6c43b443c11e89  gcc/testsuite/gfortran.dg/gomp/pr122570.f
  9a6817790a272cd8153d4303d324c00f  gcc/testsuite/gfortran.dg/gomp/pr26224.f
  d2c74a71f2bea0005d853821e6f0142c  gcc/testsuite/gfortran.dg/gomp/pr27573.f90
  a65c4577a606ba1bdab50e690b269b04  gcc/testsuite/gfortran.dg/gomp/pr29759.f90
*************** e8c4c8bb9c03a99a4368a372096fdfb9  gcc/te
*** 114157,114162 ****
--- 114318,114326 ----
  a4dd26f2891055a5842e6732191c51f8  gcc/testsuite/gfortran.dg/pdt_63.f03
  bd24b2acc55e464c3c06d5812e34478e  gcc/testsuite/gfortran.dg/pdt_64.f03
  9d6cb27f1bfd7fd4a30c1c828a28b2d6  gcc/testsuite/gfortran.dg/pdt_65.f03
+ c05f9d42843923ff0207255c3c60c7eb  gcc/testsuite/gfortran.dg/pdt_66.f03
+ 726eb58b6e3de0c02eb2e26cb07fb5fd  gcc/testsuite/gfortran.dg/pdt_67.f03
+ a5f0e5f6d1a0cf4437ef6c2b7d002852  gcc/testsuite/gfortran.dg/pdt_68.f03
  d2c9dae0c6e2385c5712aba8e12a70ba  gcc/testsuite/gfortran.dg/pdt_7.f03
  e21f38a2db39f95405441b61c12cf1e6  gcc/testsuite/gfortran.dg/pdt_8.f03
  c621629f10feffbfa9fef1441a610e53  gcc/testsuite/gfortran.dg/pdt_9.f03
*************** b1cb2c9a52574c2df5df49bd13ee7e5d  gcc/te
*** 114471,114476 ****
--- 114635,114642 ----
  94f286710243a0388de6f82a32d72ca5  gcc/testsuite/gfortran.dg/pr120743.f90
  9a63937be6d5e03574fd9c46968454c5  gcc/testsuite/gfortran.dg/pr121234.f90
  6be9000a862f8c64a384c1727d879f04  gcc/testsuite/gfortran.dg/pr121627.f90
+ 6df685f9b4cb8f7874082b4e9d9e61f5  gcc/testsuite/gfortran.dg/pr122513-2.f90
+ b6e7e7e8bea9878d7980ddcd5a97c5f5  gcc/testsuite/gfortran.dg/pr122513.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
  e9cbd51db4e16292fc5dd1fead2e5a49  gcc/testsuite/gfortran.dg/pr15140.f90
*************** a3aafda888b314cbe8fd57998d9b3641  gcc/te
*** 119738,119743 ****
--- 119904,119912 ----
  a6e35afa831e08d00bea9f8dd9d1c5cc  gcc/testsuite/gnat.dg/class_wide4_pkg.ads
  6f0b71d19accf04ffe787577bc890101  gcc/testsuite/gnat.dg/class_wide4_pkg2.ads
  2041db616468910158f99f72a9467b90  gcc/testsuite/gnat.dg/class_wide5.adb
+ 76d437e51eee910f469c26e9bde381f4  gcc/testsuite/gnat.dg/class_wide6.adb
+ ec8339b01391b60c0097685c5640b366  gcc/testsuite/gnat.dg/class_wide6.ads
+ 69008c4722213db2b99481e08565903b  gcc/testsuite/gnat.dg/class_wide6_pkg.ads
  ac267a2812409b3404f6c1aeba441861  gcc/testsuite/gnat.dg/compile_time_error1.adb
  57fc90e8cb732f14dd016b721d2f642f  gcc/testsuite/gnat.dg/compile_time_error1.ads
  700f4e47ddc89d253b13b2580930d21d  gcc/testsuite/gnat.dg/compile_time_error1_pkg.ads
*************** cb1449549fbec08e3825194300068909  gcc/te
*** 120185,120190 ****
--- 120354,120362 ----
  9e7293f7fd3655a8da0bb7b827baa897  gcc/testsuite/gnat.dg/generic_inst14.adb
  da22f29f94ebe295441ccc41597913b0  gcc/testsuite/gnat.dg/generic_inst14_pkg-child.ads
  29969c1ad7978ac871e75cd3b2d99efd  gcc/testsuite/gnat.dg/generic_inst14_pkg.ads
+ 723ce0ce8ad5f32a4545060ea1497dcd  gcc/testsuite/gnat.dg/generic_inst15.adb
+ 8cdbeaa75ec1a34f9425e5de9b2c48ce  gcc/testsuite/gnat.dg/generic_inst15_pkg-g.ads
+ 8a0469f67965b0510cf7ae79d1408f8b  gcc/testsuite/gnat.dg/generic_inst15_pkg.ads
  bfa8ba450e641250f8eccf95997dd260  gcc/testsuite/gnat.dg/generic_inst2.adb
  063cf5c93b1a85bf617a62be0da63bdb  gcc/testsuite/gnat.dg/generic_inst2.ads
  2faefd507420ceafdccad8d472e66202  gcc/testsuite/gnat.dg/generic_inst2_c.ads
*************** ca98602bd726e6e8ddbebb3c4b65f0a8  gcc/te
*** 121072,121077 ****
--- 121244,121252 ----
  064d12236a5c1215b72e88bd09d6696a  gcc/testsuite/gnat.dg/prefix1.ads
  44b1484811be62cb2477a1085cf56d34  gcc/testsuite/gnat.dg/prefix2.adb
  32f82de6508bf8f6a0d20f850f638498  gcc/testsuite/gnat.dg/prefix2.ads
+ fbfc5611002ff9c704db3269f5fcabd2  gcc/testsuite/gnat.dg/prefix3.adb
+ add304a2cd2d59821dea899362093069  gcc/testsuite/gnat.dg/prefix3_pkg.adb
+ 1d9b1884739f5fc32ffdca914ea90992  gcc/testsuite/gnat.dg/prefix3_pkg.ads
  1cd7dd16873b27f1e5bc896924554185  gcc/testsuite/gnat.dg/private_overriding.adb
  67fc1f73b2e24628841b19a37424a4dd  gcc/testsuite/gnat.dg/profile_warning.adb
  3be6aedb24cbe63f63ad93e27d8946b1  gcc/testsuite/gnat.dg/profile_warning.ads
*************** f010d95f371dbccc1be8c51d48eb4db5  gcc/te
*** 121106,121111 ****
--- 121281,121287 ----
  ce1ec39ed99de56ced45d8b9f86bc85a  gcc/testsuite/gnat.dg/protected_null.adb
  e6da11fd6483154a13820d7470de4efb  gcc/testsuite/gnat.dg/protected_self_ref1.adb
  bffe9a3ac9d57a27e4b093a45da1b8bf  gcc/testsuite/gnat.dg/protected_self_ref2.adb
+ 62202830fb6c22f702d33b1d441e5bdb  gcc/testsuite/gnat.dg/protected_subtype1.adb
  75bce0278f16cfe77a4b103d59d4add4  gcc/testsuite/gnat.dg/pure_function1.adb
  16af05a0ec944108ab97d67c7b40ffdf  gcc/testsuite/gnat.dg/pure_function1.ads
  e0718db21208bd252d027916a866bcae  gcc/testsuite/gnat.dg/pure_function2.adb
*************** b08ade850be1a0a80325c1a93e9c9043  gcc/te
*** 121157,121162 ****
--- 121333,121341 ----
  0278c64b189f758651064d6a8aeac4db  gcc/testsuite/gnat.dg/renaming16_pkg.ads
  5eaaed2371da7238ac1bdfe70068edcc  gcc/testsuite/gnat.dg/renaming17.adb
  b500c932c841816b5021e1c75ea367c9  gcc/testsuite/gnat.dg/renaming18.adb
+ c5efcc4f060d2f0a4631ae36d5810188  gcc/testsuite/gnat.dg/renaming19.adb
+ 752a692645433e09b387d74d8d38f17e  gcc/testsuite/gnat.dg/renaming19_pkg.adb
+ b0079ceab1606d08d1276fc014b7e6e2  gcc/testsuite/gnat.dg/renaming19_pkg.ads
  3afb13f37cfc3455f0f0be64d053892f  gcc/testsuite/gnat.dg/renaming2.adb
  1a954da0b1e7e11673319b058eb82146  gcc/testsuite/gnat.dg/renaming3.adb
  9c415422ce59266c9af89e8d3fd1df74  gcc/testsuite/gnat.dg/renaming4.ads
*************** a724a65c9f2a5cf8ecec2c03607a451a  gcc/te
*** 121259,121264 ****
--- 121438,121444 ----
  db841c4103c0b74b3177994b8f223338  gcc/testsuite/gnat.dg/spark2.adb
  b12025d6da94678d017aff1a1210338a  gcc/testsuite/gnat.dg/spark2.ads
  e61a107864022f528a267703547c0a10  gcc/testsuite/gnat.dg/spark3.adb
+ 0b088f7d001ace31eb2c1cec4f871f29  gcc/testsuite/gnat.dg/specs/abstract1.ads
  0655d24f018576946af2af51c7ca3f5e  gcc/testsuite/gnat.dg/specs/abstract_limited.ads
  3f1656a8b66dfdcd71ad2e3f365bcaa1  gcc/testsuite/gnat.dg/specs/abstract_private.ads
  436c4150f98e2b211eb1d9cd00f49698  gcc/testsuite/gnat.dg/specs/access1.ads
*************** e63c264218dd1c2dc831e7d0283b1f18  gcc/te
*** 121325,121330 ****
--- 121505,121511 ----
  74bd24da39fc0a795240eaa56746b666  gcc/testsuite/gnat.dg/specs/discr5.ads
  e4392f7b06cad4011c1b8d6b8192bc34  gcc/testsuite/gnat.dg/specs/discr6.ads
  53c16b267b914c115c6ecaf74af068f2  gcc/testsuite/gnat.dg/specs/discr7.ads
+ 215b4cb743d920f65fa2e41a7dceeb5b  gcc/testsuite/gnat.dg/specs/discr8.ads
  a78fb7cbf02009e1325caab8c3a179c2  gcc/testsuite/gnat.dg/specs/double_record_extension1.ads
  7b07a208cf739b0fe10deedba049a3bc  gcc/testsuite/gnat.dg/specs/double_record_extension2.ads
  35336c4ca96cbe852e268dc958a45791  gcc/testsuite/gnat.dg/specs/double_record_extension3.ads
*************** fb3162e1e6a376d7c08844580159f732  gcc/te
*** 121369,121374 ****
--- 121550,121559 ----
  d0cb31bf0b8e3cd0e3dc700f0accb597  gcc/testsuite/gnat.dg/specs/generic_inst6_pkg3.ads
  6f8060e304c62d67ba464421147c0dc2  gcc/testsuite/gnat.dg/specs/generic_inst7.ads
  3c9c5180751fdabe5a5c34ad71c62a0d  gcc/testsuite/gnat.dg/specs/generic_inst8.ads
+ 603dc7bb96a67a45149a57c792b3a9b8  gcc/testsuite/gnat.dg/specs/generic_inst9.ads
+ 6c443910afd1ea91afe5c30f9aa19915  gcc/testsuite/gnat.dg/specs/generic_inst9_pkg1.ads
+ 0fdb30fec451477236ccab80a698d186  gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2-g.ads
+ b379cdb5941ac871a72d8418d0795beb  gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2.ads
  484402f090540a3714934de7a830cc2f  gcc/testsuite/gnat.dg/specs/genericppc.ads
  5fadbbff25531c82473d756d722cd174  gcc/testsuite/gnat.dg/specs/gnati.ads
  f0f859863b2bb6251359cf35dc6ffbf5  gcc/testsuite/gnat.dg/specs/iface_eq_test-child.ads
*************** e79713b5757a3f8a05926964d5c26b04  gcc/te
*** 121378,121385 ****
  bb0e77998b46620c791eef69edc120e4  gcc/testsuite/gnat.dg/specs/interface5.ads
  2964ca5392547150aa2109dc092cc2e2  gcc/testsuite/gnat.dg/specs/last_bit.ads
  843de13b4d5cc30db54743bb74dedbf4  gcc/testsuite/gnat.dg/specs/limited1.ads
! f1e4623f01bee0dbc4135d608ad4e311  gcc/testsuite/gnat.dg/specs/limited_with4.ads
! f8ce8abd47440a8ef0caa15042246467  gcc/testsuite/gnat.dg/specs/limited_with4_pkg.ads
  5ca7e9884e00c38a3fcb9117d299b396  gcc/testsuite/gnat.dg/specs/linker_alias.ads
  5a8043c489b5a93e81c2d3ae4b7347c4  gcc/testsuite/gnat.dg/specs/linker_section.ads
  dd066b85e801f4e3550fdee77334f998  gcc/testsuite/gnat.dg/specs/loop_optimization1.ads
--- 121563,121573 ----
  bb0e77998b46620c791eef69edc120e4  gcc/testsuite/gnat.dg/specs/interface5.ads
  2964ca5392547150aa2109dc092cc2e2  gcc/testsuite/gnat.dg/specs/last_bit.ads
  843de13b4d5cc30db54743bb74dedbf4  gcc/testsuite/gnat.dg/specs/limited1.ads
! 47a2a1ac65eb1d05179f5b5e883e3e1b  gcc/testsuite/gnat.dg/specs/limited_with1.ads
! c6a3adc27e1a0ad870d8ad5bc97cca72  gcc/testsuite/gnat.dg/specs/limited_with1_pkg.ads
! b537fdb6d08e70a4a9d52849869d7769  gcc/testsuite/gnat.dg/specs/limited_with2-child1.ads
! 1785a516aed141278b3ae8ff8b2fa746  gcc/testsuite/gnat.dg/specs/limited_with2-child2.ads
! b5db75c3e893265140fda7b901376d2f  gcc/testsuite/gnat.dg/specs/limited_with2.ads
  5ca7e9884e00c38a3fcb9117d299b396  gcc/testsuite/gnat.dg/specs/linker_alias.ads
  5a8043c489b5a93e81c2d3ae4b7347c4  gcc/testsuite/gnat.dg/specs/linker_section.ads
  dd066b85e801f4e3550fdee77334f998  gcc/testsuite/gnat.dg/specs/loop_optimization1.ads
*************** a3b42c057449bd7a2264e8b26a74f2d3  gcc/te
*** 121901,121906 ****
--- 122089,122098 ----
  0be620055c94064f491efaae19cdebea  gcc/testsuite/gnat.dg/vect17.ads
  9ad8e3c0bd2394501db2ab8d4d6969c5  gcc/testsuite/gnat.dg/vect18.adb
  061f8b3edbdb38a5059a5f71b88e29b3  gcc/testsuite/gnat.dg/vect18.ads
+ 08a62b0b5eb23f8760f350a2108f2aac  gcc/testsuite/gnat.dg/vect19.adb
+ 501312a1b6ddd567f8144281c4f69ae6  gcc/testsuite/gnat.dg/vect19.ads
+ a8518609bafba77ecdb911225a9b3058  gcc/testsuite/gnat.dg/vect19_pkg.adb
+ fa7e22d86edf9126f6f2c15020748c22  gcc/testsuite/gnat.dg/vect19_pkg.ads
  aba88b50a3b92ff875cca1546236f2ef  gcc/testsuite/gnat.dg/vect1_pkg.ads
  2f22ddf34c5d49dc6ca69c13a8e95b71  gcc/testsuite/gnat.dg/vect2.adb
  53cb8d8d9568f464e3c9b0238adc3420  gcc/testsuite/gnat.dg/vect2.ads
*************** a658e6e3511698723b87be3277ba706d  gcc/te
*** 124235,124241 ****
  450868d4f15f0faade8c693e132ee071  gcc/testsuite/lib/go.exp
  569a9bbf0bbca4b3648f90532f4b4b21  gcc/testsuite/lib/htmltest.py
  8699bdd60911dccd7ce56e96f4032646  gcc/testsuite/lib/hwasan-dg.exp
! 0fc3c9996c992caced4cf2071cceba21  gcc/testsuite/lib/lto.exp
  645e8af17b334c4e279636a7b47dacbe  gcc/testsuite/lib/mike-g++.exp
  b2d617c3a17f3ed4084a60722369c3a8  gcc/testsuite/lib/mike-gcc.exp
  bf783dcd14ad74babc1bf3e91cc46055  gcc/testsuite/lib/modules.exp
--- 124427,124433 ----
  450868d4f15f0faade8c693e132ee071  gcc/testsuite/lib/go.exp
  569a9bbf0bbca4b3648f90532f4b4b21  gcc/testsuite/lib/htmltest.py
  8699bdd60911dccd7ce56e96f4032646  gcc/testsuite/lib/hwasan-dg.exp
! 68f54a06f3ffcbd6b65ca0ed4fa926c5  gcc/testsuite/lib/lto.exp
  645e8af17b334c4e279636a7b47dacbe  gcc/testsuite/lib/mike-g++.exp
  b2d617c3a17f3ed4084a60722369c3a8  gcc/testsuite/lib/mike-gcc.exp
  bf783dcd14ad74babc1bf3e91cc46055  gcc/testsuite/lib/modules.exp
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 124273,124279 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! f4b0adafa5d3e6f9f5bea3d9a5e3cb55  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
--- 124465,124471 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! fe498f625184e44d80542d6e517d8cc2  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
*************** b528a0932f50504df146d112f7d01a5c  gcc/tr
*** 126910,126916 ****
  1718a36253ebbb17fe4570fc768216c9  gcc/tree-chrec.cc
  0e4a484c6387f9be0a506783637432f9  gcc/tree-chrec.h
  631f383225878af718642d2a458aefae  gcc/tree-complex.cc
! 02b0712beb7353850dd4a372a9dd46ff  gcc/tree-core.h
  77244f55dae576a255f5b69b70774e54  gcc/tree-data-ref.cc
  e43a555cdaab9a97ba3910364910f865  gcc/tree-data-ref.h
  f01aeac56dffd44808096094e2bf76c1  gcc/tree-dfa.cc
--- 127102,127108 ----
  1718a36253ebbb17fe4570fc768216c9  gcc/tree-chrec.cc
  0e4a484c6387f9be0a506783637432f9  gcc/tree-chrec.h
  631f383225878af718642d2a458aefae  gcc/tree-complex.cc
! 133c240230db44a5d1807dcda6ab0571  gcc/tree-core.h
  77244f55dae576a255f5b69b70774e54  gcc/tree-data-ref.cc
  e43a555cdaab9a97ba3910364910f865  gcc/tree-data-ref.h
  f01aeac56dffd44808096094e2bf76c1  gcc/tree-dfa.cc
*************** beaa17685ead93eee17f6373d004c4c4  gcc/tr
*** 126953,126959 ****
  75f7536de821e165a3a39bbd1cdfe9d8  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
! 9a3f079d9aca3a34c2385cad4bb3a4b0  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
  b72513bb0f4b53e7bfa5353836a30feb  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
--- 127145,127151 ----
  75f7536de821e165a3a39bbd1cdfe9d8  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
! df0924c6920ee14ac6abdbfc9a1f8f9d  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
  b72513bb0f4b53e7bfa5353836a30feb  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
*************** b9ccca93dfe789389d268eca6dbec62f  gcc/tr
*** 126973,126979 ****
  0046e212ff1b9f3f4d27d055aa299c47  gcc/tree-ssa-dom.h
  6ddd79e7a349847a539144d422bf5a49  gcc/tree-ssa-dse.cc
  a6d83be241a72da1740cf6c5b2ce7d52  gcc/tree-ssa-dse.h
! 3fc08aeff7beeed6957ee026138427e3  gcc/tree-ssa-forwprop.cc
  0915c4bbeb42abdda8799c2b27e5db12  gcc/tree-ssa-ifcombine.cc
  edab16a20512b0146482bb2120696d6a  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
--- 127165,127171 ----
  0046e212ff1b9f3f4d27d055aa299c47  gcc/tree-ssa-dom.h
  6ddd79e7a349847a539144d422bf5a49  gcc/tree-ssa-dse.cc
  a6d83be241a72da1740cf6c5b2ce7d52  gcc/tree-ssa-dse.h
! 34c678b95f8438b99212fcb79f1a3e09  gcc/tree-ssa-forwprop.cc
  0915c4bbeb42abdda8799c2b27e5db12  gcc/tree-ssa-ifcombine.cc
  edab16a20512b0146482bb2120696d6a  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
*************** ec0ea4b2fca8f29ceacc9fa4130673d0  gcc/tr
*** 126984,126990 ****
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
  71ebf1f6c8d82b1fdbca6c7aa3bd14cb  gcc/tree-ssa-loop-manip.cc
  fbcc93539b376489c1256eb8cf2d4800  gcc/tree-ssa-loop-manip.h
! eac4baefd969552f7f0da3b63cab5bba  gcc/tree-ssa-loop-niter.cc
  189317c0b965ddd0ee491f8e45af4b0d  gcc/tree-ssa-loop-niter.h
  523a4b7c5b7113009b3b1f0f514d0cd3  gcc/tree-ssa-loop-prefetch.cc
  00d71257ae0536e64bdea226f1e5ef5f  gcc/tree-ssa-loop-split.cc
--- 127176,127182 ----
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
  71ebf1f6c8d82b1fdbca6c7aa3bd14cb  gcc/tree-ssa-loop-manip.cc
  fbcc93539b376489c1256eb8cf2d4800  gcc/tree-ssa-loop-manip.h
! e46036857b12db908d25787f3eda137a  gcc/tree-ssa-loop-niter.cc
  189317c0b965ddd0ee491f8e45af4b0d  gcc/tree-ssa-loop-niter.h
  523a4b7c5b7113009b3b1f0f514d0cd3  gcc/tree-ssa-loop-prefetch.cc
  00d71257ae0536e64bdea226f1e5ef5f  gcc/tree-ssa-loop-split.cc
*************** eac4baefd969552f7f0da3b63cab5bba  gcc/tr
*** 126993,126999 ****
  538146c17730f67ffcc58afdfcc93712  gcc/tree-ssa-loop.h
  422e15102e032e44507602b4d265e573  gcc/tree-ssa-math-opts.cc
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
! 8ccf736dffb311078aa79c9036502189  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
  fbb4dbd95b07fb6744745c6d010a7341  gcc/tree-ssa-phiopt.cc
  482f2356d81c3633ca476cd6628908b8  gcc/tree-ssa-phiprop.cc
--- 127185,127191 ----
  538146c17730f67ffcc58afdfcc93712  gcc/tree-ssa-loop.h
  422e15102e032e44507602b4d265e573  gcc/tree-ssa-math-opts.cc
  c0b0549adb2c1140cf285901abb5a78c  gcc/tree-ssa-math-opts.h
! e6684bfab00087c19d73f3a45f523786  gcc/tree-ssa-operands.cc
  da72a60de8a6f51a635ead26120d3cc7  gcc/tree-ssa-operands.h
  fbb4dbd95b07fb6744745c6d010a7341  gcc/tree-ssa-phiopt.cc
  482f2356d81c3633ca476cd6628908b8  gcc/tree-ssa-phiprop.cc
*************** fbd423299c28bb3b3577ec61aba45439  gcc/tr
*** 127023,127029 ****
  c071186b46f37cd7acd76a679deb3f9d  gcc/tree-ssa-uninit.cc
  0cb7cabeb68ef8727724158e83e6c89e  gcc/tree-ssa.cc
  95d033c8a4bc14c898459494486fd902  gcc/tree-ssa.h
! 2325853c2bb97e8a5f81424993ac2cab  gcc/tree-ssanames.cc
  6ab32249b70e72b4d8b9d4abc134aa6d  gcc/tree-ssanames.h
  5fa0d7c6143cd9e39c30840b9996fa30  gcc/tree-stdarg.cc
  9817789b6289e73955015beb57c609b1  gcc/tree-stdarg.h
--- 127215,127221 ----
  c071186b46f37cd7acd76a679deb3f9d  gcc/tree-ssa-uninit.cc
  0cb7cabeb68ef8727724158e83e6c89e  gcc/tree-ssa.cc
  95d033c8a4bc14c898459494486fd902  gcc/tree-ssa.h
! 23f15b1d75e2364bd1549842b38ec881  gcc/tree-ssanames.cc
  6ab32249b70e72b4d8b9d4abc134aa6d  gcc/tree-ssanames.h
  5fa0d7c6143cd9e39c30840b9996fa30  gcc/tree-stdarg.cc
  9817789b6289e73955015beb57c609b1  gcc/tree-stdarg.h
*************** af4c63760c432f66b1c6c8e7e7666699  gcc/tr
*** 127034,127056 ****
  fc4b4f80b4c39a4bf73ced787dec927c  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  c98debbdc978c10e8934f3b4fb7e2504  gcc/tree-tailcall.cc
! 6e5dcb1a1ea95d85fd88114bca11a78a  gcc/tree-vect-data-refs.cc
! 57d12d2c747f6be0d70a875abae6c3e3  gcc/tree-vect-generic.cc
  68f9460ebe49ce21a4b55cb0b0357ac0  gcc/tree-vect-loop-manip.cc
! 7808985af23240ed3f8b9165d8a70946  gcc/tree-vect-loop.cc
  04a82f888445c931e0ace82b02b3230b  gcc/tree-vect-patterns.cc
  588899232babed9c67e61795ff405608  gcc/tree-vect-slp-patterns.cc
  f1a62b3eef5c42402f69bc4866422997  gcc/tree-vect-slp.cc
! eaef715b393a023fab053a3f3b478097  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  cb678f63a201f9ffc105c6c996f2b8f2  gcc/tree-vectorizer.cc
! 6cde1ce2021038e8b506344b57887cea  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! 151ba8bf004e87cbcab9cdfd5352a3c2  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 0b1e1c6e91a730a8812656608dff535a  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
--- 127226,127248 ----
  fc4b4f80b4c39a4bf73ced787dec927c  gcc/tree-switch-conversion.cc
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  c98debbdc978c10e8934f3b4fb7e2504  gcc/tree-tailcall.cc
! 8d87f66fe4da0320df57a47e89af8db8  gcc/tree-vect-data-refs.cc
! e569116acd109106c3f93f17b35e82c9  gcc/tree-vect-generic.cc
  68f9460ebe49ce21a4b55cb0b0357ac0  gcc/tree-vect-loop-manip.cc
! ee496e346ae68826c6aad76b3ffadbfc  gcc/tree-vect-loop.cc
  04a82f888445c931e0ace82b02b3230b  gcc/tree-vect-patterns.cc
  588899232babed9c67e61795ff405608  gcc/tree-vect-slp-patterns.cc
  f1a62b3eef5c42402f69bc4866422997  gcc/tree-vect-slp.cc
! 6e7438dde3011e0bbb6120a506c13ef8  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  cb678f63a201f9ffc105c6c996f2b8f2  gcc/tree-vectorizer.cc
! c634b8ea66b07f5658df0b52c0ec3311  gcc/tree-vectorizer.h
  1bed475667cbd8dee00c3b7da964ca5b  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! 0e69ca4b6771dc2c045e46af835c7a34  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 44f0f974feafc527c34656a0dc67ae08  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
*************** c7399bbb7eadd31d7cd04991cd79c238  includ
*** 127180,127186 ****
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  c01f38de8270d558b8d3ecac839d3bbf  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! 655a3016365c9ca4d3817ac4731092df  libatomic/ChangeLog
  69658b52c97a53d29fb6c0788725ba9a  libatomic/Makefile.am
  93ea39705fb026f7bc42cbe52d53b2c9  libatomic/Makefile.in
  04a8eb275561484cf0d6f8c459a38177  libatomic/acinclude.m4
--- 127372,127378 ----
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  c01f38de8270d558b8d3ecac839d3bbf  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! 5e4e088db25cc0422b942713c5e2ba44  libatomic/ChangeLog
  69658b52c97a53d29fb6c0788725ba9a  libatomic/Makefile.am
  93ea39705fb026f7bc42cbe52d53b2c9  libatomic/Makefile.in
  04a8eb275561484cf0d6f8c459a38177  libatomic/acinclude.m4
*************** ed3d69739cb2f35407547229f0393f92  libato
*** 127217,127223 ****
  e40da0e8515ee6996456294b571e5572  libatomic/config/x86/fenv.c
  e3229b3119558c9d6d6d8f8676d4f1ce  libatomic/config/x86/host-config.h
  6d8f1d8fc6da675bbeacfbd55dca52c9  libatomic/config/x86/init.c
! af676af62484f1b67c764110b3806ddf  libatomic/configure
  99d36adaa61e3ee868d3eb476acfb755  libatomic/configure.ac
  3af5de9020aa1a7aa503e70067cd98d8  libatomic/configure.tgt
  cffc539e08bc3149260124f3eb09e1a1  libatomic/exch_n.c
--- 127409,127415 ----
  e40da0e8515ee6996456294b571e5572  libatomic/config/x86/fenv.c
  e3229b3119558c9d6d6d8f8676d4f1ce  libatomic/config/x86/host-config.h
  6d8f1d8fc6da675bbeacfbd55dca52c9  libatomic/config/x86/init.c
! a7ce11ba8ae8431c4cef4f952312741d  libatomic/configure
  99d36adaa61e3ee868d3eb476acfb755  libatomic/configure.ac
  3af5de9020aa1a7aa503e70067cd98d8  libatomic/configure.tgt
  cffc539e08bc3149260124f3eb09e1a1  libatomic/exch_n.c
*************** c03a072efac9b30f8f8429ac52fd246b  libato
*** 127277,127283 ****
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 932e0eeb8ec29eba2f1381b6c2a38d71  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  d8ded612c0b12538d827f766c2ac1f16  libbacktrace/Makefile.am
  ea52a9b9117583c28940290e71a7aee5  libbacktrace/Makefile.in
--- 127469,127475 ----
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 9239404b2eb5478cf680f719bba2eef2  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  d8ded612c0b12538d827f766c2ac1f16  libbacktrace/Makefile.am
  ea52a9b9117583c28940290e71a7aee5  libbacktrace/Makefile.in
*************** e944b223042b04a3e9ea49549d30f8bb  libbac
*** 127292,127303 ****
  cf55a1c8cc5ab2d6e794b565d053b0f4  libbacktrace/backtrace.h
  8ea895edb6eba4b29817bd86c8a437f2  libbacktrace/btest.c
  1680f9d27c3626fb2d07ae4ee9206da6  libbacktrace/config.h.in
! 95796f8f1c736f7cf01c84a0f5ef59b6  libbacktrace/configure
  5dd5da9deed8e61384200b23c67b817b  libbacktrace/configure.ac
  016c0a2e5e6e7ca45b59779f8484e07c  libbacktrace/dwarf.c
  aaf0af38ca06cc1703c89538b7bcca5b  libbacktrace/edtest.c
  5a71ff6f0fd1766e96f55eb563d3ebd5  libbacktrace/edtest2.c
! 2340e85e632b477107fb87f1cda296d3  libbacktrace/elf.c
  962fabf4ee4a08a430a7eebba3665f31  libbacktrace/fileline.c
  2101239b2b163b2ca53d5ae30bbfaadf  libbacktrace/filetype.awk
  132482064e1f62e11dedf7f5f0d763ab  libbacktrace/install-debuginfo-for-buildid.sh.in
--- 127484,127495 ----
  cf55a1c8cc5ab2d6e794b565d053b0f4  libbacktrace/backtrace.h
  8ea895edb6eba4b29817bd86c8a437f2  libbacktrace/btest.c
  1680f9d27c3626fb2d07ae4ee9206da6  libbacktrace/config.h.in
! 8720742f230f46561f5304cbc68cfcd5  libbacktrace/configure
  5dd5da9deed8e61384200b23c67b817b  libbacktrace/configure.ac
  016c0a2e5e6e7ca45b59779f8484e07c  libbacktrace/dwarf.c
  aaf0af38ca06cc1703c89538b7bcca5b  libbacktrace/edtest.c
  5a71ff6f0fd1766e96f55eb563d3ebd5  libbacktrace/edtest2.c
! 3afa86a2a68c93cc7532a4cc836d7f89  libbacktrace/elf.c
  962fabf4ee4a08a430a7eebba3665f31  libbacktrace/fileline.c
  2101239b2b163b2ca53d5ae30bbfaadf  libbacktrace/filetype.awk
  132482064e1f62e11dedf7f5f0d763ab  libbacktrace/install-debuginfo-for-buildid.sh.in
*************** c0fa0a593b3a9b1ffd2f84bc40a22980  libbac
*** 127326,127332 ****
  69e738d1cd72baaeda073609f133f005  libbacktrace/xztest.c
  4d7dab09ddbe953244044c8a60434ad9  libbacktrace/zstdtest.c
  08e64385c7a2a6f5a8d0e25f4c237e51  libbacktrace/ztest.c
! 78f95fe77113997545cc56fe8d579962  libcc1/ChangeLog
  e396ef427fc1a75d765f69ea2b48aef9  libcc1/Makefile.am
  270e13d9f539c9eacc16d848641ecb9d  libcc1/Makefile.in
  e6c98f41e0035dd3e80d4c55a6301318  libcc1/aclocal.m4
--- 127518,127524 ----
  69e738d1cd72baaeda073609f133f005  libbacktrace/xztest.c
  4d7dab09ddbe953244044c8a60434ad9  libbacktrace/zstdtest.c
  08e64385c7a2a6f5a8d0e25f4c237e51  libbacktrace/ztest.c
! 5364e04989abd77daa83c2779cc802de  libcc1/ChangeLog
  e396ef427fc1a75d765f69ea2b48aef9  libcc1/Makefile.am
  270e13d9f539c9eacc16d848641ecb9d  libcc1/Makefile.in
  e6c98f41e0035dd3e80d4c55a6301318  libcc1/aclocal.m4
*************** a7921a04b41c3295dbab2dd307ae1794  libcc1
*** 127336,127342 ****
  c82e9b4d1b92d009ed3f69590b3ab9b8  libcc1/compiler-name.hh
  fe09cc65e2242b1f5e5ec3dc3da54c20  libcc1/compiler.cc
  717133d037105479c95708d7362528cf  libcc1/compiler.hh
! 227f83febc768071e945e7f12e02cd33  libcc1/configure
  a3cb3c5aa8181bef86a5a5e4e03235c3  libcc1/configure.ac
  ef80637fedf68c1802c638751df08472  libcc1/connection.cc
  5c6231697372fed74cf47657b57a1009  libcc1/connection.hh
--- 127528,127534 ----
  c82e9b4d1b92d009ed3f69590b3ab9b8  libcc1/compiler-name.hh
  fe09cc65e2242b1f5e5ec3dc3da54c20  libcc1/compiler.cc
  717133d037105479c95708d7362528cf  libcc1/compiler.hh
! 8a59c21abf1b248412a86bea57e1f080  libcc1/configure
  a3cb3c5aa8181bef86a5a5e4e03235c3  libcc1/configure.ac
  ef80637fedf68c1802c638751df08472  libcc1/connection.cc
  5c6231697372fed74cf47657b57a1009  libcc1/connection.hh
*************** a97c47969dfc92a7666dfe3c2e1e1448  libdec
*** 127510,127516 ****
  beb433e3e74659ef6595bb7dc6760d90  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
  055606b47e85369c5d003f6e3a1b657e  libffi/.gitattributes
! 0ed4276d159b4ff7141162f4eeab338a  libffi/ChangeLog
  0e38ead823643c45765e5fe55e7ab16b  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
--- 127702,127708 ----
  beb433e3e74659ef6595bb7dc6760d90  libdecnumber/dpd/decimal64.h
  0f6db29710e7075c2fd62bc4478b3b8d  libdecnumber/dpd/decimal64Symbols.h
  055606b47e85369c5d003f6e3a1b657e  libffi/.gitattributes
! 02f2df933b3ef33868d9525ca56a1897  libffi/ChangeLog
  0e38ead823643c45765e5fe55e7ab16b  libffi/ChangeLog.libffi
  fbbc216bc25d759a72ea3e6d734af56b  libffi/ChangeLog.libgcj
  d946d2b97454ad50a1dbfbf48923c5be  libffi/ChangeLog.v1
*************** c55286ffa9013e1bc9fe188894b39e1d  libffi
*** 127525,127531 ****
  c67252e8ff3150683a184a729911b219  libffi/acinclude.m4
  54e1bb9dc8859b05ce3d3bb15c85704c  libffi/aclocal.m4
  aec59abbc470dda1bfe630dbb0bbd627  libffi/autogen.sh
! a204e783f90a87a791483842ce8d7596  libffi/configure
  0c9310ab4da9ff4d0d8aa37fa8fcb0be  libffi/configure.ac
  54389f155bf929aa9429f225f0dbbaab  libffi/configure.host
  bad91ff01547ce79fe537211f4763ac0  libffi/doc/Makefile.am
--- 127717,127723 ----
  c67252e8ff3150683a184a729911b219  libffi/acinclude.m4
  54e1bb9dc8859b05ce3d3bb15c85704c  libffi/aclocal.m4
  aec59abbc470dda1bfe630dbb0bbd627  libffi/autogen.sh
! e56cd00e93b6593daca44e5c0b5011b6  libffi/configure
  0c9310ab4da9ff4d0d8aa37fa8fcb0be  libffi/configure.ac
  54389f155bf929aa9429f225f0dbbaab  libffi/configure.host
  bad91ff01547ce79fe537211f4763ac0  libffi/doc/Makefile.am
*************** f017ba40c4699f1549cd341ad688007f  libgcc
*** 129475,129508 ****
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! bbadee5fb34f36b93025894a9db020bf  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  f9f96109d649d17aa66f416364289e35  libgcobol/Makefile.am
  ce6793d8276df5edf60e0c25b277c4b4  libgcobol/Makefile.in
  ff016a65ce3c24bdd22207044f2a126e  libgcobol/README
  8c9140838556aedbca129aeaedf0855b  libgcobol/acinclude.m4
  edff1d46cc8f5e3fa2007d8fede32717  libgcobol/aclocal.m4
! 19338650169503781ed85026d85d5c30  libgcobol/charmaps.cc
! 639e0eec47bba1f1c2353e2b9bcd6851  libgcobol/charmaps.h
  e44c6fe97350bdd7eff39bd00d594918  libgcobol/common-defs.h
  6a3b66323eab3b40a9c109aafd9f27c6  libgcobol/config.h.in
! d23a12226b48001cabd28a835c3cb5fc  libgcobol/configure
  faf06b9fb823d12e0ec967db524ba97e  libgcobol/configure.ac
  5aec96a7dfdb0d6e7b10cc13d65c53a3  libgcobol/configure.tgt
  b7eded6395ef32819ecac70ac1aac697  libgcobol/constants.cc
  641fcbe1c4aa0a6cde86f5b185638e11  libgcobol/ec.h
! 3342a345db42ab91272459e68fbdd833  libgcobol/encodings.h
  fbd99afdab52fcee0543b901042350ef  libgcobol/exceptl.h
! cb865d217e906e6640cddda70970c7a3  libgcobol/gcobolio.h
! 6193811aa95461e5b549180318d938bf  libgcobol/gfileio.cc
  4c5dc966be490381f53924b2441c9300  libgcobol/gfileio.h
  42a0be811da2d9bccec1fc42d43424cb  libgcobol/gmath.cc
  9b52995346d1f02cab9c3e2b816722d6  libgcobol/gmath.h
! c013f16811f039868a850fed652b77bf  libgcobol/intrinsic.cc
  0cf9ce2863c11a8fd875185c371fe6e6  libgcobol/io.cc
  b054056cc4fe4de7a78d34e43f2f3bab  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! 7e86294843c58d255c23a41133ec50d3  libgcobol/libgcobol.cc
  dea38a785d1e8a09b58ae36a103c5ac2  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  c057a9c0bf247b066e7de6f079edb2f6  libgcobol/posix/errno.cc
--- 129667,129700 ----
  804399bda5c6c23cd3e0cd78c21bc2fd  libgcc/vtv_end_preinit.c
  407de23229097d9b9a4d00e2e9c60c70  libgcc/vtv_start.c
  ba13e8c1385837f9a736ead153be6251  libgcc/vtv_start_preinit.c
! 2040abd342556422a38f125ad308b534  libgcobol/ChangeLog
  b227feb8ac8df349788743a8ade3e840  libgcobol/LICENSE
  f9f96109d649d17aa66f416364289e35  libgcobol/Makefile.am
  ce6793d8276df5edf60e0c25b277c4b4  libgcobol/Makefile.in
  ff016a65ce3c24bdd22207044f2a126e  libgcobol/README
  8c9140838556aedbca129aeaedf0855b  libgcobol/acinclude.m4
  edff1d46cc8f5e3fa2007d8fede32717  libgcobol/aclocal.m4
! 2ecc4068f74a5c331f6db3b4e1012c71  libgcobol/charmaps.cc
! e051b65251df8ebb1686dfa60f0d5829  libgcobol/charmaps.h
  e44c6fe97350bdd7eff39bd00d594918  libgcobol/common-defs.h
  6a3b66323eab3b40a9c109aafd9f27c6  libgcobol/config.h.in
! da26989ef874f72f47df8a41896430c1  libgcobol/configure
  faf06b9fb823d12e0ec967db524ba97e  libgcobol/configure.ac
  5aec96a7dfdb0d6e7b10cc13d65c53a3  libgcobol/configure.tgt
  b7eded6395ef32819ecac70ac1aac697  libgcobol/constants.cc
  641fcbe1c4aa0a6cde86f5b185638e11  libgcobol/ec.h
! c79d6b48483d8a0371cd7ce7f5a55900  libgcobol/encodings.h
  fbd99afdab52fcee0543b901042350ef  libgcobol/exceptl.h
! d2631951ed961d10e78f060dde00da42  libgcobol/gcobolio.h
! e48958dd84f9ab9611279e150e9957cf  libgcobol/gfileio.cc
  4c5dc966be490381f53924b2441c9300  libgcobol/gfileio.h
  42a0be811da2d9bccec1fc42d43424cb  libgcobol/gmath.cc
  9b52995346d1f02cab9c3e2b816722d6  libgcobol/gmath.h
! e5db3014f748c76205edeb2bdbbe6469  libgcobol/intrinsic.cc
  0cf9ce2863c11a8fd875185c371fe6e6  libgcobol/io.cc
  b054056cc4fe4de7a78d34e43f2f3bab  libgcobol/io.h
  6fa2e26d11c71898dae520939b992484  libgcobol/libgcobol-fp.h
! a90e4daed9b9162052c266ba762d3e32  libgcobol/libgcobol.cc
  dea38a785d1e8a09b58ae36a103c5ac2  libgcobol/libgcobol.h
  469e0f6e21e357ff8b53b9d17373a6c8  libgcobol/libgcobol.spec.in
  c057a9c0bf247b066e7de6f079edb2f6  libgcobol/posix/errno.cc
*************** feda976b2ecc3ba909f736aeb43feb48  libgco
*** 129514,129521 ****
  179156ad95afd403a9316969a95142f7  libgcobol/stringbin.h
  22c49caac6a8d133de67b63e2cd769d4  libgcobol/valconv.cc
  bf52fdaed06effba57a10e8157bc6930  libgcobol/valconv.h
! e3cbddb33236e6676f4b7be4e400a795  libgcobol/xmlparse.cc
! 6520ed01bbed88782faed4ce1922e024  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
--- 129706,129713 ----
  179156ad95afd403a9316969a95142f7  libgcobol/stringbin.h
  22c49caac6a8d133de67b63e2cd769d4  libgcobol/valconv.cc
  bf52fdaed06effba57a10e8157bc6930  libgcobol/valconv.h
! 81cbe5405589f90f7e3ee3cc3404117b  libgcobol/xmlparse.cc
! d06f7bc13007289c78987e55ff4dc445  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
*************** a25a190e02c8ba2caa2c3dee224eba51  libgfo
*** 129540,129547 ****
  aa424ddf6a9e4e08b8023d3d5b371a0d  libgfortran/ChangeLog-2023
  09537a69736f655d1e0ccf28367d3ddf  libgfortran/ChangeLog-2024
  16ba29cf4184ed00d26fe02df17c83d7  libgfortran/ISO_Fortran_binding.h
! 37aad15f30e8f1452a0429ca441024de  libgfortran/Makefile.am
! 9e8eaa74116fa47893a24824cffb5bed  libgfortran/Makefile.in
  43f0b2981fb15d556a8ee8292ef70ba8  libgfortran/acinclude.m4
  3c4dcfb556f7b670b9c4be79d6f91022  libgfortran/aclocal.m4
  c89d50fda6cbf50698f2d324f8a6ec7e  libgfortran/c99_protos.h
--- 129732,129739 ----
  aa424ddf6a9e4e08b8023d3d5b371a0d  libgfortran/ChangeLog-2023
  09537a69736f655d1e0ccf28367d3ddf  libgfortran/ChangeLog-2024
  16ba29cf4184ed00d26fe02df17c83d7  libgfortran/ISO_Fortran_binding.h
! 0050e2f039159f9a6eb1019b1b289a46  libgfortran/Makefile.am
! 75e0232a9a132356915ace2676d8199f  libgfortran/Makefile.in
  43f0b2981fb15d556a8ee8292ef70ba8  libgfortran/acinclude.m4
  3c4dcfb556f7b670b9c4be79d6f91022  libgfortran/aclocal.m4
  c89d50fda6cbf50698f2d324f8a6ec7e  libgfortran/c99_protos.h
*************** a55ccf6890d641d3f0db92bf916d7acb  libgfo
*** 129558,129564 ****
  8b13cc70e0c48ec76d9238e229cfd587  libgfortran/config/fpu-sysv.h
  f9917563df7bac5d534cef935bdce401  libgfortran/config/t-aix
  3e9dd2029734b8f2c6a1eb2a364d1cbf  libgfortran/config/t-nvptx
! ad6a0afef48442917d573525be9ff911  libgfortran/configure
  cd8acb64f38bebd22d33837be9bd242e  libgfortran/configure.ac
  78e88d1cf66770f3359f0a232708eb4b  libgfortran/configure.host
  c30239885274f03fa180aff610914b66  libgfortran/generated/_abs_c10.F90
--- 129750,129756 ----
  8b13cc70e0c48ec76d9238e229cfd587  libgfortran/config/fpu-sysv.h
  f9917563df7bac5d534cef935bdce401  libgfortran/config/t-aix
  3e9dd2029734b8f2c6a1eb2a364d1cbf  libgfortran/config/t-nvptx
! 707a783c49862d2deb947834d7909f60  libgfortran/configure
  cd8acb64f38bebd22d33837be9bd242e  libgfortran/configure.ac
  78e88d1cf66770f3359f0a232708eb4b  libgfortran/configure.host
  c30239885274f03fa180aff610914b66  libgfortran/generated/_abs_c10.F90
*************** b98698922a8d329364583b849ae66dd1  libgfo
*** 130350,130356 ****
  825bc3c7f45b36f9ca82fb7b083bcd7d  libgfortran/generated/unpack_r17.c
  8fcbe32bf70b0c8c128b4ab3cd41eae7  libgfortran/generated/unpack_r4.c
  f803423e0f42de429e6d05db06ea0511  libgfortran/generated/unpack_r8.c
! 294b0caa71f334fc539555832be92d5b  libgfortran/gfortran.map
  081eb3c616ff1dc25f948c3390a45c25  libgfortran/ieee/ieee_arithmetic.F90
  29aa422de12addef93a6a64a3de7acf1  libgfortran/ieee/ieee_exceptions.F90
  526e069d40bcb9a6d33f16725646afed  libgfortran/ieee/ieee_features.F90
--- 130542,130548 ----
  825bc3c7f45b36f9ca82fb7b083bcd7d  libgfortran/generated/unpack_r17.c
  8fcbe32bf70b0c8c128b4ab3cd41eae7  libgfortran/generated/unpack_r4.c
  f803423e0f42de429e6d05db06ea0511  libgfortran/generated/unpack_r8.c
! 986f41ec15bd059f568724e6295dc8e6  libgfortran/gfortran.map
  081eb3c616ff1dc25f948c3390a45c25  libgfortran/ieee/ieee_arithmetic.F90
  29aa422de12addef93a6a64a3de7acf1  libgfortran/ieee/ieee_exceptions.F90
  526e069d40bcb9a6d33f16725646afed  libgfortran/ieee/ieee_features.F90
*************** e083c5b62de7b249a0804185110e86ab  libgfo
*** 130446,130452 ****
  09d8185d4c2575441cc47355b8181e2d  libgfortran/io/write.c
  0f29ff5c8f8c7bc519523ed8dfe91341  libgfortran/io/write_float.def
  6dc0821df415d771739d27ea80a185cc  libgfortran/kinds-override.h
! 5d37f93986771c6ef7e85913967e9d57  libgfortran/libgfortran.h
  387b6182fc5961d2910eba8861402578  libgfortran/libgfortran.spec.in
  dc1a87f5ed3520558b0fe9f43e4f5ba8  libgfortran/libtool-version
  972674f528a35a516f5278ea7d0e280c  libgfortran/m4/all.m4
--- 130638,130644 ----
  09d8185d4c2575441cc47355b8181e2d  libgfortran/io/write.c
  0f29ff5c8f8c7bc519523ed8dfe91341  libgfortran/io/write_float.def
  6dc0821df415d771739d27ea80a185cc  libgfortran/kinds-override.h
! f3652a39c7771098e5d2bf027afc9ff5  libgfortran/libgfortran.h
  387b6182fc5961d2910eba8861402578  libgfortran/libgfortran.spec.in
  dc1a87f5ed3520558b0fe9f43e4f5ba8  libgfortran/libtool-version
  972674f528a35a516f5278ea7d0e280c  libgfortran/m4/all.m4
*************** f8813ac773f6f6eb0ea6ecb287fb9250  libgfo
*** 130526,130531 ****
--- 130718,130724 ----
  94a7b229d39dbcd4417158c27efc1985  libgfortran/runtime/bounds.c
  aaeba6162e3ff4f7663ef18464363aba  libgfortran/runtime/compile_options.c
  4b6fde5936296d2bf26a255c3850c48a  libgfortran/runtime/convert_char.c
+ adc17f396f29fababf0e294177905d61  libgfortran/runtime/deep_copy.c
  ec508314e4b75ed58df92ccf7491380e  libgfortran/runtime/environ.c
  e1a1adb3e524ddf75ba8b9489bd2398e  libgfortran/runtime/error.c
  d2d90f1aabfe1ec4cda529291d2a7129  libgfortran/runtime/fpu.c
*************** f63a06d746592d67d8c161bc2461a24e  libgfo
*** 130541,130553 ****
  e90afde1ec8653f66d433a7cc5e070a7  libgfortran/runtime/select_inc.c
  fa1f81a5ee204308c775545490d24fbd  libgfortran/runtime/stop.c
  08f6570c94f64b0aaf21fb2ec9aa10e9  libgfortran/runtime/string.c
! 59d609340df520b24e9393ec34a4d55d  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  f26132364738756eeee0acf44fb5aadf  libgm2/Makefile.in
  5655398e9c1e3027c587898dc4fce566  libgm2/acinclude.m4
  d4629d8a3f44bc8f1060e37d381418f6  libgm2/aclocal.m4
  ec51f8ac3552cbacd95bf08e21a6568a  libgm2/config.h.in
! ca71be4b582f000ba36866af5283628e  libgm2/configure
  a1615402f37d3412d1901ee58bebbc2c  libgm2/configure.ac
  b52a0b00feee9e93f7dc34a66027a39f  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
--- 130734,130746 ----
  e90afde1ec8653f66d433a7cc5e070a7  libgfortran/runtime/select_inc.c
  fa1f81a5ee204308c775545490d24fbd  libgfortran/runtime/stop.c
  08f6570c94f64b0aaf21fb2ec9aa10e9  libgfortran/runtime/string.c
! c4143a8b4c62c105a304d1a0757befb3  libgm2/ChangeLog
  81dadb03add7a7278a98cd845177e76a  libgm2/Makefile.am
  f26132364738756eeee0acf44fb5aadf  libgm2/Makefile.in
  5655398e9c1e3027c587898dc4fce566  libgm2/acinclude.m4
  d4629d8a3f44bc8f1060e37d381418f6  libgm2/aclocal.m4
  ec51f8ac3552cbacd95bf08e21a6568a  libgm2/config.h.in
! be242d3ef165bebeb9c2fcd8cff0bfff  libgm2/configure
  a1615402f37d3412d1901ee58bebbc2c  libgm2/configure.ac
  b52a0b00feee9e93f7dc34a66027a39f  libgm2/configure.host
  2a25928a1abd3989edcf11c8def19d00  libgm2/libm2cor/KeyBoardLEDs.cc
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 136078,136084 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! ee183e649fd42fc682208aaa40fbeb25  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  3c91d539fc9934b5095923265d09ec8f  libgomp/Makefile.in
--- 136271,136277 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 9de5bb98cdca6e36d24533a1f827741b  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  3c91d539fc9934b5095923265d09ec8f  libgomp/Makefile.in
*************** efc434763cbe71b67359f1858f6c9480  libgom
*** 136204,136210 ****
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/sem.c
  ef94b568eb279611f49cecc20fb11baa  libgomp/config/rtems/sem.h
  af41d1d04a4112345554ca8b8a072ed9  libgomp/config/t-aix
! 65e867498b592f57b55df34fb9657f35  libgomp/configure
  250e49a5865485507899765bf69913a0  libgomp/configure.ac
  0eb9aa41c92e30c6fb1494575b1c8daa  libgomp/configure.tgt
  bdbd19a4ded46698d600a262cfc20343  libgomp/critical.c
--- 136397,136403 ----
  efc434763cbe71b67359f1858f6c9480  libgomp/config/rtems/sem.c
  ef94b568eb279611f49cecc20fb11baa  libgomp/config/rtems/sem.h
  af41d1d04a4112345554ca8b8a072ed9  libgomp/config/t-aix
! 0a0d35d31f3f457033733775525b093c  libgomp/configure
  250e49a5865485507899765bf69913a0  libgomp/configure.ac
  0eb9aa41c92e30c6fb1494575b1c8daa  libgomp/configure.tgt
  bdbd19a4ded46698d600a262cfc20343  libgomp/critical.c
*************** f957ac83f08d36891003338813dcd03d  libgom
*** 136620,136626 ****
  9215d28cde00a16495049615bac940cb  libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C
  aafa0a49328d827ce7bd9ef6ad8f9e4d  libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C
  5e320404381ef41bf4828273a4162e96  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C
! f365edc7dfad2127e50ef850bdf70310  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C
  02fbac6f0c9f081d4eb14d7a2f7a0041  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C
  870d16f297d84c8add772ed331876a43  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C
  733f4878044be0e7b75ce52065c6cd77  libgomp/testsuite/libgomp.c++/target-std__numbers.C
--- 136813,136819 ----
  9215d28cde00a16495049615bac940cb  libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C
  aafa0a49328d827ce7bd9ef6ad8f9e4d  libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C
  5e320404381ef41bf4828273a4162e96  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C
! 4a31a5586722bb1790429ce64bddf798  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C
  02fbac6f0c9f081d4eb14d7a2f7a0041  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C
  870d16f297d84c8add772ed331876a43  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C
  733f4878044be0e7b75ce52065c6cd77  libgomp/testsuite/libgomp.c++/target-std__numbers.C
*************** b39893ba213997fb0f30060685879d54  libgom
*** 137358,137363 ****
--- 137551,137557 ----
  90c233f1c51f5ec4e94b2c31c4dc28bb  libgomp/testsuite/libgomp.c/pr104952-1.c
  aa4bf5c713a6787268e4b1415f31402c  libgomp/testsuite/libgomp.c/pr104952-2.c
  37f576b8026bd1367998c4594550703d  libgomp/testsuite/libgomp.c/pr108459.c
+ 502f086f1c0aa4e9757c3ad58c79e9da  libgomp/testsuite/libgomp.c/pr122281.c
  c522146f1617da47efbc34dedb563f61  libgomp/testsuite/libgomp.c/pr24455-1.c
  fc16ef4cc2849f9673cfa72118b38b03  libgomp/testsuite/libgomp.c/pr24455.c
  5f9c41745fbf27e0d2ca8e182c9ff34f  libgomp/testsuite/libgomp.c/pr26171.c
*************** d09da57ba1fe6d1b566373765f254243  libgom
*** 137887,137894 ****
  1a48e57dbad9754e5d6a3b9f67aa65b5  libgomp/testsuite/libgomp.fortran/omp_parse3.f90
  8170f7b977312f5e8e9fadd4c3b8fc8b  libgomp/testsuite/libgomp.fortran/omp_parse4.f90
  c910dfe57b9f53b8992d397c3571fd09  libgomp/testsuite/libgomp.fortran/omp_reduction.f
! a28ac11969e4dd7aced601c757f947c3  libgomp/testsuite/libgomp.fortran/omp_target_memset-2.f90
! b1fc0fd8ad5ab4e898de2fdc6cc6aa3c  libgomp/testsuite/libgomp.fortran/omp_target_memset.f90
  77c80068c3418c0e379971a5e4ac91f1  libgomp/testsuite/libgomp.fortran/omp_workshare1.f
  4c7b256074253b51c44fe0f469b4512e  libgomp/testsuite/libgomp.fortran/omp_workshare2.f
  3e8aa59e7a86d28bacafdfab584f0a22  libgomp/testsuite/libgomp.fortran/on_device_arch.c
--- 138081,138088 ----
  1a48e57dbad9754e5d6a3b9f67aa65b5  libgomp/testsuite/libgomp.fortran/omp_parse3.f90
  8170f7b977312f5e8e9fadd4c3b8fc8b  libgomp/testsuite/libgomp.fortran/omp_parse4.f90
  c910dfe57b9f53b8992d397c3571fd09  libgomp/testsuite/libgomp.fortran/omp_reduction.f
! 4fc273a39b406eb600aa3bb1c6f8609a  libgomp/testsuite/libgomp.fortran/omp_target_memset-2.f90
! be00ce3e3f96c8c6b7e69b3390cbea6c  libgomp/testsuite/libgomp.fortran/omp_target_memset.f90
  77c80068c3418c0e379971a5e4ac91f1  libgomp/testsuite/libgomp.fortran/omp_workshare1.f
  4c7b256074253b51c44fe0f469b4512e  libgomp/testsuite/libgomp.fortran/omp_workshare2.f
  3e8aa59e7a86d28bacafdfab584f0a22  libgomp/testsuite/libgomp.fortran/on_device_arch.c
*************** e8a3245c095430c8ef2413afe2ee4c48  libgom
*** 138860,138870 ****
  1d2e2e1ab9f0d92351625f2c5661dbb8  libgomp/testsuite/libgomp.oacc-fortran/update-dt-array.f90
  989e6535f20045be32e9e91643a0b08f  libgomp/testsuite/libgomp.oacc-fortran/vector-routine.f90
  9b8b2dd0e3a57784ab6771591edb6c3b  libgomp/work.c
! 4397542ba8ad9c91b633edadaf661961  libgrust/ChangeLog
  e61ce18b1a86e6764b3436d0638ec4d2  libgrust/Makefile.am
  4d65d186378f0d15c49ae12508c6f970  libgrust/Makefile.in
  721420f55c97c79b3d7ecacfc67a0714  libgrust/aclocal.m4
! 93ed947403e3728b5c9a9699f79e02c8  libgrust/configure
  6e88162c13e29e24bf10ce9dcf460234  libgrust/configure.ac
  d4c7febd30951f7fbd584476dbb2dd70  libgrust/libformat_parser/.cargo/config.toml
  2fa265f924108a04b2f2c90b0a4354e0  libgrust/libformat_parser/Cargo.lock
--- 139054,139064 ----
  1d2e2e1ab9f0d92351625f2c5661dbb8  libgomp/testsuite/libgomp.oacc-fortran/update-dt-array.f90
  989e6535f20045be32e9e91643a0b08f  libgomp/testsuite/libgomp.oacc-fortran/vector-routine.f90
  9b8b2dd0e3a57784ab6771591edb6c3b  libgomp/work.c
! 42e17392ac7a2c29d11f72bae0f122fe  libgrust/ChangeLog
  e61ce18b1a86e6764b3436d0638ec4d2  libgrust/Makefile.am
  4d65d186378f0d15c49ae12508c6f970  libgrust/Makefile.in
  721420f55c97c79b3d7ecacfc67a0714  libgrust/aclocal.m4
! 0f85e6436530d610f51edf6dbcbf9fc5  libgrust/configure
  6e88162c13e29e24bf10ce9dcf460234  libgrust/configure.ac
  d4c7febd30951f7fbd584476dbb2dd70  libgrust/libformat_parser/.cargo/config.toml
  2fa265f924108a04b2f2c90b0a4354e0  libgrust/libformat_parser/Cargo.lock
*************** d1c33a8b5e0f3d9a19ffe583f8e72f56  libgru
*** 139615,139621 ****
  c21183b1df7f7afb240d765035277db1  libgrust/rustc-lib/version-info
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 9d555625ec32f4f8ac536b5e9cc8098d  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  65c8c72721eb29b2e2b42968dc6aaee6  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
--- 139809,139815 ----
  c21183b1df7f7afb240d765035277db1  libgrust/rustc-lib/version-info
  99c2e5e712b990ee07be10f53e41f3fb  libiberty/.gitignore
  a916467b91076e631dd8edb7424769c7  libiberty/COPYING.LIB
! 327eb105f6fbdfd21a42f230580231f2  libiberty/ChangeLog
  347c31392973de6a4872d540c1718dc1  libiberty/ChangeLog.jit
  65c8c72721eb29b2e2b42968dc6aaee6  libiberty/Makefile.in
  8b93d0e0369daed24e2260ccfd102eb3  libiberty/README
*************** d3c732c9041e2a09c3ba6cac89cb8be5  libibe
*** 139644,139650 ****
  044204f5b4bcac5eae2face0602129ae  libiberty/config/mh-fbsd21
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
! 7e191e1d2a47caef1a96f70964eb2952  libiberty/configure
  1d7f800450530d9dc9d466cd67204867  libiberty/configure.ac
  193826e77c2cb5ea7289dc272ec23d5d  libiberty/configure.com
  940def8f6a40746adb3dd8dc42307b38  libiberty/copying-lib.texi
--- 139838,139844 ----
  044204f5b4bcac5eae2face0602129ae  libiberty/config/mh-fbsd21
  904bdcd9daf97fa55a9ca8901ffe7435  libiberty/config/mh-openedition
  38e76da568ab25260754fdb9d5080513  libiberty/config/mh-windows
! a08719d6c4a4d3d8fa74cb913c55211f  libiberty/configure
  1d7f800450530d9dc9d466cd67204867  libiberty/configure.ac
  193826e77c2cb5ea7289dc272ec23d5d  libiberty/configure.com
  940def8f6a40746adb3dd8dc42307b38  libiberty/copying-lib.texi
*************** ae76d17c1990e95bb6bd526b1922fabd  libibe
*** 139723,139729 ****
  808e22543957bf379506a9bfcb8fb044  libiberty/setproctitle.c
  e973bc72e9b2d610a4b9575612e4eb7e  libiberty/sha1.c
  284bb7a096480b355b75c337086220a2  libiberty/sigsetmask.c
! 97bfe5e98ef3751ee12ae9405a0653f4  libiberty/simple-object-coff.c
  6546a52f22cec73ea99280d84934f241  libiberty/simple-object-common.h
  ff1d42d1bf1c07e5ea2e937d699ca374  libiberty/simple-object-elf.c
  a14629c770304471edee893f66642041  libiberty/simple-object-mach-o.c
--- 139917,139923 ----
  808e22543957bf379506a9bfcb8fb044  libiberty/setproctitle.c
  e973bc72e9b2d610a4b9575612e4eb7e  libiberty/sha1.c
  284bb7a096480b355b75c337086220a2  libiberty/sigsetmask.c
! e3ee725a2f4e3d639ab9730fed7a192a  libiberty/simple-object-coff.c
  6546a52f22cec73ea99280d84934f241  libiberty/simple-object-common.h
  ff1d42d1bf1c07e5ea2e937d699ca374  libiberty/simple-object-elf.c
  a14629c770304471edee893f66642041  libiberty/simple-object-mach-o.c
*************** e52d95644dc6f186070f349a5903ca72  libibe
*** 139785,139791 ****
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  9ee73c41e33c5385829971172a184c87  libiberty/xstrndup.c
  264565e1673eec920dc95fb09d4605ea  libiberty/xvasprintf.c
! 632640ad3d57ca7c3917da13c9ea56c1  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  ef89f818c0c39a850af7e33129d6ba50  libitm/Makefile.in
  354a4dc018f4a1bb610d11d1743d3cb1  libitm/aatree.cc
--- 139979,139985 ----
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  9ee73c41e33c5385829971172a184c87  libiberty/xstrndup.c
  264565e1673eec920dc95fb09d4605ea  libiberty/xvasprintf.c
! eb6c3cd817bc5aa1798e5e2fb9c5f47f  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  ef89f818c0c39a850af7e33129d6ba50  libitm/Makefile.in
  354a4dc018f4a1bb610d11d1743d3cb1  libitm/aatree.cc
*************** f81355820da74dc94b07e34e2ece3f1a  libitm
*** 139842,139848 ****
  88291da5386602b58a3f67b668a56f5a  libitm/config/x86/target.h
  6bd3c1b6db5455792f68d3a596a638ef  libitm/config/x86/x86_avx.cc
  a2e7f532ae9211e9a75853093fee54f5  libitm/config/x86/x86_sse.cc
! 06a91fdd95c2c3395b41f0717bca7792  libitm/configure
  a700d8399f54398174287f2a037d2040  libitm/configure.ac
  a166279bd4ae89049c2f7054633c2526  libitm/configure.tgt
  e25455914644f3311064669e1ce05e86  libitm/containers.h
--- 140036,140042 ----
  88291da5386602b58a3f67b668a56f5a  libitm/config/x86/target.h
  6bd3c1b6db5455792f68d3a596a638ef  libitm/config/x86/x86_avx.cc
  a2e7f532ae9211e9a75853093fee54f5  libitm/config/x86/x86_sse.cc
! 05af5ce85af4e5334b5173dd28d8e4ec  libitm/configure
  a700d8399f54398174287f2a037d2040  libitm/configure.ac
  a166279bd4ae89049c2f7054633c2526  libitm/configure.tgt
  e25455914644f3311064669e1ce05e86  libitm/containers.h
*************** b4e503ecfdccc9f13da8f73eeb6f23a9  libitm
*** 139894,139900 ****
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
  5eec74b1eee8d819e88b284abf80ec7c  libitm/useraction.cc
  6aa0b92295a7511a2af5672f4ad1cec4  libitm/util.cc
! bf066293a68b1cdce589eefc42021ea9  libobjc/ChangeLog
  da63bef4f8e0d2401aecc4ea0b7a15bd  libobjc/Makefile.in
  f641586fd7145ce4812e780e634634c0  libobjc/NXConstStr.m
  1c7a98dcda1e595d5dfefb22b7ac0cd0  libobjc/Object.m
--- 140088,140094 ----
  ef24198422c19f99b0c41be6a16f7081  libitm/testsuite/libitm.c/txrelease.c
  5eec74b1eee8d819e88b284abf80ec7c  libitm/useraction.cc
  6aa0b92295a7511a2af5672f4ad1cec4  libitm/util.cc
! 8d3c04999472cda2de4cc26cf7d98b90  libobjc/ChangeLog
  da63bef4f8e0d2401aecc4ea0b7a15bd  libobjc/Makefile.in
  f641586fd7145ce4812e780e634634c0  libobjc/NXConstStr.m
  1c7a98dcda1e595d5dfefb22b7ac0cd0  libobjc/Object.m
*************** e1510f8930909849e68a28748631d8f0  libobj
*** 139906,139912 ****
  ddc881248a93893607a35d7d02eec385  libobjc/aclocal.m4
  2aa2f11dd2c10338cfef038cf3b4efbb  libobjc/class.c
  a9245d99d9418e18cecf891d7a93d664  libobjc/config.h.in
! 8d0d516e29e00b4372c7358446578ad9  libobjc/configure
  c3dbf35dac4349f4521b471fcb0a843e  libobjc/configure.ac
  ab9f64ff2e016fc5b89d143c9aec2e12  libobjc/encoding.c
  76293018b84428f6f31f5a5074f9d1a7  libobjc/error.c
--- 140100,140106 ----
  ddc881248a93893607a35d7d02eec385  libobjc/aclocal.m4
  2aa2f11dd2c10338cfef038cf3b4efbb  libobjc/class.c
  a9245d99d9418e18cecf891d7a93d664  libobjc/config.h.in
! 7bb747b8bd040f48cd2a70716c8b3cbe  libobjc/configure
  c3dbf35dac4349f4521b471fcb0a843e  libobjc/configure.ac
  ab9f64ff2e016fc5b89d143c9aec2e12  libobjc/encoding.c
  76293018b84428f6f31f5a5074f9d1a7  libobjc/error.c
*************** a50aaef4b803051d8c8de65277787205  libobj
*** 139951,139964 ****
  1529c9317f23aa02b19c43cda7528d66  libobjc/selector.c
  e48bb3c47cdcb1bfade3ef0007f5a149  libobjc/sendmsg.c
  06be35842165837797461a0db264aeea  libobjc/thr.c
! bd1209da9f08e052abcdc86493fcf69e  libphobos/ChangeLog
  e188e263b43a1566b83ecb298034d491  libphobos/Makefile.am
  af795288599910bce0a497deb673a78f  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
  75f58302c64c916889366449a6c1e928  libphobos/acinclude.m4
  5d61fe3538c61043be580f44d89a0ccd  libphobos/aclocal.m4
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
! 12ec552df9c8aed74e1283361050b8c2  libphobos/configure
  122f630ac036808d09fb88947d310aff  libphobos/configure.ac
  782c279b3071b4e4641bddc2b665efbd  libphobos/configure.tgt
  63ec818a02a0e071420a85b12fbfd563  libphobos/d_rules.am
--- 140145,140158 ----
  1529c9317f23aa02b19c43cda7528d66  libobjc/selector.c
  e48bb3c47cdcb1bfade3ef0007f5a149  libobjc/sendmsg.c
  06be35842165837797461a0db264aeea  libobjc/thr.c
! ec48ab103df7d81bbe01267e5ccecbea  libphobos/ChangeLog
  e188e263b43a1566b83ecb298034d491  libphobos/Makefile.am
  af795288599910bce0a497deb673a78f  libphobos/Makefile.in
  ee88c20a7744a2305503e1670f3b7889  libphobos/README.gcc
  75f58302c64c916889366449a6c1e928  libphobos/acinclude.m4
  5d61fe3538c61043be580f44d89a0ccd  libphobos/aclocal.m4
  0c33f8a64a5c7307de4f56c482966852  libphobos/config.h.in
! 129fd2c7ca4ce5dbfdb19eb361fc5d33  libphobos/configure
  122f630ac036808d09fb88947d310aff  libphobos/configure.ac
  782c279b3071b4e4641bddc2b665efbd  libphobos/configure.tgt
  63ec818a02a0e071420a85b12fbfd563  libphobos/d_rules.am
*************** b394cf23a598d3271d7bd5c679c7febd  libpho
*** 140945,140957 ****
  fc53a03ee850127a74ad6bd174963745  libphobos/testsuite/libphobos.unittest/unittest.exp
  a8de1f183b347afc269d237f3fd14b61  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! c4c8f583a5025f32eda2a6d58be4ae27  libquadmath/ChangeLog
  d981cb45023d55b1fe9629d54c616528  libquadmath/Makefile.am
  8b9db4fd541847f61d62cd2525d1554f  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
  60e3e895657a5d17916b45bef8520907  libquadmath/aclocal.m4
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
! 2a5d8e9edcd17a353ac09eeaa1fa8c02  libquadmath/configure
  c16d6073d91cefda754d990ede4d9e9f  libquadmath/configure.ac
  93e59a240cab0611f80fc5d34139c86a  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
--- 141139,141151 ----
  fc53a03ee850127a74ad6bd174963745  libphobos/testsuite/libphobos.unittest/unittest.exp
  a8de1f183b347afc269d237f3fd14b61  libphobos/testsuite/testsuite_flags.in
  a916467b91076e631dd8edb7424769c7  libquadmath/COPYING.LIB
! cb1af5677883cb93efd6336dde1af0db  libquadmath/ChangeLog
  d981cb45023d55b1fe9629d54c616528  libquadmath/Makefile.am
  8b9db4fd541847f61d62cd2525d1554f  libquadmath/Makefile.in
  d9afbc1f1e04c7e461265ff9323cc6f4  libquadmath/acinclude.m4
  60e3e895657a5d17916b45bef8520907  libquadmath/aclocal.m4
  cf5a7864ff15ab4dd1604e0f6fe4e501  libquadmath/config.h.in
! 344768910683cd8b0073ec299948f43f  libquadmath/configure
  c16d6073d91cefda754d990ede4d9e9f  libquadmath/configure.ac
  93e59a240cab0611f80fc5d34139c86a  libquadmath/libquadmath.texi
  77280bb7ee423875e03d9c0d34527df6  libquadmath/libtool-version
*************** a73fdec6746eaad8ccdc8e8403aac562  libqua
*** 141085,141091 ****
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! 0c71b0f3db6c23412aa4c896679f8f8e  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  1a2ca7cd408b1705dc84c19070a7049b  libsanitizer/LOCAL_PATCHES
--- 141279,141285 ----
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! 344c7d49ee3e409de4821c5a1178cab7  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
  1a2ca7cd408b1705dc84c19070a7049b  libsanitizer/LOCAL_PATCHES
*************** f6023fedacb2c033b902f237dfb478e6  libsan
*** 141163,141169 ****
  faf2a6ac3826446f8109f955fc331f15  libsanitizer/asan/libtool-version
  ca2b59491c60b319280078740aa575b8  libsanitizer/builtins/assembly.h
  4d6948c4912be5da16e30aac001b87d7  libsanitizer/config.h.in
! d040794faf72614b530f74edf38810cc  libsanitizer/configure
  4fb8fe43cd5510b08a3abc9a38bc4ea3  libsanitizer/configure.ac
  56772d73b7fdd0b7fdb1c25ed2202e65  libsanitizer/configure.tgt
  c5fe0662e5d5bbb3d31d1a11669cdbb8  libsanitizer/hwasan/Makefile.am
--- 141357,141363 ----
  faf2a6ac3826446f8109f955fc331f15  libsanitizer/asan/libtool-version
  ca2b59491c60b319280078740aa575b8  libsanitizer/builtins/assembly.h
  4d6948c4912be5da16e30aac001b87d7  libsanitizer/config.h.in
! 806119bae4e8f9efd02d3702986a95b4  libsanitizer/configure
  4fb8fe43cd5510b08a3abc9a38bc4ea3  libsanitizer/configure.ac
  56772d73b7fdd0b7fdb1c25ed2202e65  libsanitizer/configure.tgt
  c5fe0662e5d5bbb3d31d1a11669cdbb8  libsanitizer/hwasan/Makefile.am
*************** f01966720c236be4a6f849bb79c2e3a0  libsan
*** 141581,141592 ****
  36c349526a8bcc6a104185c4571b5363  libsanitizer/ubsan/ubsan_value.cpp
  f95aed5d713e73ada16956190fa4ac58  libsanitizer/ubsan/ubsan_value.h
  f44dc970bc1adae9a128b178a339fd0e  libsanitizer/ubsan/ubsan_win_runtime_thunk.cpp
! c76554a95a7ca0d8dc8c336ffe8fb90f  libssp/ChangeLog
  3c64b74eec15b8c16d5cfabfe903d655  libssp/Makefile.am
  caac5761d3acfaa5d0d86a84253ad38b  libssp/Makefile.in
  f1ead518e8acee1f9c1e0e49fd4fa51d  libssp/aclocal.m4
  91a807dee830170e3dc7cde11ae0662d  libssp/config.h.in
! a29d2346b0641ce7bb3e0d322a2082db  libssp/configure
  89a15c32762c1812155bed2afe5a0ad0  libssp/configure.ac
  f7c6a5833f4ed82dcae4c6471b0e5968  libssp/gets-chk.c
  0ac32b60459d1fdec670990324d7bdc6  libssp/libtool-version
--- 141775,141786 ----
  36c349526a8bcc6a104185c4571b5363  libsanitizer/ubsan/ubsan_value.cpp
  f95aed5d713e73ada16956190fa4ac58  libsanitizer/ubsan/ubsan_value.h
  f44dc970bc1adae9a128b178a339fd0e  libsanitizer/ubsan/ubsan_win_runtime_thunk.cpp
! 116c4faba0089bc6456c191c34e240d0  libssp/ChangeLog
  3c64b74eec15b8c16d5cfabfe903d655  libssp/Makefile.am
  caac5761d3acfaa5d0d86a84253ad38b  libssp/Makefile.in
  f1ead518e8acee1f9c1e0e49fd4fa51d  libssp/aclocal.m4
  91a807dee830170e3dc7cde11ae0662d  libssp/config.h.in
! 2a79cf9d801cde51c304e9f62cfed916  libssp/configure
  89a15c32762c1812155bed2afe5a0ad0  libssp/configure.ac
  f7c6a5833f4ed82dcae4c6471b0e5968  libssp/gets-chk.c
  0ac32b60459d1fdec670990324d7bdc6  libssp/libtool-version
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 141611,141617 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 0a2e1785527933d722e219b480cf0122  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 141805,141811 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! c376a81fc382dd01548fc98c08d0a9cb  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** ed199f6700a016816d625b286bf25ead  libstd
*** 141834,141840 ****
  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
! 354ac6316e291b8feb9cb3ef5957429c  libstdc++-v3/configure
  d1b8e66f3a21a1e0ec3fdd829dea566c  libstdc++-v3/configure.ac
  bfcbc1fdbf99aa57e07470ca81fd7627  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
--- 142028,142034 ----
  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
! feeae486afb5508b110ab4dbd3daa09f  libstdc++-v3/configure
  d1b8e66f3a21a1e0ec3fdd829dea566c  libstdc++-v3/configure.ac
  bfcbc1fdbf99aa57e07470ca81fd7627  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
*************** bafd340e02d232fc7ced1eb5f68967ce  libstd
*** 142329,142335 ****
  95eb0b92d5c9a8ddf313e412fee97770  libstdc++-v3/include/bits/indirect.h
  473034b12d8308be48d4a3b85fe19d83  libstdc++-v3/include/bits/indirect_array.h
  ab0c92c57c5ec5cb9d0bfb3a7963d00c  libstdc++-v3/include/bits/invoke.h
! 11d329b94f374c9cc8f95f7e5a958ee5  libstdc++-v3/include/bits/ios_base.h
  2bc5cac03f5593d9be1d3d99b4b8f3b3  libstdc++-v3/include/bits/istream.tcc
  a63ce38f1a7add9247dbf486075308e8  libstdc++-v3/include/bits/iterator_concepts.h
  141c7da3c057e3f798bef5a54873d5cc  libstdc++-v3/include/bits/list.tcc
--- 142523,142529 ----
  95eb0b92d5c9a8ddf313e412fee97770  libstdc++-v3/include/bits/indirect.h
  473034b12d8308be48d4a3b85fe19d83  libstdc++-v3/include/bits/indirect_array.h
  ab0c92c57c5ec5cb9d0bfb3a7963d00c  libstdc++-v3/include/bits/invoke.h
! 24c85a910194edab3f4da441514c12c8  libstdc++-v3/include/bits/ios_base.h
  2bc5cac03f5593d9be1d3d99b4b8f3b3  libstdc++-v3/include/bits/istream.tcc
  a63ce38f1a7add9247dbf486075308e8  libstdc++-v3/include/bits/iterator_concepts.h
  141c7da3c057e3f798bef5a54873d5cc  libstdc++-v3/include/bits/list.tcc
*************** a0ff2aff5e6b290f02129d8fd5066f94  libstd
*** 142358,142364 ****
  5c23229552297aa0937e1eac544c60e6  libstdc++-v3/include/bits/postypes.h
  e2b07d6bac5a54e44812c2b83a5ccb42  libstdc++-v3/include/bits/predefined_ops.h
  26211880ae17ac4d714473ad1bc786e4  libstdc++-v3/include/bits/ptr_traits.h
! 083ee9dbf4a8803183e5f6a5d02a1c4f  libstdc++-v3/include/bits/quoted_string.h
  5d0c406a949446a5a88fc858e3f5724f  libstdc++-v3/include/bits/random.h
  4593452a515fffc6707a958d6847c516  libstdc++-v3/include/bits/random.tcc
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
--- 142552,142558 ----
  5c23229552297aa0937e1eac544c60e6  libstdc++-v3/include/bits/postypes.h
  e2b07d6bac5a54e44812c2b83a5ccb42  libstdc++-v3/include/bits/predefined_ops.h
  26211880ae17ac4d714473ad1bc786e4  libstdc++-v3/include/bits/ptr_traits.h
! 0ee20b758bc3a6d8ca12b81847727538  libstdc++-v3/include/bits/quoted_string.h
  5d0c406a949446a5a88fc858e3f5724f  libstdc++-v3/include/bits/random.h
  4593452a515fffc6707a958d6847c516  libstdc++-v3/include/bits/random.tcc
  b0c29f09a819ac9aa11c3507409c11ef  libstdc++-v3/include/bits/range_access.h
*************** eb20df8190cb844a12f9fd68d043bcf0  libstd
*** 142962,142968 ****
  7997eb362a00f19f0f8e29fe72718fba  libstdc++-v3/include/parallel/unique_copy.h
  322d276913feb4b729019573db0593af  libstdc++-v3/include/parallel/workstealing.h
  1bef868830f6ae886926e0673e218c09  libstdc++-v3/include/precompiled/extc++.h
! 0828ac924be9bb5d3a1b7242ef3aaf85  libstdc++-v3/include/precompiled/stdc++.h
  a62eb60403f5499c2d4a096e6a68b92b  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  6aa52d6b70bfb53073697375741dff45  libstdc++-v3/include/pstl/algorithm_fwd.h
--- 143156,143162 ----
  7997eb362a00f19f0f8e29fe72718fba  libstdc++-v3/include/parallel/unique_copy.h
  322d276913feb4b729019573db0593af  libstdc++-v3/include/parallel/workstealing.h
  1bef868830f6ae886926e0673e218c09  libstdc++-v3/include/precompiled/extc++.h
! cf74ef767d98cd8593a9671e010209ac  libstdc++-v3/include/precompiled/stdc++.h
  a62eb60403f5499c2d4a096e6a68b92b  libstdc++-v3/include/precompiled/stdtr1c++.h
  75cfb36aeb3ed8672bb4e2957272203c  libstdc++-v3/include/pstl/LICENSE.txt
  6aa52d6b70bfb53073697375741dff45  libstdc++-v3/include/pstl/algorithm_fwd.h
*************** a703e327cd408b5e3200f542691f8488  libstd
*** 143189,143195 ****
  b04deaf31e4823877dca0314eea59383  libstdc++-v3/libsupc++/exception
  ac12653e60f42cbe8bc530f83c4d81a1  libstdc++-v3/libsupc++/exception.h
  8cb7ef9933695804f855459d4b0661ec  libstdc++-v3/libsupc++/exception_defines.h
! 7b234712132acc640af14839be26227f  libstdc++-v3/libsupc++/exception_ptr.h
  031b50d84f4f67234d2b49e49a80206a  libstdc++-v3/libsupc++/function_type_info.cc
  f098af4b3136953260aa1e563ef265d3  libstdc++-v3/libsupc++/fundamental_type_info.cc
  489d888cfad1d3ad98fc33d277619862  libstdc++-v3/libsupc++/guard.cc
--- 143383,143389 ----
  b04deaf31e4823877dca0314eea59383  libstdc++-v3/libsupc++/exception
  ac12653e60f42cbe8bc530f83c4d81a1  libstdc++-v3/libsupc++/exception.h
  8cb7ef9933695804f855459d4b0661ec  libstdc++-v3/libsupc++/exception_defines.h
! a601a825e9a0af2217278df376089490  libstdc++-v3/libsupc++/exception_ptr.h
  031b50d84f4f67234d2b49e49a80206a  libstdc++-v3/libsupc++/function_type_info.cc
  f098af4b3136953260aa1e563ef265d3  libstdc++-v3/libsupc++/fundamental_type_info.cc
  489d888cfad1d3ad98fc33d277619862  libstdc++-v3/libsupc++/guard.cc
*************** ba1de75ac9c1bb7d2506c503fe17708a  libstd
*** 143375,143381 ****
  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
! 1bef68f90dc2e17700ce828fe45fb451  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  757f1e829f27dedf5e8d7d83b358ad27  libstdc++-v3/src/c++26/Makefile.am
  7bb4fc4ec0d17bf1e304be661919aad7  libstdc++-v3/src/c++26/Makefile.in
--- 143569,143575 ----
  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
! 7867ffe91c96734bed280c617cc05628  libstdc++-v3/src/c++23/std.cc.in
  ef2786c62e1aa27a5405d7bf70e5212c  libstdc++-v3/src/c++23/std.compat.cc.in
  757f1e829f27dedf5e8d7d83b358ad27  libstdc++-v3/src/c++26/Makefile.am
  7bb4fc4ec0d17bf1e304be661919aad7  libstdc++-v3/src/c++26/Makefile.in
*************** b8a53b2b8da32d102d69cbedea3d2216  libstd
*** 143455,143461 ****
  3b8655d6ba2097616073507ae193e3fe  libstdc++-v3/testsuite/17_intro/headers/c++1998/operator_names.cc
  871f71a25cb0a2e8e9022b769360d8ca  libstdc++-v3/testsuite/17_intro/headers/c++1998/profile_mode.cc
  68efb122e218e910a6f9b1452b33e77c  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc
! aef041bae3719f48d004f53439beca16  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc
  1a348612e7f9f2ad8a052e7a6b99f080  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_multiple_inclusion.cc
  4562c8eaa5f4cf23ec00694ed16211f4  libstdc++-v3/testsuite/17_intro/headers/c++2011/42319.cc
  bfe44018342421d38a0ae7c466c6964e  libstdc++-v3/testsuite/17_intro/headers/c++2011/67309.cc
--- 143649,143655 ----
  3b8655d6ba2097616073507ae193e3fe  libstdc++-v3/testsuite/17_intro/headers/c++1998/operator_names.cc
  871f71a25cb0a2e8e9022b769360d8ca  libstdc++-v3/testsuite/17_intro/headers/c++1998/profile_mode.cc
  68efb122e218e910a6f9b1452b33e77c  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++.cc
! 7ca05c0466ab5609e0b756b17439dff2  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc
  1a348612e7f9f2ad8a052e7a6b99f080  libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_multiple_inclusion.cc
  4562c8eaa5f4cf23ec00694ed16211f4  libstdc++-v3/testsuite/17_intro/headers/c++2011/42319.cc
  bfe44018342421d38a0ae7c466c6964e  libstdc++-v3/testsuite/17_intro/headers/c++2011/67309.cc
*************** a7d2f54afc515189e362a4ceecd33e09  libstd
*** 150650,150664 ****
  89a09409ee60724ad1389bea43bbbb8f  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/2.cc
  9e29f94e16fbab207f9fd160fe7e5acb  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/9523.cc
  673dee88b12e3373e936bc6870bbb7c9  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/bitmask_operators.cc
! bd30f27bd84c19b0a6212dfb5420be27  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc
  42937b07101bd5ed8ff152fc384804a9  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/constexpr_operators.cc
  65b21c3059044e4092830a89d44cf179  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/bitmask_operators.cc
! 41be8953ba699620a2547f0e70ed300b  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc
  c5cafa28356ad1c4a5daf35024f54e38  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/constexpr_operators.cc
  e33110c333c0021a0181ae1290a18ca6  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/bitmask_operators.cc
! cd674e3aedf4cc13a9f9816f93b2def9  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
  206b006df6b8eedb36c4a416b0d23993  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/constexpr_operators.cc
! 69d21176d452f11164e992d365386836  libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc
  65af6259234e3498f73e3a288143621c  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/1.cc
  20a39fd83926fb481fc8d8ec39130834  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/2.cc
  7ff6dda4bc5de3678e7593af74b5f041  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/1.cc
--- 150844,150858 ----
  89a09409ee60724ad1389bea43bbbb8f  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/2.cc
  9e29f94e16fbab207f9fd160fe7e5acb  libstdc++-v3/testsuite/27_io/ios_base/sync_with_stdio/9523.cc
  673dee88b12e3373e936bc6870bbb7c9  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/bitmask_operators.cc
! 27fff6dffc5d5ec973e38e3c878635dc  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc
  42937b07101bd5ed8ff152fc384804a9  libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/constexpr_operators.cc
  65b21c3059044e4092830a89d44cf179  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/bitmask_operators.cc
! 12e6672ce151feef1c7516f91cf4faa4  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc
  c5cafa28356ad1c4a5daf35024f54e38  libstdc++-v3/testsuite/27_io/ios_base/types/iostate/constexpr_operators.cc
  e33110c333c0021a0181ae1290a18ca6  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/bitmask_operators.cc
! bc98dc7dcbec37d055e191173a28cbc2  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
  206b006df6b8eedb36c4a416b0d23993  libstdc++-v3/testsuite/27_io/ios_base/types/openmode/constexpr_operators.cc
! 005981dc0c7eb4e98f74606fce743769  libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc
  65af6259234e3498f73e3a288143621c  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/1.cc
  20a39fd83926fb481fc8d8ec39130834  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/char/2.cc
  7ff6dda4bc5de3678e7593af74b5f041  libstdc++-v3/testsuite/27_io/manipulators/adjustfield/wchar_t/1.cc
*************** ff2b916d222771b590e8628ab36923e5  libstd
*** 153558,153564 ****
  1e9ec7b42c6e4f14d1419d9ef5a5a7d1  libstdc++-v3/testsuite/util/common_type/priority_queue/string_form.hpp
  80b99e023b02012abf71a149f21b1652  libstdc++-v3/testsuite/util/debug/checks.h
  a8df77c6f6c2beb546ceff7f5a8000ed  libstdc++-v3/testsuite/util/debug/unordered_checks.h
! 768e395a1ea93c9426b2c8b01c6798ec  libstdc++-v3/testsuite/util/exception/safety.h
  5fcb49246388ddc3a703251c5e0283f9  libstdc++-v3/testsuite/util/hash_fn/dna_str_limit.hpp
  26816e0afab9ddc20b02de41dd8b2071  libstdc++-v3/testsuite/util/hash_fn/limit_string_hash_fn.hpp
  ca50f7282a6fd2cb8cc768faf6fdb917  libstdc++-v3/testsuite/util/hash_fn/string_hash_fn.hpp
--- 153752,153758 ----
  1e9ec7b42c6e4f14d1419d9ef5a5a7d1  libstdc++-v3/testsuite/util/common_type/priority_queue/string_form.hpp
  80b99e023b02012abf71a149f21b1652  libstdc++-v3/testsuite/util/debug/checks.h
  a8df77c6f6c2beb546ceff7f5a8000ed  libstdc++-v3/testsuite/util/debug/unordered_checks.h
! 5dada16221bc63b0ad5b2f44ea6254ec  libstdc++-v3/testsuite/util/exception/safety.h
  5fcb49246388ddc3a703251c5e0283f9  libstdc++-v3/testsuite/util/hash_fn/dna_str_limit.hpp
  26816e0afab9ddc20b02de41dd8b2071  libstdc++-v3/testsuite/util/hash_fn/limit_string_hash_fn.hpp
  ca50f7282a6fd2cb8cc768faf6fdb917  libstdc++-v3/testsuite/util/hash_fn/string_hash_fn.hpp
*************** a44ae6829c2d6cbdbd08359d948c3328  libstd
*** 153662,153673 ****
  8b5ea64e3eece45f10f299183d0e13bd  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  bb26af2dc6e1df1770a70b2035e3b013  libtool.m4
! 9eece7638ad03a73fc9daf2ee8269f6a  libvtv/ChangeLog
  2d74ef98580bcc9fd2c7902f0022be3a  libvtv/Makefile.am
  1f8c57ab70163566fc7c8ce5eb9ee70d  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
  9326b744fb18bad65d4738d0d25f70c7  libvtv/aclocal.m4
! 08f5bcef4b072955031fb92a63d61d77  libvtv/configure
  aef48e6e222ecdfc5d416dc52541151f  libvtv/configure.ac
  2067af3e7f4f30283d0d6b41dcf354bf  libvtv/configure.tgt
  2caccd848c579fcddd2a8c8106cfaff9  libvtv/scripts/run-testsuite.sh
--- 153856,153867 ----
  8b5ea64e3eece45f10f299183d0e13bd  libstdc++-v3/testsuite/util/thread/all.h
  b950d655469c477755252b1e18009596  libtool-ldflags
  bb26af2dc6e1df1770a70b2035e3b013  libtool.m4
! 38f6015f6db991c6fba0502e1806352f  libvtv/ChangeLog
  2d74ef98580bcc9fd2c7902f0022be3a  libvtv/Makefile.am
  1f8c57ab70163566fc7c8ce5eb9ee70d  libvtv/Makefile.in
  3b765c4f4a0a0f606db1472bce2b8d29  libvtv/acinclude.m4
  9326b744fb18bad65d4738d0d25f70c7  libvtv/aclocal.m4
! f746a144d2dfa8a8c5fd9b7d66844b79  libvtv/configure
  aef48e6e222ecdfc5d416dc52541151f  libvtv/configure.ac
  2067af3e7f4f30283d0d6b41dcf354bf  libvtv/configure.tgt
  2caccd848c579fcddd2a8c8106cfaff9  libvtv/scripts/run-testsuite.sh
*************** b75b4606a8f849a2e4931aeabb4c2165  libvtv
*** 153745,153756 ****
  343510afde83a825cc4129be092e4f05  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  2d10540be0b9516e14daf48616877aad  ltmain.sh
! dd8dfc4ff2c7b5e7c7a03b823bca02ae  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  92f6f16bc389d92c31885942b6b0f390  lto-plugin/Makefile.in
  79b337b8e2e684d93cd124b348d1261a  lto-plugin/aclocal.m4
  26e3d7e6d62bd000d0ad9db3b610e91c  lto-plugin/config.h.in
! a741a61330f9c8a0ba5b601ba577b6ae  lto-plugin/configure
  40efd97088318d4823aab5e72c85acd0  lto-plugin/configure.ac
  4b034fdd10d7c5f4703a74a6c18e8459  lto-plugin/lto-plugin.c
  d00a1ca9cd8ba450f1a1028fd3e60dc3  lto-plugin/lto-plugin.map
--- 153939,153950 ----
  343510afde83a825cc4129be092e4f05  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  2d10540be0b9516e14daf48616877aad  ltmain.sh
! 7b76051274c4bd826e59cad7d5a43078  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  92f6f16bc389d92c31885942b6b0f390  lto-plugin/Makefile.in
  79b337b8e2e684d93cd124b348d1261a  lto-plugin/aclocal.m4
  26e3d7e6d62bd000d0ad9db3b610e91c  lto-plugin/config.h.in
! 3a6c33c7339d5b51fb898b96bf0cd423  lto-plugin/configure
  40efd97088318d4823aab5e72c85acd0  lto-plugin/configure.ac
  4b034fdd10d7c5f4703a74a6c18e8459  lto-plugin/lto-plugin.c
  d00a1ca9cd8ba450f1a1028fd3e60dc3  lto-plugin/lto-plugin.map
*************** fbe2467afef81c41c166173adeb0ee20  mkdep
*** 153779,153785 ****
  40bb1f4ce4a60a36d1ec50d66aeed4d1  test-driver
  cb06c1be6a41d68b0a65e0c1a91752bc  ylwrap
  c4b157dd71edcc1b9b2cc9ea24b49694  zlib/CMakeLists.txt
! 250bd9eb3ca65d18d6352916e5f7609e  zlib/ChangeLog
  f10e5e9394787b288e91fed29533720a  zlib/ChangeLog.gcj
  0e9a37be8e3b85cc0ccf60504064c297  zlib/ChangeLog.jit
  b1d66913edd014b838cb18769d4fe7c6  zlib/FAQ
--- 153973,153979 ----
  40bb1f4ce4a60a36d1ec50d66aeed4d1  test-driver
  cb06c1be6a41d68b0a65e0c1a91752bc  ylwrap
  c4b157dd71edcc1b9b2cc9ea24b49694  zlib/CMakeLists.txt
! 72f78960d7234841a947ab20410f4a06  zlib/ChangeLog
  f10e5e9394787b288e91fed29533720a  zlib/ChangeLog.gcj
  0e9a37be8e3b85cc0ccf60504064c297  zlib/ChangeLog.jit
  b1d66913edd014b838cb18769d4fe7c6  zlib/FAQ
*************** cea51e08d9b176c6bf8b5820169d4102  zlib/a
*** 153794,153800 ****
  f16cd4621f5561cf147b5e56a8af1946  zlib/amiga/Makefile.pup
  315c9e3e7dd1d24aeb9d6bc55b7de5fd  zlib/amiga/Makefile.sas
  b0b5688c87d809bb32d0923dbef28ee6  zlib/compress.c
! c3f7c53bf1613e4a9548ed41a7bcb4c0  zlib/configure
  5a7530d5dea3e90a954fde9b65cb7982  zlib/configure.ac
  430971321023127490ca5e9b05fcb924  zlib/contrib/README.contrib
  cd14a97dd8a0613bb1244a68c0c764d6  zlib/contrib/ada/buffer_demo.adb
--- 153988,153994 ----
  f16cd4621f5561cf147b5e56a8af1946  zlib/amiga/Makefile.pup
  315c9e3e7dd1d24aeb9d6bc55b7de5fd  zlib/amiga/Makefile.sas
  b0b5688c87d809bb32d0923dbef28ee6  zlib/compress.c
! d0c787073ad030c0c100585e03743157  zlib/configure
  5a7530d5dea3e90a954fde9b65cb7982  zlib/configure.ac
  430971321023127490ca5e9b05fcb924  zlib/contrib/README.contrib
  cd14a97dd8a0613bb1244a68c0c764d6  zlib/contrib/ada/buffer_demo.adb
diff -Nrcpad gcc-16-20251102/config/ChangeLog gcc-16-20251109/config/ChangeLog
*** gcc-16-20251102/config/ChangeLog	Sun Nov  2 22:32:16 2025
--- gcc-16-20251109/config/ChangeLog	Sun Nov  9 22:32:42 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* clang-plugin.m4: Sync with binutils.
+ 	* gcc-plugin.m4: Ditto.
+ 
  2025-10-02  H.J. Lu  <hjl.tools@gmail.com>
  
  	* clang-plugin.m4: Synced from binutils-gdb.
diff -Nrcpad gcc-16-20251102/config/clang-plugin.m4 gcc-16-20251109/config/clang-plugin.m4
*** gcc-16-20251102/config/clang-plugin.m4	Sun Nov  2 22:32:16 2025
--- gcc-16-20251109/config/clang-plugin.m4	Sun Nov  9 22:32:42 2025
*************** AC_DEFUN([CLANG_PLUGIN_FILE],[dnl
*** 20,62 ****
    yes
  #endif
      ], clang_cv_is_clang=yes, clang_cv_is_clang=no)])
    plugin_file=
    if test $clang_cv_is_clang = yes; then
      AC_MSG_CHECKING([for clang plugin file])
      plugin_names="LLVMgold.so"
      for plugin in $plugin_names; do
        plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	AC_CHECK_TOOL(LLVM_CONFIG, llvm-config)
! 	if test "$?" != 0; then
! 	  AC_MSG_ERROR([Required tool 'llvm-config' not found on PATH.])
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
-     done
-     if test -z $plugin_file; then
-       AC_MSG_ERROR([Couldn't find clang plugin file for $CC.])
-     fi
-     dnl Check if ${AR} $plugin_option rc works.
-     AC_CHECK_TOOL(AR, ar)
-     if test "${AR}" = "" ; then
-       AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.])
-     fi
-     plugin_option="--plugin $plugin_file"
-     touch conftest.c
-     ${AR} $plugin_option rc conftest.a conftest.c
-     if test "$?" != 0; then
-       AC_MSG_WARN([Failed: $AR $plugin_option rc])
        plugin_file=
      fi
-     rm -f conftest.*
-     AC_MSG_RESULT($plugin_file)
    fi
    $1="$plugin_file"
  ])
--- 20,61 ----
    yes
  #endif
      ], clang_cv_is_clang=yes, clang_cv_is_clang=no)])
+   AC_CHECK_TOOL(LLVM_CONFIG, llvm-config)
    plugin_file=
    if test $clang_cv_is_clang = yes; then
      AC_MSG_CHECKING([for clang plugin file])
      plugin_names="LLVMgold.so"
      for plugin in $plugin_names; do
        plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
        plugin_file=
+     done
+     if test -z "$plugin_file"; then
+       AC_MSG_RESULT([no])
+     else
+       AC_MSG_RESULT($plugin_file)
+       dnl Check if ${AR} $plugin_option rc works.
+       AC_CHECK_TOOL(AR, ar)
+       if test -z "${AR}"; then
+ 	AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.])
+       fi
+       plugin_option="--plugin $plugin_file"
+       touch conftest.c
+       ${AR} $plugin_option rc conftest.a conftest.c
+       if test "$?" != 0; then
+ 	AC_MSG_WARN([Failed: $AR $plugin_option rc])
+ 	plugin_file=
+       fi
+       rm -f conftest.*
      fi
    fi
    $1="$plugin_file"
  ])
*************** AC_DEFUN([CLANG_PLUGIN_FILE_FOR_TARGET],
*** 84,113 ****
    CC="$saved_CC"
    plugin_file=
    if test $clang_target_cv_working = yes; then
      AC_MSG_CHECKING([for clang plugin file for target])
      plugin_names="LLVMgold.so"
-     dnl Check if the host compiler is used.
      for plugin in $plugin_names; do
        plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	GCC_TARGET_TOOL(llvm-config, LLVM_CONFIG_FOR_TARGET, LLVM_CONFIG)
! 	if test "$?" != 0; then
! 	  AC_MSG_ERROR([Required target tool 'llvm-config' not found.])
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG_FOR_TARGET --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
!       fi
!       if test x$plugin_file != x$plugin; then
  	break;
        fi
        plugin_file=
      done
!     if test -n $plugin_file; then
!       AC_MSG_RESULT($plugin_file)
!     else
        AC_MSG_RESULT([no])
      fi
    fi
    $1="$plugin_file"
--- 83,108 ----
    CC="$saved_CC"
    plugin_file=
    if test $clang_target_cv_working = yes; then
+     GCC_TARGET_TOOL(llvm-config, LLVM_CONFIG_FOR_TARGET, LLVM_CONFIG)
      AC_MSG_CHECKING([for clang plugin file for target])
      plugin_names="LLVMgold.so"
      for plugin in $plugin_names; do
        plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
  	break;
        fi
+       if test -n "${LLVM_CONFIG_FOR_TARGET}"; then
+ 	plugin_file=`${LLVM_CONFIG_FOR_TARGET} --libdir`/$plugin
+ 	if test -f "$plugin_file"; then
+ 	  break;
+ 	fi
+       fi
        plugin_file=
      done
!     if test -z "$plugin_file"; then
        AC_MSG_RESULT([no])
+     else
+       AC_MSG_RESULT($plugin_file)
      fi
    fi
    $1="$plugin_file"
diff -Nrcpad gcc-16-20251102/config/gcc-plugin.m4 gcc-16-20251109/config/gcc-plugin.m4
*** gcc-16-20251102/config/gcc-plugin.m4	Sun Nov  2 22:32:16 2025
--- gcc-16-20251109/config/gcc-plugin.m4	Sun Nov  9 22:32:42 2025
*************** dnl GCC_PLUGIN_OPTION
*** 136,143 ****
  dnl    (SHELL-CODE_HANDLER)
  dnl
  AC_DEFUN([GCC_PLUGIN_OPTION],[dnl
  AC_MSG_CHECKING([for -plugin option])
- 
  plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
  plugin_option=
  for plugin in $plugin_names; do
--- 136,146 ----
  dnl    (SHELL-CODE_HANDLER)
  dnl
  AC_DEFUN([GCC_PLUGIN_OPTION],[dnl
+ AC_CHECK_TOOL(AR, ar)
+ if test -z "${AR}"; then
+   AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.])
+ fi
  AC_MSG_CHECKING([for -plugin option])
  plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
  plugin_option=
  for plugin in $plugin_names; do
*************** for plugin in $plugin_names; do
*** 150,173 ****
      break
    fi
  done
! dnl Check if ${AR} $plugin_option rc works.
! AC_CHECK_TOOL(AR, ar)
! if test "${AR}" = "" ; then
!   AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.])
! fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   AC_MSG_WARN([Failed: $AR $plugin_option rc])
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   $1="$plugin_option"
!   AC_MSG_RESULT($plugin_option)
! else
    AC_MSG_RESULT([no])
  fi
  ])
  
  dnl
--- 153,172 ----
      break
    fi
  done
! if test -z "$plugin_option"; then
    AC_MSG_RESULT([no])
+ else
+   AC_MSG_RESULT($plugin_option)
+   dnl Check if ${AR} $plugin_option rc works.
+   touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     AC_MSG_WARN([Failed: $AR $plugin_option rc])
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ $1="$plugin_option"
  ])
  
  dnl
*************** AC_CACHE_CHECK([for gcc for target], gcc
*** 190,196 ****
    gcc_target_cv_working=yes,
    gcc_target_cv_working=no)])
  CC="$saved_CC"
! AC_MSG_CHECKING([for -plugin option])
  plugin_option=
  if test $gcc_target_cv_working = yes; then
    plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
--- 189,195 ----
    gcc_target_cv_working=yes,
    gcc_target_cv_working=no)])
  CC="$saved_CC"
! AC_MSG_CHECKING([for target -plugin option])
  plugin_option=
  if test $gcc_target_cv_working = yes; then
    plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
*************** if test $gcc_target_cv_working = yes; th
*** 205,214 ****
      fi
    done
  fi
! if test -n "$plugin_option"; then
!   $1="$plugin_option"
!   AC_MSG_RESULT($plugin_option)
! else
    AC_MSG_RESULT([no])
  fi
  ])
--- 204,213 ----
      fi
    done
  fi
! if test -z "$plugin_option"; then
    AC_MSG_RESULT([no])
+ else
+   AC_MSG_RESULT($plugin_option)
  fi
+ $1="$plugin_option"
  ])
diff -Nrcpad gcc-16-20251102/configure gcc-16-20251109/configure
*** gcc-16-20251102/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/configure	Sun Nov  9 22:32:42 2025
*************** rm -f conftest*
*** 14565,14579 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 14565,14571 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 14665,14686 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 14657,14687 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 14772,14813 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    PLUGIN_FILE="$plugin_file"
  
  if test -n "$PLUGIN_FILE"; then
    PLUGIN_OPTION="--plugin $PLUGIN_FILE"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 14773,14798 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    PLUGIN_FILE="$plugin_file"
  
  if test -n "$PLUGIN_FILE"; then
    PLUGIN_OPTION="--plugin $PLUGIN_FILE"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 14899,14923 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   PLUGIN_OPTION="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  AR_PLUGIN_OPTION=
--- 14884,14922 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ PLUGIN_OPTION="$plugin_option"
  
  fi
  AR_PLUGIN_OPTION=
*************** $as_echo "$clang_target_cv_working" >&6;
*** 20642,20654 ****
    CC="$saved_CC"
    plugin_file=
    if test $clang_target_cv_working = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file for target" >&5
! $as_echo_n "checking for clang plugin file for target... " >&6; }
!     plugin_names="LLVMgold.so"
!         for plugin in $plugin_names; do
!       plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target llvm-config" >&5
  $as_echo_n "checking where to find the target llvm-config... " >&6; }
  if test "x${build}" != "x${host}" ; then
    if expr "x$LLVM_CONFIG_FOR_TARGET" : "x/" > /dev/null; then
--- 20641,20647 ----
    CC="$saved_CC"
    plugin_file=
    if test $clang_target_cv_working = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target llvm-config" >&5
  $as_echo_n "checking where to find the target llvm-config... " >&6; }
  if test "x${build}" != "x${host}" ; then
    if expr "x$LLVM_CONFIG_FOR_TARGET" : "x/" > /dev/null; then
*************** $as_echo "pre-installed" >&6; }
*** 20679,20703 ****
    fi
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required target tool 'llvm-config' not found." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG_FOR_TARGET --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
!       fi
!       if test x$plugin_file != x$plugin; then
  	break;
        fi
        plugin_file=
      done
!     if test -n $plugin_file; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!     else
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
      fi
    fi
    PLUGIN_FILE_FOR_TARGET="$plugin_file"
--- 20672,20699 ----
    fi
  fi
  
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file for target" >&5
! $as_echo_n "checking for clang plugin file for target... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${COMPILER_FOR_TARGET} ${CFLAGS_FOR_TARGET} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
  	break;
        fi
+       if test -n "${LLVM_CONFIG_FOR_TARGET}"; then
+ 	plugin_file=`${LLVM_CONFIG_FOR_TARGET} --libdir`/$plugin
+ 	if test -f "$plugin_file"; then
+ 	  break;
+ 	fi
+       fi
        plugin_file=
      done
!     if test -z "$plugin_file"; then
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
+ $as_echo "$plugin_file" >&6; }
      fi
    fi
    PLUGIN_FILE_FOR_TARGET="$plugin_file"
*************** fi
*** 20738,20745 ****
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_target_cv_working" >&5
  $as_echo "$gcc_target_cv_working" >&6; }
  CC="$saved_CC"
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
  plugin_option=
  if test $gcc_target_cv_working = yes; then
    plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
--- 20734,20741 ----
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_target_cv_working" >&5
  $as_echo "$gcc_target_cv_working" >&6; }
  CC="$saved_CC"
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for target -plugin option" >&5
! $as_echo_n "checking for target -plugin option... " >&6; }
  plugin_option=
  if test $gcc_target_cv_working = yes; then
    plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
*************** if test $gcc_target_cv_working = yes; th
*** 20754,20767 ****
      fi
    done
  fi
! if test -n "$plugin_option"; then
!   PLUGIN_OPTION_FOR_TARGET="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$PLUGIN_OPTION_FOR_TARGET"; then
--- 20750,20763 ----
      fi
    done
  fi
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
  fi
+ PLUGIN_OPTION_FOR_TARGET="$plugin_option"
  
  fi
  if test -n "$PLUGIN_OPTION_FOR_TARGET"; then
diff -Nrcpad gcc-16-20251102/gcc/ChangeLog gcc-16-20251109/gcc/ChangeLog
*** gcc-16-20251102/gcc/ChangeLog	Sun Nov  2 22:32:16 2025
--- gcc-16-20251109/gcc/ChangeLog	Sun Nov  9 22:32:42 2025
***************
*** 1,3 ****
--- 1,637 ----
+ 2025-11-08  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR tree-optimization/122126
+ 	* gimple-isel.cc (gimple_expand_vec_set_extract_expr): Add bound check.
+ 
+ 2025-11-08  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/122097
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_const_vector_same_bytes_p): Add processing for
+ 	floating-point vector data.
+ 
+ 2025-11-08  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR tree-optimization/122065
+ 	* tree-vect-generic.cc (target_supports_mult_synth_alg): Add helper to
+ 	check mult synth.
+ 	(expand_vector_mult): Optimize mult when const is uniform but not
+ 	power of 2.
+ 
+ 2025-11-08  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122599
+ 	* tree-scalar-evolution.cc (final_value_replacement_loop): Move
+ 	the removal of the phi until after the gimplification of the final
+ 	value expression.
+ 
+ 2025-11-07  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* gdbhooks.py (class AnaSupernodePrinter): New.
+ 	(class AnaExplodedNodePrinter): New.
+ 	(build_pretty_printer): Register the above.
+ 
+ 2025-11-07  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree.cc (build_call_nary): Remove decl.
+ 	Add template definition that uses std::initializer_list<tree>
+ 	and call build_call.
+ 	(build_call): New declaration.
+ 	* tree.h (build_call_nary): Remove.
+ 	(build_call): New function.
+ 
+ 2025-11-07  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* config/riscv/autovec.md: Use const_1_operand for scale and
+ 	extend predicates.
+ 	* config/riscv/riscv-v.cc (expand_gather_scatter): Remove scale
+ 	and extension handling.
+ 
+ 2025-11-07  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* tree-vect-stmts.cc (vect_use_strided_gather_scatters_p):
+ 	Do not convert offset type.
+ 
+ 2025-11-07  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* tree-vect-data-refs.cc (struct gather_scatter_config):
+ 	Add scale.
+ 	(vect_gather_scatter_get_configs): Try various scales.
+ 	(vect_gather_scatter_fn_p): Add scale handling.
+ 	(vect_check_gather_scatter): Add scale parameter.
+ 	* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
+ 	Ditto.
+ 	(vect_truncate_gather_scatter_offset): Ditto.
+ 	(vect_use_grouped_gather): Ditto.
+ 	(get_load_store_type): Ditto.
+ 	(vectorizable_store): Scale offset if necessary.
+ 	(vectorizable_load): Ditto.
+ 	* tree-vectorizer.h (struct vect_load_store_data): Add
+ 	supported_scale.
+ 	(vect_gather_scatter_fn_p): Add argument.
+ 
+ 2025-11-07  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* tree-vect-data-refs.cc (struct gather_scatter_config): New
+ 	struct to hold gather/scatter configurations.
+ 	(vect_gather_scatter_which_ifn): New function to determine which
+ 	IFN to use.
+ 	(vect_gather_scatter_get_configs): New function to enumerate all
+ 	target-supported configs.
+ 	(vect_gather_scatter_fn_p): Rework to use
+ 	vect_gather_scatter_get_configs and try sign-swapped offset.
+ 	(vect_check_gather_scatter): Use new supported offset vectype
+ 	argument.
+ 	* tree-vect-stmts.cc (check_load_store_for_partial_vectors):
+ 	Ditto.
+ 	(vect_truncate_gather_scatter_offset): Ditto.
+ 	(vect_use_grouped_gather): Ditto.
+ 	(get_load_store_type): Ditto.
+ 	(vectorizable_store): Convert to sign-swapped offset type if
+ 	needed.
+ 	(vectorizable_load): Ditto.
+ 	* tree-vectorizer.h (struct vect_load_store_data): Add
+ 	supported_offset_vectype.
+ 	(vect_gather_scatter_fn_p): Add argument.
+ 
+ 2025-11-07  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122588
+ 	* tree-ssa-forwprop.cc (optimize_unreachable): Don't touch
+ 	if the condition was already true or false.
+ 
+ 2025-11-07  David Faust  <david.faust@oracle.com>
+ 
+ 	PR target/122140
+ 	* config/bpf/bpf.cc (bpf_expand_cpymem): Fix off-by-one offset
+ 	in backwards loop.  Improve src and dest addrs used for the
+ 	branch condition.
+ 	(emit_move_loop): Improve emitted set insns and remove the
+ 	explict temporary register.
+ 
+ 2025-11-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122577
+ 	* tree-vect-stmts.cc (vectorizable_conversion): Allow conversions
+ 	from non-mode-precision types.
+ 
+ 2025-11-07  Pan Li  <pan2.li@intel.com>
+ 
+ 	* match.pd: Leverage usmul_widen_mult by bit_ior based
+ 	unsigned SAT_MUL pattern.
+ 
+ 2025-11-07  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/autovec-opt.md (*vwsll_sign_extend_<mode>): Add
+ 	pattern to combine vsext.vf2 and vslli.vi to vwsll.vi.
+ 
+ 2025-11-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122589
+ 	PR middle-end/122594
+ 	* gimple-iterator.cc (gsi_replace_with_seq): Instead of
+ 	removing the last stmt from the sequence with gsi_remove,
+ 	split it using gsi_split_seq_before.
+ 	(gsi_split_seq_before): Fix bogus documentation.
+ 
+ 2025-11-07  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/118328
+ 	* config/aarch64/aarch64.cc (handle_aarch64_vector_pcs_attribute):
+ 	Add handling for ARM_PCS_PRESERVE_NONE.
+ 	(aarch64_pcs_exclusions): New definition.
+ 	(aarch64_gnu_attributes): Add entry for preserve_none and add
+ 	aarch64_pcs_exclusions to aarch64_vector_pcs entry.
+ 	(aarch64_preserve_none_abi): New function.
+ 	(aarch64_fntype_abi): Add handling for preserve_none.
+ 	(aarch64_reg_save_mode): Add handling for ARM_PCS_PRESERVE_NONE.
+ 	(aarch64_hard_regno_call_part_clobbered): Add handling for
+ 	ARM_PCS_PRESERVE_NONE.
+ 	(num_pcs_arg_regs): New helper function.
+ 	(get_pcs_arg_reg): New helper function.
+ 	(aarch64_function_ok_for_sibcall): Add handling for ARM_PCS_PRESERVE_NONE.
+ 	(aarch64_layout_arg): Add preserve_none argument lauout..
+ 	(function_arg_preserve_none_regno_p): New helper function.
+ 	(aarch64_function_arg): Update to handle preserve_none.
+ 	(function_arg_preserve_none_regno_p): Update logic for preserve_none.
+ 	(aarch64_expand_builtin_va_start): Add preserve_none layout.
+ 	(aarch64_setup_incoming_varargs): Add preserve_none layout.
+ 	(aarch64_is_variant_pcs): Update for case of ARM_PCS_PRESERVE_NONE.
+ 	(aarch64_comp_type_attributes): Add preserve_none.
+ 	* config/aarch64/aarch64.h (NUM_PRESERVE_NONE_ARG_REGS): New macro.
+ 	(PRESERVE_NONE_REGISTERS): New macro.
+ 	(enum arm_pcs): Add ARM_PCS_PRESERVE_NONE.
+ 	* doc/extend.texi (preserve_none): Add docs for new attribute.
+ 
+ 2025-11-07  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/autovec-opt.md (*widen_mul_plus_vx_<mode>): Add
+ 	new pattern to combine the vwmaccu.vx.
+ 	* config/riscv/vector.md (*pred_widen_mul_plus_u_vx<mode>_undef):
+ 	Add undef define_insn for vmwaccu.vx emiting.
+ 	(@pred_widen_mul_plus_u_vx<mode>): Ditto.
+ 
+ 2025-11-07  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_sign_extend_if_subreg_prom_p): Determine if the
+ 	current operand	is SUBREG and if the source of SUBREG is
+ 	the sign-extended value.
+ 	(loongarch_expand_conditional_move): Optimize.
+ 
+ 2025-11-07  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_canonicalize_int_order_test): Support GT GTU LT
+ 	and LTU.
+ 	(loongarch_extend_comparands): Expand the scope of op1 from
+ 	0 to all immediate values.
+ 	* config/loongarch/loongarch.md
+ 	(*sge<u>_<X:mode><GPR:mode>): New template.
+ 
+ 2025-11-07  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_legitimize_move): Optimize.
+ 
+ 2025-11-06  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* doc/invoke.texi (AArch64 Options): Clean up description of
+ 	-mbranch-protection= argument.
+ 	(ARM Options): Likewise.
+ 
+ 2025-11-06  Alejandro Colomar  <alx@kernel.org>
+ 
+ 	* doc/extend.texi: Move _Countof under 'Syntax Extensions'.
+ 
+ 2025-11-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122516
+ 	* config/avr/elf.h (SUPPORTS_SHF_GNU_RETAIN): Define if
+ 	HAVE_GAS_SHF_GNU_RETAIN.
+ 
+ 2025-11-06  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_noce_conversion_profitable_p): Ignore
+ 	assignments of (const_int 0) to a register.  They will get propagated
+ 	away.
+ 
+ 2025-11-06  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.cc (avr_output_addr_vec): Output
+ 	a valid opcode prior to the first gs() label provided:
+ 	- The code is compiled for an arch that has AVR-SD mcus, and
+ 	- the function has a "section" attribute, and
+ 	- the function has a gs() label addresses switch/case table.
+ 
+ 2025-11-06  Your Name  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/121136
+ 	* config/riscv/riscv.md: Add define_insn to test the
+ 	upper bits of a register against zero using sltiu when
+ 	the bits are extracted via zero_extract or logial right shift.
+ 	Add 3->2 define_splits for gtu/leu cases testing upper bits
+ 	against zero.
+ 
+ 2025-11-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-core.h (tree_ssa_name::active_iterated_stmt): Mark
+ 	GTY((skip(""))).
+ 
+ 2025-11-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* ssa-iterators.h (imm_use_iterator::name): Add.
+ 	(delink_imm_use): When in a FOR_EACH_IMM_USE_STMT iteration
+ 	enforce we only remove uses from the current stmt.
+ 	(end_imm_use_stmt_traverse): Reset current stmt.
+ 	(first_imm_use_stmt): Assert no FOR_EACH_IMM_USE_STMT on
+ 	var is in progress.  Set the current stmt.
+ 	(next_imm_use_stmt): Set the current stmt.
+ 	(auto_end_imm_use_fast_traverse): New, lower iteration
+ 	depth upon destruction.
+ 	(first_readonly_imm_use): Bump the iteration depth.
+ 	* tree-core.h (tree_ssa_name::active_iterated_stmt,
+ 	tree_ssa_name::fast_iteration_depth): New members when
+ 	ENABLE_GIMPLE_CHECKING.
+ 	* tree-ssanames.cc (make_ssa_name_fn): Initialize
+ 	immediate use verifier bookkeeping members.
+ 
+ 2025-11-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122502
+ 	* ssa-iterators.h (imm_use_iterator::iter_node): Remove.
+ 	(imm_use_iterator::next_stmt_use): New.
+ 	(next_readonly_imm_use): Adjust checking code.
+ 	(end_imm_use_stmt_traverse): Simplify.
+ 	(link_use_stmts_after): Likewise.  Return the last use
+ 	with the same stmt.
+ 	(first_imm_use_stmt): Simplify.  Set next_stmt_use.
+ 	(next_imm_use_stmt): Likewise.
+ 	(end_imm_use_on_stmt_p): Adjust.
+ 
+ 2025-11-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	* doc/tree-ssa.texi: Update immediate use iterator
+ 	documentation.
+ 	* ssa-iterators.h: Likewise.
+ 
+ 2025-11-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/113632
+ 	* range-op-mixed.h (operator_bitwise_xor): Relocate and adjust.
+ 	(operator_bitwise_xor::m_and, m_or, m_not): New.
+ 	* range-op.cc (operator_bitwise_xor::fold_range): New.
+ 
+ 2025-11-06  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config.gcc: Support --with-cmodel={medium,normal} and make
+ 	medium the default for LoongArch, define TARGET_DEFAULT_CMODEL
+ 	as the selected value.
+ 	* config/loongarch/loongarch-opts.cc: Use TARGET_DEFAULT_CMODEL
+ 	instead of hard coding CMODEL_NORMAL.
+ 	* doc/install.texi: Document that --with-cmodel= is supported
+ 	for LoongArch.
+ 	* doc/invoke.texi: Update the document about default code model
+ 	on LoongArch.
+ 
+ 2025-11-05  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121574
+ 	* doc/invoke.texi: Document '-Wexpose-global-module-tu-local'.
+ 
+ 2025-11-05  Artemiy Volkov  <artemiy.volkov@arm.com>
+ 
+ 	* tree-ssa-forwprop.cc (simplify_vector_constructor): Support
+ 	vector constructor elements.
+ 	* tree-vect-generic.cc (ssa_uniform_vector_p): Make non-static and
+ 	move ...
+ 	* tree.cc (ssa_uniform_vector_p): ... here.
+ 	* tree.h (ssa_uniform_vector_p): Declare it.
+ 
+ 2025-11-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-forwprop.cc (forward_propagate_addr_expr):
+ 	Use gather_imm_use_stmts instead of FOR_EACH_IMM_USE_STMT.
+ 
+ 2025-11-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple.h (gimple::pad): Rename to ...
+ 	(gimple::ilf): ... this.
+ 	* ssa-iterators.h (gather_imm_use_stmts): Declare.
+ 	* tree-ssa-operands.cc (gather_imm_use_stmts): New function.
+ 
+ 2025-11-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* gimple-ssa-isolate-paths.cc (check_loadstore): Set
+ 	the volatile flag on the stmt manually.
+ 	(find_implicit_erroneous_behavior): Move code transform
+ 	outside of FOR_EACH_IMM_USE_STMT iteration.
+ 
+ 2025-11-05  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-ssa-loop-niter.cc (dump_affine_iv): Use file, not
+ 	dump_file when printing.
+ 	(debug): New overload for affine_iv.
+ 
+ 2025-11-05  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/loongarch/loongarch.md (cntmap): Change to uppercase.
+ 	(popcount<GPR:mode>2): Modify to a post reload split.
+ 
+ 2025-11-04  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/122390
+ 	* config/i386/i386.md (*add<mode>3_carry_2): New insn pattern.
+ 	(*add<mode>3_carry_0_cc): Ditto.
+ 	(*add<mode>3_carry_0r_cc): Ditto.
+ 	(*sub<mode>3_carry_2): Ditto.
+ 	(*sub<mode>3_carry_0_cc): Ditto.
+ 	(*sub<mode>3_carry_0r_cc): Ditt.
+ 
+ 2025-11-04  Kees Cook  <kees@kernel.org>
+ 
+ 	* config/arc/builtins.def: Add ATTRS parameter to DEF_BUILTIN
+ 	macro calls.  Mark mathematical builtins (FFS, FLS, NORM, NORMW,
+ 	SWAP) with attr_const, leave others as NULL_TREE.
+ 	* config/arc/arc.cc: Add support for builtin function attributes.
+ 	Create attr_const using tree_cons.  Update DEF_BUILTIN macro to
+ 	pass ATTRS parameter to add_builtin_function.
+ 
+ 2025-11-04  Pan Li  <pan2.li@intel.com>
+ 
+ 	* match.pd: Add usmul_widen_mult helper and referenced by
+ 	min based unsigned SAT_MUL pattern.
+ 
+ 2025-11-04  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR lto/122515
+ 	* lto-wrapper.cc (debug_objcopy): Set type of INOFF to int64_t.
+ 	(run_gcc): Set type of FILE_OFFSET to int64_t.
+ 
+ 2025-11-04  Kishan Parmar  <kishan@linux.ibm.com>
+ 
+ 	PR rtl-optimization/93738
+ 	* simplify-rtx.cc (simplify_binary_operation_1): Canonicalize
+ 	SUBREG(LSHIFTRT) into LSHIFTRT(SUBREG) when valid.
+ 
+ 2025-11-04  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/122544
+ 	* diagnostics/paths.cc (event::meaning::maybe_get_verb_str):
+ 	Handle the new verbs.
+ 	* diagnostics/paths.h (event::meaning::verb): Add new values
+ 	for special control flow operations.
+ 	(event::meaning::meaning): Add ctor taking just a verb.
+ 
+ 2025-11-03  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/122534
+ 	* config/i386/i386.md (@test<mode>_ccno_1):
+ 	Use <general_szext_operand> as operand 1 predicate.
+ 	(testqi_ccz_1): Use general_operand as operand 1 predicate.
+ 	(*testdi_1): Use x86_64_szext_general_operand as operand 1 predicate.
+ 	(*testqi_1_maybe_si): Use general_operand as operand 1 predicate.
+ 	Add (n,*a) alternative to allow UV pairing for pentium processor.
+ 	(*test<mode>_1): Use <general_operand> as operand 1 predicate.
+ 
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
+ 2025-11-03  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/122536
+ 	* simplify-rtx.cc (simplify_context::simplify_binary_operation_1): Fix
+ 	guard against variable bit extracts in recent change.
+ 
+ 2025-11-03  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR ipa/122512
+ 	* symtab.cc: Fix 'static_assert'.
+ 
+ 2025-11-03  Loeka Rogge  <loeka@synopsys.com>
+ 
+ 	* config/arc/simdext.md(movv2hi_insn): Change order for movv2hi
+ 	for big-endian.
+ 
+ 2025-11-03  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR libgomp/122281
+ 	PR middle-end/105001
+ 	* gimple.cc (gimple_copy): Add missing unshare_expr for
+ 	GIMPLE_OMP_ATOMIC_LOAD and GIMPLE_OMP_ATOMIC_STORE.
+ 
+ 2025-11-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR c/122202
+ 	* doc/extend.texi (target function attribute): Update to describe FMV
+ 	behaviour.
+ 	(target_version function attribute): New section.
+ 	(target_clones attribute): Update to descrbe new behaviour with
+ 	target_version.
+ 	(Function Multiversioning): Update to discuss both target_version and
+ 	target based FMV.
+ 
+ 2025-11-03  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* config/riscv/riscv.cc (riscv_flatten_aggregate_field): Skip
+ 	empty unions and zero-length arrays when flattening aggregate
+ 	fields for ABI classification.
+ 	(riscv_pass_aggregate_in_fpr_pair_p): Refactor to use separate
+ 	field parsing and emit ABI change warning for affected types.
+ 	(riscv_pass_aggregate_in_fpr_and_gpr_p): Likewise.
+ 
+ 2025-11-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* config/aarch64/aarch64-option-extensions.def (dit): New fmv feature.
+ 	(dpb): New fmv feature.
+ 	(dpb2): New fmv feature.
+ 	(memtag): Change to also define an FMV feature.
+ 	(ssbs): Change to also define an FMV feature.
+ 	(bti): New fmv feature.
+ 	* config/aarch64/aarch64.cc (FEAT_SSBS): Add macro.
+ 	(FEAT_MEMTAG): Ditto.
+ 
+ 2025-11-03  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
+ 
+ 	* config/xtensa/xtensa.md (int_iterator ANY_ROUND):
+ 	Specify "flag_unsafe_math_optimizations" in the condition of the
+ 	UNSPEC_ROUND element.
+ 	(int_attr c_round): Remove.
+ 	(l<m_round>sfsi2, *l<m_round>sfsi2_2x, *l<m_round>sfsi2_scaled):
+ 	Remove " && <c_round>" from the conditions.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_modes_tieable_p):
+ 	Make MODE_FLOAT and MODE_INT tieable.
+ 	* config/loongarch/loongarch.md: Adjust constraints.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.md
+ 	(and_load_zero_extend<mode>): New combiner.
+ 	* config/loongarch/predicates.md
+ 	(mask_operand):	New predicate.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/lasx.md (lasx_xvpermi_q_<LASX:mode>):
+ 	Add new splitter for optimization.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/loongarch-protos.h
+ 	(loongarch_use_bstrins_bstrpick_for_and): New proto.
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_use_bstrins_bstrpick_for_and): Decide whether
+ 	to optimize.
+ 	(loongarch_rtx_costs): Adjust the cost of AND operation.
+ 	* config/loongarch/loongarch.md
+ 	(bstrins_bstrpick_for_and_imm<mode>): New insn_and_split.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_can_change_mode_class): Support for conversion
+ 	between scalar INT and scalar FP.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_rtx_costs):
+ 	Correct the cost of mulh.{w[u]|d[u]}.
+ 
+ 2025-11-03  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122475
+ 	* tree-vect-loop.cc (vectorizable_reduction): Check for neutral_op.
+ 
+ 2025-11-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/90262
+ 	* config/i386/i386-expand.cc (ix86_expand_unroll_movmem): New.
+ 	(ix86_expand_n_move_movmem): Likewise.
+ 	(ix86_expand_load_movmem): Likewise.
+ 	(ix86_expand_store_movmem): Likewise.
+ 	(ix86_expand_n_overlapping_move_movmem): Likewise.
+ 	(ix86_expand_less_move_movmem): Likewise.
+ 	(ix86_expand_movmem): Likewise.
+ 	* config/i386/i386-protos.h (ix86_expand_movmem): Likewise.
+ 	* config/i386/i386.md (movmem<mode>): Likewise.
+ 
+ 2025-11-03  Shreya Munnangi  <smunnangi1@ventanamicro.com>
+ 
+ 	PR target/52345
+ 	* simplify-rtx.cc (simplify_relational_operation_1): Optimize boolean
+ 	IOR equality tests.
+ 
+ 2025-11-03  chenxiaolong  <chenxiaolong@loongson.cn>
+ 
+ 	* config/loongarch/lasx.md (vec_cast<mode>): New template
+ 	implemention.
+ 	(vec_insert_lo_<mode>): Dito.
+ 	(vec_insert_hi_<mode>): Dito.
+ 	* config/loongarch/lasxintrin.h (defined): Test for adding
+ 	the builtin function.
+ 	(__lasx_cast_128_s): Dito.
+ 	(__lasx_cast_128_d): Dito.
+ 	(__lasx_cast_128): Dito.
+ 	(__lasx_concat_128_s): Dito.
+ 	(__lasx_concat_128_d): Dito.
+ 	(__lasx_concat_128): Dito.
+ 	(__lasx_extract_128_lo_s): Dito.
+ 	(__lasx_extract_128_hi_s): Dito.
+ 	(__lasx_extract_128_lo_d): Dito.
+ 	(__lasx_extract_128_hi_d): Dito.
+ 	(__lasx_extract_128_lo): Dito.
+ 	(__lasx_extract_128_hi): Dito.
+ 	(__lasx_insert_128_lo_s): Dito.
+ 	(__lasx_insert_128_hi_s): Dito.
+ 	(__lasx_insert_128_lo_d): Dito.
+ 	(__lasx_insert_128_hi_d): Dito.
+ 	(__lasx_insert_128_lo): Dito.
+ 	(__lasx_insert_128_hi): Dito.
+ 	* config/loongarch/loongarch-builtins.cc
+ 	(CODE_FOR_lasx_extract_128_lo_s): Add builtins and register
+ 	icode.
+ 	(CODE_FOR_lasx_extract_128_hi_s): Dito.
+ 	(CODE_FOR_lasx_extract_128_lo_d): Dito.
+ 	(CODE_FOR_lasx_extract_128_hi_d): Dito.
+ 	(CODE_FOR_lasx_extract_128_lo): Dito.
+ 	(CODE_FOR_lasx_extract_128_hi): Dito.
+ 	(CODE_FOR_lasx_insert_128_lo_s): Dito.
+ 	(CODE_FOR_lasx_insert_128_hi_s): Dito.
+ 	(CODE_FOR_lasx_insert_128_lo_d): Dito.
+ 	(CODE_FOR_lasx_insert_128_hi_d): Dito.
+ 	(CODE_FOR_lasx_insert_128_lo): Dito.
+ 	(CODE_FOR_lasx_insert_128_hi): Dito.
+ 	(CODE_FOR_lasx_concat_128_s): Dito.
+ 	(CODE_FOR_lasx_concat_128_d): Dito.
+ 	(CODE_FOR_lasx_concat_128): Dito.
+ 	(CODE_FOR_lasx_cast_128_s): Dito.
+ 	(CODE_FOR_lasx_cast_128_d): Dito.
+ 	(CODE_FOR_lasx_cast_128): Dito.
+ 	(loongarch_expand_builtin_direct): For the newly added
+ 	insertion or extraction, construct the parallel parameter
+ 	corresponding to the operand.
+ 	* config/loongarch/loongarch-c.cc
+ 	(loongarch_update_cpp_builtins): Define
+ 	__loongarch_asx_sx_conv.
+ 	* config/loongarch/loongarch-ftypes.def: Declare the type
+ 	of the builtin function.
+ 	* doc/extend.texi: Add document description.
+ 
+ 2025-11-03  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_move_integer):
+ 	No new virtual register is allocated during immediate load.
+ 
+ 2025-11-03  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	PR target/122477
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_split_reduction): Added handling of scalar mode.
+ 
+ 2025-11-02  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* config/riscv/bitmanip.md (rotrsi3): Use the sign extended form
+ 	for 32 bit rotates on TARGET_64BIT, even for constant counts.
+ 	* config/riscv/thead.md (th_srrisi3_extended): New pattern.
+ 	(th_srri<mode>3): Adjust formatting.
+ 
+ 2025-11-02  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/122518
+ 	* config/i386/i386.cc (ix86_canonicalize_comparison): Convert
+ 	(compare (minus (a b)) a) to (compare (a b)) to
+ 	match *sub<mode>_3 pattern.
+ 
+ 2025-11-02  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR target/122527
+ 	* config/avr/avr.cc (avr_load_libgcc_p): Return false if
+ 	the address-space is not ADDR_SPACE_FLASH.
+ 	(avr_out_lpm_no_lpmx [addr=REG]): Handle sizes of 3 and 4 bytes.
+ 
+ 2025-11-02  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	PR tree-optimization/118012
+ 	PR tree-optimization/122505
+ 	* config/avr/avr.md (mulpsi3): Also allow the insn condition
+ 	in the case where avropt_pr118012 && !AVR_TINY.
+ 	(*mulpsi3): Handle split for the !AVR_HAVE_MUL case.
+ 	(*mulpsi3-nomul.libgcc_split, *mulpsi3-nomul.libgcc): New insns.
+ 
+ 2025-11-02  Richard Biener  <rguenther@suse.de>
+ 
+ 	* doc/tree-ssa.texi: Remove outdated info on FOR_EACH_IMM_USE_STMT
+ 	iteration, clarify SSA operand parts.
+ 	* ssa-iterators.h: Update toplevel comment.
+ 
+ 2025-11-02  Sam James  <sam@gentoo.org>
+ 
+ 	* .simplify-rtx.cc.swo: Removed.
+ 
  2025-11-01  Shreya Munnangi  <smunnangi1@ventanamicro.com>
  
  	PR target/67731
diff -Nrcpad gcc-16-20251102/gcc/DATESTAMP gcc-16-20251109/gcc/DATESTAMP
*** gcc-16-20251102/gcc/DATESTAMP	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/DATESTAMP	Sun Nov  9 22:32:43 2025
***************
*** 1 ****
! 20251102
--- 1 ----
! 20251109
diff -Nrcpad gcc-16-20251102/gcc/ada/ChangeLog gcc-16-20251109/gcc/ada/ChangeLog
*** gcc-16-20251102/gcc/ada/ChangeLog	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/ChangeLog	Sun Nov  9 22:32:43 2025
***************
*** 1,3 ****
--- 1,485 ----
+ 2025-11-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/34374
+ 	* sem_ch10.adb (Check_Private_Limited_Withed_Unit): Use a separate
+ 	variable for the private child unit, streamline the loop locating
+ 	the nearest private ancestor, fix a too early termination of the
+ 	loop traversing the ancestor of the current unit, and use the same
+ 	privacy test as Check_Private_Child_Unit.
+ 
+ 2025-11-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/83188
+ 	* sem_eval.adb (Subtypes_Statically_Match): Deal with class-wide
+ 	subtypes whose class-wide types have discriminants.
+ 
+ 2025-11-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/113352
+ 	* sem_ch4.adb (Diagnose_Call): Tweak error message.
+ 	* sem_ch8.adb (Find_Selected_Component): Remove bypass for calls
+ 	to procedures in the overloaded overloadable case.  Factor out
+ 	the diagnostics code and invoke it uniformly in this case.
+ 
+ 2025-11-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/113350
+ 	PR ada/113351
+ 	* exp_ch2.adb (Expand_Renaming): Fix reference to Evaluate_Name.
+ 	* exp_ch8.adb (Expand_N_Subprogram_Renaming_Declaration): Call
+ 	Evaluate_Name to evaluate the name.
+ 	* sem_ch8.adb (Analyze_Renamed_Entry): Minor tweaks.
+ 	(Analyze_Renamed_Family_Member): Likewise.
+ 	(Analyze_Renamed_Primitive_Operation): Likewise.
+ 	Fix thinko in the function checking profile conformance, save the
+ 	result of the resolution and make implicit dereferences explicit.
+ 
+ 2025-11-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/35793
+ 	* sem_res.adb (Check_Discriminant_Use): In a constraint context,
+ 	check that the discriminant appears alone as a direct name in all
+ 	cases and give a consistent error message when it does not.
+ 
+ 2025-11-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch3.adb (Analyze_Subtype_Declaration) <Concurrent_Kind>:
+ 	Propagate the Uses_Lock_Free flag for protected types.
+ 
+ 2025-11-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/18453
+ 	* sem_ch12.adb (Find_Actual_Type): Add Typ_Ref parameter and
+ 	perform a standard resolution on it in the fallback case.
+ 	Call Get_Instance_Of if the type is declared in a formal of
+ 	the child unit.
+ 	(Instantiate_Type.Validate_Access_Type_Instance): Adjust call
+ 	to Find_Actual_Type.
+ 	(Instantiate_Type.Validate_Array_Type_Instance): Likewise and
+ 	streamline the check for matching component subtypes.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/78175
+ 	* sem_ch12.adb (Hide_Current_Scope): Deal with a transient scope
+ 	as current scope.
+ 	(Remove_Parent): Likewise.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/55324
+ 	* par-ch3.adb (P_Type_Declaration): Give a better error message
+ 	for illegal "abstract" in a type derivation.
+ 
+ 2025-11-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Get_Current_Value_Condition): Guard against orphaned
+ 	references in rewritten if-expressions.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* doc/gnat_rm/representation_clauses_and_pragmas.rst (Address
+ 	Clauses): Adjust description of alignment checks.
+ 	* sem_ch13.adb (Address_Clause_Check_Record): Remove now unused
+ 	Alignment_Checks_Suppressed component.
+ 	(Alignment_Checks_Suppressed): Delete.
+ 	(Analyze_Attribute_Definition_Clause) <Attribute_Alignment>: Do not
+ 	consider the status of range checks to decide whether to generate an
+ 	alignment check.  Always generate it if an alignment clause is also
+ 	given for the entity.
+ 	<Attribute_Alignment>: Generate an alignment check if an address
+ 	clause is also given for the entity.
+ 	(Register_Address_Clause_Check): Adjust for above removal.
+ 	(Validate_Address_Clauses): Test the Check_Address_Alignment flag
+ 	on the clause to decide whether to give the warning.
+ 	* gnat_rm.texi: Regenerate.
+ 	* gnat_ugn.texi: Regenerate.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* checks.adb (Apply_Address_Clause_Check): Adjust self-reference in
+ 	the opening comment.
+ 
+ 2025-11-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Find_In_Enclosing_Context): Refactor from handling of
+ 	IF statements.
+ 	(Get_Current_Value_Condition): Reuse IF code for WHILE statements.
+ 
+ 2025-11-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_util.adb (Get_Current_Value_Condition): Rewrite to not rely on
+ 	Sloc and End_Span of an if statement.
+ 
+ 2025-11-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_util.adb (Update_Semantic_Fields): Preserve tree structure when
+ 	copying scalar range of a discrete type.
+ 
+ 2025-11-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* inline.adb (Process_Sloc): Remove.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/61127
+ 	* sem_ch12.adb (Associations.Match_Positional): Remove the always
+ 	false condition that guards the error on a positional box.
+ 
+ 2025-11-03  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* sem_disp.adb (Check_Dispatching_Call): Remove "elsif" that does error
+ 	checking for abstract tag-indeterminate calls (seems to be no longer
+ 	needed).
+ 
+ 2025-11-03  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* exp_ch7.adb (Fixup_Inner_Scopes): Adjust to handle N_Freeze_Entity nodes.
+ 	* exp_unst.adb (Get_Level): Assert when the function didn't find the
+ 	nested level (indicates that inner sub has scope pointing higher in
+ 	the stack)
+ 
+ 2025-11-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* fname.adb (Is_Predefined_File_Name): Tweak.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb (N_Exception_Declaration):
+ 	Change Expression from Sm to Sy, to match other Expression fields.
+ 	* gen_il-gen.adb (Setter_Needs_Parent):
+ 	Expression no longer needs to be a special case.
+ 	(Check_For_Syntactic_Field_Mismatch):
+ 	Do not exempt Expression from the Sy/Sm mixing rule.
+ 	This was the last such case, so remove all the exemption code.
+ 	* gen_il-gen.ads: Update comments to match new code.
+ 	* sinfo.ads (N_Exception_Declaration):
+ 	Document the meaning of the Expression field, because it
+ 	doesn't follow from the RM syntax of exception_declaration.
+ 	* exp_ch11.adb: Minor comment fixes.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* sem_ch13.adb (Analyze_Attribute_Definition_Clause)
+ 	<Attribute_Size>: Tweak wording of existing error message for the
+ 	size of all elementary objects.  Move error handling for aliased
+ 	objects into the block for objects and give a similar error for
+ 	(nonaliased) floating-point objects.
+ 
+ 2025-11-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* exp_attr.adb (Rewrite_Attribute_Proc_Call)<Attribute_Put_Image>:
+ 	Fix call to Analyze.
+ 
+ 2025-11-03  Piotr Trojanek  <trojanek@adacore.com>
+ 
+ 	* sem_attr.adb (Resolve_Attribute): Remove rewriting of a slice
+ 	address expression.
+ 
+ 2025-11-03  Viljar Indus  <indus@adacore.com>
+ 
+ 	* libgnat/a-cbmutr.adb (Put_Image): Fix the condition and starting point
+ 	for printing the tree.
+ 	* libgnat/a-cimutr.adb (Put_Image): Likewise.
+ 	* libgnat/a-comutr.adb (Put_Image): Likewise.
+ 
+ 2025-11-03  Viljar Indus  <indus@adacore.com>
+ 
+ 	* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Avoid disabling
+ 	the expander for ignored ghost regions if Codepeer_Mode is active.
+ 	* sem_ch7.adb (Analyze_Package_Body_Helper): Likewise.
+ 	* freeze.adb (Freeze_Entity): Avoid triggering special freezing
+ 	action for entities within ignored ghost regions in Codepeer_Mode.
+ 
+ 2025-11-03  Viljar Indus  <indus@adacore.com>
+ 
+ 	* ghost.adb (Is_Ok_Context): consider ghost prefix to always
+ 	be a valid ghost context.
+ 
+ 2025-11-03  Denis Mazzucato  <mazzucato@adacore.com>
+ 
+ 	* errout.adb (Set_Msg_Node): Support N_Attribute_Reference and
+ 	nodes that denotes direct attribute definitions.
+ 	* exp_dbug.ads: Description for the encoding of direct attribute
+ 	definitions as tick are hard to deal in entity names.
+ 	* erroutc.adb
+ 	(Set_Msg_Insertion_Name): Replace underscore between prefix and
+ 	attribute name in direct attribute definitions; at this point we
+ 	lost the semantic information of node type and we resort to match
+ 	the string name as described in exp_dbug.adb.
+ 	* exp_aggr.adb (Convert_To_Positional): Use Needs_Construction and
+ 	Has_Default_Constructor.
+ 	* exp_ch3.adb (Build_Record_Init_Proc)
+ 	(Expand_N_Object_Declaration): Likewise.
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): Likewise.
+ 	* exp_ch4.adb (Expand_N_Allocator): Likewise.
+ 	* exp_ch6.adb
+ 	(Prepend_Constructor_Procedure_Prologue): Use
+ 	Is_Constructor_Procedure.
+ 	(Make_Parent_Constructor_Call): Use
+ 	Direct_Attribute_Definition_Name.
+ 	* gen_il-fields.ads: Remove Constructor_List and Constructor_Name.
+ 	* gen_il-gen-gen_entities.adb: Likewise.
+ 	* einfo.ads (Needs_Construction): Add description.
+ 	(Has_Delayed_Aspects): Adjust indentation.
+ 	* par-ch13.adb (P_Attribute_Designators): Parse attribute
+ 	designators.
+ 	(P_Representation_Clause): Use P_Attribute_Designators.
+ 	* par-ch6.adb (P_Subprogram): Support attribute designators in
+ 	subprogram name.
+ 	(Rewrites_Entity_If_Direct_Attribute_Def): Fix the specification
+ 	node in case of direct attribute definitions.
+ 	* par-endh.adb (Check_End, Same_Label): Likewise.
+ 	* par.adb (P_Attribute_Designators): Specification.
+ 	* sem_attr.adb (Analyze_Attribute): Error when using 'Constructor
+ 	outside procedure specification.
+ 	(Analyze_Attribute): Add error handling code.
+ 	* sem_ch3.adb (Analyze_Aspect_Specifications): Likewise.
+ 	* sem_ch6.adb (Analyze_Direct_Attribute_Definition): Handle direct
+ 	attribute definitions. Add error handling code for the
+ 	'Construction attribute and set constructor flags when necessary.
+ 	(Analyze_Subprogram_Specification): Use
+ 	Analyze_Direct_Attribute_Definition.
+ 	* sem_util.adb (Direct_Attribute_Definition_Name): Name of
+ 	entities created for direct attribute definitions. We emit an
+ 	error if multiple attributes.
+ 	(Is_Direct_Attribute_Subp_Spec): Helper to check whether a
+ 	subprogram specification is a direct attribute definition.
+ 	(Is_Constructor_Procedure): Helper to check whether a subprogram
+ 	is a constructor procedure.
+ 	(Has_Default_Constructor): Check whether the default constructor
+ 	exists.
+ 	(Default_Constructor): Not used anymore.
+ 	(Parameter_Count): Likewise.
+ 	(Process_End_Label): Get_Attribute_Reference_Name_String encodes
+ 	also direct attribute definition end labels.
+ 	* sem_util.ads: Likewise.
+ 	* snames.ads-tmpl: Support for 'Constructor attribute.
+ 	* snames.adb-tmpl (Is_Direct_Attribute_Definition_Name): Helper to
+ 	check attributes allowed in direct attribute definitions.
+ 	* aspects.ads: Remove constructor aspect.
+ 	* sem_ch13.adb: Likewise.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/122161
+ 	* sem_ch12.adb: Improve the description of Check_Generic_Actuals,
+ 	Restore_Private_Views and Switch_View, and alphabetize them.
+ 	(Check_Generic_Actuals): Make actuals visible only if needed.
+ 	(Install_Formal_Packages): Pass exact Is_Formal_Box parameter and
+ 	remove call to Set_Is_Hidden.
+ 	(Instantiate_Formal_Package): Use Next_Non_Pragma consistently in
+ 	the loop computing the visibility of actuals.
+ 	(Analyze_Package_Instantiation): Use named second parameter in the
+ 	call to Restore_Private_Views.
+ 	(Analyze_Subprogram_Instantiation): Likewise.
+ 	(Instantiate_Package_Body): Likewise and for Check_Generic_Actuals.
+ 	(Instantiate_Subprogram_Body): Likewise.
+ 	(Restore_Env): Replace call to Restore_Private_Views.
+ 	(Restore_Private_Views): Remove default value for second parameter
+ 	and test of presence for first parameter.  Consistently clear the
+ 	Is_Potentially_Use_Visible flag when setting the Is_Hidden flag.
+ 	Remove call to Set_Is_Hidden for a formal package of the enclosing
+ 	generic unit, if any.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen.adb (N_Short_Circuit):
+ 	Make Actions syntactic.
+ 	(N_Case_Expression_Alternative): Likewise.
+ 	* gen_il-gen-gen_nodes.adb (Create_Type):
+ 	No longer exempt Actions from the syntactic/semantic ordering rule.
+ 	(Check_For_Syntactic_Field_Mismatch):
+ 	No longer exempt Actions from the syntactic/semantic mixing rule.
+ 	* sinfo.ads (N_Compound_Statement):
+ 	Add comment.
+ 
+ 2025-11-03  Marc Poulhiès  <poulhies@adacore.com>
+ 
+ 	* sem_aux.adb (Enclosing_Dynamic_Scope): Remove comment.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo.ads: Remove unused fields.
+ 	* gen_il-fields.ads: Likewise.
+ 	* gen_il-gen-gen_entities.adb: Likewise.
+ 	* gen_il-gen-gen_nodes.adb: Likewise.
+ 	* sinfo.ads: Likewise.
+ 	* gen_il-gen.adb (Compile): Remove obsolete comment.
+ 
+ 2025-11-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* libgnat/s-stratt__cheri.adb (W_80IEEE): New procedure.
+ 
+ 2025-11-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* libgnat/s-stratt.adb (W_80IEEE): Make constant local.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* einfo.ads (Has_Pragma_Controlled): Remove.
+ 	(Is_Activation_Record): Document usage by llvm.
+ 	* gen_il-fields.ads (Opt_Field_Enum):
+ 	Remove Has_Pragma_Controlled.
+ 	* gen_il-gen-gen_entities.adb (Access_Kind):
+ 	Remove Has_Pragma_Controlled.
+ 	* sem_prag.adb:
+ 	Remove setting of Has_Pragma_Controlled.
+ 	* sinfo.ads (Corresponding_Entry_Body):
+ 	Document usage by codepeer.
+ 
+ 2025-11-03  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* exp_ch3.adb (Expand_N_Object_Declaration): Insert ctor call
+ 	after representation clauses.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* atree.adb (Same_Node_To_Fetch_From):
+ 	Use Node_To_Fetch_From_If_Set, and remove handler.
+ 	* einfo-utils.adb (Root_Type_If_Set):
+ 	Return Empty if Base_Type_If_Set returns Empty.
+ 	Return Empty if we find Etype (T) = Empty.
+ 	(Underlying_Type): Use "Has_Non_Limited_View..." instead
+ 	of "Present (Non_Limited_View...)", because the latter raises
+ 	an exception when given the wrong Ekind.
+ 
+ 2025-11-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* gen_il-fields.ads (Is_IEEE_Extended_Precision): New flag.
+ 	* gen_il-gen-gen_entities.adb: Likewise.
+ 	* gen_il-internals.adb (Image): Likewise.
+ 	* treepr.adb (Image): Likewise.
+ 	* einfo.ads: Document new flag.
+ 	* cstand.adb (Copy_Float_Type, Register_Float_Type): Use new flag.
+ 	* libgnat/s-stratt.ads (W_80IEEE): New procedure.
+ 	* libgnat/s-stratt.adb (W_80IEEE): Likewise.
+ 	* exp_strm.adb (Get_Primitives): Select new procedure when
+ 	appropriate.
+ 	* rtsfind.ads: Register new runtime procedure.
+ 	* sem_ch3.adb (Build_Derived_Numeric_Type,
+ 	Analyze_Subtype_Declaration): Propagate new flag.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/122160
+ 	* sem_res.adb (Resolve_Op_Concat_Rest): Do not build the subtype of
+ 	the second operand again if it has already been built.
+ 	(Resolve_String_Literal): Do not defer the creation of the subtype
+ 	for the right operand of a concatenation whose left operand may be
+ 	the null string.
+ 
+ 2025-11-03  Gary Dismukes  <dismukes@adacore.com>
+ 
+ 	* exp_ch6.ads (Make_Build_In_Place_Call_In_Allocator): Simplify comment.
+ 	* exp_ch6.adb (Make_Build_In_Place_Call_In_Allocator): Remove obsolete
+ 	comment about not being able to allocate fixed-size controlled results
+ 	on the caller side, and replace another obsolete comment with a simpler
+ 	comment. Call Build_Allocate_Deallocate_Proc when the function doesn't
+ 	need a BIPalloc formal to ensure that function results with controlled
+ 	parts allocated on the caller side will be chained for finalization.
+ 	(Make_Build_In_Place_Call_In_Object_Declaration): Call Needs_BIP_Collection
+ 	on the function's Entity_Id rather than the function call.
+ 	(Needs_BIP_Collection): If a BIP function doesn't need a BIPalloc formal
+ 	then it doesn't need a BIP collection either; return False in that case.
+ 	(Needs_BIP_Alloc_Form): Remove test of Needs_BIP_Collection.
+ 	* exp_ch7.adb (Expand_Cleanup_Actions): Move test of Uses_Sec_Stack
+ 	to be the first conjunct in setting of Needs_Sec_Stack_Mark, and put
+ 	the other tests in a disjunction subsidiary to that. Improve preceding
+ 	comment.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb: Rename Default_Expression to be
+ 	Expression.
+ 	* gen_il-gen.adb (Check_For_Syntactic_Field_Mismatch): Do not
+ 	exempt Default_Expression from the rule.
+ 	* par-ch12.adb (P_Formal_Object_Declarations): Use renamed setter.
+ 	* sem_ch12.adb (Default): Use renamed getter.
+ 	(Analyze_Formal_Object_Declaration): Likewise.
+ 	* sprint.adb (Sprint_Node_Actual): Use renamed getter.
+ 	* sinfo.ads: Fix comments.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* style.adb (Check_Xtra_Parens_Precedence):
+ 	Give warning based on Original_Node.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/122161
+ 	* sem_ch12.adb (Check_Generic_Actuals): Consistently set the
+ 	Is_Potentially_Use_Visible flag on actuals whenever the Is_Hidden
+ 	flag is cleared.
+ 	(Restore_Private_Views): Clear the Is_Potentially_Use_Visible flag
+ 	explicitly on the entities of an actual package.
+ 
+ 2025-11-03  Ronan Desplanques  <desplanques@adacore.com>
+ 
+ 	* libgnat/s-trasym.ads (Calling_Entity): New function.
+ 	* libgnat/s-trasym.adb (Calling_Entity): Add dummy body.
+ 	* libgnat/s-trasym__dwarf.adb (Calling_Entity): New function.
+ 	(Symbolic_Traceback, Symbolic_Traceback_No_Lock,
+ 	Module_Symbolic_Traceback, Multi_Module_Symbolic_Traceback): Add
+ 	Subprg_Name_Only parameter and corresponding functionality.
+ 	(Symbolic_Traceback_No_Lock): Fix typo in documentation comment.
+ 	* libgnat/s-dwalin.ads (Symbolic_Traceback): Likewise.
+ 	* libgnat/s-dwalin.adb (Symbolic_Traceback): Likewise.
+ 
+ 2025-11-03  Bob Duff  <duff@adacore.com>
+ 
+ 	* gen_il-gen-gen_nodes.adb (N_Op):
+ 	Make Chars syntactic, and move it down into subclasses
+ 	N_Binary_Op and N_Unary_Op.
+ 	* gen_il-gen.adb (Create_Type):
+ 	Do not exempt Chars from the ordering rule.
+ 	(Exception_To_Inheritance_Rule): Exempt Chars from the
+ 	inheritance rule.
+ 	(Check_For_Syntactic_Field_Mismatch):
+ 	Do not exempt Chars from the syntactic mismatch rule.
+ 	This is the main point of this change.
+ 	(Put_Make_Bodies): The Nmake functions for types in N_Op
+ 	will now take a Chars parameter, which should always
+ 	default to No_Name. This will be overwritten by the
+ 	special-case Set_Chars call. Assert that it is in
+ 	fact defaulted.
+ 	* exp_ch4.adb (Expand_Array_Comparison):
+ 	Use the Nkind instead of the Chars, which seems cleaner.
+ 	Use a case instead of an elsif chain.
+ 	* sem_attr.adb (Proper_Op): Minor cleanup.
+ 	* sem_ch8.adb: Minor reformatting.
+ 	* sem_res.adb (Operator_Kind): Tighten up the result subtype.
+ 
+ 2025-11-03  Viljar Indus  <indus@adacore.com>
+ 
+ 	* exp_attr.adb (Expand_N_Attribute_Reference): Use the
+ 	First_Subtype when creating the procedure for stream
+ 	attributes.
+ 	(Get_Array_Stream_Item_Type): New method for calculating
+ 	the type for the Item argument for streaming methods.
+ 
+ 2025-11-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* locales.c (is_iso_639_3): New static function.
+ 	(c_get_language_code): Use it to validate the ISO-639-3 code
+ 	before returning it.
+ 
+ 2025-11-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/58881
+ 	* sem_ch3.adb (Build_Derived_Private_Type): Build the underlying
+ 	full view when the derivation occurs in the public part of the
+ 	scope of the parent.
+ 	(Build_Derived_Record_Type): Propagate Has_Unknown_Discriminants
+ 	in the same circumstances.
+ 	(Constrain_Discriminated_Type): Give a specific error message for
+ 	any type with the Has_Unknown_Discriminants flag.
+ 
+ 2025-11-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/52319
+ 	* sem_ch8.adb (End_Use_Package): Use the scope of the operator.
+ 
  2025-10-30  Eric Botcazou  <ebotcazou@adacore.com>
  
  	PR ada/15610
diff -Nrcpad gcc-16-20251102/gcc/ada/aspects.ads gcc-16-20251109/gcc/ada/aspects.ads
*** gcc-16-20251102/gcc/ada/aspects.ads	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/aspects.ads	Sun Nov  9 22:32:43 2025
*************** package Aspects is
*** 81,87 ****
        Aspect_Bit_Order,
        Aspect_Component_Size,
        Aspect_Constant_Indexing,
-       Aspect_Constructor,                   -- GNAT
        Aspect_Contract_Cases,                -- GNAT
        Aspect_Convention,
        Aspect_CPU,
--- 81,86 ----
*************** package Aspects is
*** 440,446 ****
        Aspect_Bit_Order                  => Expression,
        Aspect_Component_Size             => Expression,
        Aspect_Constant_Indexing          => Name,
-       Aspect_Constructor                => Name,
        Aspect_Contract_Cases             => Expression,
        Aspect_Convention                 => Name,
        Aspect_CPU                        => Expression,
--- 439,444 ----
*************** package Aspects is
*** 547,553 ****
        Aspect_Component_Size               => True,
        Aspect_Constant_Indexing            => False,
        Aspect_Contract_Cases               => False,
-       Aspect_Constructor                  => False,
        Aspect_Convention                   => True,
        Aspect_CPU                          => False,
        Aspect_Default_Component_Value      => True,
--- 545,550 ----
*************** package Aspects is
*** 723,729 ****
        Aspect_Constant_After_Elaboration   => Name_Constant_After_Elaboration,
        Aspect_Constant_Indexing            => Name_Constant_Indexing,
        Aspect_Contract_Cases               => Name_Contract_Cases,
-       Aspect_Constructor                  => Name_Constructor,
        Aspect_Convention                   => Name_Convention,
        Aspect_CPU                          => Name_CPU,
        Aspect_CUDA_Device                  => Name_CUDA_Device,
--- 720,725 ----
*************** package Aspects is
*** 997,1003 ****
        Aspect_Asynchronous                 => Always_Delay,
        Aspect_Attach_Handler               => Always_Delay,
        Aspect_Constant_Indexing            => Always_Delay,
-       Aspect_Constructor                  => Always_Delay,
        Aspect_CPU                          => Always_Delay,
        Aspect_CUDA_Device                  => Always_Delay,
        Aspect_CUDA_Global                  => Always_Delay,
--- 993,998 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/atree.adb gcc-16-20251109/gcc/ada/atree.adb
*** gcc-16-20251102/gcc/ada/atree.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/atree.adb	Sun Nov  9 22:32:43 2025
*************** package body Atree is
*** 1005,1065 ****
  
        Old_Kind : constant Entity_Kind := Ekind (Old_N);
  
-       function Same_Node_To_Fetch_From
-         (N : Node_Or_Entity_Id; Field : Node_Or_Entity_Field)
-         return Boolean;
-       --  True if the field should be fetched from N. For most fields, this is
-       --  true. However, if the field is a "root type only" field, then this is
-       --  true only if N is the root type. If this is false, then we should not
-       --  do Reinit_Field_To_Zero, and we should not fail below, because the
-       --  field is not vanishing from the root type. Similar comments apply to
-       --  "base type only" and "implementation base type only" fields.
-       --
-       --  We need to ignore exceptions here, because in some cases,
-       --  Node_To_Fetch_From is being called before the relevant (root, base)
-       --  type has been set, so we fail some assertions.
- 
-       function Same_Node_To_Fetch_From
-         (N : Node_Or_Entity_Id; Field : Node_Or_Entity_Field)
-         return Boolean is
-       begin
-          return N = Node_To_Fetch_From (N, Field);
-       exception
-          when others => return False; -- ignore the exception
-       end Same_Node_To_Fetch_From;
- 
     --  Start of processing for Check_Vanishing_Fields
  
     begin
        for J in Entity_Field_Table (Old_Kind)'Range loop
           declare
              F : constant Entity_Field := Entity_Field_Table (Old_Kind) (J);
!          begin
!             if not Same_Node_To_Fetch_From (Old_N, F) then
!                null; -- no check in this case
!             elsif not Field_Checking.Field_Present (New_Kind, F) then
!                if not Field_Is_Initial_Zero (Old_N, F) then
!                   Write_Str ("# ");
!                   Write_Str (Osint.Get_First_Main_File_Name);
!                   Write_Str (": ");
!                   Write_Str (Old_Kind'Img);
!                   Write_Str (" --> ");
!                   Write_Str (New_Kind'Img);
!                   Write_Str (" Nonzero field ");
!                   Write_Str (F'Img);
!                   Write_Str (" is vanishing ");
  
!                   if New_Kind = E_Void or else Old_Kind = E_Void then
!                      Write_Line ("(E_Void case)");
!                   else
!                      Write_Line ("(non-E_Void case)");
!                   end if;
  
!                   Write_Str ("    ...mutating node ");
!                   Write_Int (Nat (Old_N));
!                   Write_Line ("");
!                   raise Program_Error;
                 end if;
              end if;
           end;
        end loop;
--- 1005,1053 ----
  
        Old_Kind : constant Entity_Kind := Ekind (Old_N);
  
     --  Start of processing for Check_Vanishing_Fields
  
     begin
        for J in Entity_Field_Table (Old_Kind)'Range loop
           declare
              F : constant Entity_Field := Entity_Field_Table (Old_Kind) (J);
!             Same_Node_To_Fetch_From : constant Boolean :=
!               Old_N = Node_To_Fetch_From_If_Set (Old_N, F);
!             --  True if the field F should be fetched from Old_N. For most
!             --  fields, this is True. However, if F is a "root type only"
!             --  field, then it should be fetched from the root type, so this is
!             --  true only if Old_N is the root type. If this is False, then we
!             --  should not have done Reinit_Field_To_Zero, and we should not
!             --  fail below, because the field is not vanishing from this node.
!             --  We use the ..._If_Set function to avoid failing when the root
!             --  type has not yet been set. Similar comments apply to "base type
!             --  only" and "implementation base type only" fields.
  
!          begin
!             if Same_Node_To_Fetch_From
!               and then not Field_Checking.Field_Present (New_Kind, F)
!               and then not Field_Is_Initial_Zero (Old_N, F)
!             then
!                Write_Str ("# ");
!                Write_Str (Osint.Get_First_Main_File_Name);
!                Write_Str (": ");
!                Write_Str (Old_Kind'Img);
!                Write_Str (" --> ");
!                Write_Str (New_Kind'Img);
!                Write_Str (" Nonzero field ");
!                Write_Str (F'Img);
!                Write_Str (" is vanishing ");
  
!                if New_Kind = E_Void or else Old_Kind = E_Void then
!                   Write_Line ("(E_Void case)");
!                else
!                   Write_Line ("(non-E_Void case)");
                 end if;
+ 
+                Write_Str ("    ...mutating node ");
+                Write_Int (Nat (Old_N));
+                Write_Line ("");
+                raise Program_Error;
              end if;
           end;
        end loop;
diff -Nrcpad gcc-16-20251102/gcc/ada/checks.adb gcc-16-20251109/gcc/ada/checks.adb
*** gcc-16-20251102/gcc/ada/checks.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/checks.adb	Sun Nov  9 22:32:43 2025
*************** package body Checks is
*** 596,604 ****
        --  Note: we do not check for checks suppressed here, since that check
        --  was done in Sem_Ch13 when the address clause was processed. We are
        --  only called if checks were not suppressed. The reason for this is
!       --  that we have to delay the call to Apply_Alignment_Check till freeze
!       --  time (so that all types etc are elaborated), but we have to check
!       --  the status of check suppressing at the point of the address clause.
  
        if No (AC)
          or else not Check_Address_Alignment (AC)
--- 596,605 ----
        --  Note: we do not check for checks suppressed here, since that check
        --  was done in Sem_Ch13 when the address clause was processed. We are
        --  only called if checks were not suppressed. The reason for this is
!       --  that we have to delay the call to Apply_Address_Clause_Check till
!       --  freeze time (so that all types etc are elaborated), but we have to
!       --  check the status of check suppressing at the point of the address
!       --  clause.
  
        if No (AC)
          or else not Check_Address_Alignment (AC)
diff -Nrcpad gcc-16-20251102/gcc/ada/cstand.adb gcc-16-20251109/gcc/ada/cstand.adb
*** gcc-16-20251102/gcc/ada/cstand.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/cstand.adb	Sun Nov  9 22:32:43 2025
*************** package body CStand is
*** 298,303 ****
--- 298,304 ----
        Build_Float_Type
          (To, UI_To_Int (Digits_Value (From)), Float_Rep (From),
           UI_To_Int (Esize (From)), UI_To_Int (Alignment (From)));
+       Set_Is_IEEE_Extended_Precision (To, Is_IEEE_Extended_Precision (From));
     end Copy_Float_Type;
  
     ----------------------
*************** package body CStand is
*** 2100,2116 ****
        Size      : Positive;
        Alignment : Natural)
     is
-       pragma Unreferenced (Precision);
-       --  See Build_Float_Type for the rationale
- 
        Ent : constant Entity_Id := New_Standard_Entity (Name);
  
     begin
        Set_Defining_Identifier (New_Node (N_Full_Type_Declaration, Stloc), Ent);
        Set_Scope (Ent, Standard_Standard);
        Build_Float_Type
          (Ent, Pos (Digs), Float_Rep, Int (Size), Nat (Alignment / 8));
  
        Append_New_Elmt (Ent, Back_End_Float_Types);
     end Register_Float_Type;
  
--- 2101,2122 ----
        Size      : Positive;
        Alignment : Natural)
     is
        Ent : constant Entity_Id := New_Standard_Entity (Name);
  
+       IEEE_Extended_Precision_Size : constant := 80;
     begin
        Set_Defining_Identifier (New_Node (N_Full_Type_Declaration, Stloc), Ent);
        Set_Scope (Ent, Standard_Standard);
        Build_Float_Type
          (Ent, Pos (Digs), Float_Rep, Int (Size), Nat (Alignment / 8));
  
+       --  We mostly disregard Precision, see Build_Float_Type for the
+       --  rationale. The only thing we use it for is to detect 80-bit IEEE
+       --  extended precision, in order to adjust the behavior of 'Write.
+       if Precision = IEEE_Extended_Precision_Size then
+          Set_Is_IEEE_Extended_Precision (Ent);
+       end if;
+ 
        Append_New_Elmt (Ent, Back_End_Float_Types);
     end Register_Float_Type;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst gcc-16-20251109/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst
*** gcc-16-20251102/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/doc/gnat_rm/representation_clauses_and_pragmas.rst	Sun Nov  9 22:32:43 2025
*************** machines with strict alignment requireme
*** 1580,1587 ****
  checks (at compile time if possible, generating a warning, or at execution
  time with a run-time check) that the alignment is appropriate.  If the
  run-time check fails, then ``Program_Error`` is raised.  This run-time
! check is suppressed if range checks are suppressed, or if the special GNAT
! check Alignment_Check is suppressed, or if
  ``pragma Restrictions (No_Elaboration_Code)`` is in effect. It is also
  suppressed by default on non-strict alignment machines (such as the x86).
  
--- 1580,1586 ----
  checks (at compile time if possible, generating a warning, or at execution
  time with a run-time check) that the alignment is appropriate.  If the
  run-time check fails, then ``Program_Error`` is raised.  This run-time
! check is suppressed if the GNAT check Alignment_Check is suppressed, or if
  ``pragma Restrictions (No_Elaboration_Code)`` is in effect. It is also
  suppressed by default on non-strict alignment machines (such as the x86).
  
diff -Nrcpad gcc-16-20251102/gcc/ada/einfo-utils.adb gcc-16-20251109/gcc/ada/einfo-utils.adb
*** gcc-16-20251102/gcc/ada/einfo-utils.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/einfo-utils.adb	Sun Nov  9 22:32:43 2025
*************** package body Einfo.Utils is
*** 2622,2634 ****
  
     begin
        return T : Opt_N_Entity_Id := Base_Type_If_Set (Id) do
!          if Ekind (T) = E_Class_Wide_Type then
              T := Etype (T);
           else
              loop
                 Etyp := Etype (T);
  
!                exit when No (Etyp) or else T = Etyp
                   or else
                     (Is_Private_Type (T) and then Etyp = Full_View (T))
                   or else
--- 2622,2641 ----
  
     begin
        return T : Opt_N_Entity_Id := Base_Type_If_Set (Id) do
!          if No (T) then
!             null;
!          elsif Ekind (T) = E_Class_Wide_Type then
              T := Etype (T);
           else
              loop
                 Etyp := Etype (T);
  
!                if No (Etyp) then
!                   T := Empty;
!                   exit;
!                end if;
! 
!                exit when T = Etyp
                   or else
                     (Is_Private_Type (T) and then Etyp = Full_View (T))
                   or else
*************** package body Einfo.Utils is
*** 3086,3092 ****
  
        elsif Ekind (Id) = E_Class_Wide_Type
          and then From_Limited_With (Id)
!         and then Present (Non_Limited_View (Id))
        then
           return Underlying_Type (Non_Limited_View (Id));
  
--- 3093,3099 ----
  
        elsif Ekind (Id) = E_Class_Wide_Type
          and then From_Limited_With (Id)
!         and then Has_Non_Limited_View (Id)
        then
           return Underlying_Type (Non_Limited_View (Id));
  
*************** package body Einfo.Utils is
*** 3118,3124 ****
           --  then we return the Underlying_Type of its nonlimited view.
  
           elsif From_Limited_With (Id)
!            and then Present (Non_Limited_View (Id))
           then
              return Underlying_Type (Non_Limited_View (Id));
  
--- 3125,3131 ----
           --  then we return the Underlying_Type of its nonlimited view.
  
           elsif From_Limited_With (Id)
!            and then Has_Non_Limited_View (Id)
           then
              return Underlying_Type (Non_Limited_View (Id));
  
diff -Nrcpad gcc-16-20251102/gcc/ada/einfo.ads gcc-16-20251109/gcc/ada/einfo.ads
*** gcc-16-20251102/gcc/ada/einfo.ads	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/einfo.ads	Sun Nov  9 22:32:43 2025
*************** package Einfo is
*** 1585,1595 ****
  --       type derivation.
  
  --    Has_Delayed_Aspects
! --      Defined in all entities. Set if the Rep_Item chain for the entity has
! --      one or more N_Aspect_Definition nodes chained which are not to be
! --      evaluated till the freeze point. The aspect definition expression
! --      clause has been preanalyzed to get visibility at the point of use,
! --      but no other action has been taken.
  
  --    Has_Delayed_Freeze
  --       Defined in all entities. Set to indicate that an explicit freeze
--- 1585,1595 ----
  --       type derivation.
  
  --    Has_Delayed_Aspects
! --       Defined in all entities. Set if the Rep_Item chain for the entity has
! --       one or more N_Aspect_Definition nodes chained which are not to be
! --       evaluated till the freeze point. The aspect definition expression
! --       clause has been preanalyzed to get visibility at the point of use,
! --       but no other action has been taken.
  
  --    Has_Delayed_Freeze
  --       Defined in all entities. Set to indicate that an explicit freeze
*************** package Einfo is
*** 1889,1898 ****
  --       5. N_Range_Constraint - when the range expression uses the
  --          discriminant of the enclosing type.
  
- --    Has_Pragma_Controlled [implementation base type only]
- --       Defined in access type entities. It is set if a pragma Controlled
- --       applies to the access type.
- 
  --    Has_Pragma_Elaborate_Body
  --       Defined in all entities. Set in compilation unit entities if a
  --       pragma Elaborate_Body applies to the compilation unit.
--- 1889,1894 ----
*************** package Einfo is
*** 2383,2389 ****
  --    Is_Activation_Record
  --       Applies to E_In_Parameters generated in Exp_Unst for nested
  --       subprograms, to mark the added formal that carries the activation
! --       record created in the enclosing subprogram.
  
  --    Is_Actual_Subtype
  --       Defined on all types, true for the generated constrained subtypes
--- 2379,2385 ----
  --    Is_Activation_Record
  --       Applies to E_In_Parameters generated in Exp_Unst for nested
  --       subprograms, to mark the added formal that carries the activation
! --       record created in the enclosing subprogram. Used by the llvm back end.
  
  --    Is_Actual_Subtype
  --       Defined on all types, true for the generated constrained subtypes
*************** package Einfo is
*** 2596,2602 ****
  
  --    Is_Discriminant_Check_Function
  --       Defined in all entities. Set only in E_Function entities for functions
! --       created to do discriminant checks.
  
  --    Is_Discriminal (synthesized)
  --       Applies to all entities, true for renamings of discriminants. Such
--- 2592,2598 ----
  
  --    Is_Discriminant_Check_Function
  --       Defined in all entities. Set only in E_Function entities for functions
! --       created to do discriminant checks. Used by CodePeer.
  
  --    Is_Discriminal (synthesized)
  --       Applies to all entities, true for renamings of discriminants. Such
*************** package Einfo is
*** 3471,3480 ****
  --       as its corresponding record type, but whose parent is the full view
  --       of the parent in the original type extension.
  
- --    Is_Unimplemented
- --       Defined in all entities. Set for any entity to which a valid pragma
- --       or aspect Unimplemented applies.
- 
  --    Is_Unsigned_Type
  --       Defined in all types, but can be set only for discrete and fixed-point
  --       type and subtype entities. This flag is only valid if the entity is
--- 3467,3472 ----
*************** package Einfo is
*** 3552,3557 ****
--- 3544,3558 ----
  --       a wrapper to handle inherited class-wide pre/post conditions that call
  --       overridden primitives or as a wrapper of a controlling function.
  
+ --    Is_IEEE_Extended_Precision
+ --       Defined in floating point types and subtypes. Indicates that the type
+ --       corresponds to the 80-bit IEEE extended precision format. That format
+ --       effectively uses 80 bits per value, but we set its Size to a larger
+ --       value for the reasons explained in the documentation comment of
+ --       Build_Float_Type. We also perform some extra work to consistently set
+ --       the extra bits to zero in the 'Write implementation, which is why we
+ --       need this flag.
+ 
  --    Itype_Printed
  --       Defined in all type and subtype entities. Set in Itypes if the Itype
  --       has been printed by Sprint. This is used to avoid printing an Itype
*************** package Einfo is
*** 3705,3710 ****
--- 3706,3716 ----
  --       preelaborable initialization at freeze time (this has to be deferred
  --       to the freeze point because of the rule about overriding Initialize).
  
+ --    Needs_Construction
+ --       Defined in all type and subtype entities. Set only for record type
+ --       entities for which at least one ancestor has specified a constructor
+ --       through the 'Constructor direct attribute definition.
+ 
  --    Needs_Debug_Info
  --       Defined in all entities. Set if the entity requires normal debugging
  --       information to be generated. This is true of all entities that have
*************** package Einfo is
*** 5018,5024 ****
     --    Is_Thunk
     --    Is_Trivial_Subprogram
     --    Is_Unchecked_Union
-    --    Is_Unimplemented
     --    Is_Visible_Formal
     --    Kill_Elaboration_Checks
     --    Low_Bound_Tested
--- 5024,5029 ----
*************** package Einfo is
*** 5130,5135 ****
--- 5135,5141 ----
     --    May_Inherit_Delayed_Rep_Aspects
     --    Must_Be_On_Byte_Boundary
     --    Must_Have_Preelab_Init
+    --    Needs_Construction
     --    Optimize_Alignment_Space
     --    Optimize_Alignment_Time
     --    Partial_View_Has_Unknown_Discr
*************** package Einfo is
*** 5211,5217 ****
     --    Associated_Storage_Pool               (root type only)
     --    Finalization_Collection               (root type only)
     --    Storage_Size_Variable                 (base type only)
-    --    Has_Pragma_Controlled                 (base type only)
     --    Has_Storage_Size_Clause               (base type only)
     --    Is_Access_Constant
     --    Is_Local_Anonymous_Access
--- 5217,5222 ----
*************** package Einfo is
*** 5529,5534 ****
--- 5534,5540 ----
     --    Digits_Value
     --    Float_Rep                            (Float_Rep_Kind)
     --    Default_Aspect_Value                 (base type only)
+    --    Is_IEEE_Extended_Precision
     --    Scalar_Range
     --    Static_Real_Or_String_Predicate
     --    Machine_Emax_Value                   (synth)
diff -Nrcpad gcc-16-20251102/gcc/ada/errout.adb gcc-16-20251109/gcc/ada/errout.adb
*** gcc-16-20251102/gcc/ada/errout.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/errout.adb	Sun Nov  9 22:32:43 2025
*************** package body Errout is
*** 163,170 ****
     procedure Set_Msg_Node (Node : Node_Id);
     --  Add the sequence of characters for the name associated with the given
     --  node to the current message. For N_Designator, N_Selected_Component,
!    --  N_Defining_Program_Unit_Name, and N_Expanded_Name, the Prefix is
!    --  included as well.
  
     procedure Set_Posted (N : Node_Id);
     --  Sets the Error_Posted flag on the given node, and all its parents that
--- 163,170 ----
     procedure Set_Msg_Node (Node : Node_Id);
     --  Add the sequence of characters for the name associated with the given
     --  node to the current message. For N_Designator, N_Selected_Component,
!    --  N_Defining_Program_Unit_Name, N_Expanded_Name, and N_Attribute_Reference
!    --  the Prefix is included as well.
  
     procedure Set_Posted (N : Node_Id);
     --  Sets the Error_Posted flag on the given node, and all its parents that
*************** package body Errout is
*** 3800,3805 ****
--- 3800,3828 ----
              Set_Msg_Node (Selector_Name (Node));
              return;
  
+          when N_Attribute_Reference =>
+             Set_Msg_Node (Prefix (Node));
+             Set_Msg_Char (''');
+             Get_Unqualified_Decoded_Name_String (Attribute_Name (Node));
+             Adjust_Name_Case (Global_Name_Buffer, Sloc (Node));
+             Set_Msg_Name_Buffer;
+             return;
+ 
+          when N_Defining_Identifier =>
+ 
+             --  Handle direct attribute definitions
+ 
+             if Parent_Kind (Node) in N_Subprogram_Specification
+               and then Original_Node (Parent (Node)) /= Parent (Node)
+               and then Nkind (Defining_Unit_Name
+                                (Original_Node (Parent (Node))))
+                          = N_Attribute_Reference
+             then
+                Set_Msg_Node
+                  (Defining_Unit_Name (Original_Node (Parent (Node))));
+                return;
+             end if;
+ 
           when others =>
              null;
        end case;
diff -Nrcpad gcc-16-20251102/gcc/ada/erroutc.adb gcc-16-20251109/gcc/ada/erroutc.adb
*** gcc-16-20251102/gcc/ada/erroutc.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/erroutc.adb	Sun Nov  9 22:32:43 2025
*************** package body Erroutc is
*** 1579,1584 ****
--- 1579,1624 ----
     ----------------------------
  
     procedure Set_Msg_Insertion_Name is
+       procedure Replace_With_Attribute_Definition;
+       --  This procedure handles direct attribute definition names of the form:
+       --    'D' Prefix_Name "_" Attribute_Name "_Att"
+       --  Specifically, it replace the current Namet.Global_Name_Buffer with an
+       --  all lowercase string of the prefix, and a tick attribute; at this
+       --  stage there is no way to recognize more than an ending attribute ???
+       --
+       --  Note that, at this point, it is not possible to restore the original
+       --  casing thus lowercase is default.a
+ 
+       procedure Replace_With_Attribute_Definition is
+          First   : constant Integer := 2;
+          Last    : constant Integer := Name_Len - 4;
+          Att_Buf : Bounded_String (Max_Length => Name_Len - 7);
+       begin
+          Until_Tick :
+          for J in First .. Last loop
+ 
+             --  J could be at the position separating the prefix from the
+             --  attribute name.
+ 
+             if Name_Buffer (J) = '_' then
+                Att_Buf.Length := 0;
+                Append (Att_Buf, Name_Buffer (J + 1 .. Last));
+                Set_Casing (Att_Buf, All_Lower_Case);
+                if Is_Direct_Attribute_Definition_Name (Name_Find (Att_Buf))
+                then
+                   Name_Buffer (J) := ''';
+                   exit Until_Tick;
+                end if;
+             end if;
+          end loop Until_Tick;
+ 
+          --  Remove prefix 'D' and suffix "_Att"
+ 
+          Name_Buffer (1 .. Last - 1) := Name_Buffer (2 .. Last);
+          Name_Len := Last - 1;
+          Set_Casing (All_Lower_Case);
+       end Replace_With_Attribute_Definition;
+ 
     begin
        if Error_Msg_Name_1 = No_Name then
           null;
*************** package body Erroutc is
*** 1624,1630 ****
           --  Else output with surrounding quotes in proper casing mode
  
           else
!             Set_Casing (Identifier_Casing (Flag_Source));
              Set_Msg_Quote;
              Set_Msg_Name_Buffer;
              Set_Msg_Quote;
--- 1664,1677 ----
           --  Else output with surrounding quotes in proper casing mode
  
           else
!             if Name_Buffer (1) = 'D'
!               and then Name_Buffer (Name_Len - 3 .. Name_Len) = "_Att"
!             then
!                Replace_With_Attribute_Definition;
!             else
!                Set_Casing (Identifier_Casing (Flag_Source));
!             end if;
! 
              Set_Msg_Quote;
              Set_Msg_Name_Buffer;
              Set_Msg_Quote;
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_aggr.adb gcc-16-20251109/gcc/ada/exp_aggr.adb
*** gcc-16-20251102/gcc/ada/exp_aggr.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_aggr.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Aggr is
*** 4914,4924 ****
        --  IP procedure.
  
        if Has_Default_Init_Comps (N)
!         or else Present (Constructor_Name (Ctyp))
          or else (Is_Access_Type (Ctyp)
!                   and then Present
!                              (Constructor_Name
!                                (Directly_Designated_Type (Ctyp))))
        then
           return;
        end if;
--- 4914,4923 ----
        --  IP procedure.
  
        if Has_Default_Init_Comps (N)
!         or else Needs_Construction (Ctyp)
          or else (Is_Access_Type (Ctyp)
!                   and then Needs_Construction
!                              (Directly_Designated_Type (Ctyp)))
        then
           return;
        end if;
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_attr.adb gcc-16-20251109/gcc/ada/exp_attr.adb
*** gcc-16-20251102/gcc/ada/exp_attr.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_attr.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Attr is
*** 1906,1911 ****
--- 1906,1914 ----
        function Get_Integer_Type (Typ : Entity_Id) return Entity_Id;
        --  Return a small integer type appropriate for the enumeration type
  
+       function Get_Array_Stream_Item_Type (Typ : Entity_Id) return Entity_Id;
+       --  For non-scalar types return the first subtype of Typ.
+ 
        procedure Rewrite_Attribute_Proc_Call (Pname : Entity_Id);
        --  Rewrites an attribute for Read, Write, Output, or Put_Image with a
        --  call to the appropriate TSS procedure. Pname is the entity for the
*************** package body Exp_Attr is
*** 2066,2071 ****
--- 2069,2087 ----
           return Small_Integer_Type_For (Siz, Uns => Is_Unsigned_Type (Typ));
        end Get_Integer_Type;
  
+       --------------------------------
+       -- Get_Array_Stream_Item_Type --
+       --------------------------------
+ 
+       function Get_Array_Stream_Item_Type (Typ : Entity_Id) return Entity_Id is
+          First_Sub_Typ : constant Entity_Id := First_Subtype (Typ);
+       begin
+          if Is_Private_Type (First_Sub_Typ) then
+             return Typ;
+          end if;
+          return First_Sub_Typ;
+       end Get_Array_Stream_Item_Type;
+ 
        ---------------------------------
        -- Rewrite_Attribute_Proc_Call --
        ---------------------------------
*************** package body Exp_Attr is
*** 4482,4487 ****
--- 4498,4504 ----
           P_Type  : constant Entity_Id := Entity (Pref);
           B_Type  : constant Entity_Id := Base_Type (P_Type);
           U_Type  : constant Entity_Id := Underlying_Type (P_Type);
+          I_Type  : Entity_Id := P_Type;
           Strm    : constant Node_Id   := First (Exprs);
           Fname   : Entity_Id;
           Decl    : Node_Id;
*************** package body Exp_Attr is
*** 4633,4640 ****
                      new Build_And_Insert_Type_Attr_Subp
                            (Build_Array_Input_Function);
                 begin
                    Build_And_Insert_Array_Input_Func
!                     (Typ      => Full_Base (U_Type),
                       Decl     => Decl,
                       Subp     => Fname,
                       Attr_Ref => N);
--- 4650,4658 ----
                      new Build_And_Insert_Type_Attr_Subp
                            (Build_Array_Input_Function);
                 begin
+                   I_Type := Get_Array_Stream_Item_Type (U_Type);
                    Build_And_Insert_Array_Input_Func
!                     (Typ      => I_Type,
                       Decl     => Decl,
                       Subp     => Fname,
                       Attr_Ref => N);
*************** package body Exp_Attr is
*** 4784,4791 ****
                  Relocate_Node (Strm)));
  
           Set_Controlling_Argument (Call, Cntrl);
!          Rewrite (N, Unchecked_Convert_To (P_Type, Call));
!          Analyze_And_Resolve (N, P_Type);
  
           if Nkind (Parent (N)) = N_Object_Declaration then
              Freeze_Stream_Subprogram (Fname);
--- 4802,4814 ----
                  Relocate_Node (Strm)));
  
           Set_Controlling_Argument (Call, Cntrl);
!          if Is_Private_Type (P_Type) or else Is_Class_Wide_Type (P_Type) then
!             Rewrite (N, Unchecked_Convert_To (P_Type, Call));
!             Analyze_And_Resolve (N, P_Type);
!          else
!             Rewrite (N, Call);
!             Analyze_And_Resolve (N, I_Type);
!          end if;
  
           if Nkind (Parent (N)) = N_Object_Declaration then
              Freeze_Stream_Subprogram (Fname);
*************** package body Exp_Attr is
*** 5142,5148 ****
                   Make_Selected_Component (Loc,
                     Prefix        => New_Occurrence_Of (Result_Id, Loc),
                     Selector_Name => Make_Identifier (Loc,
!                                       Chars (Constructor_Name (Typ))));
              begin
                 Set_Is_Prefixed_Call (Proc_Name);
  
--- 5165,5172 ----
                   Make_Selected_Component (Loc,
                     Prefix        => New_Occurrence_Of (Result_Id, Loc),
                     Selector_Name => Make_Identifier (Loc,
!                                       Direct_Attribute_Definition_Name
!                                         (Typ, Name_Constructor)));
              begin
                 Set_Is_Prefixed_Call (Proc_Name);
  
*************** package body Exp_Attr is
*** 5818,5824 ****
                            (Build_Array_Output_Procedure);
                 begin
                    Build_And_Insert_Array_Output_Proc
!                     (Typ      => Full_Base (U_Type),
                       Decl     => Decl,
                       Subp     => Pname,
                       Attr_Ref => N);
--- 5842,5848 ----
                            (Build_Array_Output_Procedure);
                 begin
                    Build_And_Insert_Array_Output_Proc
!                     (Typ      => Get_Array_Stream_Item_Type (U_Type),
                       Decl     => Decl,
                       Subp     => Pname,
                       Attr_Ref => N);
*************** package body Exp_Attr is
*** 6280,6286 ****
                                      /= RTU_Entity (Interfaces_C))
              then
                 Rewrite (N, Build_String_Put_Image_Call (N));
!                Analyze (N);
                 return;
  
              elsif Is_Array_Type (U_Type) then
--- 6304,6310 ----
                                      /= RTU_Entity (Interfaces_C))
              then
                 Rewrite (N, Build_String_Put_Image_Call (N));
!                Analyze (N, Suppress => All_Checks);
                 return;
  
              elsif Is_Array_Type (U_Type) then
*************** package body Exp_Attr is
*** 6295,6304 ****
  
                    begin
                       Build_And_Insert_Array_Put_Image_Proc
!                        (Typ      => U_Type,
                          Decl     => Decl,
!                            Subp     => Pname,
!                            Attr_Ref => N);
                    end;
  
                    Cached_Attribute_Ops.Put_Image_Map.Set (U_Type, Pname);
--- 6319,6328 ----
  
                    begin
                       Build_And_Insert_Array_Put_Image_Proc
!                        (Typ      => Get_Array_Stream_Item_Type (U_Type),
                          Decl     => Decl,
!                         Subp     => Pname,
!                         Attr_Ref => N);
                    end;
  
                    Cached_Attribute_Ops.Put_Image_Map.Set (U_Type, Pname);
*************** package body Exp_Attr is
*** 6746,6752 ****
                            (Build_Array_Read_Procedure);
                 begin
                    Build_And_Insert_Array_Read_Proc
!                     (Typ      => Full_Base (U_Type),
                       Decl     => Decl,
                       Subp     => Pname,
                       Attr_Ref => N);
--- 6770,6776 ----
                            (Build_Array_Read_Procedure);
                 begin
                    Build_And_Insert_Array_Read_Proc
!                     (Typ      => Get_Array_Stream_Item_Type (U_Type),
                       Decl     => Decl,
                       Subp     => Pname,
                       Attr_Ref => N);
*************** package body Exp_Attr is
*** 8461,8467 ****
                            (Build_Array_Write_Procedure);
                 begin
                    Build_And_Insert_Array_Write_Proc
!                     (Typ      => Full_Base (U_Type),
                       Decl     => Decl,
                       Subp     => Pname,
                       Attr_Ref => N);
--- 8485,8491 ----
                            (Build_Array_Write_Procedure);
                 begin
                    Build_And_Insert_Array_Write_Proc
!                     (Typ      => Get_Array_Stream_Item_Type (U_Type),
                       Decl     => Decl,
                       Subp     => Pname,
                       Attr_Ref => N);
*************** package body Exp_Attr is
*** 8577,8582 ****
--- 8601,8607 ----
           | Attribute_Bit_Order
           | Attribute_Class
           | Attribute_Compiler_Version
+          | Attribute_Constructor
           | Attribute_Default_Bit_Order
           | Attribute_Default_Scalar_Storage_Order
           | Attribute_Definite
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch11.adb gcc-16-20251109/gcc/ada/exp_ch11.adb
*** gcc-16-20251102/gcc/ada/exp_ch11.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch11.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Ch11 is
*** 1031,1037 ****
        --  "hoisted" (i.e., Is_Statically_Allocated and not Is_Library_Level)
        --  entity must also be either Library_Level or hoisted. It turns out
        --  that this would be incompatible with the current treatment of an
!       --  object which is local to a subprogram, subject to an Export pragma,
        --  not subject to an address clause, and whose declaration contains
        --  references to other local (non-hoisted) objects (e.g., in the initial
        --  value expression).
--- 1031,1037 ----
        --  "hoisted" (i.e., Is_Statically_Allocated and not Is_Library_Level)
        --  entity must also be either Library_Level or hoisted. It turns out
        --  that this would be incompatible with the current treatment of an
!       --  object that is local to a subprogram, subject to an Export pragma,
        --  not subject to an address clause, and whose declaration contains
        --  references to other local (non-hoisted) objects (e.g., in the initial
        --  value expression).
*************** package body Exp_Ch11 is
*** 1558,1564 ****
              Build_Location_String (Buf, Loc);
  
              --  If the exception is a renaming, use the exception that it
!             --  renames (which might be a predefined exception, e.g.).
  
              if Present (Renamed_Entity (Id)) then
                 Id := Renamed_Entity (Id);
--- 1558,1564 ----
              Build_Location_String (Buf, Loc);
  
              --  If the exception is a renaming, use the exception that it
!             --  renames (which might be a predefined exception).
  
              if Present (Renamed_Entity (Id)) then
                 Id := Renamed_Entity (Id);
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch2.adb gcc-16-20251109/gcc/ada/exp_ch2.adb
*** gcc-16-20251102/gcc/ada/exp_ch2.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch2.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Ch2 is
*** 117,124 ****
     procedure Expand_Renaming (N : Node_Id);
     --  For renamings, just replace the identifier by the corresponding
     --  named expression. Note that this has been evaluated (see routine
!    --  Exp_Ch8.Expand_N_Object_Renaming.Evaluate_Name) so this gives
!    --  the correct renaming semantics.
  
     --------------------------
     -- Expand_Current_Value --
--- 117,123 ----
     procedure Expand_Renaming (N : Node_Id);
     --  For renamings, just replace the identifier by the corresponding
     --  named expression. Note that this has been evaluated (see routine
!    --  Exp_Util.Evaluate_Name) so this gives correct renaming semantics.
  
     --------------------------
     -- Expand_Current_Value --
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch3.adb gcc-16-20251109/gcc/ada/exp_ch3.adb
*** gcc-16-20251102/gcc/ada/exp_ch3.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch3.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Ch3 is
*** 3185,3192 ****
           if Parent_Subtype_Renaming_Discrims then
              Append_List_To (Body_Stmts, Build_Init_Call_Thru (Parameters));
  
!          elsif Present (Constructor_Name (Rec_Type)) then
!             if Present (Default_Constructor (Rec_Type)) then
                 --  The 'Make attribute reference (with no arguments) will
                 --  generate a call to the one-parameter constructor procedure.
  
--- 3185,3192 ----
           if Parent_Subtype_Renaming_Discrims then
              Append_List_To (Body_Stmts, Build_Init_Call_Thru (Parameters));
  
!          elsif Needs_Construction (Rec_Type) then
!             if Has_Default_Constructor (Rec_Type) then
                 --  The 'Make attribute reference (with no arguments) will
                 --  generate a call to the one-parameter constructor procedure.
  
*************** package body Exp_Ch3 is
*** 3810,3817 ****
                 --  Expand components with constructors to have the 'Make
                 --  attribute.
  
!                elsif Present (Constructor_Name (Typ))
!                  and then Present (Default_Constructor (Typ))
                 then
                    Set_Expression (Decl,
                      Make_Attribute_Reference (Loc,
--- 3810,3817 ----
                 --  Expand components with constructors to have the 'Make
                 --  attribute.
  
!                elsif Needs_Construction (Typ)
!                  and then Has_Default_Constructor (Typ)
                 then
                    Set_Expression (Decl,
                      Make_Attribute_Reference (Loc,
*************** package body Exp_Ch3 is
*** 4560,4566 ****
           --     since the call is generated, there had better be a routine
           --     at the other end of the call, even if it does nothing).
  
!          --  10. The type has a specified Constructor aspect.
  
           --  Note: the reason we exclude the CPP_Class case is because in this
           --  case the initialization is performed by the C++ constructors, and
--- 4560,4566 ----
           --     since the call is generated, there had better be a routine
           --     at the other end of the call, even if it does nothing).
  
!          --  10. The type needs construction with constructors.
  
           --  Note: the reason we exclude the CPP_Class case is because in this
           --  case the initialization is performed by the C++ constructors, and
*************** package body Exp_Ch3 is
*** 4577,4583 ****
             or else Is_Tagged_Type (Rec_Id)
             or else Is_Concurrent_Record_Type (Rec_Id)
             or else Has_Task (Rec_Id)
!            or else Present (Constructor_Name (Rec_Id))
           then
              return True;
           end if;
--- 4577,4583 ----
             or else Is_Tagged_Type (Rec_Id)
             or else Is_Concurrent_Record_Type (Rec_Id)
             or else Has_Task (Rec_Id)
!            or else Needs_Construction (Rec_Id)
           then
              return True;
           end if;
*************** package body Exp_Ch3 is
*** 7587,7594 ****
  
        if No (Expr)
          and then Constant_Present (N)
!         and then (No (Constructor_Name (Typ))
!                    or else No (Default_Constructor (Typ)))
        then
           return;
        end if;
--- 7587,7594 ----
  
        if No (Expr)
          and then Constant_Present (N)
!         and then (not Needs_Construction (Typ)
!                    or else not Has_Default_Constructor (Typ))
        then
           return;
        end if;
*************** package body Exp_Ch3 is
*** 7619,7626 ****
  
        if Comes_From_Source (N)
          and then No (Expr)
!         and then Present (Constructor_Name (Typ))
!         and then Present (Default_Constructor (Typ))
        then
           Expr := Make_Attribute_Reference (Loc,
                     Attribute_Name => Name_Make,
--- 7619,7626 ----
  
        if Comes_From_Source (N)
          and then No (Expr)
!         and then Needs_Construction (Typ)
!         and then Has_Default_Constructor (Typ)
        then
           Expr := Make_Attribute_Reference (Loc,
                     Attribute_Name => Name_Make,
*************** package body Exp_Ch3 is
*** 8286,8291 ****
--- 8286,8301 ----
                    Set_Must_Not_Freeze (Id_Ref);
                    Set_Assignment_OK (Id_Ref);
  
+                   --  Avoid separating an object declaration from
+                   --  its representation clauses.
+ 
+                   while Present (Next (Init_After))
+                     and then Nkind (Next (Init_After)) in
+                                N_Attribute_Definition_Clause
+                   loop
+                      Init_After := Next (Init_After);
+                   end loop;
+ 
                    Insert_Actions_After (Init_After,
                      Build_Initialization_Call (N, Id_Ref, Typ,
                        Constructor_Ref => Expr));
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch4.adb gcc-16-20251109/gcc/ada/exp_ch4.adb
*** gcc-16-20251102/gcc/ada/exp_ch4.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch4.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Ch4 is
*** 1432,1477 ****
  
        --  For (a <= b) we convert to not (a > b)
  
!       if Chars (N) = Name_Op_Le then
!          Rewrite (N,
!            Make_Op_Not (Loc,
!              Right_Opnd =>
!                 Make_Op_Gt (Loc,
!                  Left_Opnd  => Op1,
!                  Right_Opnd => Op2)));
!          Analyze_And_Resolve (N, Standard_Boolean);
!          return;
  
!       --  For < the Boolean expression is
!       --    greater__nn (op2, op1)
  
!       elsif Chars (N) = Name_Op_Lt then
!          Func_Body := Make_Array_Comparison_Op (Typ1, N);
  
!          --  Switch operands
  
!          Op1 := Right_Opnd (N);
!          Op2 := Left_Opnd  (N);
  
!       --  For (a >= b) we convert to not (a < b)
  
!       elsif Chars (N) = Name_Op_Ge then
!          Rewrite (N,
!            Make_Op_Not (Loc,
!              Right_Opnd =>
!                Make_Op_Lt (Loc,
!                  Left_Opnd  => Op1,
!                  Right_Opnd => Op2)));
!          Analyze_And_Resolve (N, Standard_Boolean);
!          return;
  
!       --  For > the Boolean expression is
!       --    greater__nn (op1, op2)
  
!       else
!          pragma Assert (Chars (N) = Name_Op_Gt);
!          Func_Body := Make_Array_Comparison_Op (Typ1, N);
!       end if;
  
        Func_Name := Defining_Unit_Name (Specification (Func_Body));
        Expr :=
--- 1432,1479 ----
  
        --  For (a <= b) we convert to not (a > b)
  
!       case Nkind (N) is
!          when N_Op_Le =>
!             Rewrite (N,
!               Make_Op_Not (Loc,
!                 Right_Opnd =>
!                    Make_Op_Gt (Loc,
!                     Left_Opnd  => Op1,
!                     Right_Opnd => Op2)));
!             Analyze_And_Resolve (N, Standard_Boolean);
!             return;
  
!          --  For < the Boolean expression is
!          --    greater__nn (op2, op1)
  
!          when N_Op_Lt =>
!             Func_Body := Make_Array_Comparison_Op (Typ1, N);
  
!             --  Switch operands
  
!             Op1 := Right_Opnd (N);
!             Op2 := Left_Opnd  (N);
  
!          --  For (a >= b) we convert to not (a < b)
  
!          when N_Op_Ge =>
!             Rewrite (N,
!               Make_Op_Not (Loc,
!                 Right_Opnd =>
!                   Make_Op_Lt (Loc,
!                     Left_Opnd  => Op1,
!                     Right_Opnd => Op2)));
!             Analyze_And_Resolve (N, Standard_Boolean);
!             return;
  
!          --  For > the Boolean expression is
!          --    greater__nn (op1, op2)
  
!          when N_Op_Gt =>
!             Func_Body := Make_Array_Comparison_Op (Typ1, N);
! 
!          when others => raise Program_Error;
!       end case;
  
        Func_Name := Defining_Unit_Name (Specification (Func_Body));
        Expr :=
*************** package body Exp_Ch4 is
*** 4496,4502 ****
        --  Here we set no initialization on types with constructors since we
        --  generate initialization for the separately.
  
!       if Present (Constructor_Name (Directly_Designated_Type (PtrT)))
          and then Nkind (Expression (N)) = N_Identifier
        then
           Set_No_Initialization (N, False);
--- 4498,4504 ----
        --  Here we set no initialization on types with constructors since we
        --  generate initialization for the separately.
  
!       if Needs_Construction (Directly_Designated_Type (PtrT))
          and then Nkind (Expression (N)) = N_Identifier
        then
           Set_No_Initialization (N, False);
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch6.adb gcc-16-20251109/gcc/ada/exp_ch6.adb
*** gcc-16-20251102/gcc/ada/exp_ch6.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch6.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Ch6 is
*** 6250,6258 ****
        procedure Prepend_Constructor_Procedure_Prologue
          (Spec_Id : Entity_Id; Body_Id : Entity_Id; L : List_Id);
        --  If N is the body of a constructor procedure (that is, a procedure
!       --  named in a Constructor aspect specification for the type of the
!       --  procedure's first parameter), then prepend and analyze the
!       --  associated initialization code for that parameter.
        --  This has nothing to do with CPP constructors.
  
        ----------------
--- 6250,6258 ----
        procedure Prepend_Constructor_Procedure_Prologue
          (Spec_Id : Entity_Id; Body_Id : Entity_Id; L : List_Id);
        --  If N is the body of a constructor procedure (that is, a procedure
!       --  named T'Constructor where T is the type of the procedure's first
!       --  parameter), then prepend and analyze the associated initialization
!       --  code for that parameter.
        --  This has nothing to do with CPP constructors.
  
        ----------------
*************** package body Exp_Ch6 is
*** 6339,6354 ****
           function First_Param_Type return Entity_Id is
             (Implementation_Base_Type (Etype (First_Formal (Spec_Id))));
  
-          Is_Constructor_Procedure : constant Boolean :=
-            Nkind (Specification (N)) = N_Procedure_Specification
-              and then Present (First_Formal (Spec_Id))
-              and then Present (Constructor_Name (First_Param_Type))
-              and then Chars (Spec_Id) = Chars (Constructor_Name
-                                                  (First_Param_Type))
-              and then Ekind (First_Formal (Spec_Id)) = E_In_Out_Parameter
-              and then Scope (Spec_Id) = Scope (First_Param_Type);
        begin
!          if not Is_Constructor_Procedure then
              return; -- the usual case
           end if;
  
--- 6339,6348 ----
           function First_Param_Type return Entity_Id is
             (Implementation_Base_Type (Etype (First_Formal (Spec_Id))));
  
        begin
!          if not (Nkind (Specification (N)) = N_Procedure_Specification
!                   and then Is_Constructor_Procedure (Spec_Id))
!          then
              return; -- the usual case
           end if;
  
*************** package body Exp_Ch6 is
*** 6539,6545 ****
                            Attribute_Name => Name_Super),
                        Selector_Name =>
                          Make_Identifier (Loc,
!                           Chars (Constructor_Name (Parent_Type))));
                 begin
                    Set_Is_Prefixed_Call (Proc_Name);
  
--- 6533,6540 ----
                            Attribute_Name => Name_Super),
                        Selector_Name =>
                          Make_Identifier (Loc,
!                           Direct_Attribute_Definition_Name
!                             (Parent_Type, Name_Constructor)));
                 begin
                    Set_Is_Prefixed_Call (Proc_Name);
  
*************** package body Exp_Ch6 is
*** 9096,9122 ****
        --  tagged, the called function itself must perform the allocation of
        --  the return object, so we pass parameters indicating that.
  
-       --  But that's also the case when the result subtype needs finalization
-       --  actions because the caller side allocation may result in undesirable
-       --  finalization. Consider the following example:
-       --
-       --    function Make_Lim_Ctrl return Lim_Ctrl is
-       --    begin
-       --       return Result : Lim_Ctrl := raise Program_Error do
-       --          null;
-       --       end return;
-       --    end Make_Lim_Ctrl;
-       --
-       --    Obj : Lim_Ctrl_Ptr := new Lim_Ctrl'(Make_Lim_Ctrl);
-       --
-       --  Even though the size of limited controlled type Lim_Ctrl is known,
-       --  allocating Obj at the caller side will chain Obj on Lim_Ctrl_Ptr's
-       --  finalization collection. The subsequent call to Make_Lim_Ctrl will
-       --  fail during the initialization actions for Result, which means that
-       --  Result (and Obj by extension) should not be finalized. However Obj
-       --  will be finalized when access type Lim_Ctrl_Ptr goes out of scope
-       --  since it is already attached on the its finalization collection.
- 
        if Needs_BIP_Alloc_Form (Function_Id) then
           Temp_Init := Empty;
  
--- 9091,9096 ----
*************** package body Exp_Ch6 is
*** 9281,9291 ****
           end if;
        end;
  
!       --  When the function has a controlling result, an allocation-form
!       --  parameter must be passed indicating that the caller is allocating
!       --  the result object. This is needed because such a function can be
!       --  called as a dispatching operation and must be treated similarly
!       --  to functions with unconstrained result subtypes.
  
        Add_Unconstrained_Actuals_To_Build_In_Place_Call
          (Func_Call,
--- 9255,9261 ----
           end if;
        end;
  
!       --  Add implicit actuals for the BIP formal parameters, if any
  
        Add_Unconstrained_Actuals_To_Build_In_Place_Call
          (Func_Call,
*************** package body Exp_Ch6 is
*** 9310,9315 ****
--- 9280,9293 ----
        Add_Access_Actual_To_Build_In_Place_Call
          (Func_Call, Function_Id, Return_Obj_Actual);
  
+       --  If the allocation is done in the caller, create a custom Allocate
+       --  procedure if need be.
+ 
+       if not Needs_BIP_Alloc_Form (Function_Id) then
+          Build_Allocate_Deallocate_Proc
+            (Declaration_Node (Return_Obj_Access), Mark => Allocator);
+       end if;
+ 
        --  Finally, replace the allocator node with a reference to the temp
  
        Rewrite (Allocator, New_Occurrence_Of (Return_Obj_Access, Loc));
*************** package body Exp_Ch6 is
*** 9771,9777 ****
           --  ensure that the heap allocation can properly chain the object
           --  and later finalize it when the library unit goes out of scope.
  
!          if Needs_BIP_Collection (Func_Call) then
              Build_Finalization_Collection
                (Typ            => Ptr_Typ,
                 For_Lib_Level  => True,
--- 9749,9755 ----
           --  ensure that the heap allocation can properly chain the object
           --  and later finalize it when the library unit goes out of scope.
  
!          if Needs_BIP_Collection (Function_Id) then
              Build_Finalization_Collection
                (Typ            => Ptr_Typ,
                 For_Lib_Level  => True,
*************** package body Exp_Ch6 is
*** 10334,10339 ****
--- 10312,10323 ----
        Typ : constant Entity_Id := Underlying_Type (Etype (Func_Id));
  
     begin
+       --  No need for BIP_Collection if allocation is always done in the caller
+ 
+       if not Needs_BIP_Alloc_Form (Func_Id) then
+          return False;
+       end if;
+ 
        --  A formal for the finalization collection is needed for build-in-place
        --  functions whose result type needs finalization or is a tagged type.
        --  Tagged primitive build-in-place functions need such a formal because
*************** package body Exp_Ch6 is
*** 10358,10369 ****
        Typ : constant Entity_Id := Underlying_Type (Etype (Func_Id));
  
     begin
-       --  See Make_Build_In_Place_Call_In_Allocator for the rationale
- 
-       if Needs_BIP_Collection (Func_Id) then
-          return True;
-       end if;
- 
        --  A formal giving the allocation method is needed for build-in-place
        --  functions whose result type is returned on the secondary stack or
        --  is a tagged type. Tagged primitive build-in-place functions need
--- 10342,10347 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch6.ads gcc-16-20251109/gcc/ada/exp_ch6.ads
*** gcc-16-20251102/gcc/ada/exp_ch6.ads	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch6.ads	Sun Nov  9 22:32:43 2025
*************** package Exp_Ch6 is
*** 301,310 ****
     --  BIP_Alloc_Form parameter (see type BIP_Formal_Kind).
  
     function Needs_BIP_Collection (Func_Id : Entity_Id) return Boolean;
!    --  Ada 2005 (AI-318-02): Return True if the result subtype of function
!    --  Func_Id might need finalization actions. This includes build-in-place
!    --  functions with tagged result types, since they can be invoked via
!    --  dispatching calls, and descendant types may require finalization.
  
     function Needs_BIP_Task_Actuals (Func_Id : Entity_Id) return Boolean;
     --  Return True if the function returns an object of a type that has tasks.
--- 301,308 ----
     --  BIP_Alloc_Form parameter (see type BIP_Formal_Kind).
  
     function Needs_BIP_Collection (Func_Id : Entity_Id) return Boolean;
!    --  Ada 2005 (AI-318-02): Return True if the function needs an implicit
!    --  BIP_Collection parameter (see type BIP_Formal_Kind).
  
     function Needs_BIP_Task_Actuals (Func_Id : Entity_Id) return Boolean;
     --  Return True if the function returns an object of a type that has tasks.
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch7.adb gcc-16-20251109/gcc/ada/exp_ch7.adb
*** gcc-16-20251102/gcc/ada/exp_ch7.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch7.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Ch7 is
*** 4758,4775 ****
  
        --  We mark the secondary stack if it is used in this construct, and
        --  we're not returning a function result on the secondary stack, except
!       --  that a build-in-place function that might or might not return on the
!       --  secondary stack always needs a mark. A run-time test is required in
!       --  the case where the build-in-place function has a BIP_Alloc extra
!       --  parameter (see Create_Finalizer).
  
        Needs_Sec_Stack_Mark   : constant Boolean :=
!                                    (Uses_Sec_Stack (Scop)
!                                      and then
!                                        not Sec_Stack_Needed_For_Return (Scop))
!                                  or else
!                                    (Is_Build_In_Place_Function (Scop)
!                                      and then Needs_BIP_Alloc_Form (Scop));
  
        Needs_Custom_Cleanup   : constant Boolean :=
                                   Nkind (N) = N_Block_Statement
--- 4758,4775 ----
  
        --  We mark the secondary stack if it is used in this construct, and
        --  we're not returning a function result on the secondary stack, except
!       --  that a build-in-place function that only conditionally returns on
!       --  the secondary stack will also need a mark. A run-time test for doing
!       --  the release call is needed in the case where the build-in-place
!       --  function has a BIP_Alloc_Form parameter (see Create_Finalizer).
  
        Needs_Sec_Stack_Mark   : constant Boolean :=
!                                  Uses_Sec_Stack (Scop)
!                                    and then
!                                  (not Sec_Stack_Needed_For_Return (Scop)
!                                    or else
!                                      (Is_Build_In_Place_Function (Scop)
!                                        and then Needs_BIP_Alloc_Form (Scop)));
  
        Needs_Custom_Cleanup   : constant Boolean :=
                                   Nkind (N) = N_Block_Statement
*************** package body Exp_Ch7 is
*** 9244,9250 ****
  
     procedure Unnest_Loop (Loop_Stmt : Node_Id) is
  
!       procedure Fixup_Inner_Scopes (Loop_Or_Block : Node_Id);
        --  This procedure fixes the scope for 2 identified cases of incorrect
        --  scope information.
        --
--- 9244,9250 ----
  
     procedure Unnest_Loop (Loop_Stmt : Node_Id) is
  
!       procedure Fixup_Inner_Scopes (N : Node_Id);
        --  This procedure fixes the scope for 2 identified cases of incorrect
        --  scope information.
        --
*************** package body Exp_Ch7 is
*** 9271,9276 ****
--- 9271,9279 ----
        --  leaves the Tree in an incoherent state (i.e. the inner procedure must
        --  have its enclosing procedure in its scope ancestries).
  
+       --  The same issue exists for freeze nodes with associated TSS: the node
+       --  is moved but the TSS procedures are not correctly nested.
+ 
        --  2) The second case happens when an object declaration is created
        --  within a loop used to initialize the 'others' components of an
        --  aggregate that is nested within a transient scope. When the transient
*************** package body Exp_Ch7 is
*** 9298,9337 ****
        --  an actual entity set). But unfortunately this proved harder to
        --  implement ???
  
!       procedure Fixup_Inner_Scopes (Loop_Or_Block : Node_Id) is
!          Stmt              : Node_Id;
!          Loop_Or_Block_Ent : Entity_Id;
!          Ent_To_Fix        : Entity_Id;
!          Decl              : Node_Id := Empty;
        begin
!          pragma Assert (Nkind (Loop_Or_Block) in
!            N_Loop_Statement | N_Block_Statement);
  
!          Loop_Or_Block_Ent := Entity (Identifier (Loop_Or_Block));
!          if Nkind (Loop_Or_Block) = N_Loop_Statement then
!             Stmt := First (Statements (Loop_Or_Block));
!          else -- N_Block_Statement
!             Stmt := First
!               (Statements (Handled_Statement_Sequence (Loop_Or_Block)));
!             Decl := First (Declarations (Loop_Or_Block));
           end if;
  
           --  Fix scopes for any object declaration found in the block
           while Present (Decl) loop
              if Nkind (Decl) = N_Object_Declaration then
                 Ent_To_Fix := Defining_Identifier (Decl);
!                Set_Scope (Ent_To_Fix, Loop_Or_Block_Ent);
              end if;
              Next (Decl);
           end loop;
  
           while Present (Stmt) loop
!             if Nkind (Stmt) = N_Block_Statement
!               and then Is_Abort_Block (Stmt)
              then
                 Ent_To_Fix := Entity (Identifier (Stmt));
!                Set_Scope (Ent_To_Fix, Loop_Or_Block_Ent);
!             elsif Nkind (Stmt) in N_Block_Statement | N_Loop_Statement
              then
                 Fixup_Inner_Scopes (Stmt);
              end if;
--- 9301,9362 ----
        --  an actual entity set). But unfortunately this proved harder to
        --  implement ???
  
!       procedure Fixup_Inner_Scopes (N : Node_Id) is
!          Stmt       : Node_Id := Empty;
!          Ent        : Entity_Id;
!          Ent_To_Fix : Entity_Id;
!          Decl       : Node_Id := Empty;
!          Elmt       : Elmt_Id := No_Elmt;
        begin
!          pragma
!            Assert
!              (Nkind (N)
!               in N_Loop_Statement | N_Block_Statement | N_Freeze_Entity);
  
!          if Nkind (N) = N_Freeze_Entity then
!             Ent := Scope (Entity (N));
!          else
!             Ent := Entity (Identifier (N));
           end if;
  
+          case Nkind (N) is
+             when N_Loop_Statement =>
+                Stmt := First (Statements (N));
+ 
+             when N_Block_Statement =>
+                Stmt := First (Statements (Handled_Statement_Sequence (N)));
+                Decl := First (Declarations (N));
+ 
+             when N_Freeze_Entity =>
+                if Present (TSS_Elist (N)) then
+                   Elmt := First_Elmt (TSS_Elist (N));
+                   while Present (Elmt) loop
+                      Ent_To_Fix := Node (Elmt);
+                      Set_Scope (Ent_To_Fix, Ent);
+                      Next_Elmt (Elmt);
+                   end loop;
+                end if;
+ 
+             when others =>
+                pragma Assert (False);
+          end case;
+ 
           --  Fix scopes for any object declaration found in the block
           while Present (Decl) loop
              if Nkind (Decl) = N_Object_Declaration then
                 Ent_To_Fix := Defining_Identifier (Decl);
!                Set_Scope (Ent_To_Fix, Ent);
              end if;
              Next (Decl);
           end loop;
  
           while Present (Stmt) loop
!             if Nkind (Stmt) = N_Block_Statement and then Is_Abort_Block (Stmt)
              then
                 Ent_To_Fix := Entity (Identifier (Stmt));
!                Set_Scope (Ent_To_Fix, Ent);
!             elsif Nkind (Stmt)
!                   in N_Block_Statement | N_Loop_Statement | N_Freeze_Entity
              then
                 Fixup_Inner_Scopes (Stmt);
              end if;
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_ch8.adb gcc-16-20251109/gcc/ada/exp_ch8.adb
*** gcc-16-20251102/gcc/ada/exp_ch8.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_ch8.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Ch8 is
*** 344,365 ****
     --  Start of processing for Expand_N_Subprogram_Renaming_Declaration
  
     begin
!       --  When the prefix of the name is a function call, we must force the
!       --  call to be made by removing side effects from the call, since we
!       --  must only call the function once.
! 
!       if Nkind (Nam) = N_Selected_Component
!         and then Nkind (Prefix (Nam)) = N_Function_Call
!       then
!          Remove_Side_Effects (Prefix (Nam));
! 
!       --  For an explicit dereference, the prefix must be captured to prevent
!       --  reevaluation on calls through the renaming, which could result in
!       --  calling the wrong subprogram if the access value were to be changed.
  
!       elsif Nkind (Nam) = N_Explicit_Dereference then
!          Force_Evaluation (Prefix (Nam));
!       end if;
  
        --  Handle cases where we build a body for a renamed equality
  
--- 344,352 ----
     --  Start of processing for Expand_N_Subprogram_Renaming_Declaration
  
     begin
!       --  Perform name evaluation in all cases
  
!       Evaluate_Name (Nam);
  
        --  Handle cases where we build a body for a renamed equality
  
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_dbug.ads gcc-16-20251109/gcc/ada/exp_dbug.ads
*** gcc-16-20251102/gcc/ada/exp_dbug.ads	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_dbug.ads	Sun Nov  9 22:32:43 2025
*************** package Exp_Dbug is
*** 193,198 ****
--- 193,217 ----
        --    extra__messages__Oeq__2
  
        ----------------------------------
+       -- Direct Attribute Definitions --
+       ----------------------------------
+ 
+       --  Direct attribute definitions are subprogram declarations where the
+       --  subprogram name is an attribute reference, eg.:
+       --    procedure T'Constructor (Self...
+       --  defines a constructor. The above rules applied to direct attribute
+       --  definitions would result in names with quotation marks, which are
+       --  typically hard to deal with down the chain. To avoid this problem,
+       --  names of such definitions are encoded with as:
+ 
+       --    'D' Prefix_Name '_' Attribute_Name "_Att"
+ 
+       --  For instance, the constructor above is encoded as Dt_constructor_Att.
+ 
+       --  Note that, attribute reference with multiple attributes are not
+       --  supported yet ???
+ 
+       ----------------------------------
        -- Resolving Other Name Clashes --
        ----------------------------------
  
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_strm.adb gcc-16-20251109/gcc/ada/exp_strm.adb
*** gcc-16-20251102/gcc/ada/exp_strm.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_strm.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Strm is
*** 501,506 ****
--- 501,514 ----
           then
              return Prims (RE_I_LF, RE_W_LF);
  
+          elsif Is_IEEE_Extended_Precision (U_Type) then
+             --  For 80-bit IEEE extended precision values, we use a special
+             --  write routine that sets the unused bytes to zero. The reason
+             --  why we don't set Stream_Size to 80 and stream only the
+             --  meaningful bits is that the user is allowed to select the XDR
+             --  implementation of streaming at bind time, and XDR does not
+             --  allow 80 bits floating point values.
+             return Prims (RE_I_LLF, RE_W_80IEEE);
           elsif P_Size = Standard_Long_Long_Float_Size then
              return Prims (RE_I_LLF, RE_W_LLF);
           else
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_unst.adb gcc-16-20251109/gcc/ada/exp_unst.adb
*** gcc-16-20251102/gcc/ada/exp_unst.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_unst.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Unst is
*** 220,225 ****
--- 220,227 ----
           else
              Lev := Lev + 1;
              S   := Enclosing_Subprogram (S);
+ 
+             pragma Assert (Present (S));
           end if;
        end loop;
     end Get_Level;
diff -Nrcpad gcc-16-20251102/gcc/ada/exp_util.adb gcc-16-20251109/gcc/ada/exp_util.adb
*** gcc-16-20251102/gcc/ada/exp_util.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/exp_util.adb	Sun Nov  9 22:32:43 2025
*************** package body Exp_Util is
*** 7317,7322 ****
--- 7317,7450 ----
        Loc : constant Source_Ptr := Sloc (Var);
        Ent : constant Entity_Id  := Entity (Var);
  
+       procedure Find_In_Enclosing_Context
+         (Stmt : Node_Id; Current, Previous : in out Node_Id);
+       --  Locate an object reference inside a composite statement Stmt. On
+       --  entry, Previous and Current should be an object reference and its
+       --  parent, respectively. When search is successful, Current is Stmt and
+       --  Previous is its child node, so the caller can determine in which part
+       --  of the statement the original reference was. When search fails, both
+       --  Current and Previous are Empty.
+ 
+       function Is_Transient_Action (N : Node_Id) return Boolean;
+       --  Returns True for nodes that belong to a transient action and so they
+       --  have no parent, because they have not been inserted to the tree yet.
+ 
+       -------------------------------
+       -- Find_In_Enclosing_Context --
+       -------------------------------
+ 
+       procedure Find_In_Enclosing_Context
+         (Stmt : Node_Id; Current, Previous : in out Node_Id)
+       is
+       begin
+          loop
+             --  If we fall off the top of the tree, then that's odd, but
+             --  perhaps it could occur in some error situation, and the safest
+             --  response is simply to assume that the outcome of the condition
+             --  is unknown. No point in bombing during an attempt to optimize
+             --  things.
+ 
+             if No (Current) then
+ 
+                --  In particular, we expect to miss the enclosing conditional
+                --  statement for:
+                --  * references within a freezing action (because their
+                --    location is unrelated to the conditional statement),
+                --  * validity checks (becuase for references inside the
+                --    condition they are inserted before the conditional
+                --    statement itself),
+                --  * source locations before and after the conditionaal
+                --    statement.
+ 
+                pragma Assert
+                  (Inside_Freezing_Actions > 0
+                   or else
+                     (Ekind (Entity (Var)) = E_Variable
+                      and then Present (Validated_Object (Entity (Var))))
+                   or else
+                     Loc < Sloc (Stmt)
+                   or else
+                     Loc >= Sloc (Stmt) + Text_Ptr (UI_To_Int (End_Span (Stmt)))
+                   or else
+                     Serious_Errors_Detected > 0);
+ 
+                return;
+ 
+             --  We found the enclosing conditional statement
+ 
+             elsif Current = Stmt then
+                return;
+ 
+             --  For itype declarations follow their associated node
+ 
+             elsif Nkind (Current) = N_Subtype_Declaration
+               and then Is_Itype (Defining_Identifier (Current))
+             then
+                Previous := Current;
+                Current :=
+                  Associated_Node_For_Itype (Defining_Identifier (Previous));
+ 
+                --  If associated node has not been set yet, we can use the
+                --  related expression, which is set earlier.
+                --  ??? this should be investigated
+ 
+                if No (Current) then
+                   Current :=
+                     Related_Expression (Defining_Identifier (Previous));
+                end if;
+                pragma Assert (Present (Current));
+ 
+             --  Same for itypes that have no declaration
+ 
+             elsif Nkind (Current) = N_Defining_Identifier
+               and then Is_Itype (Current)
+             then
+                pragma Assert (No (Parent (Current)));
+                Previous := Current;
+                Current := Associated_Node_For_Itype (Previous);
+ 
+             --  For transient actions follow where they will be inserted
+ 
+             elsif Is_Transient_Action (Current) then
+                Previous := Current;
+                Current :=
+                  Scope_Stack.Table (Scope_Stack.Last).Node_To_Be_Wrapped;
+ 
+             --  Otherwise, continue climbing
+ 
+             else
+                Previous := Current;
+                Current := Parent (Current);
+             end if;
+          end loop;
+       end Find_In_Enclosing_Context;
+ 
+       -------------------------
+       -- Is_Transient_Action --
+       -------------------------
+ 
+       function Is_Transient_Action (N : Node_Id) return Boolean is
+       begin
+          if Scope_Stack.Last >= Scope_Stack.First
+            and then Scope_Is_Transient
+            and then Is_List_Member (N)
+          then
+             declare
+                Transient_Actions : Scope_Actions renames
+                  Scope_Stack.Table (Scope_Stack.Last).Actions_To_Be_Wrapped;
+             begin
+                for Action_Kind in Scope_Actions'Range loop
+                   if List_Containing (N) = Transient_Actions (Action_Kind) then
+                      return True;
+                   end if;
+                end loop;
+             end;
+          end if;
+ 
+          return False;
+       end Is_Transient_Action;
+ 
        procedure Process_Current_Value_Condition (N : Node_Id; S : Boolean);
        --  N is an expression which holds either True (S = True) or False (S =
        --  False) in the condition. This procedure digs out the expression and
*************** package body Exp_Util is
*** 7490,7645 ****
        declare
           CV   : constant Node_Id := Current_Value (Ent);
           Sens : Boolean;
-          Stm  : Node_Id;
  
        begin
!          --  If statement. Condition is known true in THEN section, known False
!          --  in any ELSIF or ELSE part, and unknown outside the IF statement.
! 
!          if Nkind (CV) = N_If_Statement then
! 
!             --  Before start of IF statement
! 
!             if Loc < Sloc (CV) then
!                return;
! 
!             --  In condition of IF statement
! 
!             elsif In_Subtree (N => Var, Root => Condition (CV)) then
!                return;
! 
!             --  After end of IF statement
  
!             elsif Loc >= Sloc (CV) + Text_Ptr (UI_To_Int (End_Span (CV))) then
!                return;
!             end if;
  
!             --  At this stage we know that we are within the IF statement, but
!             --  unfortunately, the tree does not record the SLOC of the ELSE so
!             --  we cannot use a simple SLOC comparison to distinguish between
!             --  the then/else statements, so we have to climb the tree.
  
              declare
!                N : Node_Id;
! 
!             begin
!                N := Parent (Var);
!                while Parent (N) /= CV loop
!                   N := Parent (N);
! 
!                   --  If we fall off the top of the tree, then that's odd, but
!                   --  perhaps it could occur in some error situation, and the
!                   --  safest response is simply to assume that the outcome of
!                   --  the condition is unknown. No point in bombing during an
!                   --  attempt to optimize things.
! 
!                   if No (N) then
!                      return;
!                   end if;
!                end loop;
! 
!                --  Now we have N pointing to a node whose parent is the IF
!                --  statement in question, so now we can tell if we are within
!                --  the THEN statements.
  
!                if Is_List_Member (N)
!                  and then List_Containing (N) = Then_Statements (CV)
!                then
!                   Sens := True;
  
!                --  If the variable reference does not come from source, we
!                --  cannot reliably tell whether it appears in the else part.
!                --  In particular, if it appears in generated code for a node
!                --  that requires finalization, it may be attached to a list
!                --  that has not been yet inserted into the code. For now,
!                --  treat it as unknown.
  
!                elsif not Comes_From_Source (N) then
                    return;
- 
-                --  Otherwise we must be in ELSIF or ELSE part
- 
-                else
-                   Sens := False;
                 end if;
-             end;
- 
-             --  ELSIF part. Condition is known true within the referenced
-             --  ELSIF, known False in any subsequent ELSIF or ELSE part,
-             --  and unknown before the ELSE part or after the IF statement.
  
!          elsif Nkind (CV) = N_Elsif_Part then
! 
!             --  if the Elsif_Part had condition_actions, the elsif has been
!             --  rewritten as a nested if, and the original elsif_part is
!             --  detached from the tree, so there is no way to obtain useful
!             --  information on the current value of the variable.
!             --  Can this be improved ???
! 
!             if No (Parent (CV)) then
!                return;
!             end if;
! 
!             Stm := Parent (CV);
! 
!             --  If the tree has been otherwise rewritten there is nothing
!             --  else to be done either.
! 
!             if Nkind (Stm) /= N_If_Statement then
!                return;
!             end if;
! 
!             --  Before start of ELSIF part
! 
!             if Loc < Sloc (CV) then
!                return;
! 
!             --  In condition of ELSIF part
! 
!             elsif In_Subtree (N => Var, Root => Condition (CV)) then
!                return;
  
!             --  After end of IF statement
  
!             elsif Loc >= Sloc (Stm) +
!               Text_Ptr (UI_To_Int (End_Span (Stm)))
!             then
!                return;
!             end if;
  
!             --  Again we lack the SLOC of the ELSE, so we need to climb the
!             --  tree to see if we are within the ELSIF part in question.
  
!             declare
!                N : Node_Id;
  
!             begin
!                N := Parent (Var);
!                while Parent (N) /= Stm loop
!                   N := Parent (N);
  
!                   --  If we fall off the top of the tree, then that's odd, but
!                   --  perhaps it could occur in some error situation, and the
!                   --  safest response is simply to assume that the outcome of
!                   --  the condition is unknown. No point in bombing during an
!                   --  attempt to optimize things.
  
!                   if No (N) then
                       return;
                    end if;
-                end loop;
- 
-                --  Now we have N pointing to a node whose parent is the IF
-                --  statement in question, so see if is the ELSIF part we want.
-                --  the THEN statements.
- 
-                if N = CV then
-                   Sens := True;
- 
-                   --  Otherwise we must be in subsequent ELSIF or ELSE part
- 
                 else
!                   Sens := False;
                 end if;
              end;
  
--- 7618,7688 ----
        declare
           CV   : constant Node_Id := Current_Value (Ent);
           Sens : Boolean;
  
        begin
!          --  For IF statement the condition is known true in THEN section,
!          --  known False in any ELSIF or ELSE part, and unknown outside the
!          --  IF statement.
  
!          if Nkind (CV) in N_If_Statement | N_Elsif_Part then
  
!             --  At this stage we know that we are within the conditional
!             --  statement, but we have to climb the tree to know in which
!             --  part, e.g. in THEN or ELSE statements of an IF statement.
  
              declare
!                If_Stmt : constant Node_Id :=
!                  (if Nkind (CV) = N_If_Statement
!                   then CV
!                   else Parent (CV));
  
!                Previous : Node_Id := Var;
!                Current  : Node_Id := Parent (Var);
  
!             begin
!                --  An ELSIF part whose condition is false could have been
!                --  already rewritten into NULL statement and we are already
!                --  past the statements inside that ELSIF part.
  
!                if Nkind (If_Stmt) /= N_If_Statement then
!                   pragma Assert
!                     (Nkind (CV) = N_Elsif_Part
!                      and then Is_Rewrite_Substitution (If_Stmt));
                    return;
                 end if;
  
!                Find_In_Enclosing_Context (If_Stmt, Current, Previous);
  
!                --  Check whether the reference is in the IF, THEN or ELSE/ELSIF
!                --  part.
  
!                if Current = If_Stmt then
  
!                   --  Ignore references from within the IF condition itself
  
!                   if Previous = Condition (If_Stmt) then
!                      return;
  
!                   --  Guard against if-statements coming from if-statements
!                   --  with broken chain of parents.
  
!                   elsif Is_List_Member (Previous) then
!                      pragma Assert (
!                        List_Containing (Previous)
!                           in Then_Statements (If_Stmt)
!                            | Elsif_Parts (If_Stmt)
!                            | Else_Statements (If_Stmt));
  
!                      Sens :=
!                        (if CV = If_Stmt
!                         then List_Containing (Previous) = Then_Statements (CV)
!                         else Previous = CV);
!                   else
!                      pragma Assert (From_Conditional_Expression (If_Stmt));
                       return;
                    end if;
                 else
!                   return;
                 end if;
              end;
  
*************** package body Exp_Util is
*** 7650,7675 ****
              declare
                 Loop_Stmt : constant Node_Id := Parent (CV);
  
              begin
!                --  Before start of body of loop
  
!                if Loc < Sloc (Loop_Stmt) then
!                   return;
  
!                --  In condition of while loop
  
!                elsif In_Subtree (N => Var, Root => Condition (CV)) then
!                   return;
  
!                --  After end of LOOP statement
  
!                elsif Loc >= Sloc (End_Label (Loop_Stmt)) then
!                   return;
  
!                --  We are within the body of the loop
  
                 else
!                   Sens := True;
                 end if;
              end;
  
--- 7693,7723 ----
              declare
                 Loop_Stmt : constant Node_Id := Parent (CV);
  
+                Previous : Node_Id := Var;
+                Current  : Node_Id := Parent (Var);
+ 
              begin
!                pragma Assert (Nkind (Loop_Stmt) = N_Loop_Statement);
  
!                Find_In_Enclosing_Context (Loop_Stmt, Current, Previous);
  
!                --  Check whether the reference is inside the WHILE loop
  
!                if Current = Loop_Stmt then
  
!                   --  Ignore references from within the WHILE condition itself
  
!                   if Previous = Iteration_Scheme (Loop_Stmt) then
!                      return;
  
!                   else
!                      pragma Assert
!                        (List_Containing (Previous) = Statements (Loop_Stmt));
  
+                      Sens := True;
+                   end if;
                 else
!                   return;
                 end if;
              end;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/fname.adb gcc-16-20251109/gcc/ada/fname.adb
*** gcc-16-20251102/gcc/ada/fname.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/fname.adb	Sun Nov  9 22:32:43 2025
*************** package body Fname is
*** 134,152 ****
        Renamings_Included : Boolean := True) return Boolean
     is
     begin
-       --  Definitely false if longer than 12 characters (8.3), except for the
-       --  Interfaces packages and also the implementation units of the 128-bit
-       --  types under System.
- 
-       if Fname'Length > 12
-         and then Fname (Fname'First .. Fname'First + 1) /= "i-"
-         and then Fname (Fname'First .. Fname'First + 1) /= "s-"
-         and then not Has_Prefix (Fname, "system-")
-         and then not Has_Prefix (Fname, "interfac__")
-       then
-          return False;
-       end if;
- 
        if not Has_Internal_Extension (Fname) then
           return False;
        end if;
--- 134,139 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/freeze.adb gcc-16-20251109/gcc/ada/freeze.adb
*** gcc-16-20251102/gcc/ada/freeze.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/freeze.adb	Sun Nov  9 22:32:43 2025
*************** package body Freeze is
*** 8382,8388 ****
        --  and Per-Object Expressions" will suppress the insertion, and the
        --  freeze node will be dropped on the floor.
  
!       if Saved_Ghost_Config.Ghost_Mode = Ignore
          and then Ghost_Config.Ghost_Mode /= Ignore
          and then Present (Ghost_Config.Ignored_Ghost_Region)
        then
--- 8382,8389 ----
        --  and Per-Object Expressions" will suppress the insertion, and the
        --  freeze node will be dropped on the floor.
  
!       if not CodePeer_Mode
!         and then Saved_Ghost_Config.Ghost_Mode = Ignore
          and then Ghost_Config.Ghost_Mode /= Ignore
          and then Present (Ghost_Config.Ignored_Ghost_Region)
        then
diff -Nrcpad gcc-16-20251102/gcc/ada/gen_il-fields.ads gcc-16-20251109/gcc/ada/gen_il-fields.ads
*** gcc-16-20251102/gcc/ada/gen_il-fields.ads	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gen_il-fields.ads	Sun Nov  9 22:32:43 2025
*************** package Gen_IL.Fields is
*** 131,137 ****
        Corresponding_Stub,
        Dcheck_Function,
        Declarations,
-       Default_Expression,
        Default_Storage_Pool,
        Default_Name,
        Default_Subtype_Mark,
--- 131,136 ----
*************** package Gen_IL.Fields is
*** 153,159 ****
        Do_Length_Check,
        Do_Overflow_Check,
        Do_Range_Check,
-       Do_Storage_Check,
        Elaborate_All_Desirable,
        Elaborate_All_Present,
        Elaborate_Desirable,
--- 152,157 ----
*************** package Gen_IL.Fields is
*** 161,167 ****
        Else_Actions,
        Else_Statements,
        Elsif_Parts,
-       Enclosing_Variant,
        End_Label,
        End_Span,
        Entity_Or_Associated_Node,
--- 159,164 ----
*************** package Gen_IL.Fields is
*** 204,210 ****
        Generic_Parent,
        Generic_Parent_Type,
        Handled_Statement_Sequence,
-       Handler_List_Entry,
        Has_Created_Identifier,
        Has_Dereference_Action,
        Has_Dynamic_Length_Check,
--- 201,206 ----
*************** package Gen_IL.Fields is
*** 283,289 ****
        Is_Static_Coextension,
        Is_Static_Expression,
        Is_Structural,
-       Is_Subprogram_Descriptor,
        Is_Task_Allocation_Block,
        Is_Task_Body_Procedure,
        Is_Task_Master,
--- 279,284 ----
*************** package Gen_IL.Fields is
*** 376,382 ****
        Reason,
        Record_Extension_Part,
        Redundant_Use,
-       Renaming_Exception,
        Result_Definition,
        Return_Object_Declarations,
        Return_Statement_Entity,
--- 371,376 ----
*************** package Gen_IL.Fields is
*** 480,487 ****
        Component_Clause,
        Component_Size,
        Component_Type,
-       Constructor_List,
-       Constructor_Name,
        Continue_Mark,
        Contract,
        Contract_Wrapper,
--- 474,479 ----
*************** package Gen_IL.Fields is
*** 614,620 ****
        Has_Own_Invariants,
        Has_Partial_Visible_Refinement,
        Has_Per_Object_Constraint,
-       Has_Pragma_Controlled,
        Has_Pragma_Elaborate_Body,
        Has_Pragma_Inline,
        Has_Pragma_Inline_Always,
--- 606,611 ----
*************** package Gen_IL.Fields is
*** 808,814 ****
        Is_Unchecked_Union,
        Is_Underlying_Full_View,
        Is_Underlying_Record_View,
-       Is_Unimplemented,
        Is_Unsigned_Type,
        Is_Uplevel_Referenced_Entity,
        Is_Valued_Procedure,
--- 799,804 ----
*************** package Gen_IL.Fields is
*** 818,823 ****
--- 808,814 ----
        Is_Volatile_Object,
        Is_Volatile_Full_Access,
        Is_Wrapper,
+       Is_IEEE_Extended_Precision,
        Itype_Printed,
        Kill_Elaboration_Checks,
        Known_To_Have_Preelab_Init,
diff -Nrcpad gcc-16-20251102/gcc/ada/gen_il-gen-gen_entities.adb gcc-16-20251109/gcc/ada/gen_il-gen-gen_entities.adb
*** gcc-16-20251102/gcc/ada/gen_il-gen-gen_entities.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gen_il-gen-gen_entities.adb	Sun Nov  9 22:32:43 2025
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 203,209 ****
          Sm (Is_Unchecked_Union, Flag, Impl_Base_Type_Only),
          Sm (Is_Underlying_Full_View, Flag),
          Sm (Is_Underlying_Record_View, Flag, Base_Type_Only),
-         Sm (Is_Unimplemented, Flag),
          Sm (Is_Uplevel_Referenced_Entity, Flag),
          Sm (Is_Visible_Formal, Flag),
          Sm (Is_Visible_Lib_Unit, Flag),
--- 203,208 ----
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 456,463 ****
              Pre => "Ekind (Base_Type (N)) in Access_Subprogram_Kind"),
          Sm (Class_Wide_Equivalent_Type, Node_Id),
          Sm (Class_Wide_Type, Node_Id),
-         Sm (Constructor_List, Elist_Id),
-         Sm (Constructor_Name, Node_Id),
          Sm (Contract, Node_Id),
          Sm (Current_Use_Clause, Node_Id),
          Sm (Derived_Type_Link, Node_Id),
--- 455,460 ----
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 630,636 ****
         --  first named subtype).
  
     Ab (Float_Kind, Real_Kind,
!        (Sm (Digits_Value, Upos)));
  
     Cc (E_Floating_Point_Type, Float_Kind);
         --  Floating point type, used for the anonymous base type of the
--- 627,634 ----
         --  first named subtype).
  
     Ab (Float_Kind, Real_Kind,
!        (Sm (Digits_Value, Upos),
!         Sm (Is_IEEE_Extended_Precision, Flag)));
  
     Cc (E_Floating_Point_Type, Float_Kind);
         --  Floating point type, used for the anonymous base type of the
*************** begin -- Gen_IL.Gen.Gen_Entities
*** 646,652 ****
         (Sm (Associated_Storage_Pool, Node_Id, Root_Type_Only),
          Sm (Directly_Designated_Type, Node_Id),
          Sm (Finalization_Collection, Node_Id, Root_Type_Only),
-         Sm (Has_Pragma_Controlled, Flag, Impl_Base_Type_Only),
          Sm (Has_Storage_Size_Clause, Flag, Impl_Base_Type_Only),
          Sm (Is_Access_Constant, Flag),
          Sm (Is_Local_Anonymous_Access, Flag),
--- 644,649 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/gen_il-gen-gen_nodes.adb gcc-16-20251109/gcc/ada/gen_il-gen-gen_nodes.adb
*** gcc-16-20251102/gcc/ada/gen_il-gen-gen_nodes.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gen_il-gen-gen_nodes.adb	Sun Nov  9 22:32:43 2025
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 192,205 ****
         (Sy (Char_Literal_Value, Unat)));
  
     Ab (N_Op, N_Has_Entity,
!        (Sm (Chars, Name_Id),
!         Sm (Do_Overflow_Check, Flag),
          Sm (Has_Private_View, Flag),
          Sm (Has_Secondary_Private_View, Flag)));
  
     Ab (N_Binary_Op, N_Op,
         (Sy (Left_Opnd, Node_Id),
!         Sy (Right_Opnd, Node_Id)));
  
     Cc (N_Op_Add, N_Binary_Op);
  
--- 192,215 ----
         (Sy (Char_Literal_Value, Unat)));
  
     Ab (N_Op, N_Has_Entity,
!        (Sm (Do_Overflow_Check, Flag),
          Sm (Has_Private_View, Flag),
          Sm (Has_Secondary_Private_View, Flag)));
  
     Ab (N_Binary_Op, N_Op,
         (Sy (Left_Opnd, Node_Id),
!         Sy (Right_Opnd, Node_Id),
!         Sy (Chars, Name_Id, Default_No_Name)));
!    --  N_Binary_Op and N_Unary_Op do not strictly need Chars, since the value
!    --  is fully determined by the Nkind. However, for example, Errout refers to
!    --  Chars without knowing statically whether the Nkind is in N_Op.
!    --  In any case, we don't inherit Chars from N_Op, because we want it to
!    --  come after the other syntactic fields, so that positional notation can
!    --  be used in calls to Make_Op_Add and friends.
!    --
!    --  Make_Op_Add and friends will now have a Chars parameter. Callers
!    --  should always use the default, because the Chars field is set
!    --  properly as a special case (see Gen_IL.Gen).
  
     Cc (N_Op_Add, N_Binary_Op);
  
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 259,265 ****
     Cc (N_Op_Shift_Right_Arithmetic, N_Op_Shift);
  
     Ab (N_Unary_Op, N_Op,
!        (Sy (Right_Opnd, Node_Id)));
  
     Cc (N_Op_Abs, N_Unary_Op);
     Cc (N_Op_Minus, N_Unary_Op);
--- 269,276 ----
     Cc (N_Op_Shift_Right_Arithmetic, N_Op_Shift);
  
     Ab (N_Unary_Op, N_Op,
!        (Sy (Right_Opnd, Node_Id),
!         Sy (Chars, Name_Id, Default_No_Name)));
  
     Cc (N_Op_Abs, N_Unary_Op);
     Cc (N_Op_Minus, N_Unary_Op);
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 290,296 ****
     Ab (N_Short_Circuit, N_Subexpr,
         (Sy (Left_Opnd, Node_Id),
          Sy (Right_Opnd, Node_Id),
!         Sm (Actions, List_Id)));
  
     Cc (N_And_Then, N_Short_Circuit);
     Cc (N_Or_Else, N_Short_Circuit);
--- 301,307 ----
     Ab (N_Short_Circuit, N_Subexpr,
         (Sy (Left_Opnd, Node_Id),
          Sy (Right_Opnd, Node_Id),
!         Sy (Actions, List_Id, Default_No_List)));
  
     Cc (N_And_Then, N_Short_Circuit);
     Cc (N_Or_Else, N_Short_Circuit);
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 403,409 ****
          Sy (Null_Exclusion_Present, Flag, Default_False),
          Sy (Expression, Node_Id, Default_Empty),
          Sm (For_Special_Return_Object, Flag),
-         Sm (Do_Storage_Check, Flag),
          Sm (Is_Dynamic_Coextension, Flag),
          Sm (Is_Static_Coextension, Flag),
          Sm (No_Initialization, Flag),
--- 414,419 ----
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 515,521 ****
          Sy (Null_Exclusion_Present, Flag, Default_False),
          Sy (Access_Definition, Node_Id, Default_Empty),
          Sy (Subtype_Mark, Node_Id, Default_Empty),
!         Sy (Default_Expression, Node_Id, Default_Empty),
          Sy (Aspect_Specifications, List_Id, Default_No_List),
          Sm (More_Ids, Flag),
          Sm (Prev_Ids, Flag)));
--- 525,531 ----
          Sy (Null_Exclusion_Present, Flag, Default_False),
          Sy (Access_Definition, Node_Id, Default_Empty),
          Sy (Subtype_Mark, Node_Id, Default_Empty),
!         Sy (Expression, Node_Id, Default_Empty),
          Sy (Aspect_Specifications, List_Id, Default_No_List),
          Sm (More_Ids, Flag),
          Sm (Prev_Ids, Flag)));
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 568,575 ****
          Sm (Assignment_OK, Flag),
          Sm (Corresponding_Generic_Association, Node_Id),
          Sm (Exception_Junk, Flag),
-         Sm (Handler_List_Entry, Node_Id),
-         Sm (Is_Subprogram_Descriptor, Flag),
          Sm (More_Ids, Flag),
          Sm (No_Initialization, Flag),
          Sm (Prev_Ids, Flag),
--- 578,583 ----
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 730,736 ****
          Sm (Activation_Chain_Entity, Node_Id),
          Sm (Acts_As_Spec, Flag),
          Sm (Corresponding_Entry_Body, Node_Id),
-         Sm (Do_Storage_Check, Flag),
          Sm (Has_Relative_Deadline_Pragma, Flag),
          Sm (Is_Entry_Barrier_Function, Flag),
          Sm (Is_Protected_Subprogram_Body, Flag),
--- 738,743 ----
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 1154,1162 ****
          Sm (Target, Node_Id)));
  
     Cc (N_Case_Expression_Alternative, Node_Kind,
!        (Sm (Actions, List_Id),
!         Sy (Discrete_Choices, List_Id),
          Sy (Expression, Node_Id, Default_Empty),
          Sm (Has_SP_Choice, Flag)));
  
     Cc (N_Case_Statement_Alternative, Node_Kind,
--- 1161,1169 ----
          Sm (Target, Node_Id)));
  
     Cc (N_Case_Expression_Alternative, Node_Kind,
!        (Sy (Discrete_Choices, List_Id),
          Sy (Expression, Node_Id, Default_Empty),
+         Sy (Actions, List_Id, Default_No_List),
          Sm (Has_SP_Choice, Flag)));
  
     Cc (N_Case_Statement_Alternative, Node_Kind,
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 1283,1292 ****
     Cc (N_Exception_Declaration, N_Declaration,
         (Sy (Defining_Identifier, Node_Id),
          Sy (Aspect_Specifications, List_Id, Default_No_List),
!         Sm (Expression, Node_Id),
          Sm (More_Ids, Flag),
!         Sm (Prev_Ids, Flag),
!         Sm (Renaming_Exception, Node_Id)));
  
     Cc (N_Exception_Handler, Node_Kind,
         (Sy (Choice_Parameter, Node_Id, Default_Empty),
--- 1290,1298 ----
     Cc (N_Exception_Declaration, N_Declaration,
         (Sy (Defining_Identifier, Node_Id),
          Sy (Aspect_Specifications, List_Id, Default_No_List),
!         Sy (Expression, Node_Id, Default_Empty),
          Sm (More_Ids, Flag),
!         Sm (Prev_Ids, Flag)));
  
     Cc (N_Exception_Handler, Node_Kind,
         (Sy (Choice_Parameter, Node_Id, Default_Empty),
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 1426,1432 ****
          Sy (Parameter_Type, Node_Id),
          Sy (Expression, Node_Id, Default_Empty),
          Sy (Aspect_Specifications, List_Id, Default_No_List),
-         Sm (Default_Expression, Node_Id),
          Sm (More_Ids, Flag),
          Sm (Prev_Ids, Flag)));
  
--- 1432,1437 ----
*************** begin -- Gen_IL.Gen.Gen_Nodes
*** 1531,1537 ****
         (Sy (Discrete_Choices, List_Id),
          Sy (Component_List, Node_Id),
          Sm (Dcheck_Function, Node_Id),
-         Sm (Enclosing_Variant, Node_Id),
          Sm (Has_SP_Choice, Flag),
          Sm (Present_Expr, Uint)));
  
--- 1536,1541 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/gen_il-gen.adb gcc-16-20251109/gcc/ada/gen_il-gen.adb
*** gcc-16-20251102/gcc/ada/gen_il-gen.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gen_il-gen.adb	Sun Nov  9 22:32:43 2025
*************** package body Gen_IL.Gen is
*** 167,173 ****
  
        --  Check that syntactic fields precede semantic fields. Note that this
        --  check is happening before we compute inherited fields.
-       --  Exempt Chars and Actions from this rule, for now.
  
        declare
           Semantic_Seen : Boolean := False;
--- 167,172 ----
*************** package body Gen_IL.Gen is
*** 178,188 ****
                    raise Illegal with
                      "syntactic fields must precede semantic ones " & Image (T);
                 end if;
- 
              else
!                if Fields (J).F not in Chars | Actions then
!                   Semantic_Seen := True;
!                end if;
              end if;
           end loop;
        end;
--- 177,184 ----
                    raise Illegal with
                      "syntactic fields must precede semantic ones " & Image (T);
                 end if;
              else
!                Semantic_Seen := True;
              end if;
           end loop;
        end;
*************** package body Gen_IL.Gen is
*** 509,522 ****
        Node_Field_Types_Used, Entity_Field_Types_Used : Type_Set;
  
        Setter_Needs_Parent : Field_Set :=
!         (Actions | Expression | Then_Actions | Else_Actions => True,
           others => False);
        --  Set of fields where the setter should set the Parent. True for
!       --  syntactic fields of type Node_Id and List_Id, but with some
!       --  exceptions. Expression is syntactic AND semantic, and the Parent
!       --  is needed. Default_Expression is also both, but the Parent is not
!       --  needed. Then_Actions and Else_Actions are not syntactic, but the
!       --  Parent is needed.
        --
        --  Computed in Check_For_Syntactic_Field_Mismatch.
  
--- 505,515 ----
        Node_Field_Types_Used, Entity_Field_Types_Used : Type_Set;
  
        Setter_Needs_Parent : Field_Set :=
!         (Then_Actions | Else_Actions => True,
           others => False);
        --  Set of fields where the setter should set the Parent. True for
!       --  syntactic fields of type Node_Id and List_Id. Then_Actions and
!       --  Else_Actions are not syntactic, but the Parent is needed.
        --
        --  Computed in Check_For_Syntactic_Field_Mismatch.
  
*************** package body Gen_IL.Gen is
*** 896,902 ****
              --  For example, Left_Opnd comes before Right_Opnd,
              --  which wouldn't be the case if Right_Opnd were
              --  inherited from N_Op.
!               ((T = N_Op and then F = Right_Opnd)
                 or else (T = N_Renaming_Declaration and then F = Name)
                 or else (T = N_Generic_Renaming_Declaration and then F = Name)
                 or else F in Defining_Unit_Name
--- 889,895 ----
              --  For example, Left_Opnd comes before Right_Opnd,
              --  which wouldn't be the case if Right_Opnd were
              --  inherited from N_Op.
!               ((T = N_Op and then F in Right_Opnd | Chars)
                 or else (T = N_Renaming_Declaration and then F = Name)
                 or else (T = N_Generic_Renaming_Declaration and then F = Name)
                 or else F in Defining_Unit_Name
*************** package body Gen_IL.Gen is
*** 1301,1326 ****
                       end if;
                    end loop;
  
!                   --  The following fields violate this rule. We might want to
!                   --  simplify by getting rid of these cases, but we allow them
!                   --  for now. At least, we don't want to add any new cases of
!                   --  syntactic/semantic mismatch.
  
!                   if F in Chars | Actions | Expression | Default_Expression
                    then
!                      pragma Assert (Syntactic_Seen and Semantic_Seen);
! 
!                   else
!                      if Syntactic_Seen and Semantic_Seen then
!                         raise Illegal with
!                           "syntactic/semantic mismatch for " & Image (F);
!                      end if;
! 
!                      if Field_Table (F).Field_Type in Traversed_Field_Type
!                        and then Syntactic_Seen
!                      then
!                         Setter_Needs_Parent (F) := True;
!                      end if;
                    end if;
                 end;
              end if;
--- 1294,1308 ----
                       end if;
                    end loop;
  
!                   if Syntactic_Seen and Semantic_Seen then
!                      raise Illegal with
!                        "syntactic/semantic mismatch for " & Image (F);
!                   end if;
  
!                   if Field_Table (F).Field_Type in Traversed_Field_Type
!                     and then Syntactic_Seen
                    then
!                      Setter_Needs_Parent (F) := True;
                    end if;
                 end;
              end if;
*************** package body Gen_IL.Gen is
*** 2675,2681 ****
  
                 if Is_Descendant (N_Op, T) then
                    --  Special cases for N_Op nodes: fill in the Chars and Entity
!                   --  fields even though they were not passed in.
  
                    declare
                       Op : constant String := Image_Sans_N (T);
--- 2657,2663 ----
  
                 if Is_Descendant (N_Op, T) then
                    --  Special cases for N_Op nodes: fill in the Chars and Entity
!                   --  fields. Assert that the Chars passed in is defaulted.
  
                    declare
                       Op : constant String := Image_Sans_N (T);
*************** package body Gen_IL.Gen is
*** 2705,2710 ****
--- 2687,2693 ----
                       --  "Op_", but the Name_Id constant does not.
  
                    begin
+                      Put (S, "pragma Assert (Chars = No_Name);" & LF);
                       Put (S, "Set_Chars (N, Name_" & Op_Name & ");" & LF);
                       Put (S, "Set_Entity (N, Standard_" & Op & ");" & LF);
                    end;
*************** package body Gen_IL.Gen is
*** 2990,2996 ****
                       (if T in Entity_Type and then F in Node_Field then
                         " -- N" else "");
                    --  A comment to put out for fields of entities that are
!                   --  shared with nodes, such as Chars.
  
                 begin
                    while First_Bit < Type_Bit_Size_Aligned (T) loop
--- 2973,2979 ----
                       (if T in Entity_Type and then F in Node_Field then
                         " -- N" else "");
                    --  A comment to put out for fields of entities that are
!                   --  shared with nodes.
  
                 begin
                    while First_Bit < Type_Bit_Size_Aligned (T) loop
diff -Nrcpad gcc-16-20251102/gcc/ada/gen_il-gen.ads gcc-16-20251109/gcc/ada/gen_il-gen.ads
*** gcc-16-20251102/gcc/ada/gen_il-gen.ads	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gen_il-gen.ads	Sun Nov  9 22:32:43 2025
***************
*** 48,61 ****
  --  If a field is syntactic, then the constructors in Nmake take a parameter to
  --  initialize that field. In addition, the tree-traversal routines in Atree
  --  (Traverse_Func and Traverse_Proc) traverse syntactic fields that are of
! --  type Node_Id (or subtypes of Node_Id) or List_Id. Finally, (with some
! --  exceptions documented in the body) the setter for a syntactic node or list
! --  field "Set_F (N, Val)" will set the Parent of Val to N, unless Val is Empty
! --  or Error[_List].
  --
! --  Note that the same field can be syntactic in some node types but semantic
! --  in other node types. This is an added complexity that we might want to
! --  eliminate someday. We shouldn't add any new such cases.
  --
  --  A "program" written in the Gen_IL.Gen language consists of calls to the
  --  "Create_..." routines below, followed by a call to Compile, also below. In
--- 48,59 ----
  --  If a field is syntactic, then the constructors in Nmake take a parameter to
  --  initialize that field. In addition, the tree-traversal routines in Atree
  --  (Traverse_Func and Traverse_Proc) traverse syntactic fields that are of
! --  type Node_Id (or subtypes of Node_Id) or List_Id. Finally, the setter for a
! --  syntactic node or list field "Set_F (N, Val)" will set the Parent of Val to
! --  N, unless Val is Empty or Error[_List].
  --
! --  No syntactic/semantic mixing: the same field cannot be syntactic in some
! --  node types but semantic in other node types.
  --
  --  A "program" written in the Gen_IL.Gen language consists of calls to the
  --  "Create_..." routines below, followed by a call to Compile, also below. In
diff -Nrcpad gcc-16-20251102/gcc/ada/gen_il-internals.adb gcc-16-20251109/gcc/ada/gen_il-internals.adb
*** gcc-16-20251102/gcc/ada/gen_il-internals.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gen_il-internals.adb	Sun Nov  9 22:32:43 2025
*************** package body Gen_IL.Internals is
*** 311,316 ****
--- 311,318 ----
              return "Is_Elaboration_Warnings_OK_Id";
           when Is_Elaboration_Warnings_OK_Node =>
              return "Is_Elaboration_Warnings_OK_Node";
+          when Is_IEEE_Extended_Precision =>
+             return "Is_IEEE_Extended_Precision";
           when Is_Known_Guaranteed_ABE =>
              return "Is_Known_Guaranteed_ABE";
           when Is_RACW_Stub_Type =>
diff -Nrcpad gcc-16-20251102/gcc/ada/ghost.adb gcc-16-20251109/gcc/ada/ghost.adb
*** gcc-16-20251102/gcc/ada/ghost.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/ghost.adb	Sun Nov  9 22:32:43 2025
*************** package body Ghost is
*** 740,745 ****
--- 740,753 ----
                 then
                    return True;
  
+                --  It is always legal to use a ghost prefix. More complex
+                --  scenarios are analyzed for the selector.
+ 
+                elsif Nkind (Par) = N_Selected_Component
+                  and then Prefix (Par) = Prev
+                then
+                   return True;
+ 
                 elsif Is_OK_Declaration (Par) then
                    return True;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/gnat_rm.texi gcc-16-20251109/gcc/ada/gnat_rm.texi
*** gcc-16-20251102/gcc/ada/gnat_rm.texi	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gnat_rm.texi	Sun Nov  9 22:32:43 2025
***************
*** 19,25 ****
  
  @copying
  @quotation
! GNAT Reference Manual , Oct 17, 2025
  
  AdaCore
  
--- 19,25 ----
  
  @copying
  @quotation
! GNAT Reference Manual , Oct 31, 2025
  
  AdaCore
  
*************** machines with strict alignment requireme
*** 20724,20731 ****
  checks (at compile time if possible, generating a warning, or at execution
  time with a run-time check) that the alignment is appropriate.  If the
  run-time check fails, then @code{Program_Error} is raised.  This run-time
! check is suppressed if range checks are suppressed, or if the special GNAT
! check Alignment_Check is suppressed, or if
  @code{pragma Restrictions (No_Elaboration_Code)} is in effect. It is also
  suppressed by default on non-strict alignment machines (such as the x86).
  
--- 20724,20730 ----
  checks (at compile time if possible, generating a warning, or at execution
  time with a run-time check) that the alignment is appropriate.  If the
  run-time check fails, then @code{Program_Error} is raised.  This run-time
! check is suppressed if the GNAT check Alignment_Check is suppressed, or if
  @code{pragma Restrictions (No_Elaboration_Code)} is in effect. It is also
  suppressed by default on non-strict alignment machines (such as the x86).
  
diff -Nrcpad gcc-16-20251102/gcc/ada/gnat_ugn.texi gcc-16-20251109/gcc/ada/gnat_ugn.texi
*** gcc-16-20251102/gcc/ada/gnat_ugn.texi	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/gnat_ugn.texi	Sun Nov  9 22:32:43 2025
***************
*** 19,25 ****
  
  @copying
  @quotation
! GNAT User's Guide for Native Platforms , Oct 06, 2025
  
  AdaCore
  
--- 19,25 ----
  
  @copying
  @quotation
! GNAT User's Guide for Native Platforms , Oct 31, 2025
  
  AdaCore
  
*************** to permit their use in free software.
*** 30333,30340 ****
  
  @printindex ge
  
- @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{                              }
  @anchor{d2}@w{                              }
  
  @c %**end of body
  @bye
--- 30333,30340 ----
  
  @printindex ge
  
  @anchor{d2}@w{                              }
+ @anchor{gnat_ugn/gnat_utility_programs switches-related-to-project-files}@w{                              }
  
  @c %**end of body
  @bye
diff -Nrcpad gcc-16-20251102/gcc/ada/inline.adb gcc-16-20251109/gcc/ada/inline.adb
*** gcc-16-20251102/gcc/ada/inline.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/inline.adb	Sun Nov  9 22:32:43 2025
*************** package body Inline is
*** 3380,3394 ****
        --  be performed in a separate pass, using an instantiation of the
        --  previous subprogram over aspect specifications reachable from N.
  
-       function Process_Sloc (Nod : Node_Id) return Traverse_Result;
-       --  If the call being expanded is that of an internal subprogram, set the
-       --  sloc of the generated block to that of the call itself, so that the
-       --  expansion is skipped by the "next" command in gdb. Same processing
-       --  for a subprogram in a predefined file, e.g. Ada.Tags. If
-       --  Debug_Generated_Code is true, suppress this change to simplify our
-       --  own development. Same in GNATprove mode, to ensure that warnings and
-       --  diagnostics point to the proper location.
- 
        procedure Reset_Dispatching_Calls (N : Node_Id);
        --  In subtree N search for occurrences of dispatching calls that use the
        --  Ada 2005 Object.Operation notation and the object is a formal of the
--- 3380,3385 ----
*************** package body Inline is
*** 3647,3668 ****
        procedure Replace_Formals_In_Aspects is
          new Traverse_Proc (Process_Formals_In_Aspects);
  
-       ------------------
-       -- Process_Sloc --
-       ------------------
- 
-       function Process_Sloc (Nod : Node_Id) return Traverse_Result is
-       begin
-          if not Debug_Generated_Code then
-             Set_Sloc (Nod, Sloc (N));
-             Set_Comes_From_Source (Nod, False);
-          end if;
- 
-          return OK;
-       end Process_Sloc;
- 
-       procedure Reset_Slocs is new Traverse_Proc (Process_Sloc);
- 
        ------------------------------
        --  Reset_Dispatching_Calls --
        ------------------------------
--- 3638,3643 ----
*************** package body Inline is
*** 4176,4188 ****
        Replace_Formals_In_Aspects (Blk);
        Set_Parent (Blk, N);
  
-       if GNATprove_Mode then
-          null;
- 
-       elsif not Comes_From_Source (Subp) or else Is_Predef then
-          Reset_Slocs (Blk);
-       end if;
- 
        if Is_Unc_Decl then
  
           --  No action needed since return statement has been already removed
--- 4151,4156 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/a-cbmutr.adb gcc-16-20251109/gcc/ada/libgnat/a-cbmutr.adb
*** gcc-16-20251102/gcc/ada/libgnat/a-cbmutr.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/libgnat/a-cbmutr.adb	Sun Nov  9 22:32:44 2025
*************** is
*** 2357,2367 ****
        end Rec;
  
     begin
!       if First_Child (Root (V)) = No_Element then
           Array_Before (S);
           Array_After (S);
        else
!          Rec (First_Child (Root (V)));
        end if;
     end Put_Image;
  
--- 2357,2367 ----
        end Rec;
  
     begin
!       if Is_Empty (V) then
           Array_Before (S);
           Array_After (S);
        else
!          Rec (Root (V));
        end if;
     end Put_Image;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/a-cimutr.adb gcc-16-20251109/gcc/ada/libgnat/a-cimutr.adb
*** gcc-16-20251102/gcc/ada/libgnat/a-cimutr.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/libgnat/a-cimutr.adb	Sun Nov  9 22:32:44 2025
*************** is
*** 1910,1920 ****
        end Rec;
  
     begin
!       if First_Child (Root (V)) = No_Element then
           Array_Before (S);
           Array_After (S);
        else
!          Rec (First_Child (Root (V)));
        end if;
     end Put_Image;
  
--- 1910,1920 ----
        end Rec;
  
     begin
!       if Is_Empty (V) then
           Array_Before (S);
           Array_After (S);
        else
!          Rec (Root (V));
        end if;
     end Put_Image;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/a-comutr.adb gcc-16-20251109/gcc/ada/libgnat/a-comutr.adb
*** gcc-16-20251102/gcc/ada/libgnat/a-comutr.adb	Sun Nov  2 22:32:17 2025
--- gcc-16-20251109/gcc/ada/libgnat/a-comutr.adb	Sun Nov  9 22:32:44 2025
*************** is
*** 1844,1854 ****
        end Rec;
  
     begin
!       if First_Child (Root (V)) = No_Element then
           Array_Before (S);
           Array_After (S);
        else
!          Rec (First_Child (Root (V)));
        end if;
     end Put_Image;
  
--- 1844,1854 ----
        end Rec;
  
     begin
!       if Is_Empty (V) then
           Array_Before (S);
           Array_After (S);
        else
!          Rec (Root (V));
        end if;
     end Put_Image;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-dwalin.adb gcc-16-20251109/gcc/ada/libgnat/s-dwalin.adb
*** gcc-16-20251102/gcc/ada/libgnat/s-dwalin.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-dwalin.adb	Sun Nov  9 22:32:44 2025
*************** package body System.Dwarf_Lines is
*** 1912,1922 ****
     ------------------------
  
     procedure Symbolic_Traceback
!      (Cin          :        Dwarf_Context;
!       Traceback    :        STE.Tracebacks_Array;
!       Suppress_Hex :        Boolean;
!       Symbol_Found :    out Boolean;
!       Res          : in out System.Bounded_Strings.Bounded_String)
     is
        use Ada.Characters.Handling;
        C : Dwarf_Context := Cin;
--- 1912,1923 ----
     ------------------------
  
     procedure Symbolic_Traceback
!      (Cin              : Dwarf_Context;
!       Traceback        : STE.Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Symbol_Found     : out Boolean;
!       Res              : in out System.Bounded_Strings.Bounded_String)
     is
        use Ada.Characters.Handling;
        C : Dwarf_Context := Cin;
*************** package body System.Dwarf_Lines is
*** 1953,1959 ****
  
           --  If we're not requested to suppress hex addresses, emit it now.
  
!          if not Suppress_Hex then
              Append_Address (Res, Addr_In_Traceback);
              Append (Res, ' ');
           end if;
--- 1954,1960 ----
  
           --  If we're not requested to suppress hex addresses, emit it now.
  
!          if not Suppress_Hex and then not Subprg_Name_Only then
              Append_Address (Res, Addr_In_Traceback);
              Append (Res, ' ');
           end if;
*************** package body System.Dwarf_Lines is
*** 2006,2015 ****
                    Append (Res, "???");
                 end if;
  
!                Append (Res, " at ");
!                Append (Res, String (File_Name (1 .. Last)));
!                Append (Res, ':');
!                Append (Res, Line_Image (2 .. Line_Image'Last));
              end;
           else
              if Subprg_Name.Len > 0 then
--- 2007,2018 ----
                    Append (Res, "???");
                 end if;
  
!                if not Subprg_Name_Only then
!                   Append (Res, " at ");
!                   Append (Res, String (File_Name (1 .. Last)));
!                   Append (Res, ':');
!                   Append (Res, Line_Image (2 .. Line_Image'Last));
!                end if;
              end;
           else
              if Subprg_Name.Len > 0 then
*************** package body System.Dwarf_Lines is
*** 2020,2026 ****
                 Append (Res, "???");
              end if;
  
!             Append (Res, " at ???");
           end if;
  
           Append (Res, ASCII.LF);
--- 2023,2031 ----
                 Append (Res, "???");
              end if;
  
!             if not Subprg_Name_Only then
!                Append (Res, " at ???");
!             end if;
           end if;
  
           Append (Res, ASCII.LF);
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-dwalin.ads gcc-16-20251109/gcc/ada/libgnat/s-dwalin.ads
*** gcc-16-20251102/gcc/ada/libgnat/s-dwalin.ads	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-dwalin.ads	Sun Nov  9 22:32:44 2025
*************** package System.Dwarf_Lines is
*** 80,90 ****
     --  Read symbol information to speed up Symbolic_Traceback.
  
     procedure Symbolic_Traceback
!      (Cin          :        Dwarf_Context;
!       Traceback    :        STE.Tracebacks_Array;
!       Suppress_Hex :        Boolean;
!       Symbol_Found :    out Boolean;
!       Res          : in out System.Bounded_Strings.Bounded_String);
     --  Generate a string for a traceback suitable for displaying to the user.
     --  If one or more symbols are found, Symbol_Found is set to True. This
     --  allows the caller to fall back to hexadecimal addresses.
--- 80,91 ----
     --  Read symbol information to speed up Symbolic_Traceback.
  
     procedure Symbolic_Traceback
!      (Cin              : Dwarf_Context;
!       Traceback        : STE.Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Symbol_Found     : out Boolean;
!       Res              : in out System.Bounded_Strings.Bounded_String);
     --  Generate a string for a traceback suitable for displaying to the user.
     --  If one or more symbols are found, Symbol_Found is set to True. This
     --  allows the caller to fall back to hexadecimal addresses.
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-stratt.adb gcc-16-20251109/gcc/ada/libgnat/s-stratt.adb
*** gcc-16-20251102/gcc/ada/libgnat/s-stratt.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-stratt.adb	Sun Nov  9 22:32:45 2025
*************** package body System.Stream_Attributes is
*** 1036,1039 ****
--- 1036,1056 ----
        Ada.Streams.Write (Stream.all, From_WWC (Item));
     end W_WWC;
  
+    procedure W_80IEEE (Stream : not null access RST; Item : Long_Long_Float) is
+    begin
+       if XDR_Support then
+          XDR.W_LLF (Stream, Item);
+          return;
+       end if;
+ 
+       declare
+          X : S_LLF := From_LLF (Item);
+ 
+          N_IEEE_Extended_Precision_Bytes : constant := 10;
+       begin
+          X (N_IEEE_Extended_Precision_Bytes + 1 .. X'Last) := (others => 0);
+          Ada.Streams.Write (Stream.all, X);
+       end;
+    end W_80IEEE;
+ 
  end System.Stream_Attributes;
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-stratt.ads gcc-16-20251109/gcc/ada/libgnat/s-stratt.ads
*** gcc-16-20251102/gcc/ada/libgnat/s-stratt.ads	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-stratt.ads	Sun Nov  9 22:32:45 2025
*************** package System.Stream_Attributes is
*** 171,176 ****
--- 171,178 ----
     procedure W_WC   (Stream : not null access RST; Item : Wide_Character);
     procedure W_WWC  (Stream : not null access RST; Item : Wide_Wide_Character);
  
+    procedure W_80IEEE (Stream : not null access RST; Item : Long_Long_Float);
+ 
     function Block_IO_OK return Boolean;
     --  Indicate whether the current setting supports block IO. See
     --  System.Strings.Stream_Ops (s-ststop) for details on block IO.
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-stratt__cheri.adb gcc-16-20251109/gcc/ada/libgnat/s-stratt__cheri.adb
*** gcc-16-20251102/gcc/ada/libgnat/s-stratt__cheri.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-stratt__cheri.adb	Sun Nov  9 22:32:45 2025
*************** package body System.Stream_Attributes is
*** 1016,1019 ****
--- 1016,1036 ----
        Ada.Streams.Write (Stream.all, From_WWC (Item));
     end W_WWC;
  
+    procedure W_80IEEE (Stream : not null access RST; Item : Long_Long_Float) is
+    begin
+       if XDR_Support then
+          XDR.W_LLF (Stream, Item);
+          return;
+       end if;
+ 
+       declare
+          X : S_LLF := From_LLF (Item);
+ 
+          N_IEEE_Extended_Precision_Bytes : constant := 10;
+       begin
+          X (N_IEEE_Extended_Precision_Bytes + 1 .. X'Last) := (others => 0);
+          Ada.Streams.Write (Stream.all, X);
+       end;
+    end W_80IEEE;
+ 
  end System.Stream_Attributes;
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-trasym.adb gcc-16-20251109/gcc/ada/libgnat/s-trasym.adb
*** gcc-16-20251102/gcc/ada/libgnat/s-trasym.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-trasym.adb	Sun Nov  9 22:32:45 2025
*************** package body System.Traceback.Symbolic i
*** 123,126 ****
--- 123,130 ----
        null;
     end Enable_Cache;
  
+    function Calling_Entity return String is
+    begin
+       return "???";
+    end Calling_Entity;
  end System.Traceback.Symbolic;
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-trasym.ads gcc-16-20251109/gcc/ada/libgnat/s-trasym.ads
*** gcc-16-20251102/gcc/ada/libgnat/s-trasym.ads	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-trasym.ads	Sun Nov  9 22:32:45 2025
*************** package System.Traceback.Symbolic is
*** 105,108 ****
--- 105,111 ----
     --  with default value), but backward compatibility for direct calls
     --  is supported.
  
+    function Calling_Entity return String;
+    --  Return the name of the caller of the current subprogram if it's
+    --  available. Otherwise return "???".
  end System.Traceback.Symbolic;
diff -Nrcpad gcc-16-20251102/gcc/ada/libgnat/s-trasym__dwarf.adb gcc-16-20251109/gcc/ada/libgnat/s-trasym__dwarf.adb
*** gcc-16-20251102/gcc/ada/libgnat/s-trasym__dwarf.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/libgnat/s-trasym__dwarf.adb	Sun Nov  9 22:32:45 2025
*************** package body System.Traceback.Symbolic i
*** 96,108 ****
     --  Initialize Exec_Module if not already initialized
  
     function Symbolic_Traceback
!      (Traceback    : System.Traceback_Entries.Tracebacks_Array;
!       Suppress_Hex : Boolean) return String;
     function Symbolic_Traceback
       (E            : Ada.Exceptions.Exception_Occurrence;
        Suppress_Hex : Boolean) return String;
     --  Suppress_Hex means do not print any hexadecimal addresses, even if the
!    --  symbol is not available.
  
     function Lt (Left, Right : Module_Cache_Acc) return Boolean;
     --  Sort function for Module_Cache
--- 96,111 ----
     --  Initialize Exec_Module if not already initialized
  
     function Symbolic_Traceback
!      (Traceback        : System.Traceback_Entries.Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean) return String;
     function Symbolic_Traceback
       (E            : Ada.Exceptions.Exception_Occurrence;
        Suppress_Hex : Boolean) return String;
     --  Suppress_Hex means do not print any hexadecimal addresses, even if the
!    --  symbol is not available. Subprg_Name_Only means to only print the
!    --  subprogram name for each frame, as opposed to the complete description
!    --  of the frame.
  
     function Lt (Left, Right : Module_Cache_Acc) return Boolean;
     --  Sort function for Module_Cache
*************** package body System.Traceback.Symbolic i
*** 166,195 ****
     --  Non-symbolic traceback (simply write addresses in hexa)
  
     procedure Symbolic_Traceback_No_Lock
!      (Traceback    :        Tracebacks_Array;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String);
!    --  Like the public Symbolic_Traceback_No_Lock except there is no provision
!    --  against concurrent accesses.
  
     procedure Module_Symbolic_Traceback
!      (Traceback    :        Tracebacks_Array;
!       Module       :        Module_Cache;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String);
     --  Returns the Traceback for a given module
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback    :        Tracebacks_Array;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String);
     --  Build string containing symbolic traceback for the given call chain
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback    :        Tracebacks_Array;
!       Module       :        Module_Cache;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String);
     --  Likewise but using Module
  
     Max_String_Length : constant := 4096;
--- 169,202 ----
     --  Non-symbolic traceback (simply write addresses in hexa)
  
     procedure Symbolic_Traceback_No_Lock
!      (Traceback        : Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String);
!    --  Like the public Symbolic_Traceback except there is no provision against
!    --  concurrent accesses.
  
     procedure Module_Symbolic_Traceback
!      (Traceback        : Tracebacks_Array;
!       Module           : Module_Cache;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String);
     --  Returns the Traceback for a given module
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback        : Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String);
     --  Build string containing symbolic traceback for the given call chain
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback        : Tracebacks_Array;
!       Module           : Module_Cache;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String);
     --  Likewise but using Module
  
     Max_String_Length : constant := 4096;
*************** package body System.Traceback.Symbolic i
*** 328,333 ****
--- 335,370 ----
        Module_Cache_Array_Sort (Modules_Cache.all);
     end Enable_Cache;
  
+    function Calling_Entity return String is
+       N_Skipped_Frames : constant Natural := 3;
+       --  We ask Call_Chain to skip the following frames:
+       --
+       --  1. The frame of Call_Chain itself.
+       --  2. The frame of Calling_Entity.
+       --  3. The frame of Calling_Entity's caller.
+       --
+       --  The frame above that is the function the caller is looking for.
+ 
+       Traceback : Tracebacks_Array (1 .. 1);
+       Len       : Natural;
+    begin
+       Call_Chain (Traceback, 1, Len, Skip_Frames => N_Skipped_Frames);
+ 
+       if Len = 0 then
+          return "???";
+       end if;
+ 
+       declare
+          With_Trailing_Newline : constant String :=
+            Symbolic_Traceback
+              (Traceback, Suppress_Hex => True, Subprg_Name_Only => True);
+       begin
+          return
+            With_Trailing_Newline
+              (With_Trailing_Newline'First .. With_Trailing_Newline'Last - 1);
+       end;
+    end Calling_Entity;
+ 
     ---------------------
     -- Executable_Name --
     ---------------------
*************** package body System.Traceback.Symbolic i
*** 450,463 ****
     -------------------------------
  
     procedure Module_Symbolic_Traceback
!      (Traceback    :        Tracebacks_Array;
!       Module       :        Module_Cache;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String)
     is
        Success : Boolean;
     begin
!       if Symbolic.Module_Name.Is_Supported then
           Append (Res, '[');
           Append (Res, Module.Name.all);
           Append (Res, ']' & ASCII.LF);
--- 487,501 ----
     -------------------------------
  
     procedure Module_Symbolic_Traceback
!      (Traceback        : Tracebacks_Array;
!       Module           : Module_Cache;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String)
     is
        Success : Boolean;
     begin
!       if Symbolic.Module_Name.Is_Supported and then not Subprg_Name_Only then
           Append (Res, '[');
           Append (Res, Module.Name.all);
           Append (Res, ']' & ASCII.LF);
*************** package body System.Traceback.Symbolic i
*** 467,477 ****
          (Module.C,
           Traceback,
           Suppress_Hex,
           Success,
           Res);
  
        if not Success then
!          Hexa_Traceback (Traceback, Suppress_Hex, Res);
        end if;
  
        --  We must not allow an unhandled exception here, since this function
--- 505,517 ----
          (Module.C,
           Traceback,
           Suppress_Hex,
+          Subprg_Name_Only,
           Success,
           Res);
  
        if not Success then
!          Hexa_Traceback
!            (Traceback, Suppress_Hex or else Subprg_Name_Only, Res);
        end if;
  
        --  We must not allow an unhandled exception here, since this function
*************** package body System.Traceback.Symbolic i
*** 487,495 ****
     -------------------------------------
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback    :        Tracebacks_Array;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String)
     is
        F : constant Natural := Traceback'First;
     begin
--- 527,536 ----
     -------------------------------------
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback        : Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String)
     is
        F : constant Natural := Traceback'First;
     begin
*************** package body System.Traceback.Symbolic i
*** 514,519 ****
--- 555,561 ----
                    Multi_Module_Symbolic_Traceback
                      (Traceback,
                       Modules_Cache (Mid).all,
+                      Subprg_Name_Only,
                       Suppress_Hex,
                       Res);
                    return;
*************** package body System.Traceback.Symbolic i
*** 527,532 ****
--- 569,575 ----
              Multi_Module_Symbolic_Traceback
                (Traceback (F + 1 .. Traceback'Last),
                 Suppress_Hex,
+                Subprg_Name_Only,
                 Res);
           end;
        else
*************** package body System.Traceback.Symbolic i
*** 534,543 ****
           --  First try the executable
           if Is_Inside (Exec_Module.C, Traceback (F)) then
              Multi_Module_Symbolic_Traceback
!               (Traceback,
!                Exec_Module,
!                Suppress_Hex,
!                Res);
              return;
           end if;
  
--- 577,583 ----
           --  First try the executable
           if Is_Inside (Exec_Module.C, Traceback (F)) then
              Multi_Module_Symbolic_Traceback
!               (Traceback, Exec_Module, Suppress_Hex, Subprg_Name_Only, Res);
              return;
           end if;
  
*************** package body System.Traceback.Symbolic i
*** 553,562 ****
              Init_Module (Module, Success, M_Name, Load_Addr);
              if Success then
                 Multi_Module_Symbolic_Traceback
!                  (Traceback,
!                   Module,
!                   Suppress_Hex,
!                   Res);
                 Close_Module (Module);
              else
                 --  Module not found
--- 593,599 ----
              Init_Module (Module, Success, M_Name, Load_Addr);
              if Success then
                 Multi_Module_Symbolic_Traceback
!                  (Traceback, Module, Suppress_Hex, Subprg_Name_Only, Res);
                 Close_Module (Module);
              else
                 --  Module not found
*************** package body System.Traceback.Symbolic i
*** 564,569 ****
--- 601,607 ----
                 Multi_Module_Symbolic_Traceback
                   (Traceback (F + 1 .. Traceback'Last),
                    Suppress_Hex,
+                   Subprg_Name_Only,
                    Res);
              end if;
           end;
*************** package body System.Traceback.Symbolic i
*** 571,580 ****
     end Multi_Module_Symbolic_Traceback;
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback    :        Tracebacks_Array;
!       Module       :        Module_Cache;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String)
     is
        Pos : Positive;
     begin
--- 609,619 ----
     end Multi_Module_Symbolic_Traceback;
  
     procedure Multi_Module_Symbolic_Traceback
!      (Traceback        : Tracebacks_Array;
!       Module           : Module_Cache;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String)
     is
        Pos : Positive;
     begin
*************** package body System.Traceback.Symbolic i
*** 599,608 ****
--- 638,649 ----
          (Traceback (Traceback'First .. Pos - 1),
           Module,
           Suppress_Hex,
+          Subprg_Name_Only,
           Res);
        Multi_Module_Symbolic_Traceback
          (Traceback (Pos .. Traceback'Last),
           Suppress_Hex,
+          Subprg_Name_Only,
           Res);
     end Multi_Module_Symbolic_Traceback;
  
*************** package body System.Traceback.Symbolic i
*** 633,655 ****
     --------------------------------
  
     procedure Symbolic_Traceback_No_Lock
!      (Traceback    :        Tracebacks_Array;
!       Suppress_Hex :        Boolean;
!       Res          : in out Bounded_String)
!    is
     begin
        if Symbolic.Module_Name.Is_Supported then
!          Multi_Module_Symbolic_Traceback (Traceback, Suppress_Hex, Res);
        else
           if Exec_Module_State = Failed then
              Append (Res, "Call stack traceback locations:" & ASCII.LF);
!             Hexa_Traceback (Traceback, Suppress_Hex, Res);
           else
              Module_Symbolic_Traceback
!               (Traceback,
!                Exec_Module,
!                Suppress_Hex,
!                Res);
           end if;
        end if;
     end Symbolic_Traceback_No_Lock;
--- 674,695 ----
     --------------------------------
  
     procedure Symbolic_Traceback_No_Lock
!      (Traceback        : Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean;
!       Res              : in out Bounded_String) is
     begin
        if Symbolic.Module_Name.Is_Supported then
!          Multi_Module_Symbolic_Traceback
!            (Traceback, Suppress_Hex, Subprg_Name_Only, Res);
        else
           if Exec_Module_State = Failed then
              Append (Res, "Call stack traceback locations:" & ASCII.LF);
!             Hexa_Traceback
!               (Traceback, Suppress_Hex or else Subprg_Name_Only, Res);
           else
              Module_Symbolic_Traceback
!               (Traceback, Exec_Module, Suppress_Hex, Subprg_Name_Only, Res);
           end if;
        end if;
     end Symbolic_Traceback_No_Lock;
*************** package body System.Traceback.Symbolic i
*** 662,669 ****
     --  Copied from Ada.Exceptions.Exception_Data
  
     function Symbolic_Traceback
!      (Traceback    : Tracebacks_Array;
!       Suppress_Hex : Boolean) return String
     is
        Load_Address : constant Address := Get_Executable_Load_Address;
        Res          : Bounded_String (Max_Length => Max_String_Length);
--- 702,710 ----
     --  Copied from Ada.Exceptions.Exception_Data
  
     function Symbolic_Traceback
!      (Traceback        : Tracebacks_Array;
!       Suppress_Hex     : Boolean;
!       Subprg_Name_Only : Boolean) return String
     is
        Load_Address : constant Address := Get_Executable_Load_Address;
        Res          : Bounded_String (Max_Length => Max_String_Length);
*************** package body System.Traceback.Symbolic i
*** 671,682 ****
     begin
        System.Soft_Links.Lock_Task.all;
        Init_Exec_Module;
!       if Load_Address /= Null_Address then
           Append (Res, LDAD_Header);
           Append_Address (Res, Load_Address);
           Append (Res, ASCII.LF);
        end if;
!       Symbolic_Traceback_No_Lock (Traceback, Suppress_Hex, Res);
        System.Soft_Links.Unlock_Task.all;
  
        return To_String (Res);
--- 712,724 ----
     begin
        System.Soft_Links.Lock_Task.all;
        Init_Exec_Module;
!       if not Subprg_Name_Only and then Load_Address /= Null_Address then
           Append (Res, LDAD_Header);
           Append_Address (Res, Load_Address);
           Append (Res, ASCII.LF);
        end if;
!       Symbolic_Traceback_No_Lock
!         (Traceback, Suppress_Hex, Subprg_Name_Only, Res);
        System.Soft_Links.Unlock_Task.all;
  
        return To_String (Res);
*************** package body System.Traceback.Symbolic i
*** 690,702 ****
     function Symbolic_Traceback
       (Traceback : System.Traceback_Entries.Tracebacks_Array) return String is
     begin
!       return Symbolic_Traceback (Traceback, Suppress_Hex => False);
     end Symbolic_Traceback;
  
     function Symbolic_Traceback_No_Hex
       (Traceback : System.Traceback_Entries.Tracebacks_Array) return String is
     begin
!       return Symbolic_Traceback (Traceback, Suppress_Hex => True);
     end Symbolic_Traceback_No_Hex;
  
     function Symbolic_Traceback
--- 732,748 ----
     function Symbolic_Traceback
       (Traceback : System.Traceback_Entries.Tracebacks_Array) return String is
     begin
!       return
!         Symbolic_Traceback
!           (Traceback, Suppress_Hex => False, Subprg_Name_Only => False);
     end Symbolic_Traceback;
  
     function Symbolic_Traceback_No_Hex
       (Traceback : System.Traceback_Entries.Tracebacks_Array) return String is
     begin
!       return
!         Symbolic_Traceback
!           (Traceback, Suppress_Hex => True, Subprg_Name_Only => False);
     end Symbolic_Traceback_No_Hex;
  
     function Symbolic_Traceback
*************** package body System.Traceback.Symbolic i
*** 704,712 ****
        Suppress_Hex : Boolean) return String
     is
     begin
!       return Symbolic_Traceback
            (Ada.Exceptions.Traceback.Tracebacks (E),
!            Suppress_Hex);
     end Symbolic_Traceback;
  
     function Symbolic_Traceback
--- 750,760 ----
        Suppress_Hex : Boolean) return String
     is
     begin
!       return
!         Symbolic_Traceback
            (Ada.Exceptions.Traceback.Tracebacks (E),
!            Suppress_Hex,
!            False);
     end Symbolic_Traceback;
  
     function Symbolic_Traceback
diff -Nrcpad gcc-16-20251102/gcc/ada/par-ch12.adb gcc-16-20251109/gcc/ada/par-ch12.adb
*** gcc-16-20251102/gcc/ada/par-ch12.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/par-ch12.adb	Sun Nov  9 22:32:45 2025
*************** package body Ch12 is
*** 466,472 ****
           end if;
  
           No_Constraint;
!          Set_Default_Expression (Decl_Node, Init_Expr_Opt);
           P_Aspect_Specifications (Decl_Node, Semicolon => True);
  
           if Ident > 1 then
--- 466,472 ----
           end if;
  
           No_Constraint;
!          Set_Expression (Decl_Node, Init_Expr_Opt);
           P_Aspect_Specifications (Decl_Node, Semicolon => True);
  
           if Ident > 1 then
diff -Nrcpad gcc-16-20251102/gcc/ada/par-ch13.adb gcc-16-20251109/gcc/ada/par-ch13.adb
*** gcc-16-20251102/gcc/ada/par-ch13.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/par-ch13.adb	Sun Nov  9 22:32:45 2025
*************** package body Ch13 is
*** 632,637 ****
--- 632,708 ----
        return Aspects;
     end Get_Aspect_Specifications;
  
+    -----------------------------
+    -- P_Attribute_Designators --
+    -----------------------------
+ 
+    function P_Attribute_Designators (Initial_Prefix : Node_Id) return Node_Id
+    is
+       Accumulator  : Node_Id := Initial_Prefix;
+       Designator   : Name_Id;
+    begin
+       while Token = Tok_Apostrophe loop
+ 
+          Scan; -- past apostrophe
+ 
+          Designator := No_Name;
+ 
+          if Token = Tok_Identifier then
+             Designator := Token_Name;
+ 
+             --  Note that the parser must complain in case of an internal
+             --  attribute name that comes from source since internal names are
+             --  meant to be used only by the compiler.
+ 
+             if not Is_Attribute_Name (Designator)
+               and then (not Is_Internal_Attribute_Name (Designator)
+                         or else Comes_From_Source (Token_Node))
+             then
+                Signal_Bad_Attribute;
+             end if;
+ 
+             if Style_Check then
+                Style.Check_Attribute_Name (False);
+             end if;
+ 
+          --  Here for case of attribute designator is not an identifier
+ 
+          else
+             if Token = Tok_Delta then
+                Designator := Name_Delta;
+ 
+             elsif Token = Tok_Digits then
+                Designator := Name_Digits;
+ 
+             elsif Token = Tok_Access then
+                Designator := Name_Access;
+ 
+             else
+                Error_Msg_AP ("attribute designator expected");
+                raise Error_Resync;
+             end if;
+ 
+             if Style_Check then
+                Style.Check_Attribute_Name (True);
+             end if;
+          end if;
+ 
+          --  Here we have an OK attribute scanned, and the corresponding
+          --  Attribute identifier node is stored in Designator.
+ 
+          declare
+             Temp : constant Node_Id := Accumulator;
+          begin
+             Accumulator := New_Node (N_Attribute_Reference, Prev_Token_Ptr);
+             Set_Prefix (Accumulator, Temp);
+          end;
+          Set_Attribute_Name (Accumulator, Designator);
+          Scan;
+       end loop;
+ 
+       return Accumulator;
+    end P_Attribute_Designators;
+ 
     --------------------------------------------
     -- 13.1  Representation Clause (also I.7) --
     --------------------------------------------
*************** package body Ch13 is
*** 674,681 ****
     function P_Representation_Clause return Node_Id is
        For_Loc         : Source_Ptr;
        Name_Node       : Node_Id;
-       Prefix_Node     : Node_Id;
-       Attr_Name       : Name_Id;
        Identifier_Node : Node_Id;
        Rep_Clause_Node : Node_Id;
        Expr_Node       : Node_Id;
--- 745,750 ----
*************** package body Ch13 is
*** 693,700 ****
        --  Check case of qualified name to give good error message
  
        if Token = Tok_Dot then
!          Error_Msg_SC
!             ("representation clause requires simple name!");
  
           loop
              exit when Token /= Tok_Dot;
--- 762,768 ----
        --  Check case of qualified name to give good error message
  
        if Token = Tok_Dot then
!          Error_Msg_SC ("representation clause requires simple name!");
  
           loop
              exit when Token /= Tok_Dot;
*************** package body Ch13 is
*** 706,785 ****
        --  Attribute Definition Clause
  
        if Token = Tok_Apostrophe then
  
!          --  Allow local names of the form a'b'.... This enables
!          --  us to parse class-wide streams attributes correctly.
! 
!          Name_Node := Identifier_Node;
!          while Token = Tok_Apostrophe loop
! 
!             Scan; -- past apostrophe
! 
!             Identifier_Node := Token_Node;
!             Attr_Name := No_Name;
! 
!             if Token = Tok_Identifier then
!                Attr_Name := Token_Name;
! 
!                --  Note that the parser must complain in case of an internal
!                --  attribute name that comes from source since internal names
!                --  are meant to be used only by the compiler.
! 
!                if not Is_Attribute_Name (Attr_Name)
!                  and then (not Is_Internal_Attribute_Name (Attr_Name)
!                             or else Comes_From_Source (Token_Node))
!                then
!                   Signal_Bad_Attribute;
!                end if;
! 
!                if Style_Check then
!                   Style.Check_Attribute_Name (False);
!                end if;
! 
!             --  Here for case of attribute designator is not an identifier
! 
!             else
!                if Token = Tok_Delta then
!                   Attr_Name := Name_Delta;
! 
!                elsif Token = Tok_Digits then
!                   Attr_Name := Name_Digits;
! 
!                elsif Token = Tok_Access then
!                   Attr_Name := Name_Access;
! 
!                else
!                   Error_Msg_AP ("attribute designator expected");
!                   raise Error_Resync;
!                end if;
! 
!                if Style_Check then
!                   Style.Check_Attribute_Name (True);
!                end if;
!             end if;
! 
!             --  Here we have an OK attribute scanned, and the corresponding
!             --  Attribute identifier node is stored in Ident_Node.
! 
!             Prefix_Node := Name_Node;
!             Name_Node := New_Node (N_Attribute_Reference, Prev_Token_Ptr);
!             Set_Prefix (Name_Node, Prefix_Node);
!             Set_Attribute_Name (Name_Node, Attr_Name);
!             Scan;
  
!             --  Check for Address clause which needs to be marked for use in
!             --  optimizing performance of Exp_Util.Following_Address_Clause.
  
!             if Attr_Name = Name_Address
!               and then Nkind (Prefix_Node) = N_Identifier
              then
!                Set_Name_Table_Boolean1 (Chars (Prefix_Node), True);
              end if;
!          end loop;
  
           Rep_Clause_Node := New_Node (N_Attribute_Definition_Clause, For_Loc);
!          Set_Name (Rep_Clause_Node, Prefix_Node);
!          Set_Chars (Rep_Clause_Node, Attr_Name);
           T_Use;
  
           Expr_Node := P_Expression_No_Right_Paren;
--- 774,801 ----
        --  Attribute Definition Clause
  
        if Token = Tok_Apostrophe then
+          Name_Node := P_Attribute_Designators (Identifier_Node);
  
!          --  Check for Address clause which needs to be marked for use in
!          --  optimizing performance of Exp_Util.Following_Address_Clause.
  
!          declare
!             Cursor : Node_Id := Name_Node;
!          begin
!             while Nkind (Prefix (Cursor)) = N_Attribute_Reference loop
!                Cursor := Prefix (Cursor);
!             end loop;
  
!             if Attribute_Name (Cursor) = Name_Address
!               and then Nkind (Prefix (Cursor)) = N_Identifier
              then
!                Set_Name_Table_Boolean1 (Chars (Prefix (Cursor)), True);
              end if;
!          end;
  
           Rep_Clause_Node := New_Node (N_Attribute_Definition_Clause, For_Loc);
!          Set_Name (Rep_Clause_Node, Prefix (Name_Node));
!          Set_Chars (Rep_Clause_Node, Attribute_Name (Name_Node));
           T_Use;
  
           Expr_Node := P_Expression_No_Right_Paren;
diff -Nrcpad gcc-16-20251102/gcc/ada/par-ch3.adb gcc-16-20251109/gcc/ada/par-ch3.adb
*** gcc-16-20251102/gcc/ada/par-ch3.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/par-ch3.adb	Sun Nov  9 22:32:45 2025
*************** package body Ch3 is
*** 757,764 ****
                       Typedef_Node := P_Derived_Type_Def_Or_Private_Ext_Decl;
  
                       if Saved_Token = Tok_Synchronized then
!                         if Nkind (Typedef_Node) =
!                           N_Derived_Type_Definition
                          then
                             Error_Msg_N
                               ("SYNCHRONIZED not allowed for record extension",
--- 757,763 ----
                       Typedef_Node := P_Derived_Type_Def_Or_Private_Ext_Decl;
  
                       if Saved_Token = Tok_Synchronized then
!                         if Nkind (Typedef_Node) = N_Derived_Type_Definition
                          then
                             Error_Msg_N
                               ("SYNCHRONIZED not allowed for record extension",
*************** package body Ch3 is
*** 864,870 ****
              Set_Abstract_Present (Typedef_Node, Abstract_Present);
  
           elsif Abstract_Present then
!             Error_Msg ("ABSTRACT not allowed here, ignored", Abstract_Loc);
           end if;
  
           Decl_Node := New_Node (N_Full_Type_Declaration, Type_Loc);
--- 863,875 ----
              Set_Abstract_Present (Typedef_Node, Abstract_Present);
  
           elsif Abstract_Present then
!             if Nkind (Typedef_Node) = N_Derived_Type_Definition then
!                Error_Msg
!                  ("ABSTRACT allowed only for record extension, ignored",
!                   Abstract_Loc);
!             else
!                Error_Msg ("ABSTRACT not allowed here, ignored", Abstract_Loc);
!             end if;
           end if;
  
           Decl_Node := New_Node (N_Full_Type_Declaration, Type_Loc);
diff -Nrcpad gcc-16-20251102/gcc/ada/par-ch6.adb gcc-16-20251109/gcc/ada/par-ch6.adb
*** gcc-16-20251102/gcc/ada/par-ch6.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/par-ch6.adb	Sun Nov  9 22:32:45 2025
*************** package body Ch6 is
*** 128,134 ****
  
     --  This routine scans out a subprogram declaration, subprogram body,
     --  subprogram renaming declaration or subprogram generic instantiation.
!    --  It also handles the new Ada 2012 expression function form
  
     --  SUBPROGRAM_DECLARATION ::=
     --    SUBPROGRAM_SPECIFICATION
--- 128,135 ----
  
     --  This routine scans out a subprogram declaration, subprogram body,
     --  subprogram renaming declaration or subprogram generic instantiation.
!    --  It also handles the new Ada 2012 expression function form, and the GNAT
!    --  extension for direct attribute definition.
  
     --  SUBPROGRAM_DECLARATION ::=
     --    SUBPROGRAM_SPECIFICATION
*************** package body Ch6 is
*** 141,146 ****
--- 142,150 ----
     --  SUBPROGRAM_SPECIFICATION ::=
     --      procedure DEFINING_PROGRAM_UNIT_NAME PARAMETER_PROFILE
     --    | function DEFINING_DESIGNATOR PARAMETER_AND_RESULT_PROFILE
+    --    | procedure LOCAL_NAME'ATTRIBUTE_DESIGNATOR PARAMETER_PROFILE
+    --    | function LOCAL_NAME'ATTRIBUTE_DESIGNATOR
+    --        PARAMETER_AND_RESULT_PROFILE
  
     --  PARAMETER_PROFILE ::= [FORMAL_PART]
  
*************** package body Ch6 is
*** 190,195 ****
--- 194,206 ----
        function Contains_Import_Aspect (Aspects : List_Id) return Boolean;
        --  Return True if Aspects contains an Import aspect.
  
+       procedure Rewrite_Entity_If_Direct_Attribute_Def
+         (Name : Node_Id; Spec : Node_Id);
+       --  In case of direct attribute definitions this procedure rewrites the
+       --  defining unit name of the specification node with a new entity. It is
+       --  essential to maintain the information that the original node comes
+       --  from a direct attribute definition.
+ 
        ----------------------------
        -- Contains_Import_Aspect --
        ----------------------------
*************** package body Ch6 is
*** 208,213 ****
--- 219,257 ----
           return False;
        end Contains_Import_Aspect;
  
+       --------------------------------------------
+       -- Rewrite_Entity_If_Direct_Attribute_Def --
+       --------------------------------------------
+ 
+       procedure Rewrite_Entity_If_Direct_Attribute_Def
+         (Name : Node_Id; Spec : Node_Id)
+       is
+          New_Entity, Copy_Spec : Node_Id;
+       begin
+          if Nkind (Name) = N_Attribute_Reference
+            and then Is_Direct_Attribute_Definition_Name (Attribute_Name (Name))
+          then
+             --  Note that, this workaround is needed to retain the info that
+             --  the current subprogram comes from a direct attribute
+             --  definition. Otherwise, we would need to add an entity flag
+             --  Is_Constructor. Currently this flag already exists and could be
+             --  misleading as it refer to CPP constructors ???
+ 
+             Copy_Spec := New_Copy (Spec);
+ 
+             New_Entity := Make_Defining_Identifier (Sloc (Name),
+               Direct_Attribute_Definition_Name
+                 (Prefix (Name), Attribute_Name (Name)));
+             Set_Comes_From_Source (New_Entity);
+             Set_Parent (New_Entity, Copy_Spec);
+ 
+             Set_Defining_Unit_Name (Copy_Spec, New_Entity);
+             Rewrite (Spec, Copy_Spec);
+          end if;
+       end Rewrite_Entity_If_Direct_Attribute_Def;
+ 
+       --  Local variables
+ 
        Specification_Node : Node_Id;
        Name_Node          : Node_Id;
        Aspects            : List_Id;
*************** package body Ch6 is
*** 232,237 ****
--- 276,283 ----
        Is_Overriding  : Boolean := False;
        Not_Overriding : Boolean := False;
  
+    --  Start of processing for P_Subprogram
+ 
     begin
        --  Set up scope stack entry. Note that the Labl field will be set later
  
*************** package body Ch6 is
*** 343,353 ****
           Name_Node := P_Defining_Program_Unit_Name;
        end if;
  
        Scopes (Scope.Last).Labl := Name_Node;
        Ignore (Tok_Colon);
  
        --  Deal with generic instantiation, the one case in which we do not
!       --  have a subprogram specification as part of whatever we are parsing
  
        if Token = Tok_Is then
           Save_Scan_State (Scan_State); -- at the IS
--- 389,407 ----
           Name_Node := P_Defining_Program_Unit_Name;
        end if;
  
+       --  Deal with direct attribute definition in subprogram specification
+ 
+       if Token = Tok_Apostrophe then
+          Error_Msg_GNAT_Extension ("direct attribute definition", Token_Ptr);
+ 
+          Name_Node := P_Attribute_Designators (Name_Node);
+       end if;
+ 
        Scopes (Scope.Last).Labl := Name_Node;
        Ignore (Tok_Colon);
  
        --  Deal with generic instantiation, the one case in which we do not
!       --  have a subprogram specification as part of whatever we are parsing.
  
        if Token = Tok_Is then
           Save_Scan_State (Scan_State); -- at the IS
*************** package body Ch6 is
*** 940,945 ****
--- 994,1002 ----
                    Parse_Decls_Begin_End (Body_Node);
                 end if;
  
+                Rewrite_Entity_If_Direct_Attribute_Def
+                  (Name_Node, Specification_Node);
+ 
                 return Body_Node;
              end Scan_Body_Or_Expression_Function;
           end if;
*************** package body Ch6 is
*** 952,957 ****
--- 1009,1017 ----
           Set_Specification (Decl_Node, Specification_Node);
           Aspects := Get_Aspect_Specifications (Semicolon => False);
  
+          Rewrite_Entity_If_Direct_Attribute_Def
+            (Name_Node, Specification_Node);
+ 
           --  Aspects may be present on a subprogram body. The source parsed
           --  so far is that of its specification. Go parse the body and attach
           --  the collected aspects, if any, to the body.
diff -Nrcpad gcc-16-20251102/gcc/ada/par-endh.adb gcc-16-20251109/gcc/ada/par-endh.adb
*** gcc-16-20251102/gcc/ada/par-endh.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/par-endh.adb	Sun Nov  9 22:32:45 2025
*************** package body Endh is
*** 156,167 ****
     function Same_Label (Label1, Label2 : Node_Id) return Boolean;
     --  This function compares the two names associated with the given nodes.
     --  If they are both simple (i.e. have Chars fields), then they have to
!    --  be the same name. Otherwise they must both be N_Selected_Component
!    --  nodes, referring to the same set of names, or Label1 is an N_Designator
!    --  referring to the same set of names as the N_Defining_Program_Unit_Name
!    --  in Label2. Any other combination returns False. This routine is used
!    --  to compare the End_Labl scanned from the End line with the saved label
!    --  value in the scope stack.
  
     ---------------
     -- Check_End --
--- 156,167 ----
     function Same_Label (Label1, Label2 : Node_Id) return Boolean;
     --  This function compares the two names associated with the given nodes.
     --  If they are both simple (i.e. have Chars fields), then they have to
!    --  be the same name. If they are both N_Selected_Component or
!    --  N_Attribute_Reference nodes, they must refer to the same set of names.
!    --  Otherwise, Label1 must be a N_Designator referring to the same set of
!    --  names as the N_Defining_Program_Unit_Name in Label2. Any other
!    --  combination returns False. This routine is used to compare the End_Labl
!    --  scanned from the End line with the saved label value in the scope stack.
  
     ---------------
     -- Check_End --
*************** package body Endh is
*** 270,275 ****
--- 270,285 ----
                 end if;
  
                 End_Labl := P_Designator;
+ 
+                --  Case of direct attribute definition
+ 
+                if Token = Tok_Apostrophe then
+                   Error_Msg_GNAT_Extension
+                     ("direct attribute definition", Token_Ptr);
+ 
+                   End_Labl := P_Attribute_Designators (End_Labl);
+                end if;
+ 
                 End_Labl_Present := True;
  
                 --  We have now scanned out a name. Here is where we do a check
*************** package body Endh is
*** 1359,1364 ****
--- 1369,1380 ----
           return Same_Label (Prefix (Label1), Prefix (Label2)) and then
             Same_Label (Selector_Name (Label1), Selector_Name (Label2));
  
+       elsif Nkind (Label1) = N_Attribute_Reference
+         and then Nkind (Label2) = N_Attribute_Reference
+       then
+          return Same_Label (Prefix (Label1), Prefix (Label2)) and then
+            Attribute_Name (Label1) = Attribute_Name (Label2);
+ 
        elsif Nkind (Label1) = N_Designator
          and then Nkind (Label2) = N_Defining_Program_Unit_Name
        then
diff -Nrcpad gcc-16-20251102/gcc/ada/par.adb gcc-16-20251109/gcc/ada/par.adb
*** gcc-16-20251102/gcc/ada/par.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/par.adb	Sun Nov  9 22:32:45 2025
*************** function Par (Configuration_Pragmas : Bo
*** 1019,1024 ****
--- 1019,1034 ----
     package Ch13 is
        function P_Representation_Clause                return Node_Id;
  
+       function P_Attribute_Designators
+         (Initial_Prefix : Node_Id) return Node_Id;
+       --  This procedure parses trailing apostrophes and attribute designators,
+       --  i.e., the "'b'c..." suffix in "a'b'c...". "a" must have already been
+       --  parsed into Initial_Prefix and the scan pointer must be pointing
+       --  right past "a". If no apostrophe is found we just return
+       --  Initial_Prefix, otherwise the return value is a chain of
+       --  N_Attribute_Reference nodes, nested via the Prefix field and ending
+       --  with Initial_Prefix.
+ 
        function Aspect_Specifications_Present
          (Strict : Boolean := Ada_Version < Ada_2012) return Boolean;
        --  This function tests whether the next keyword is WITH followed by
diff -Nrcpad gcc-16-20251102/gcc/ada/rtsfind.ads gcc-16-20251109/gcc/ada/rtsfind.ads
*** gcc-16-20251102/gcc/ada/rtsfind.ads	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/rtsfind.ads	Sun Nov  9 22:32:45 2025
*************** package Rtsfind is
*** 1900,1905 ****
--- 1900,1906 ----
       RE_W_U24,                           -- System.Stream_Attributes
       RE_W_WC,                            -- System.Stream_Attributes
       RE_W_WWC,                           -- System.Stream_Attributes
+      RE_W_80IEEE,                        -- System.Stream_Attributes
  
       RE_Storage_Array_Input,             -- System.Strings.Stream_Ops
       RE_Storage_Array_Input_Blk_IO,      -- System.Strings.Stream_Ops
*************** package Rtsfind is
*** 3565,3570 ****
--- 3566,3572 ----
       RE_W_U24                            => System_Stream_Attributes,
       RE_W_WC                             => System_Stream_Attributes,
       RE_W_WWC                            => System_Stream_Attributes,
+      RE_W_80IEEE                         => System_Stream_Attributes,
  
       RE_Storage_Array_Input              => System_Strings_Stream_Ops,
       RE_Storage_Array_Input_Blk_IO       => System_Strings_Stream_Ops,
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_attr.adb gcc-16-20251109/gcc/ada/sem_attr.adb
*** gcc-16-20251102/gcc/ada/sem_attr.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_attr.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Attr is
*** 3957,3962 ****
--- 3957,3969 ----
           Error_Attr_P
             ("prefix of % attribute must be object of discriminated type");
  
+       -----------------
+       -- Constructor --
+       -----------------
+ 
+       when Attribute_Constructor =>
+          Error_Attr_P ("attribute% can only be used to define constructors");
+ 
        ---------------
        -- Copy_Sign --
        ---------------
*************** package body Sem_Attr is
*** 5180,5191 ****
           Expr : Entity_Id;
        begin
           if not All_Extensions_Allowed then
!             Error_Msg_GNAT_Extension ("Make attribute", Loc);
              return;
           end if;
  
           Set_Etype (N, Etype (P));
  
           if Present (Expressions (N)) then
              Expr := First (Expressions (N));
              while Present (Expr) loop
--- 5187,5203 ----
           Expr : Entity_Id;
        begin
           if not All_Extensions_Allowed then
!             Error_Msg_GNAT_Extension ("attribute %", Loc);
              return;
           end if;
  
+          Check_Type;
           Set_Etype (N, Etype (P));
  
+          if not Needs_Construction (Entity (P)) then
+             Error_Msg_NE ("no available constructor for&", N, Entity (P));
+          end if;
+ 
           if Present (Expressions (N)) then
              Expr := First (Expressions (N));
              while Present (Expr) loop
*************** package body Sem_Attr is
*** 5197,5202 ****
--- 5209,5217 ----
  
                 Next (Expr);
              end loop;
+ 
+          elsif not Has_Default_Constructor (Entity (P)) then
+             Error_Msg_NE ("no default constructor for&", N, Entity (P));
           end if;
        end;
  
*************** package body Sem_Attr is
*** 11144,11149 ****
--- 11159,11165 ----
           | Attribute_Class
           | Attribute_Code_Address
           | Attribute_Compiler_Version
+          | Attribute_Constructor
           | Attribute_Count
           | Attribute_Default_Bit_Order
           | Attribute_Default_Scalar_Storage_Order
*************** package body Sem_Attr is
*** 12477,12546 ****
                 Set_Address_Taken (Entity (P));
              end if;
  
-             if Nkind (P) = N_Slice then
- 
-                --  Arr (X .. Y)'address is identical to Arr (X)'address,
-                --  even if the array is packed and the slice itself is not
-                --  addressable. Transform the prefix into an indexed component.
- 
-                --  Note that the transformation is safe only if we know that
-                --  the slice is non-null. That is because a null slice can have
-                --  an out of bounds index value.
- 
-                --  Right now, gigi blows up if given 'Address on a slice as a
-                --  result of some incorrect freeze nodes generated by the front
-                --  end, and this covers up that bug in one case, but the bug is
-                --  likely still there in the cases not handled by this code ???
- 
-                --  It's not clear what 'Address *should* return for a null
-                --  slice with out of bounds indexes, this might be worth an ARG
-                --  discussion ???
- 
-                --  One approach would be to do a length check unconditionally,
-                --  and then do the transformation below unconditionally, but
-                --  analyze with checks off, avoiding the problem of the out of
-                --  bounds index. This approach would interpret the address of
-                --  an out of bounds null slice as being the address where the
-                --  array element would be if there was one, which is probably
-                --  as reasonable an interpretation as any ???
- 
-                declare
-                   Loc : constant Source_Ptr := Sloc (P);
-                   D   : constant Node_Id := Discrete_Range (P);
-                   Lo  : Node_Id;
- 
-                begin
-                   if Is_Entity_Name (D)
-                     and then
-                       Not_Null_Range
-                         (Type_Low_Bound (Entity (D)),
-                          Type_High_Bound (Entity (D)))
-                   then
-                      Lo :=
-                        Make_Attribute_Reference (Loc,
-                           Prefix => (New_Occurrence_Of (Entity (D), Loc)),
-                           Attribute_Name => Name_First);
- 
-                   elsif Nkind (D) = N_Range
-                     and then Not_Null_Range (Low_Bound (D), High_Bound (D))
-                   then
-                      Lo := Low_Bound (D);
- 
-                   else
-                      Lo := Empty;
-                   end if;
- 
-                   if Present (Lo) then
-                      Rewrite (P,
-                         Make_Indexed_Component (Loc,
-                            Prefix => Relocate_Node (Prefix (P)),
-                            Expressions => New_List (Lo)));
- 
-                      Analyze_And_Resolve (P);
-                   end if;
-                end;
-             end if;
- 
           ------------------
           -- Body_Version --
           ------------------
--- 12493,12498 ----
*************** package body Sem_Attr is
*** 12805,12849 ****
                         and then Scope (Op) = Standard_Standard
                         and then not Strict
                       then
!                         declare
!                            Op_Chars : constant Any_Operator_Name := Chars (Op);
!                            --  Nonassociative ops like division are unlikely
!                            --  to come up in practice, but they are legal.
!                         begin
!                            case Op_Chars is
!                               when Name_Op_Add
!                                 | Name_Op_Subtract
!                                 | Name_Op_Multiply
!                                 | Name_Op_Divide
!                                 | Name_Op_Expon
!                               =>
!                                  return Is_Numeric_Type (Typ);
  
!                               when Name_Op_Mod | Name_Op_Rem =>
!                                  return Is_Numeric_Type (Typ)
!                                    and then Is_Discrete_Type (Typ);
  
!                               when Name_Op_And | Name_Op_Or | Name_Op_Xor =>
!                                  --  No Boolean array operators in Standard
!                                  return Is_Boolean_Type (Typ)
!                                    or else Is_Modular_Integer_Type (Typ);
  
!                               when Name_Op_Concat =>
!                                  return Is_Array_Type (Typ)
!                                    and then Number_Dimensions (Typ) = 1;
  
!                               when Name_Op_Eq | Name_Op_Ne
!                                 | Name_Op_Lt | Name_Op_Le
!                                 | Name_Op_Gt | Name_Op_Ge
!                               =>
!                                  return Is_Boolean_Type (Typ);
  
-                               when Name_Op_Abs | Name_Op_Not =>
-                                  --  unary ops were already handled
-                                  pragma Assert (False);
-                                  raise Program_Error;
-                            end case;
-                         end;
                       else
                          return False;
                       end if;
--- 12757,12799 ----
                         and then Scope (Op) = Standard_Standard
                         and then not Strict
                       then
!                         --  Nonassociative ops like division are unlikely to
!                         --  come up in practice, but they are legal.
  
!                         case Any_Operator_Name'(Chars (Op)) is
!                            when Name_Op_Add
!                              | Name_Op_Subtract
!                              | Name_Op_Multiply
!                              | Name_Op_Divide
!                              | Name_Op_Expon
!                            =>
!                               return Is_Numeric_Type (Typ);
  
!                            when Name_Op_Mod | Name_Op_Rem =>
!                               return Is_Numeric_Type (Typ)
!                                 and then Is_Discrete_Type (Typ);
  
!                            when Name_Op_And | Name_Op_Or | Name_Op_Xor =>
!                               --  No Boolean array operators in Standard
!                               return Is_Boolean_Type (Typ)
!                                 or else Is_Modular_Integer_Type (Typ);
  
!                            when Name_Op_Concat =>
!                               return Is_Array_Type (Typ)
!                                 and then Number_Dimensions (Typ) = 1;
! 
!                            when Name_Op_Eq | Name_Op_Ne
!                              | Name_Op_Lt | Name_Op_Le
!                              | Name_Op_Gt | Name_Op_Ge
!                            =>
!                               return Is_Boolean_Type (Typ);
! 
!                            when Name_Op_Abs | Name_Op_Not =>
!                               --  unary ops were already handled
! 
!                               raise Program_Error;
!                         end case;
  
                       else
                          return False;
                       end if;
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_aux.adb gcc-16-20251109/gcc/ada/sem_aux.adb
*** gcc-16-20251102/gcc/ada/sem_aux.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_aux.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Aux is
*** 184,192 ****
  
        --  Normal case, search enclosing scopes
  
-       --  Note: the test for Present (S) should not be required, it defends
-       --  against an ill-formed tree.
- 
        S := Scope (Ent);
        loop
           --  If we somehow got an empty value for Scope, the tree must be
--- 184,189 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch10.adb gcc-16-20251109/gcc/ada/sem_ch10.adb
*** gcc-16-20251102/gcc/ada/sem_ch10.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch10.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch10 is
*** 4337,4379 ****
        ---------------------------------------
  
        procedure Check_Private_Limited_Withed_Unit (Item : Node_Id) is
-          Curr_Parent  : Node_Id;
           Child_Parent : Node_Id;
           Curr_Private : Boolean;
  
        begin
!          --  Compilation unit of the parent of the withed library unit
  
!          Child_Parent := Withed_Lib_Unit (Item);
  
           --  If the child unit is a public child, then locate its nearest
!          --  private ancestor, if any, then Child_Parent will then be set to
           --  the parent of that ancestor.
  
!          if not Private_Present (Withed_Lib_Unit (Item)) then
!             while Present (Child_Parent)
!               and then not Private_Present (Child_Parent)
!             loop
!                Child_Parent := Parent_Spec (Unit (Child_Parent));
!             end loop;
! 
!             if No (Child_Parent) then
                 return;
              end if;
!          end if;
  
!          Child_Parent := Parent_Spec (Unit (Child_Parent));
  
           --  Traverse all the ancestors of the current compilation unit to
!          --  check if it is a descendant of named library unit.
  
!          Curr_Parent := Parent (Item);
           Curr_Private := Private_Present (Curr_Parent);
  
!          while Present (Parent_Spec (Unit (Curr_Parent)))
!            and then Curr_Parent /= Child_Parent
!          loop
              Curr_Parent := Parent_Spec (Unit (Curr_Parent));
              Curr_Private := Curr_Private or else Private_Present (Curr_Parent);
           end loop;
  
--- 4337,4374 ----
        ---------------------------------------
  
        procedure Check_Private_Limited_Withed_Unit (Item : Node_Id) is
           Child_Parent : Node_Id;
+          Curr_Parent  : Node_Id;
           Curr_Private : Boolean;
+          Priv_Child   : Node_Id;
  
        begin
!          --  Start with the compilation unit of the withed library unit
  
!          Priv_Child := Withed_Lib_Unit (Item);
  
           --  If the child unit is a public child, then locate its nearest
!          --  private ancestor, if any. Child_Parent will then be set to
           --  the parent of that ancestor.
  
!          while not Private_Present (Priv_Child) loop
!             Priv_Child := Parent_Spec (Unit (Priv_Child));
!             if No (Priv_Child) then
                 return;
              end if;
!          end loop;
  
!          Child_Parent := Parent_Spec (Unit (Priv_Child));
  
           --  Traverse all the ancestors of the current compilation unit to
!          --  check if it is a descendant of Child_Parent.
  
!          Curr_Parent := N;
           Curr_Private := Private_Present (Curr_Parent);
  
!          while Curr_Parent /= Child_Parent loop
              Curr_Parent := Parent_Spec (Unit (Curr_Parent));
+             exit when No (Curr_Parent);
              Curr_Private := Curr_Private or else Private_Present (Curr_Parent);
           end loop;
  
*************** package body Sem_Ch10 is
*** 4384,4394 ****
                ("\current unit must also have parent&!",
                 Item, Defining_Unit_Name (Specification (Unit (Child_Parent))));
  
!          elsif Private_Present (Parent (Item))
!             or else Curr_Private
              or else Private_Present (Item)
!             or else Nkind (Unit (Parent (Item))) in
!                       N_Package_Body | N_Subprogram_Body | N_Subunit
           then
              --  Current unit is private, of descendant of a private unit
  
--- 4379,4389 ----
                ("\current unit must also have parent&!",
                 Item, Defining_Unit_Name (Specification (Unit (Child_Parent))));
  
!          elsif Curr_Private
              or else Private_Present (Item)
!             or else Nkind (Unit (N)) in N_Package_Body | N_Subunit
!             or else (Nkind (Unit (N)) = N_Subprogram_Body
!                       and then not Acts_As_Spec (Parent (Unit (N))))
           then
              --  Current unit is private, of descendant of a private unit
  
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch12.adb gcc-16-20251109/gcc/ada/sem_ch12.adb
*** gcc-16-20251102/gcc/ada/sem_ch12.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch12.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch12 is
*** 599,606 ****
     --  whose views can change between the point of instantiation and the point
     --  of instantiation of the body. In addition, mark the generic renamings
     --  as generic actuals, so that they are not compatible with other actuals.
!    --  Recurse on an actual that is a formal package whose declaration has
!    --  a box.
  
     function Component_Type_For_Private_View (T : Entity_Id) return Entity_Id;
     --  Return the component type of array type T, with the following addition:
--- 599,606 ----
     --  whose views can change between the point of instantiation and the point
     --  of instantiation of the body. In addition, mark the generic renamings
     --  as generic actuals, so that they are not compatible with other actuals.
!    --  For an instantiation of a formal package that is declared with a box or
!    --  contains defaulted parameters, make the corresponding actuals visible.
  
     function Component_Type_For_Private_View (T : Entity_Id) return Entity_Id;
     --  Return the component type of array type T, with the following addition:
*************** package body Sem_Ch12 is
*** 642,649 ****
     --  of freeze nodes for instance bodies that may depend on other instances.
  
     function Find_Actual_Type
!      (Typ       : Entity_Id;
!       Gen_Type  : Entity_Id) return Entity_Id;
     --  When validating the actual types of a child instance, check whether
     --  the formal is a formal type of the parent unit, and retrieve the current
     --  actual for it. Typ is the entity in the analyzed formal type declaration
--- 642,650 ----
     --  of freeze nodes for instance bodies that may depend on other instances.
  
     function Find_Actual_Type
!      (Typ      : Entity_Id;
!       Gen_Type : Entity_Id;
!       Typ_Ref  : Node_Id) return Entity_Id;
     --  When validating the actual types of a child instance, check whether
     --  the formal is a formal type of the parent unit, and retrieve the current
     --  actual for it. Typ is the entity in the analyzed formal type declaration
*************** package body Sem_Ch12 is
*** 653,659 ****
     --  be declared in a formal package of a parent. In both cases it is a
     --  generic actual type because it appears within a visible instance.
     --  Finally, it may be declared in a parent unit without being a formal
!    --  of that unit, in which case it must be retrieved by visibility.
     --  Ambiguities may still arise if two homonyms are declared in two formal
     --  packages, and the prefix of the formal type may be needed to resolve
     --  the ambiguity in the instance ???
--- 654,661 ----
     --  be declared in a formal package of a parent. In both cases it is a
     --  generic actual type because it appears within a visible instance.
     --  Finally, it may be declared in a parent unit without being a formal
!    --  of that unit, in which case it must be retrieved by visibility and
!    --  Typ_Ref is the unanalyzed subtype mark in the instance to be used.
     --  Ambiguities may still arise if two homonyms are declared in two formal
     --  packages, and the prefix of the formal type may be needed to resolve
     --  the ambiguity in the instance ???
*************** package body Sem_Ch12 is
*** 810,820 ****
     --  the suffix is removed is added to Prims_List to restore them later.
  
     procedure Install_Parent (P : Entity_Id; In_Body : Boolean := False);
!    --  When compiling an instance of a child unit the parent (which is
!    --  itself an instance) is an enclosing scope that must be made
!    --  immediately visible. This procedure is also used to install the non-
!    --  generic parent of a generic child unit when compiling its body, so
!    --  that full views of types in the parent are made visible.
  
     --  The functions Instantiate_... perform various legality checks and build
     --  the declarations for instantiated generic parameters. In all of these
--- 812,822 ----
     --  the suffix is removed is added to Prims_List to restore them later.
  
     procedure Install_Parent (P : Entity_Id; In_Body : Boolean := False);
!    --  When compiling an instance of a child unit, the parent P is an enclosing
!    --  scope that must be made immediately visible. In_Body is True if this is
!    --  done for an instance body and False for an instance spec. Note that the
!    --  procedure does not insert P on the scope stack above the current scope,
!    --  but instead pushes P and then pushes an extra copy of the current scope.
  
     --  The functions Instantiate_... perform various legality checks and build
     --  the declarations for instantiated generic parameters. In all of these
*************** package body Sem_Ch12 is
*** 930,936 ****
     --  subprogram declaration N.
  
     procedure Remove_Parent (In_Body : Boolean := False);
!    --  Reverse effect after instantiation of child is complete
  
     function Renames_Standard_Subprogram (Subp : Entity_Id) return Boolean;
     --  Determine whether Subp renames one of the subprograms defined in the
--- 932,938 ----
     --  subprogram declaration N.
  
     procedure Remove_Parent (In_Body : Boolean := False);
!    --  Reverse Install_Parent's effect after instantiation of child is complete
  
     function Renames_Standard_Subprogram (Subp : Entity_Id) return Boolean;
     --  Determine whether Subp renames one of the subprograms defined in the
*************** package body Sem_Ch12 is
*** 944,949 ****
--- 946,958 ----
     --  Restore suffix 'P' to primitives of Prims_List and leave Prims_List
     --  set to No_Elist.
  
+    procedure Restore_Private_Views (Pack_Id : Entity_Id; Is_Package : Boolean);
+    --  Restore the private views of external types, and unmark the generic
+    --  renamings of actuals, so that they become compatible subtypes again.
+    --  Reset the visibility of the actuals (some of them may have been made
+    --  visible by Check_Generic_Actuals). For subprograms, Pack_Id is the
+    --  wrapper package built to hold the renamings and Is_Package is False.
+ 
     procedure Set_Instance_Env
       (Gen_Unit : Entity_Id;
        Act_Unit : Entity_Id);
*************** package body Sem_Ch12 is
*** 958,963 ****
--- 967,976 ----
     --  Associate analyzed generic parameter with corresponding instance. Used
     --  for semantic checks at instantiation time.
  
+    procedure Switch_View (T : Entity_Id);
+    --  Switch the partial and full views of a type, as well as those of its
+    --  private dependents (i.e. its subtypes and derived types).
+ 
     function True_Parent (N : Node_Id) return Node_Id;
     --  For a subunit, return parent of corresponding stub, else return
     --  parent of node.
*************** package body Sem_Ch12 is
*** 1080,1097 ****
       Table_Increment      => 100,
       Table_Name           => "Instance_Envs");
  
-    procedure Restore_Private_Views
-      (Pack_Id    : Entity_Id;
-       Is_Package : Boolean := True);
-    --  Restore the private views of external types, and unmark the generic
-    --  renamings of actuals, so that they become compatible subtypes again.
-    --  For subprograms, Pack_Id is the package constructed to hold the
-    --  renamings.
- 
-    procedure Switch_View (T : Entity_Id);
-    --  Switch the partial and full views of a type and its private
-    --  dependents (i.e. its subtypes and derived types).
- 
     ------------------------------------
     -- Structures for Error Reporting --
     ------------------------------------
--- 1093,1098 ----
*************** package body Sem_Ch12 is
*** 1607,1614 ****
           return Result : Actual_Rec do
              case Nkind (Un_Formal) is
                 when N_Formal_Object_Declaration =>
!                   if Present (Default_Expression (Un_Formal)) then
!                      Result := (Name_Exp, Default_Expression (Un_Formal));
                    end if;
                 when N_Formal_Type_Declaration =>
                    if Present (Default_Subtype_Mark (Un_Formal)) then
--- 1608,1615 ----
           return Result : Actual_Rec do
              case Nkind (Un_Formal) is
                 when N_Formal_Object_Declaration =>
!                   if Present (Expression (Un_Formal)) then
!                      Result := (Name_Exp, Expression (Un_Formal));
                    end if;
                 when N_Formal_Type_Declaration =>
                    if Present (Default_Subtype_Mark (Un_Formal)) then
*************** package body Sem_Ch12 is
*** 1663,1680 ****
  
              if Box_Present (Src_Assoc) then
                 Assoc.Actual := (Kind => Box_Actual);
!                if False then -- ???
!                   --  Disable this for now, because we have various
!                   --  code that needs to be updated.
!                   Error_Msg_N
!                     ("box requires named notation", Src_Assoc);
!                end if;
              else
                 Assoc.Actual :=
                   (Name_Exp,
                    Explicit_Generic_Actual_Parameter (Src_Assoc));
                 pragma Assert (Present (Assoc.Actual.Name_Exp));
              end if;
              Assoc.Actual_Origin := From_Explicit_Actual;
  
              Next (Src_Assoc);
--- 1664,1677 ----
  
              if Box_Present (Src_Assoc) then
                 Assoc.Actual := (Kind => Box_Actual);
!                Error_Msg_N ("box requires named notation", Src_Assoc);
              else
                 Assoc.Actual :=
                   (Name_Exp,
                    Explicit_Generic_Actual_Parameter (Src_Assoc));
                 pragma Assert (Present (Assoc.Actual.Name_Exp));
              end if;
+ 
              Assoc.Actual_Origin := From_Explicit_Actual;
  
              Next (Src_Assoc);
*************** package body Sem_Ch12 is
*** 2557,2563 ****
                            (Defining_Identifier
                              (Assoc.Un_Formal), Sloc (N)),
                        Explicit_Generic_Actual_Parameter =>
!                         New_Copy_Tree (Default_Expression (Assoc.Un_Formal))));
                 end if;
              end if;
  
--- 2554,2560 ----
                            (Defining_Identifier
                              (Assoc.Un_Formal), Sloc (N)),
                        Explicit_Generic_Actual_Parameter =>
!                         New_Copy_Tree (Expression (Assoc.Un_Formal))));
                 end if;
              end if;
  
*************** package body Sem_Ch12 is
*** 3361,3367 ****
     ---------------------------------------
  
     procedure Analyze_Formal_Object_Declaration (N : Node_Id) is
!       E  : constant Node_Id := Default_Expression (N);
        Id : constant Node_Id := Defining_Identifier (N);
  
        K                : Entity_Kind;
--- 3358,3364 ----
     ---------------------------------------
  
     procedure Analyze_Formal_Object_Declaration (N : Node_Id) is
!       E  : constant Node_Id := Expression (N);
        Id : constant Node_Id := Defining_Identifier (N);
  
        K                : Entity_Kind;
*************** package body Sem_Ch12 is
*** 5696,5702 ****
           Check_Formal_Packages (Act_Decl_Id);
  
           Restore_Hidden_Primitives (Vis_Prims_List);
!          Restore_Private_Views (Act_Decl_Id);
  
           Inherit_Context (Gen_Decl, N);
  
--- 5693,5699 ----
           Check_Formal_Packages (Act_Decl_Id);
  
           Restore_Hidden_Primitives (Vis_Prims_List);
!          Restore_Private_Views (Act_Decl_Id, Is_Package => True);
  
           Inherit_Context (Gen_Decl, N);
  
*************** package body Sem_Ch12 is
*** 7218,7224 ****
           if not Is_Intrinsic_Subprogram (Act_Decl_Id) then
              Inherit_Context (Gen_Decl, N);
  
!             Restore_Private_Views (Pack_Id, False);
  
              --  If the context requires a full instantiation, mark node for
              --  subsequent construction of the body.
--- 7215,7221 ----
           if not Is_Intrinsic_Subprogram (Act_Decl_Id) then
              Inherit_Context (Gen_Decl, N);
  
!             Restore_Private_Views (Pack_Id, Is_Package => False);
  
              --  If the context requires a full instantiation, mark node for
              --  subsequent construction of the body.
*************** package body Sem_Ch12 is
*** 8571,8579 ****
                 Set_Is_Generic_Actual_Type (Full_View (E));
              end if;
  
-             Set_Is_Hidden (E, False);
-             Set_Is_Potentially_Use_Visible (E, In_Use (Instance));
- 
              --  We constructed the generic actual type as a subtype of the
              --  supplied type. This means that it normally would not inherit
              --  subtype specific attributes of the actual, which is wrong for
--- 8568,8573 ----
*************** package body Sem_Ch12 is
*** 8627,8647 ****
                   (Renamed_Entity (E),
                    Is_Formal_Box =>
                      Box_Present (Parent (Associated_Formal_Package (E))));
- 
-                Set_Is_Hidden (E, False);
              end if;
! 
!          --  If this is a subprogram instance (in a wrapper package) the
!          --  actual is fully visible.
! 
!          elsif Is_Wrapper_Package (Instance) then
!             Set_Is_Hidden (E, False);
  
           --  If the formal package is declared with a box, or if the formal
!          --  parameter is defaulted, it is visible in the body.
  
!          elsif Is_Formal_Box or else Is_Visible_Formal (E) then
              Set_Is_Hidden (E, False);
           end if;
  
           --  Check directly the type of the actual objects, including the
--- 8621,8635 ----
                   (Renamed_Entity (E),
                    Is_Formal_Box =>
                      Box_Present (Parent (Associated_Formal_Package (E))));
              end if;
!          end if;
  
           --  If the formal package is declared with a box, or if the formal
!          --  parameter is defaulted, the actual is visible in the instance.
  
!          if Is_Formal_Box or else Is_Visible_Formal (E) then
              Set_Is_Hidden (E, False);
+             Set_Is_Potentially_Use_Visible (E, In_Use (Instance));
           end if;
  
           --  Check directly the type of the actual objects, including the
*************** package body Sem_Ch12 is
*** 10479,10488 ****
  
     function Find_Actual_Type
       (Typ      : Entity_Id;
!       Gen_Type : Entity_Id) return Entity_Id
     is
        Gen_Scope : constant Entity_Id := Scope (Gen_Type);
-       T         : Entity_Id;
  
     begin
        --  Special processing only applies to child units
--- 10467,10476 ----
  
     function Find_Actual_Type
       (Typ      : Entity_Id;
!       Gen_Type : Entity_Id;
!       Typ_Ref  : Node_Id) return Entity_Id
     is
        Gen_Scope : constant Entity_Id := Scope (Gen_Type);
  
     begin
        --  Special processing only applies to child units
*************** package body Sem_Ch12 is
*** 10496,10501 ****
--- 10484,10495 ----
        elsif Scope (Typ) = Gen_Scope then
           return Get_Instance_Of (Typ);
  
+       --  If designated or component type is declared in a formal of the child
+       --  unit, its instance is available.
+ 
+       elsif Scope (Scope (Typ)) = Gen_Scope then
+          return Get_Instance_Of (Typ);
+ 
        --  If the array or access type is not declared in the parent unit,
        --  no special processing needed.
  
*************** package body Sem_Ch12 is
*** 10507,10524 ****
        --  Otherwise, retrieve designated or component type by visibility
  
        else
!          T := Current_Entity (Typ);
!          while Present (T) loop
!             if In_Open_Scopes (Scope (T)) then
!                return T;
!             elsif Is_Generic_Actual_Type (T) then
!                return T;
!             end if;
! 
!             T := Homonym (T);
!          end loop;
! 
!          return Typ;
        end if;
     end Find_Actual_Type;
  
--- 10501,10508 ----
        --  Otherwise, retrieve designated or component type by visibility
  
        else
!          Analyze (Typ_Ref);
!          return Entity (Typ_Ref);
        end if;
     end Find_Actual_Type;
  
*************** package body Sem_Ch12 is
*** 11182,11191 ****
     ------------------------
  
     procedure Hide_Current_Scope is
!       C : constant Entity_Id := Current_Scope;
        E : Entity_Id;
  
     begin
        Set_Is_Hidden_Open_Scope (C);
  
        E := First_Entity (C);
--- 11166,11185 ----
     ------------------------
  
     procedure Hide_Current_Scope is
!       C : Entity_Id;
        E : Entity_Id;
  
     begin
+       C := Current_Scope;
+ 
+       --  The analysis of the actual parameters may have created a transient
+       --  scope after the extra copy of the current scope was pushed onto the
+       --  stack, so we need to skip it.
+ 
+       if Scope_Is_Transient then
+          C := Scope (C);
+       end if;
+ 
        Set_Is_Hidden_Open_Scope (C);
  
        E := First_Entity (C);
*************** package body Sem_Ch12 is
*** 11208,11214 ****
           Set_Is_Immediately_Visible (C, False);
           Append_Elmt (C, Hidden_Entities);
        end if;
- 
     end Hide_Current_Scope;
  
     --------------
--- 11202,11207 ----
*************** package body Sem_Ch12 is
*** 11660,11667 ****
                 null;
  
              elsif Present (Associated_Formal_Package (E)) then
!                Check_Generic_Actuals (Renamed_Entity (E), True);
!                Set_Is_Hidden (E, False);
  
                 --  Find formal package in generic unit that corresponds to
                 --  (instance of) formal package in instance.
--- 11653,11662 ----
                 null;
  
              elsif Present (Associated_Formal_Package (E)) then
!                Check_Generic_Actuals
!                  (Renamed_Entity (E),
!                   Is_Formal_Box =>
!                     Box_Present (Parent (Associated_Formal_Package (E))));
  
                 --  Find formal package in generic unit that corresponds to
                 --  (instance of) formal package in instance.
*************** package body Sem_Ch12 is
*** 12450,12456 ****
                         (Nkind (Actual_Of_Formal) = N_Package_Instantiation);
                    end if;
  
!                   Next (Actual_Of_Formal);
  
                    --  A formal subprogram may be overloaded, so advance in
                    --  the list of actuals to make sure we do not match two
--- 12445,12451 ----
                         (Nkind (Actual_Of_Formal) = N_Package_Instantiation);
                    end if;
  
!                   Next_Non_Pragma (Actual_Of_Formal);
  
                    --  A formal subprogram may be overloaded, so advance in
                    --  the list of actuals to make sure we do not match two
*************** package body Sem_Ch12 is
*** 13236,13242 ****
                 end if;
              end;
  
!          elsif Present (Default_Expression (Formal)) then
  
              --  Use default to construct declaration
  
--- 13231,13237 ----
                 end if;
              end;
  
!          elsif Present (Expression (Formal)) then
  
              --  Use default to construct declaration
  
*************** package body Sem_Ch12 is
*** 13254,13260 ****
                  Null_Exclusion_Present => Null_Exclusion_Present (Formal),
                  Object_Definition      => Def,
                  Expression             => New_Copy_Tree
!                                             (Default_Expression (Formal)));
  
              Copy_Ghost_Aspect (Formal, To => Decl_Node);
              Set_Corresponding_Generic_Association
--- 13249,13255 ----
                  Null_Exclusion_Present => Null_Exclusion_Present (Formal),
                  Object_Definition      => Def,
                  Expression             => New_Copy_Tree
!                                             (Expression (Formal)));
  
              Copy_Ghost_Aspect (Formal, To => Decl_Node);
              Set_Corresponding_Generic_Association
*************** package body Sem_Ch12 is
*** 13679,13685 ****
           Set_Defining_Unit_Name (Act_Body, Act_Body_Name);
  
           Set_Corresponding_Spec (Act_Body, Act_Decl_Id);
!          Check_Generic_Actuals (Act_Decl_Id, False);
           Check_Initialized_Types;
  
           --  Install primitives hidden at the point of the instantiation but
--- 13674,13680 ----
           Set_Defining_Unit_Name (Act_Body, Act_Body_Name);
  
           Set_Corresponding_Spec (Act_Body, Act_Decl_Id);
!          Check_Generic_Actuals (Act_Decl_Id, Is_Formal_Box => False);
           Check_Initialized_Types;
  
           --  Install primitives hidden at the point of the instantiation but
*************** package body Sem_Ch12 is
*** 13927,13933 ****
           --  the two mechanisms swap exactly the same entities, in particular
           --  the private entities dependent on the primary private entities.
  
!          Restore_Private_Views (Act_Decl_Id);
  
           --  Remove the current unit from visibility if this is an instance
           --  that is not elaborated on the fly for inlining purposes.
--- 13922,13928 ----
           --  the two mechanisms swap exactly the same entities, in particular
           --  the private entities dependent on the primary private entities.
  
!          Restore_Private_Views (Act_Decl_Id, Is_Package => True);
  
           --  Remove the current unit from visibility if this is an instance
           --  that is not elaborated on the fly for inlining purposes.
*************** package body Sem_Ch12 is
*** 14174,14180 ****
  
           Set_Corresponding_Spec (Act_Body, Act_Decl_Id);
           Set_Has_Completion (Act_Decl_Id);
!          Check_Generic_Actuals (Pack_Id, False);
  
           --  Generate a reference to link the visible subprogram instance to
           --  the generic body, which for navigation purposes is the only
--- 14169,14175 ----
  
           Set_Corresponding_Spec (Act_Body, Act_Decl_Id);
           Set_Has_Completion (Act_Decl_Id);
!          Check_Generic_Actuals (Pack_Id, Is_Formal_Box => False);
  
           --  Generate a reference to link the visible subprogram instance to
           --  the generic body, which for navigation purposes is the only
*************** package body Sem_Ch12 is
*** 14245,14251 ****
  
           Inherit_Context (Gen_Body, Inst_Node);
  
!          Restore_Private_Views (Pack_Id, False);
  
           if Par_Installed then
              Remove_Parent (In_Body => True);
--- 14240,14246 ----
  
           Inherit_Context (Gen_Body, Inst_Node);
  
!          Restore_Private_Views (Pack_Id, Is_Package => False);
  
           if Par_Installed then
              Remove_Parent (In_Body => True);
*************** package body Sem_Ch12 is
*** 14599,14605 ****
  
        procedure Validate_Access_Type_Instance is
           Desig_Type : constant Entity_Id :=
!                         Find_Actual_Type (Designated_Type (A_Gen_T), A_Gen_T);
           Desig_Act  : Entity_Id;
  
        begin
--- 14594,14601 ----
  
        procedure Validate_Access_Type_Instance is
           Desig_Type : constant Entity_Id :=
!            Find_Actual_Type
!              (Designated_Type (A_Gen_T), A_Gen_T, Subtype_Indication (Def));
           Desig_Act  : Entity_Id;
  
        begin
*************** package body Sem_Ch12 is
*** 14688,14718 ****
        ----------------------------------
  
        procedure Validate_Array_Type_Instance is
!          I1 : Node_Id;
!          I2 : Node_Id;
!          T2 : Entity_Id;
! 
!          function Formal_Dimensions return Nat;
!          --  Count number of dimensions in array type formal
! 
!          -----------------------
!          -- Formal_Dimensions --
!          -----------------------
! 
!          function Formal_Dimensions return Nat is
!             Dims : List_Id;
! 
!          begin
!             if Nkind (Def) = N_Constrained_Array_Definition then
!                Dims := Discrete_Subtype_Definitions (Def);
!             else
!                Dims := Subtype_Marks (Def);
!             end if;
! 
!             return List_Length (Dims);
!          end Formal_Dimensions;
  
!       --  Start of processing for Validate_Array_Type_Instance
  
        begin
           if not Is_Array_Type (Act_T) then
--- 14684,14698 ----
        ----------------------------------
  
        procedure Validate_Array_Type_Instance is
!          Dims : constant List_Id
!            := (if Nkind (Def) = N_Constrained_Array_Definition
!                then Discrete_Subtype_Definitions (Def)
!                else Subtype_Marks (Def));
  
!          Dim : Node_Id;
!          I1  : Node_Id;
!          I2  : Node_Id;
!          T2  : Entity_Id;
  
        begin
           if not Is_Array_Type (Act_T) then
*************** package body Sem_Ch12 is
*** 14737,14751 ****
              end if;
           end if;
  
!          if Formal_Dimensions /= Number_Dimensions (Act_T) then
              Error_Msg_NE
                ("dimensions of actual do not match formal &", Actual, Gen_T);
              Abandon_Instantiation (Actual);
           end if;
  
!          I1 := First_Index (A_Gen_T);
!          I2 := First_Index (Act_T);
!          for J in 1 .. Formal_Dimensions loop
  
              --  If the indexes of the actual were given by a subtype_mark,
              --  the index was transformed into a range attribute. Retrieve
--- 14717,14732 ----
              end if;
           end if;
  
!          if List_Length (Dims) /= Number_Dimensions (Act_T) then
              Error_Msg_NE
                ("dimensions of actual do not match formal &", Actual, Gen_T);
              Abandon_Instantiation (Actual);
           end if;
  
!          Dim := First (Dims);
!          I1  := First_Index (A_Gen_T);
!          I2  := First_Index (Act_T);
!          for J in 1 .. List_Length (Dims) loop
  
              --  If the indexes of the actual were given by a subtype_mark,
              --  the index was transformed into a range attribute. Retrieve
*************** package body Sem_Ch12 is
*** 14768,14774 ****
              end if;
  
              if not Subtypes_Match
!                      (Find_Actual_Type (Etype (I1), A_Gen_T), T2)
              then
                 Error_Msg_NE
                   ("index types of actual do not match those of formal &",
--- 14749,14761 ----
              end if;
  
              if not Subtypes_Match
!                      (Find_Actual_Type
!                        (Etype (I1),
!                         A_Gen_T,
!                         (if Nkind (Dim) = N_Subtype_Indication
!                          then Subtype_Mark (Dim)
!                          else Dim)),
!                       T2)
              then
                 Error_Msg_NE
                   ("index types of actual do not match those of formal &",
*************** package body Sem_Ch12 is
*** 14776,14809 ****
                 Abandon_Instantiation (Actual);
              end if;
  
              Next_Index (I1);
              Next_Index (I2);
           end loop;
  
!          --  Check matching subtypes. Note that there are complex visibility
!          --  issues when the generic is a child unit and some aspect of the
!          --  generic type is declared in a parent unit of the generic. We do
!          --  the test to handle this special case only after a direct check
!          --  for static matching has failed. The case where both the component
!          --  type and the array type are separate formals, and the component
!          --  type is a private view may also require special checking in
!          --  Subtypes_Match. Finally, we assume that a child instance where
!          --  the component type comes from a formal of a parent instance is
!          --  correct because the generic was correct. A more precise check
!          --  seems too complex to install???
  
!          if Subtypes_Match
!            (Component_Type (A_Gen_T), Component_Type (Act_T))
!              or else
!                Subtypes_Match
!                  (Find_Actual_Type (Component_Type (A_Gen_T), A_Gen_T),
!                   Component_Type (Act_T))
!             or else
!               (not Inside_A_Generic
!                  and then Is_Child_Unit (Scope (Component_Type (A_Gen_T))))
           then
-             null;
-          else
              Error_Msg_NE
                ("component subtype of actual does not match that of formal &",
                 Actual, Gen_T);
--- 14763,14782 ----
                 Abandon_Instantiation (Actual);
              end if;
  
+             Next (Dim);
              Next_Index (I1);
              Next_Index (I2);
           end loop;
  
!          --  Check matching component subtypes
  
!          if not Subtypes_Match
!                   (Find_Actual_Type
!                     (Component_Type (A_Gen_T),
!                      A_Gen_T,
!                      Subtype_Indication (Component_Definition (Def))),
!                    Component_Type (Act_T))
           then
              Error_Msg_NE
                ("component subtype of actual does not match that of formal &",
                 Actual, Gen_T);
*************** package body Sem_Ch12 is
*** 16960,16979 ****
  
     procedure Remove_Parent (In_Body : Boolean := False) is
        S : Entity_Id := Current_Scope;
!       --  S is the scope containing the instantiation just completed. The scope
!       --  stack contains the parent instances of the instantiation, followed by
!       --  the original S.
  
        Cur_P  : Entity_Id;
        E      : Entity_Id;
-       P      : Entity_Id;
        Hidden : Elmt_Id;
  
     begin
-       --  After child instantiation is complete, remove from scope stack the
-       --  extra copy of the current scope, and then remove parent instances.
- 
        if not In_Body then
           Pop_Scope;
  
           while Current_Scope /= S loop
--- 16933,16965 ----
  
     procedure Remove_Parent (In_Body : Boolean := False) is
        S : Entity_Id := Current_Scope;
!       --  S is the extra copy of the current scope that has been pushed by
!       --  Install_Parent. The scope stack next contains the parents of the
!       --  instance followed by the original S.
  
        Cur_P  : Entity_Id;
        E      : Entity_Id;
        Hidden : Elmt_Id;
+       P      : Entity_Id;
+       SE     : Scope_Stack_Entry;
  
     begin
        if not In_Body then
+          --  If the analysis of the actual parameters has created a transient
+          --  scope after the extra copy of the current scope was pushed onto
+          --  the stack, we first need to save this transient scope and pop it.
+ 
+          if Scope_Is_Transient then
+             SE := Scope_Stack.Table (Scope_Stack.Last);
+             Scope_Stack.Decrement_Last;
+             S := Current_Scope;
+          else
+             SE := (Is_Transient => False, others => <>);
+          end if;
+ 
+          --  After child instantiation is complete, remove from scope stack the
+          --  extra copy of the current scope, and then remove the parents.
+ 
           Pop_Scope;
  
           while Current_Scope /= S loop
*************** package body Sem_Ch12 is
*** 17057,17062 ****
--- 17043,17054 ----
              Next_Elmt (Hidden);
           end loop;
  
+          --  Restore the transient scope that was popped on entry, if any
+ 
+          if SE.Is_Transient then
+             Scope_Stack.Append (SE);
+          end if;
+ 
        else
           --  Each body is analyzed separately, and there is no context that
           --  needs preserving from one body instance to the next, so remove all
*************** package body Sem_Ch12 is
*** 17093,17102 ****
        Saved : Instance_Env renames Instance_Envs.Table (Instance_Envs.Last);
  
     begin
!       if No (Current_Instantiated_Parent.Act_Id) then
!          --  Restore environment after subprogram inlining
  
!          Restore_Private_Views (Empty);
        end if;
  
        Current_Instantiated_Parent := Saved.Instantiated_Parent;
--- 17085,17102 ----
        Saved : Instance_Env renames Instance_Envs.Table (Instance_Envs.Last);
  
     begin
!       --  Restore environment after subprogram inlining
  
!       if No (Current_Instantiated_Parent.Act_Id) then
!          declare
!             M : Elmt_Id;
!          begin
!             M := First_Elmt (Exchanged_Views);
!             while Present (M) loop
!                Exchange_Declarations (Node (M));
!                Next_Elmt (M);
!             end loop;
!          end;
        end if;
  
        Current_Instantiated_Parent := Saved.Instantiated_Parent;
*************** package body Sem_Ch12 is
*** 17115,17123 ****
     -- Restore_Private_Views --
     ---------------------------
  
!    procedure Restore_Private_Views
!      (Pack_Id    : Entity_Id;
!       Is_Package : Boolean := True)
     is
        M        : Elmt_Id;
        E        : Entity_Id;
--- 17115,17121 ----
     -- Restore_Private_Views --
     ---------------------------
  
!    procedure Restore_Private_Views (Pack_Id : Entity_Id; Is_Package : Boolean)
     is
        M        : Elmt_Id;
        E        : Entity_Id;
*************** package body Sem_Ch12 is
*** 17136,17141 ****
--- 17134,17140 ----
        procedure Restore_Nested_Formal (Formal : Entity_Id) is
           pragma Assert (Ekind (Formal) = E_Package);
           Ent : Entity_Id;
+ 
        begin
           if Present (Renamed_Entity (Formal))
             and then Denotes_Formal_Package (Renamed_Entity (Formal), True)
*************** package body Sem_Ch12 is
*** 17198,17213 ****
           Next_Elmt (M);
        end loop;
  
-       if No (Pack_Id) then
-          return;
-       end if;
- 
        --  Make the generic formal parameters private, and make the formal types
        --  into subtypes of the actuals again.
  
        E := First_Entity (Pack_Id);
        while Present (E) loop
!          Set_Is_Hidden (E, True);
  
           if Is_Type (E)
             and then Nkind (Parent (E)) = N_Subtype_Declaration
--- 17197,17209 ----
           Next_Elmt (M);
        end loop;
  
        --  Make the generic formal parameters private, and make the formal types
        --  into subtypes of the actuals again.
  
        E := First_Entity (Pack_Id);
        while Present (E) loop
!          Set_Is_Hidden (E);
!          Set_Is_Potentially_Use_Visible (E, False);
  
           if Is_Type (E)
             and then Nkind (Parent (E)) = N_Subtype_Declaration
*************** package body Sem_Ch12 is
*** 17231,17236 ****
--- 17227,17233 ----
                           (Entity (Subtype_Indication (Parent (E))))
              then
                 null;
+ 
              else
                 Set_Is_Generic_Actual_Type (E, False);
  
*************** package body Sem_Ch12 is
*** 17275,17281 ****
              --  If the actual is itself a formal package for the enclosing
              --  generic, or the actual for such a formal package, it remains
              --  visible on exit from the instance, and therefore nothing needs
!             --  to be done either, except to keep it accessible.
  
              if Is_Package and then Renamed_Entity (E) = Pack_Id then
                 exit;
--- 17272,17278 ----
              --  If the actual is itself a formal package for the enclosing
              --  generic, or the actual for such a formal package, it remains
              --  visible on exit from the instance, and therefore nothing needs
!             --  to be done either.
  
              if Is_Package and then Renamed_Entity (E) = Pack_Id then
                 exit;
*************** package body Sem_Ch12 is
*** 17286,17292 ****
              elsif
                Denotes_Formal_Package (Renamed_Entity (E), True, Pack_Id)
              then
!                Set_Is_Hidden (E, False);
  
              else
                 declare
--- 17283,17289 ----
              elsif
                Denotes_Formal_Package (Renamed_Entity (E), True, Pack_Id)
              then
!                null;
  
              else
                 declare
*************** package body Sem_Ch12 is
*** 17301,17308 ****
                       exit when Ekind (Id) = E_Package
                                   and then Renamed_Entity (Id) = Act_P;
  
!                      Set_Is_Hidden (Id, True);
!                      Set_Is_Potentially_Use_Visible (Id, In_Use (Act_P));
  
                       if Ekind (Id) = E_Package then
                          Restore_Nested_Formal (Id);
--- 17298,17305 ----
                       exit when Ekind (Id) = E_Package
                                   and then Renamed_Entity (Id) = Act_P;
  
!                      Set_Is_Hidden (Id);
!                      Set_Is_Potentially_Use_Visible (Id, False);
  
                       if Ekind (Id) = E_Package then
                          Restore_Nested_Formal (Id);
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch13.adb gcc-16-20251109/gcc/ada/sem_ch13.adb
*** gcc-16-20251102/gcc/ada/sem_ch13.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch13.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch13 is
*** 442,452 ****
  
        Off : Boolean;
        --  Whether the address is offset within Y in the second case
- 
-       Alignment_Checks_Suppressed : Boolean;
-       --  Whether alignment checks are suppressed by an active scope suppress
-       --  setting. We need to save the value in order to be able to reuse it
-       --  after the back end has been run.
     end record;
  
     package Address_Clause_Checks is new Table.Table (
--- 442,447 ----
*************** package body Sem_Ch13 is
*** 457,482 ****
       Table_Increment      => 200,
       Table_Name           => "Address_Clause_Checks");
  
-    function Alignment_Checks_Suppressed
-      (ACCR : Address_Clause_Check_Record) return Boolean;
-    --  Return whether the alignment check generated for the address clause
-    --  is suppressed.
- 
-    ---------------------------------
-    -- Alignment_Checks_Suppressed --
-    ---------------------------------
- 
-    function Alignment_Checks_Suppressed
-      (ACCR : Address_Clause_Check_Record) return Boolean
-    is
-    begin
-       if Checks_May_Be_Suppressed (ACCR.X) then
-          return Is_Check_Suppressed (ACCR.X, Alignment_Check);
-       else
-          return ACCR.Alignment_Checks_Suppressed;
-       end if;
-    end Alignment_Checks_Suppressed;
- 
     -----------------------------------------
     -- Adjust_Record_For_Reverse_Bit_Order --
     -----------------------------------------
--- 452,457 ----
*************** package body Sem_Ch13 is
*** 5041,5056 ****
                    Analyze_Aspect_Implicit_Dereference;
                    goto Continue;
  
-                when Aspect_Constructor =>
-                   if not All_Extensions_Allowed then
-                      Error_Msg_Name_1 := Nam;
-                      Error_Msg_GNAT_Extension ("aspect %", Loc);
-                      goto Continue;
-                   end if;
- 
-                   Set_Constructor_Name (E, Expr);
-                   Set_Needs_Construction (E);
- 
                 --  Dimension
  
                 when Aspect_Dimension =>
--- 5016,5021 ----
*************** package body Sem_Ch13 is
*** 7096,7106 ****
                       end if;
                    end;
  
!                   --  Entity has delayed freeze, so we will generate an
                    --  alignment check at the freeze point unless suppressed.
  
!                   if not Range_Checks_Suppressed (U_Ent)
!                     and then not Alignment_Checks_Suppressed (U_Ent)
                    then
                       Set_Check_Address_Alignment (N);
                    end if;
--- 7061,7075 ----
                       end if;
                    end;
  
!                   --  The entity has delayed freeze, so we will generate an
                    --  alignment check at the freeze point unless suppressed.
+                   --  We will unconditionally generate it when the alignment
+                   --  is specified in addition to the address, to compensate
+                   --  for the check being suppressed by default on machines
+                   --  that do not need strict alignment of memory accesses.
  
!                   if not Alignment_Checks_Suppressed (U_Ent)
!                     or else Present (Alignment_Clause (U_Ent))
                    then
                       Set_Check_Address_Alignment (N);
                    end if;
*************** package body Sem_Ch13 is
*** 7175,7180 ****
--- 7144,7157 ----
                 if Is_Array_Type (U_Ent) then
                    Set_Alignment (Base_Type (U_Ent), Align);
                 end if;
+ 
+                --  See the Attribute_Address case above for the rationale
+ 
+                if not Is_Type (U_Ent)
+                  and then Present (Address_Clause (U_Ent))
+                then
+                   Set_Check_Address_Alignment (Address_Clause (U_Ent));
+                end if;
              end if;
           end Alignment;
  
*************** package body Sem_Ch13 is
*** 7844,7850 ****
                          end if;
                       end if;
  
!                   --  For Object'Size, set Esize only
  
                    else
                       if Is_Elementary_Type (Etyp)
--- 7821,7827 ----
                          end if;
                       end if;
  
!                   --  For objects, set Esize only
  
                    else
                       if Is_Elementary_Type (Etyp)
*************** package body Sem_Ch13 is
*** 7858,7883 ****
                          Error_Msg_Uint_2 :=
                            UI_From_Int (System_Max_Integer_Size);
                          Error_Msg_N
!                           ("size for primitive object must be a power of 2 in "
!                            & "the range ^-^", N);
!                      end if;
  
!                      Set_Esize (U_Ent, Size);
!                   end if;
  
!                   --  As of RM 13.1, only confirming size
!                   --  (i.e. (Size = Esize (Etyp))) for aliased object of
!                   --  elementary type must be supported.
!                   --  GNAT rejects nonconfirming size for such object.
  
!                   if Is_Aliased (U_Ent)
!                     and then Is_Elementary_Type (Etyp)
!                     and then Known_Esize (U_Ent)
!                     and then Size /= Esize (Etyp)
!                   then
!                      Error_Msg_N
!                        ("nonconfirming Size for aliased object is not "
!                         & "supported", N);
                    end if;
  
                    --  Handle extension aspect 'Size'Class which allows for
--- 7835,7871 ----
                          Error_Msg_Uint_2 :=
                            UI_From_Int (System_Max_Integer_Size);
                          Error_Msg_N
!                           ("size for elementary object must be a power of 2 "
!                            & "in the range ^-^", N);
  
!                      --  As per RM 13.1(25/5), only a confirming size clause
!                      --  (i.e. Size = Type'Object_Size) for aliased objects
!                      --  of elementary types is required to be supported.
!                      --  We reject nonconfirming clauses for these objects.
  
!                      elsif Is_Aliased (U_Ent)
!                        and then Is_Elementary_Type (Etyp)
!                        and then Size /= Esize (Etyp)
!                      then
!                         Error_Msg_N
!                           ("nonconfirming Size for aliased object is not "
!                            & "supported", N);
  
!                      --  We also reject nonconfirming clauses for (nonaliased)
!                      --  objects of floating-point types because smaller sizes
!                      --  would require integer operations to access the objects
!                      --  and larger sizes would require integer operations to
!                      --  manipulate the padding bits.
! 
!                      elsif Is_Floating_Point_Type (Etyp)
!                        and then Size /= Esize (Etyp)
!                      then
!                         Error_Msg_N
!                           ("nonconfirming Size for floating-point object is "
!                            & "not supported", N);
!                      end if;
! 
!                      Set_Esize (U_Ent, Size);
                    end if;
  
                    --  Handle extension aspect 'Size'Class which allows for
*************** package body Sem_Ch13 is
*** 11753,11760 ****
        --  name, so we need to verify that one of these interpretations is
        --  the one available at the freeze point.
  
!       elsif A_Id in Aspect_Constructor
!                   | Aspect_Destructor
                    | Aspect_Input
                    | Aspect_Output
                    | Aspect_Read
--- 11741,11747 ----
        --  name, so we need to verify that one of these interpretations is
        --  the one available at the freeze point.
  
!       elsif A_Id in Aspect_Destructor
                    | Aspect_Input
                    | Aspect_Output
                    | Aspect_Read
*************** package body Sem_Ch13 is
*** 12050,12057 ****
           --  Special case, the expression of these aspects is just an entity
           --  that does not need any resolution, so just analyze.
  
!          when Aspect_Constructor
!             | Aspect_Input
              | Aspect_Output
              | Aspect_Put_Image
              | Aspect_Read
--- 12037,12043 ----
           --  Special case, the expression of these aspects is just an entity
           --  that does not need any resolution, so just analyze.
  
!          when Aspect_Input
              | Aspect_Output
              | Aspect_Put_Image
              | Aspect_Read
*************** package body Sem_Ch13 is
*** 16670,16678 ****
        Y   : Entity_Id;
        Off : Boolean)
     is
-       ACS : constant Boolean := Scope_Suppress.Suppress (Alignment_Check);
     begin
!       Address_Clause_Checks.Append ((N, X, A, Y, Off, ACS));
     end Register_Address_Clause_Check;
  
     ------------------------
--- 16656,16663 ----
        Y   : Entity_Id;
        Off : Boolean)
     is
     begin
!       Address_Clause_Checks.Append ((N, X, A, Y, Off));
     end Register_Address_Clause_Check;
  
     ------------------------
*************** package body Sem_Ch13 is
*** 17357,17365 ****
                    =>
                       null;
  
-                   when Aspect_Constructor =>
-                      null;
- 
                    when Aspect_Dynamic_Predicate
                       | Aspect_Ghost_Predicate
                       | Aspect_Predicate
--- 17342,17347 ----
*************** package body Sem_Ch13 is
*** 19125,19131 ****
                 --  Check for known value not multiple of alignment
  
                 if No (ACCR.Y) then
!                   if not Alignment_Checks_Suppressed (ACCR)
                      and then X_Alignment /= 0
                      and then ACCR.A mod X_Alignment /= 0
                    then
--- 19107,19113 ----
                 --  Check for known value not multiple of alignment
  
                 if No (ACCR.Y) then
!                   if Check_Address_Alignment (ACCR.N)
                      and then X_Alignment /= 0
                      and then ACCR.A mod X_Alignment /= 0
                    then
*************** package body Sem_Ch13 is
*** 19170,19176 ****
                 --  Note: we do not check the alignment if we gave a size
                 --  warning, since it would likely be redundant.
  
!                elsif not Alignment_Checks_Suppressed (ACCR)
                   and then Y_Alignment /= Uint_0
                   and then
                     (Y_Alignment < X_Alignment
--- 19152,19158 ----
                 --  Note: we do not check the alignment if we gave a size
                 --  warning, since it would likely be redundant.
  
!                elsif Check_Address_Alignment (ACCR.N)
                   and then Y_Alignment /= Uint_0
                   and then
                     (Y_Alignment < X_Alignment
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch3.adb gcc-16-20251109/gcc/ada/sem_ch3.adb
*** gcc-16-20251102/gcc/ada/sem_ch3.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch3.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch3 is
*** 5246,5251 ****
--- 5246,5260 ----
          and then Nkind (E) = N_Aggregate
        then
           Act_T := Etype (E);
+ 
+       elsif Needs_Construction (T)
+         and then not Has_Init_Expression (N)
+         and then not Has_Default_Constructor (T)
+         and then not Suppress_Initialization (Id)
+         and then Comes_From_Source (N)
+       then
+          Error_Msg_NE ("no default constructor for&",
+                        Object_Definition (N), T);
        end if;
  
        --  Check No_Wide_Characters restriction
*************** package body Sem_Ch3 is
*** 5944,5949 ****
--- 5953,5960 ----
                 Set_Scalar_Range         (Id, Scalar_Range       (T));
                 Set_Digits_Value         (Id, Digits_Value       (T));
                 Set_Is_Constrained       (Id, Is_Constrained     (T));
+                Set_Is_IEEE_Extended_Precision
+                  (Id, Is_IEEE_Extended_Precision (T));
  
                 --  If the floating point type has dimensions, these will be
                 --  inherited subsequently when Analyze_Dimensions is called.
*************** package body Sem_Ch3 is
*** 6134,6139 ****
--- 6145,6154 ----
                 Set_Is_Tagged_Type       (Id, Is_Tagged_Type        (T));
                 Set_Last_Entity          (Id, Last_Entity           (T));
  
+                if Is_Protected_Type (T) then
+                   Set_Uses_Lock_Free (Id, Uses_Lock_Free (T));
+                end if;
+ 
                 if Is_Tagged_Type (T) then
                    Set_No_Tagged_Streams_Pragma
                      (Id, No_Tagged_Streams_Pragma (T));
*************** package body Sem_Ch3 is
*** 8206,8215 ****
--- 8221,8234 ----
  
           Set_Digits_Value (Implicit_Base, Digits_Value (Parent_Base));
           Set_Float_Rep    (Implicit_Base, Float_Rep    (Parent_Base));
+          Set_Is_IEEE_Extended_Precision
+            (Implicit_Base, Is_IEEE_Extended_Precision (Parent_Base));
  
           if No_Constraint then
              Set_Digits_Value (Derived_Type, Digits_Value (Parent_Type));
           end if;
+          Set_Is_IEEE_Extended_Precision
+            (Derived_Type, Is_IEEE_Extended_Precision (Parent_Base));
  
        elsif Is_Fixed_Point_Type (Parent_Type) then
  
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch4.adb gcc-16-20251109/gcc/ada/sem_ch4.adb
*** gcc-16-20251102/gcc/ada/sem_ch4.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch4.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch4 is
*** 7147,7153 ****
                and then N = Prefix (Parent (N))
              then
                 Error_Msg_N -- CODEFIX
!                  ("\period should probably be semicolon", Parent (N));
              end if;
           end if;
  
--- 7147,7153 ----
                and then N = Prefix (Parent (N))
              then
                 Error_Msg_N -- CODEFIX
!                  ("\period is probably a typographical error", Parent (N));
              end if;
           end if;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch6.adb gcc-16-20251109/gcc/ada/sem_ch6.adb
*** gcc-16-20251102/gcc/ada/sem_ch6.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch6.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch6 is
*** 3843,3849 ****
        --  user entities, as internally generated entitities might still need
        --  to be expanded (e.g. those generated for types).
  
!       if Present (Ghost_Config.Ignored_Ghost_Region)
          and then Comes_From_Source (Body_Id)
        then
           Expander_Active := False;
--- 3843,3850 ----
        --  user entities, as internally generated entitities might still need
        --  to be expanded (e.g. those generated for types).
  
!       if not CodePeer_Mode
!         and then Present (Ghost_Config.Ignored_Ghost_Region)
          and then Comes_From_Source (Body_Id)
        then
           Expander_Active := False;
*************** package body Sem_Ch6 is
*** 5029,5035 ****
        end if;
  
     <<Leave>>
!       if Present (Ghost_Config.Ignored_Ghost_Region) then
           Expander_Active := Saved_EA;
        end if;
  
--- 5030,5038 ----
        end if;
  
     <<Leave>>
!       if not CodePeer_Mode
!         and then Present (Ghost_Config.Ignored_Ghost_Region)
!       then
           Expander_Active := Saved_EA;
        end if;
  
*************** package body Sem_Ch6 is
*** 5270,5279 ****
--- 5273,5367 ----
     --  both subprogram bodies and subprogram declarations (specs).
  
     function Analyze_Subprogram_Specification (N : Node_Id) return Entity_Id is
+       procedure Analyze_Direct_Attribute_Definition (Designator : Entity_Id);
+       --  This procedure checks whether the direct attribute definition for N
+       --  is correct for the given attribute name, and analyzes it.
+ 
        function Is_Invariant_Procedure_Or_Body (E : Entity_Id) return Boolean;
        --  Determine whether entity E denotes the spec or body of an invariant
        --  procedure.
  
+       -----------------------------------------
+       -- Analyze_Direct_Attribute_Definition --
+       -----------------------------------------
+ 
+       procedure Analyze_Direct_Attribute_Definition (Designator : Entity_Id) is
+          Att_N    : constant Node_Id := Original_Node (N);
+          Prefix_E : constant Entity_Id :=
+            Get_Name_Entity_Id (Chars (Prefix (Defining_Unit_Name (Att_N))));
+          Att_Name : constant Name_Id :=
+            Attribute_Name (Defining_Unit_Name (Att_N));
+       begin
+          pragma Assert (N /= Att_N);
+ 
+          if not Is_Direct_Attribute_Definition_Name (Att_Name) then
+             Error_Msg_Name_1 := Att_Name;
+             Error_Msg_N
+               ("direct definition syntax not supported for attribute%",
+                Designator);
+          end if;
+ 
+          --  Handle each kind of attribute separately
+ 
+          case Att_Name is
+ 
+             when Name_Constructor =>
+                Error_Msg_Name_1 := Att_Name;
+ 
+                --  No further action required in a subprogram body
+ 
+                if Parent_Kind (N) not in N_Subprogram_Declaration then
+                   return;
+ 
+                elsif No (Prefix_E) or else not Is_Type (Prefix_E) then
+                   Error_Msg_N
+                     ("prefix& of attribute% must be a type",
+                      Prefix (Defining_Unit_Name (Att_N)));
+ 
+                elsif Ekind (Designator) /= E_Procedure then
+                   Error_Msg_N
+                     ("attribute% can only be specified to a procedure", N);
+ 
+                elsif No (First_Formal (Designator))
+                  or else Etype (First_Formal (Designator)) /= Prefix_E
+                  or else Ekind (First_Formal (Designator))
+                          /= E_In_Out_Parameter
+                then
+                   declare
+                      Problem : constant Source_Ptr :=
+                        (if No (First_Formal (Designator))
+                         then Sloc (N)
+                         else Sloc (First_Formal (Designator)));
+                   begin
+                      Error_Msg_Node_1 := Defining_Unit_Name (Att_N);
+                      Error_Msg_Node_2 := Prefix_E;
+                      Error_Msg
+                        ("& must have a first IN OUT formal of type&", Problem);
+                   end;
+ 
+                elsif Is_Frozen (Prefix_E)
+                  or else Current_Scope /= Scope (Prefix_E)
+                then
+                   Error_Msg_Sloc := Sloc (Freeze_Node (Prefix_E));
+                   Error_Msg_N
+                     ("& must be defined before freezing#", Designator);
+ 
+                elsif Parent_Kind (Enclosing_Package_Or_Subprogram (Designator))
+                        /= N_Package_Specification
+                then
+                   Error_Msg_N
+                     ("& is required to be a primitive operation", Designator);
+ 
+                else
+                   Set_Needs_Construction (Prefix_E);
+                end if;
+ 
+             when others =>
+                null;
+ 
+          end case;
+       end Analyze_Direct_Attribute_Definition;
+ 
        ------------------------------------
        -- Is_Invariant_Procedure_Or_Body --
        ------------------------------------
*************** package body Sem_Ch6 is
*** 5416,5504 ****
  
           End_Scope;
  
-          --  Register the subprogram in a Constructor_List when it is a valid
-          --  constructor.
- 
-          if All_Extensions_Allowed
-            and then Present (First_Formal (Designator))
-          then
- 
-             declare
-                First_Form_Type : constant Entity_Id :=
-                  Etype (First_Formal (Designator));
- 
-                Construct : Elmt_Id;
-             begin
-                --  Valid constructors have a "controlling" formal of a type
-                --  with the Constructor aspect specified. Additionally, the
-                --  subprogram name must match value described by the aspect.
- 
-                --  Additionally, constructor declarations must exist within the
-                --  same scope as the type declaration and before the type is
-                --  frozen.
- 
-                --  For example:
-                --
-                --     type Foo is null record with Constructor => Bar;
-                --
-                --     procedure Bar (Self : in out Foo);
-                --
- 
-                if Present (Constructor_Name (First_Form_Type))
-                  and then Current_Scope = Scope (First_Form_Type)
-                  and then Chars (Constructor_Name (First_Form_Type))
-                             = Chars (Designator)
-                  and then Ekind (Designator) = E_Procedure
-                  and then Nkind (Parent (N)) = N_Subprogram_Declaration
-                then
-                   --  If the constructor list is empty than we don't have to
-                   --  look for duplicates - we simply create the list and
-                   --  add it.
- 
-                   if No (Constructor_List (First_Form_Type)) then
-                      Set_Constructor_List
-                        (First_Form_Type, New_Elmt_List (Designator));
- 
-                   --  Otherwise, we need to check the constructor hasen't
-                   --  already been added (e.g. a specification and body) and
-                   --  that there isn't a constructor with the same number of
-                   --  type of formals.
- 
-                   --  NOTE: The Constructor_List is sorted by the number of
-                   --  parameters.
- 
-                   else
-                      Construct := First_Elmt
-                                     (Constructor_List (First_Form_Type));
- 
-                      --  Skip over constructors with less than the number of
-                      --  parameters than Designator ???
- 
-                      --  Loop through the constructors looking for ones which
-                      --  "match."
- 
-                      Outter : loop
- 
-                         --  When we are at the end of the constructor list we
-                         --  know there are no matches, so it is safe to add.
- 
-                         if No (Construct) then
-                            Append_Elmt
-                              (Designator,
-                               Constructor_List (First_Form_Type));
-                            exit Outter;
-                         end if;
- 
-                         --  Loop through the formals and check the formals
-                         --  match on type ???
- 
-                         Next_Elmt (Construct);
-                      end loop Outter;
-                   end if;
-                end if;
-             end;
-          end if;
- 
        --  The subprogram scope is pushed and popped around the processing of
        --  the return type for consistency with call above to Process_Formals
        --  (which itself can call Analyze_Return_Type), and to ensure that any
--- 5504,5509 ----
*************** package body Sem_Ch6 is
*** 5511,5516 ****
--- 5516,5527 ----
           End_Scope;
        end if;
  
+       --  Handle subprogram specification directly referencing an attribute
+ 
+       if Is_Direct_Attribute_Subp_Spec (N) then
+          Analyze_Direct_Attribute_Definition (Designator);
+       end if;
+ 
        --  Function case
  
        if Nkind (N) = N_Function_Specification then
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch7.adb gcc-16-20251109/gcc/ada/sem_ch7.adb
*** gcc-16-20251102/gcc/ada/sem_ch7.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch7.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch7 is
*** 835,841 ****
        --  user entities, as internally generated entities might still need
        --  to be expanded (e.g. those generated for types).
  
!       if Present (Ghost_Config.Ignored_Ghost_Region)
          and then Comes_From_Source (Body_Id)
        then
           Expander_Active := False;
--- 835,842 ----
        --  user entities, as internally generated entities might still need
        --  to be expanded (e.g. those generated for types).
  
!       if not CodePeer_Mode
!         and then Present (Ghost_Config.Ignored_Ghost_Region)
          and then Comes_From_Source (Body_Id)
        then
           Expander_Active := False;
*************** package body Sem_Ch7 is
*** 1148,1154 ****
           end if;
        end if;
  
!       if Present (Ghost_Config.Ignored_Ghost_Region) then
           Expander_Active := Saved_EA;
        end if;
  
--- 1149,1157 ----
           end if;
        end if;
  
!       if not CodePeer_Mode and then
!         Present (Ghost_Config.Ignored_Ghost_Region)
!       then
           Expander_Active := Saved_EA;
        end if;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_ch8.adb gcc-16-20251109/gcc/ada/sem_ch8.adb
*** gcc-16-20251102/gcc/ada/sem_ch8.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_ch8.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Ch8 is
*** 136,142 ****
     --  the order of their corresponding scopes on the scope stack. For
     --  example, if package P and the enclosing scope both contain entities
     --  named E, then when compiling the package body the chain for E will
!    --  hold the global entity first,  and the local one (corresponding to
     --  the current inner scope) next. As a result, name resolution routines
     --  do not assume any relative ordering of the homonym chains, either
     --  for scope nesting or to order of appearance of context clauses.
--- 136,142 ----
     --  the order of their corresponding scopes on the scope stack. For
     --  example, if package P and the enclosing scope both contain entities
     --  named E, then when compiling the package body the chain for E will
!    --  hold the global entity first, and the local one (corresponding to
     --  the current inner scope) next. As a result, name resolution routines
     --  do not assume any relative ordering of the homonym chains, either
     --  for scope nesting or to order of appearance of context clauses.
*************** package body Sem_Ch8 is
*** 207,213 ****
     --  a private or incomplete type declaration, or a protected type speci-
     --  fication) and re-chained when compiling the second view.
  
!    --  In the case of operators,  we do not make operators on derived types
     --  explicit. As a result, the notation P."+" may denote either a user-
     --  defined function with name "+", or else an implicit declaration of the
     --  operator "+" in package P. The resolution of expanded names always
--- 207,213 ----
     --  a private or incomplete type declaration, or a protected type speci-
     --  fication) and re-chained when compiling the second view.
  
!    --  In the case of operators, we do not make operators on derived types
     --  explicit. As a result, the notation P."+" may denote either a user-
     --  defined function with name "+", or else an implicit declaration of the
     --  operator "+" in package P. The resolution of expanded names always
*************** package body Sem_Ch8 is
*** 1873,1885 ****
        New_S   : Entity_Id;
        Is_Body : Boolean)
     is
!       Nam       : constant Node_Id := Name (N);
!       Sel       : constant Node_Id := Selector_Name (Nam);
!       Is_Actual : constant Boolean := Present (Corresponding_Formal_Spec (N));
!       Old_S     : Entity_Id;
  
     begin
!       if Entity (Sel) = Any_Id then
  
           --  Selector is undefined on prefix. Error emitted already
  
--- 1873,1885 ----
        New_S   : Entity_Id;
        Is_Body : Boolean)
     is
!       Nam : constant Node_Id := Name (N);
!       P   : constant Node_Id := Prefix (Nam);
! 
!       Old_S : Entity_Id;
  
     begin
!       if Entity (Selector_Name (Nam)) = Any_Id then
  
           --  Selector is undefined on prefix. Error emitted already
  
*************** package body Sem_Ch8 is
*** 1892,1898 ****
        Old_S := Find_Renamed_Entity (N, Selector_Name (Nam), New_S);
  
        if Old_S = Any_Id then
!          Error_Msg_N ("no subprogram or entry matches specification",  N);
        else
           if Is_Body then
              Check_Subtype_Conformant (New_S, Old_S, N);
--- 1892,1898 ----
        Old_S := Find_Renamed_Entity (N, Selector_Name (Nam), New_S);
  
        if Old_S = Any_Id then
!          Error_Msg_N ("no subprogram or entry matches specification", N);
        else
           if Is_Body then
              Check_Subtype_Conformant (New_S, Old_S, N);
*************** package body Sem_Ch8 is
*** 1910,1919 ****
           --  The prefix can be an arbitrary expression that yields a task or
           --  protected object, so it must be resolved.
  
!          if Is_Access_Type (Etype (Prefix (Nam))) then
!             Insert_Explicit_Dereference (Prefix (Nam));
           end if;
!          Resolve (Prefix (Nam), Scope (Old_S));
        end if;
  
        Set_Convention (New_S, Convention (Old_S));
--- 1910,1920 ----
           --  The prefix can be an arbitrary expression that yields a task or
           --  protected object, so it must be resolved.
  
!          if Is_Access_Type (Etype (P)) then
!             Insert_Explicit_Dereference (P);
           end if;
! 
!          Resolve (P, Scope (Old_S));
        end if;
  
        Set_Convention (New_S, Convention (Old_S));
*************** package body Sem_Ch8 is
*** 1924,1932 ****
  
        if Is_Protected_Type (Scope (Old_S))
          and then Ekind (New_S) = E_Procedure
!         and then not Is_Variable (Prefix (Nam))
        then
!          if Is_Actual then
              Error_Msg_N
                ("target object of protected operation used as actual for "
                 & "formal procedure must be a variable", Nam);
--- 1925,1933 ----
  
        if Is_Protected_Type (Scope (Old_S))
          and then Ekind (New_S) = E_Procedure
!         and then not Is_Variable (P)
        then
!          if Present (Corresponding_Formal_Spec (N)) then
              Error_Msg_N
                ("target object of protected operation used as actual for "
                 & "formal procedure must be a variable", Nam);
*************** package body Sem_Ch8 is
*** 1951,1958 ****
        New_S   : Entity_Id;
        Is_Body : Boolean)
     is
!       Nam   : constant Node_Id := Name (N);
!       P     : constant Node_Id := Prefix (Nam);
        Old_S : Entity_Id;
  
     begin
--- 1952,1960 ----
        New_S   : Entity_Id;
        Is_Body : Boolean)
     is
!       Nam : constant Node_Id := Name (N);
!       P   : constant Node_Id := Prefix (Nam);
! 
        Old_S : Entity_Id;
  
     begin
*************** package body Sem_Ch8 is
*** 1995,2007 ****
        New_S   : Entity_Id;
        Is_Body : Boolean)
     is
!       Old_S : Entity_Id;
!       Nam   : Entity_Id;
  
        function Conforms
          (Subp : Entity_Id;
           Ctyp : Conformance_Type) return Boolean;
!       --  Verify that the signatures of the renamed entity and the new entity
        --  match. The first formal of the renamed entity is skipped because it
        --  is the target object in any subsequent call.
  
--- 1997,2009 ----
        New_S   : Entity_Id;
        Is_Body : Boolean)
     is
!       Nam : constant Node_Id := Name (N);
!       P   : constant Node_Id := Prefix (Nam);
  
        function Conforms
          (Subp : Entity_Id;
           Ctyp : Conformance_Type) return Boolean;
!       --  Verify that the profiles of the renamed entity and the new entity
        --  match. The first formal of the renamed entity is skipped because it
        --  is the target object in any subsequent call.
  
*************** package body Sem_Ch8 is
*** 2038,2051 ****
              Next_Formal (Old_F);
           end loop;
  
!          return True;
        end Conforms;
  
     --  Start of processing for Analyze_Renamed_Primitive_Operation
  
     begin
!       if not Is_Overloaded (Selector_Name (Name (N))) then
!          Old_S := Entity (Selector_Name (Name (N)));
  
           if not Conforms (Old_S, Type_Conformant) then
              Old_S := Any_Id;
--- 2040,2055 ----
              Next_Formal (Old_F);
           end loop;
  
!          return No (Old_F) and then No (New_F);
        end Conforms;
  
+       Old_S : Entity_Id;
+ 
     --  Start of processing for Analyze_Renamed_Primitive_Operation
  
     begin
!       if not Is_Overloaded (Selector_Name (Nam)) then
!          Old_S := Entity (Selector_Name (Nam));
  
           if not Conforms (Old_S, Type_Conformant) then
              Old_S := Any_Id;
*************** package body Sem_Ch8 is
*** 2060,2066 ****
  
           begin
              Old_S := Any_Id;
!             Get_First_Interp (Selector_Name (Name (N)), Ind, It);
  
              while Present (It.Nam) loop
                 if Conforms (It.Nam, Type_Conformant) then
--- 2064,2070 ----
  
           begin
              Old_S := Any_Id;
!             Get_First_Interp (Selector_Name (Nam), Ind, It);
  
              while Present (It.Nam) loop
                 if Conforms (It.Nam, Type_Conformant) then
*************** package body Sem_Ch8 is
*** 2073,2079 ****
        end if;
  
        if Old_S = Any_Id then
!          Error_Msg_N ("no subprogram or entry matches specification",  N);
  
        else
           if Is_Body then
--- 2077,2083 ----
        end if;
  
        if Old_S = Any_Id then
!          Error_Msg_N ("no subprogram or entry matches specification", N);
  
        else
           if Is_Body then
*************** package body Sem_Ch8 is
*** 2094,2113 ****
              --  AI12-0204: The prefix of a prefixed view that is renamed or
              --  passed as a formal subprogram must be renamable as an object.
  
!             Nam := Prefix (Name (N));
! 
!             if Is_Object_Reference (Nam) then
!                if Is_Dependent_Component_Of_Mutable_Object (Nam) then
                    Error_Msg_N
                      ("illegal renaming of discriminant-dependent component",
!                      Nam);
!                elsif Depends_On_Mutably_Tagged_Ext_Comp (Nam) then
                    Error_Msg_N
                      ("illegal renaming of mutably tagged dependent component",
!                      Nam);
                 end if;
              else
!                Error_Msg_N ("expect object name in renaming", Nam);
              end if;
  
              --  Enforce the rule given in (RM 6.3.1 (10.1/2)): a prefixed
--- 2098,2115 ----
              --  AI12-0204: The prefix of a prefixed view that is renamed or
              --  passed as a formal subprogram must be renamable as an object.
  
!             if Is_Object_Reference (P) then
!                if Is_Dependent_Component_Of_Mutable_Object (P) then
                    Error_Msg_N
                      ("illegal renaming of discriminant-dependent component",
!                      P);
!                elsif Depends_On_Mutably_Tagged_Ext_Comp (P) then
                    Error_Msg_N
                      ("illegal renaming of mutably tagged dependent component",
!                      P);
                 end if;
              else
!                Error_Msg_N ("expect object name in renaming", P);
              end if;
  
              --  Enforce the rule given in (RM 6.3.1 (10.1/2)): a prefixed
*************** package body Sem_Ch8 is
*** 2119,2130 ****
              Set_Convention (New_S, Convention_Intrinsic);
           end if;
  
!          --  Inherit_Renamed_Profile (New_S, Old_S);
  
           --  The prefix can be an arbitrary expression that yields an
           --  object, so it must be resolved.
  
!          Resolve (Prefix (Name (N)));
        end if;
     end Analyze_Renamed_Primitive_Operation;
  
--- 2121,2136 ----
              Set_Convention (New_S, Convention_Intrinsic);
           end if;
  
!          Set_Entity (Selector_Name (Nam), Old_S);
  
           --  The prefix can be an arbitrary expression that yields an
           --  object, so it must be resolved.
  
!          if Is_Access_Type (Etype (P)) then
!             Insert_Explicit_Dereference (P);
!          end if;
! 
!          Resolve (P);
        end if;
     end Analyze_Renamed_Primitive_Operation;
  
*************** package body Sem_Ch8 is
*** 3848,3854 ****
           elsif Ekind (Old_S) /= E_Operator then
  
              --  If this a defaulted subprogram for a class-wide actual there is
!             --  no check for mode conformance,  given that the signatures don't
              --  match (the source mentions T but the actual mentions T'Class).
  
              if CW_Actual then
--- 3854,3860 ----
           elsif Ekind (Old_S) /= E_Operator then
  
              --  If this a defaulted subprogram for a class-wide actual there is
!             --  no check for mode conformance, given that the signatures don't
              --  match (the source mentions T but the actual mentions T'Class).
  
              if CW_Actual then
*************** package body Sem_Ch8 is
*** 5213,5219 ****
           --  An entity in the current scope is not necessarily the first one
           --  on its homonym chain. Find its predecessor if any,
           --  If it is an internal entity, it will not be in the visibility
!          --  chain altogether,  and there is nothing to unchain.
  
           if Id /= Current_Entity (Id) then
              Prev := Current_Entity (Id);
--- 5219,5225 ----
           --  An entity in the current scope is not necessarily the first one
           --  on its homonym chain. Find its predecessor if any,
           --  If it is an internal entity, it will not be in the visibility
!          --  chain altogether, and there is nothing to unchain.
  
           if Id /= Current_Entity (Id) then
              Prev := Current_Entity (Id);
*************** package body Sem_Ch8 is
*** 5248,5254 ****
              Set_Name_Entity_Id (Chars (Id), Outer);
  
           elsif Scope (Prev) /= Scope (Id) then
!             Set_Homonym (Prev,  Outer);
           end if;
  
           <<Next_Ent>>
--- 5254,5260 ----
              Set_Name_Entity_Id (Chars (Id), Outer);
  
           elsif Scope (Prev) /= Scope (Id) then
!             Set_Homonym (Prev, Outer);
           end if;
  
           <<Next_Ent>>
*************** package body Sem_Ch8 is
*** 8504,8595 ****
                 end;
              end if;
  
              if In_Open_Scopes (P_Name) then
                 Set_Entity (P, P_Name);
                 Set_Is_Overloaded (P, False);
                 Find_Expanded_Name (N);
  
              else
!                --  If no interpretation as an expanded name is possible, it
!                --  must be a selected component of a record returned by a
!                --  function call. Reformat prefix as a function call, the rest
!                --  is done by type resolution.
  
!                --  Error if the prefix is procedure or entry, as is P.X
  
!                if Ekind (P_Name) /= E_Function
!                  and then
!                    (not Is_Overloaded (P)
!                      or else Nkind (Parent (N)) = N_Procedure_Call_Statement)
!                then
!                   --  Prefix may mention a package that is hidden by a local
!                   --  declaration: let the user know. Scan the full homonym
!                   --  chain, the candidate package may be anywhere on it.
  
!                   if Present (Homonym (Current_Entity (P_Name))) then
!                      P_Name := Current_Entity (P_Name);
  
!                      while Present (P_Name) loop
!                         exit when Ekind (P_Name) = E_Package;
!                         P_Name := Homonym (P_Name);
                       end loop;
  
!                      if Present (P_Name) then
!                         if not Is_Reference_In_Subunit then
!                            Error_Msg_Sloc := Sloc (Entity (Prefix (N)));
!                            Error_Msg_NE
!                              ("package& is hidden by declaration#", N, P_Name);
!                         end if;
  
!                         Set_Entity (Prefix (N), P_Name);
!                         Find_Expanded_Name (N);
!                         return;
  
!                      else
!                         P_Name := Entity (Prefix (N));
!                      end if;
!                   end if;
  
!                   Error_Msg_NE
!                     ("invalid prefix in selected component&", N, P_Name);
!                   Change_Selected_Component_To_Expanded_Name (N);
!                   Set_Entity (N, Any_Id);
!                   Set_Etype (N, Any_Type);
  
!                --  Here we have a function call, so do the reformatting
  
!                else
!                   Nam := New_Copy (P);
!                   Save_Interps (P, Nam);
  
!                   --  We use Replace here because this is one of those cases
!                   --  where the parser has missclassified the node, and we fix
!                   --  things up and then do the semantic analysis on the fixed
!                   --  up node. Normally we do this using one of the Sinfo.CN
!                   --  routines, but this is too tricky for that.
  
!                   --  Note that using Rewrite would be wrong, because we would
!                   --  have a tree where the original node is unanalyzed.
  
!                   Replace (P,
!                     Make_Function_Call (Sloc (P), Name => Nam));
  
!                   --  Now analyze the reformatted node
  
!                   Analyze_Call (P);
  
!                   --  If the prefix is illegal after this transformation, there
!                   --  may be visibility errors on the prefix. The safest is to
!                   --  treat the selected component as an error.
  
!                   if Error_Posted (P) then
!                      Set_Etype (N, Any_Type);
!                      return;
  
!                   else
!                      Analyze_Selected_Component (N);
                    end if;
!                end if;
              end if;
  
           --  Remaining cases generate various error messages
--- 8510,8613 ----
                 end;
              end if;
  
+             --  Case of the enclosing construct
+ 
              if In_Open_Scopes (P_Name) then
                 Set_Entity (P, P_Name);
                 Set_Is_Overloaded (P, False);
                 Find_Expanded_Name (N);
  
+             --  If no interpretation as an expanded name is possible, then it
+             --  must be a selected component of a record returned by a function
+             --  call. Reformat the prefix as a function call and analyze it.
+ 
              else
!                declare
!                   procedure Diagnose_Call;
!                   --  Try and give useful diagnostics on error
  
!                   -------------------
!                   -- Diagnose_Call --
!                   -------------------
  
!                   procedure Diagnose_Call is
!                      Ent : Entity_Id;
  
!                   begin
!                      --  Prefix may mention a package that is hidden by a local
!                      --  declaration: let the user know. Scan the full homonym
!                      --  chain, the candidate package may be anywhere on it.
  
!                      Ent := Current_Entity (P_Name);
! 
!                      while Present (Ent) loop
!                         exit when Ekind (Ent) = E_Package;
!                         Ent := Homonym (Ent);
                       end loop;
  
!                      if Present (Ent) and then not Is_Reference_In_Subunit then
!                         Error_Msg_Sloc := Sloc (P_Name);
!                         Error_Msg_NE
!                           ("\package& is hidden by declaration#", N, Ent);
!                      end if;
  
!                      --  Format node as expanded name, to avoid cascaded errors
  
!                      Change_Selected_Component_To_Expanded_Name (N);
!                      Set_Entity (N, Any_Id);
!                      Set_Etype (N, Any_Type);
!                   end Diagnose_Call;
  
!                begin
!                   --  Error if the prefix is procedure or entry, as in P.X
  
!                   if Ekind (P_Name) /= E_Function
!                     and then not Is_Overloaded (P)
!                   then
!                      Error_Msg_NE
!                        ("invalid prefix& in selected component", N, P_Name);
!                      Diagnose_Call;
!                      return;
  
!                   --  Here we may have a function call, so do the reformatting
  
!                   else
!                      Nam := New_Copy (P);
!                      Save_Interps (P, Nam);
  
!                      --  We use Replace here because this is one of those cases
!                      --  where the parser has misclassified the node and we fix
!                      --  things up and then do semantic analysis on the fixed
!                      --  up node. Normally we do this using one of the Sinfo.CN
!                      --  routines, but this is too tricky for that.
  
!                      --  Note that using Rewrite would be wrong, since we would
!                      --  have a tree where the original node is unanalyzed.
  
!                      Replace (P, Make_Function_Call (Sloc (P), Name => Nam));
  
!                      --  Now analyze the reformatted node
  
!                      Analyze_Call (P);
  
!                      --  If the prefix is illegal after this transformation,
!                      --  there may be a visibility error on the prefix. The
!                      --  safest is to treat the selected component as an error.
  
!                      if Error_Posted (P) then
!                         Diagnose_Call;
!                         return;
! 
!                      else
!                         Analyze_Selected_Component (N);
! 
!                         if Error_Posted (N) then
!                            Diagnose_Call;
!                            return;
!                         end if;
!                      end if;
                    end if;
!                end;
              end if;
  
           --  Remaining cases generate various error messages
*************** package body Sem_Ch8 is
*** 9948,9956 ****
          and then Scope (S) /= Standard_Standard
          and then not Is_Child_Unit (S)
        then
!          if Nkind (E) not in N_Entity then
!             return;
!          end if;
  
           --  Copy categorization flags from Scope (S) to S, this is not done
           --  when Scope (S) is Standard_Standard since propagation is from
--- 9966,9972 ----
          and then Scope (S) /= Standard_Standard
          and then not Is_Child_Unit (S)
        then
!          pragma Assert (Nkind (E) in N_Entity);
  
           --  Copy categorization flags from Scope (S) to S, this is not done
           --  when Scope (S) is Standard_Standard since propagation is from
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_disp.adb gcc-16-20251109/gcc/ada/sem_disp.adb
*** gcc-16-20251102/gcc/ada/sem_disp.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_disp.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Disp is
*** 586,592 ****
        Actual                 : Node_Id;
        Formal                 : Entity_Id;
        Control                : Node_Id := Empty;
-       Func                   : Entity_Id;
        Subp_Entity            : constant Entity_Id := Entity (Name (N));
  
        Indeterm_Ctrl_Type : Entity_Id := Empty;
--- 586,591 ----
*************** package body Sem_Disp is
*** 1098,1152 ****
              end loop;
  
              Check_Dispatching_Context (N);
- 
-          elsif Nkind (N) /= N_Function_Call then
- 
-             --  The call is not dispatching, so check that there aren't any
-             --  tag-indeterminate abstract calls left among its actuals.
- 
-             Actual := First_Actual (N);
-             while Present (Actual) loop
-                if Is_Tag_Indeterminate (Actual) then
- 
-                   --  Function call case
- 
-                   if Nkind (Original_Node (Actual)) = N_Function_Call then
-                      Func := Entity (Name (Original_Node (Actual)));
- 
-                   --  If the actual is an attribute then it can't be abstract
-                   --  (the only current case of a tag-indeterminate attribute
-                   --  is the stream Input attribute).
- 
-                   elsif Nkind (Original_Node (Actual)) = N_Attribute_Reference
-                   then
-                      Func := Empty;
- 
-                   --  Ditto if it is an explicit dereference
- 
-                   elsif Nkind (Original_Node (Actual)) = N_Explicit_Dereference
-                   then
-                      Func := Empty;
- 
-                   --  Only other possibility is a qualified expression whose
-                   --  constituent expression is itself a call.
- 
-                   else
-                      Func :=
-                        Entity (Name (Original_Node
-                          (Expression (Original_Node (Actual)))));
-                   end if;
- 
-                   if Present (Func) and then Is_Abstract_Subprogram (Func) then
-                      Error_Msg_N
-                        ("call to abstract function must be dispatching",
-                         Actual);
-                   end if;
-                end if;
- 
-                Next_Actual (Actual);
-             end loop;
- 
-             Check_Dispatching_Context (N);
  
           elsif Nkind (Parent (N)) in N_Subexpr then
              Check_Dispatching_Context (N);
--- 1097,1102 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_eval.adb gcc-16-20251109/gcc/ada/sem_eval.adb
*** gcc-16-20251102/gcc/ada/sem_eval.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_eval.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Eval is
*** 6837,6842 ****
--- 6837,6851 ----
           then
              return True;
  
+          --  Handle class-wide subtypes, which never have discriminants, while
+          --  class-wide types may have them (but they are always unknown).
+ 
+          elsif Ekind (T2) = E_Class_Wide_Subtype and then Etype (T2) = T1 then
+             return True;
+ 
+          elsif Ekind (T1) = E_Class_Wide_Subtype and then Etype (T1) = T2 then
+             return True;
+ 
           --  Because of view exchanges in multiple instantiations, conformance
           --  checking might try to match a partial view of a type with no
           --  discriminants with a full view that has defaulted discriminants.
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_prag.adb gcc-16-20251109/gcc/ada/sem_prag.adb
*** gcc-16-20251102/gcc/ada/sem_prag.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_prag.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Prag is
*** 16449,16456 ****
                or else not Is_Access_Type (Entity (Arg))
              then
                 Error_Pragma_Arg ("pragma% requires access type", Arg1);
-             else
-                Set_Has_Pragma_Controlled (Base_Type (Entity (Arg)));
              end if;
           end Controlled;
  
--- 16449,16454 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_res.adb gcc-16-20251109/gcc/ada/sem_res.adb
*** gcc-16-20251102/gcc/ada/sem_res.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_res.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Res is
*** 262,270 ****
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean) return Node_Kind;
!    --  Utility to map the name of an operator into the corresponding Node. Used
!    --  by other node rewriting procedures.
  
     procedure Resolve_Actuals (N : Node_Id; Nam : Entity_Id);
     --  Resolve actuals of call, and add default expressions for missing ones.
--- 262,269 ----
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean) return N_Op;
!    --  Map the name of an operator into the corresponding Node_Kind
  
     procedure Resolve_Actuals (N : Node_Id; Nam : Entity_Id);
     --  Resolve actuals of call, and add default expressions for missing ones.
*************** package body Sem_Res is
*** 659,664 ****
--- 658,681 ----
        P    : Node_Id;
        D    : Node_Id;
  
+       procedure Check_Legality_In_Constraint (Alone : Boolean);
+       --  RM 3.8(12/3): Check that the discriminant mentioned in a constraint
+       --  appears alone as a direct name.
+ 
+       ----------------------------------
+       -- Check_Legality_In_Constraint --
+       ----------------------------------
+ 
+       procedure Check_Legality_In_Constraint (Alone : Boolean) is
+       begin
+          if not Alone then
+             Error_Msg_N ("discriminant in constraint must appear alone", N);
+ 
+          elsif Nkind (N) = N_Expanded_Name and then Comes_From_Source (N) then
+             Error_Msg_N ("discriminant must appear alone as a direct name", N);
+          end if;
+       end Check_Legality_In_Constraint;
+ 
     begin
        --  Any use in a spec-expression is legal
  
*************** package body Sem_Res is
*** 695,713 ****
              --  processing for records). See Sem_Ch3.Build_Derived_Record_Type
              --  for more info.
  
!             if Ekind (Current_Scope) = E_Record_Type
!               and then Scope (Disc) = Current_Scope
!               and then not
!                 (Nkind (Parent (P)) = N_Subtype_Indication
!                   and then
!                     Nkind (Parent (Parent (P))) in N_Component_Definition
!                                                  | N_Subtype_Declaration
!                   and then Paren_Count (N) = 0)
!             then
!                Error_Msg_N
!                  ("discriminant must appear alone in component constraint", N);
!                return;
!             end if;
  
              --   Detect a common error:
  
--- 712,722 ----
              --  processing for records). See Sem_Ch3.Build_Derived_Record_Type
              --  for more info.
  
!             Check_Legality_In_Constraint
!               (Nkind (Parent (P)) = N_Subtype_Indication
!                 and then Nkind (Parent (Parent (P))) in N_Component_Definition
!                                                       | N_Subtype_Declaration
!                 and then Paren_Count (N) = 0);
  
              --   Detect a common error:
  
*************** package body Sem_Res is
*** 818,835 ****
        elsif Nkind (PN) in N_Index_Or_Discriminant_Constraint
                          | N_Discriminant_Association
        then
!          if Paren_Count (N) > 0 then
!             Error_Msg_N
!               ("discriminant in constraint must appear alone",  N);
! 
!          elsif Nkind (N) = N_Expanded_Name
!            and then Comes_From_Source (N)
!          then
!             Error_Msg_N
!               ("discriminant must appear alone as a direct name", N);
!          end if;
! 
!          return;
  
        --  Otherwise, context is an expression. It should not be within (i.e. a
        --  subexpression of) a constraint for a component.
--- 827,833 ----
        elsif Nkind (PN) in N_Index_Or_Discriminant_Constraint
                          | N_Discriminant_Association
        then
!          Check_Legality_In_Constraint (Paren_Count (N) = 0);
  
        --  Otherwise, context is an expression. It should not be within (i.e. a
        --  subexpression of) a constraint for a component.
*************** package body Sem_Res is
*** 864,871 ****
             or else Nkind (P) = N_Entry_Declaration
             or else Nkind (D) = N_Defining_Identifier
           then
!             Error_Msg_N
!               ("discriminant in constraint must appear alone",  N);
           end if;
        end if;
     end Check_Discriminant_Use;
--- 862,868 ----
             or else Nkind (P) = N_Entry_Declaration
             or else Nkind (D) = N_Defining_Identifier
           then
!             Check_Legality_In_Constraint (False);
           end if;
        end if;
     end Check_Discriminant_Use;
*************** package body Sem_Res is
*** 1986,1992 ****
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean) return Node_Kind
     is
        Kind : Node_Kind;
  
--- 1983,1989 ----
  
     function Operator_Kind
       (Op_Name   : Name_Id;
!       Is_Binary : Boolean) return N_Op
     is
        Kind : Node_Kind;
  
*************** package body Sem_Res is
*** 10812,10818 ****
          and then Is_Character_Type (Component_Type (Typ))
        then
           Set_String_Literal_Subtype (Op1, Typ);
!          Set_String_Literal_Subtype (Op2, Typ);
        end if;
     end Resolve_Op_Concat_Rest;
  
--- 10809,10820 ----
          and then Is_Character_Type (Component_Type (Typ))
        then
           Set_String_Literal_Subtype (Op1, Typ);
! 
!          --  See Resolve_String_Literal for the asymmetry
! 
!          if Ekind (Etype (Op2)) /= E_String_Literal_Subtype then
!             Set_String_Literal_Subtype (Op2, Typ);
!          end if;
        end if;
     end Resolve_Op_Concat_Rest;
  
*************** package body Sem_Res is
*** 12032,12042 ****
     begin
        --  For a string appearing in a concatenation, defer creation of the
        --  string_literal_subtype until the end of the resolution of the
!       --  concatenation, because the literal may be constant-folded away. This
!       --  is a useful optimization for long concatenation expressions.
  
        --  If the string is an aggregate built for a single character (which
!       --  happens in a non-static context) or a is null string to which special
        --  checks may apply, we build the subtype. Wide strings must also get a
        --  string subtype if they come from a one character aggregate. Strings
        --  generated by attributes might be static, but it is often hard to
--- 12034,12047 ----
     begin
        --  For a string appearing in a concatenation, defer creation of the
        --  string_literal_subtype until the end of the resolution of the
!       --  concatenation, because the literal may be constant-folded away.
!       --  This is a useful optimization for long concatenation expressions,
!       --  but it cannot be done if the string is the right operand and the
!       --  left operand may be null, because 4.5.3(5) says that the result is
!       --  the right operand and, in particular, has its original subtype.
  
        --  If the string is an aggregate built for a single character (which
!       --  happens in a non-static context) or is a null string to which special
        --  checks may apply, we build the subtype. Wide strings must also get a
        --  string subtype if they come from a one character aggregate. Strings
        --  generated by attributes might be static, but it is often hard to
*************** package body Sem_Res is
*** 12049,12054 ****
--- 12054,12064 ----
            or else Nkind (Parent (N)) /= N_Op_Concat
            or else (N /= Left_Opnd (Parent (N))
                      and then N /= Right_Opnd (Parent (N)))
+           or else (N = Right_Opnd (Parent (N))
+                     and then
+                       (Nkind (Left_Opnd (Parent (N))) /= N_String_Literal
+                         or else
+                           String_Length (Strval (Left_Opnd (Parent (N)))) = 0))
            or else ((Typ = Standard_Wide_String
                        or else Typ = Standard_Wide_Wide_String)
                      and then Nkind (Original_Node (N)) /= N_String_Literal);
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_util.adb gcc-16-20251109/gcc/ada/sem_util.adb
*** gcc-16-20251102/gcc/ada/sem_util.adb	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_util.adb	Sun Nov  9 22:32:45 2025
*************** package body Sem_Util is
*** 6332,6337 ****
--- 6332,6357 ----
     end Conditional_Delay;
  
     --------------------------------------
+    -- Direct_Attribute_Definition_Name --
+    --------------------------------------
+ 
+    function Direct_Attribute_Definition_Name
+      (Prefix : Entity_Id; Att_Name : Name_Id) return Name_Id is
+    begin
+       if Nkind (Prefix) = N_Attribute_Reference then
+          Error_Msg_N ("attribute streams not supported in "
+                       & "direct attribute definitions",
+                       Prefix);
+       end if;
+ 
+       pragma Assert (Is_Attribute_Name (Att_Name));
+       return New_External_Name
+                (Related_Id => Chars (Prefix),
+                 Suffix => "_" & Get_Name_String (Att_Name) & "_Att",
+                 Prefix => 'D');
+    end Direct_Attribute_Definition_Name;
+ 
+    --------------------------------------
     -- Copy_Assertion_Policy_Attributes --
     --------------------------------------
  
*************** package body Sem_Util is
*** 6832,6861 ****
        return Is_Class_Wide_Type (Typ) or else Needs_Finalization (Typ);
     end CW_Or_Needs_Finalization;
  
-    -------------------------
-    -- Default_Constructor --
-    -------------------------
- 
-    function Default_Constructor (Typ : Entity_Id) return Entity_Id is
-       Construct : Elmt_Id;
-    begin
-       pragma Assert (Is_Type (Typ));
-       if No (Constructor_Name (Typ)) or else No (Constructor_List (Typ)) then
-          return Empty;
-       end if;
- 
-       Construct := First_Elmt (Constructor_List (Typ));
-       while Present (Construct) loop
-          if Parameter_Count (Elists.Node (Construct)) = 1 then
-             return Elists.Node (Construct);
-          end if;
- 
-          Next_Elmt (Construct);
-       end loop;
- 
-       return Empty;
-    end Default_Constructor;
- 
     ---------------------
     -- Defining_Entity --
     ---------------------
--- 6852,6857 ----
*************** package body Sem_Util is
*** 11850,11855 ****
--- 11846,11880 ----
                             (First_Discriminant (Typ)));
     end Has_Defaulted_Discriminants;
  
+    -----------------------------
+    -- Has_Default_Constructor --
+    -----------------------------
+ 
+    function Has_Default_Constructor (Typ : Entity_Id) return Boolean is
+       Cursor : Entity_Id;
+    begin
+       pragma Assert (Is_Type (Typ));
+       if not Needs_Construction (Typ) then
+          return False;
+       end if;
+ 
+       --  Iterate through all homonyms to find the default constructor
+ 
+       Cursor := Get_Name_Entity_Id
+                   (Direct_Attribute_Definition_Name (Typ, Name_Constructor));
+       while Present (Cursor) loop
+          if Is_Constructor_Procedure (Cursor)
+            and then No (Next_Formal (First_Formal (Cursor)))
+          then
+             return True;
+          end if;
+ 
+          Cursor := Homonym (Cursor);
+       end loop;
+ 
+       return False;
+    end Has_Default_Constructor;
+ 
     -------------------
     -- Has_Denormals --
     -------------------
*************** package body Sem_Util is
*** 16249,16254 ****
--- 16274,16290 ----
          and then Attribute_Name (N) = Name_Result;
     end Is_Attribute_Result;
  
+    -----------------------------------
+    -- Is_Direct_Attribute_Subp_Spec --
+    -----------------------------------
+ 
+    function Is_Direct_Attribute_Subp_Spec (N : Node_Id) return Boolean is
+    begin
+       return Nkind (N) in N_Subprogram_Specification
+         and then Nkind (Defining_Unit_Name (Original_Node (N)))
+                    = N_Attribute_Reference;
+    end Is_Direct_Attribute_Subp_Spec;
+ 
     -------------------------
     -- Is_Attribute_Update --
     -------------------------
*************** package body Sem_Util is
*** 16684,16689 ****
--- 16720,16747 ----
        end if;
     end Is_Constant_Bound;
  
+    ------------------------------
+    -- Is_Constructor_Procedure --
+    ------------------------------
+ 
+    function Is_Constructor_Procedure (Subp : Entity_Id) return Boolean is
+       First_Param : Entity_Id;
+    begin
+       if not (Present (First_Formal (Subp))
+                 and then Ekind (First_Formal (Subp)) = E_In_Out_Parameter
+                 and then Is_Direct_Attribute_Subp_Spec (Parent (Subp))
+                 and then Attribute_Name (Defining_Unit_Name
+                                           (Original_Node (Parent (Subp))))
+                            = Name_Constructor)
+       then
+          return False;
+       end if;
+ 
+       First_Param := Implementation_Base_Type (Etype (First_Formal (Subp)));
+       return Scope (Subp) = Scope (First_Param)
+         and then Needs_Construction (First_Param);
+    end Is_Constructor_Procedure;
+ 
     ---------------------------
     --  Is_Container_Element --
     ---------------------------
*************** package body Sem_Util is
*** 24817,24826 ****
--- 24875,24894 ----
           --  Scalar_Range
  
           if Is_Discrete_Type (Id) then
+ 
+             --  The scalar range of the source entity had a parent, so the
+             --  scalar range of the newly created entity should also have a
+             --  parent, so that the AST structure is the same.
+ 
+             pragma Assert (Present (Parent (Scalar_Range (Id))));
+ 
              Set_Scalar_Range (Id, Node_Id (
                Copy_Field_With_Replacement
                  (Field    => Union_Id (Scalar_Range (Id)),
                   Semantic => True)));
+ 
+             pragma Assert (No (Parent (Scalar_Range (Id))));
+             Set_Parent (Scalar_Range (Id), Id);
           end if;
  
           --  Scope
*************** package body Sem_Util is
*** 26669,26692 ****
        return Empty;
     end Param_Entity;
  
-    ---------------------
-    -- Parameter_Count --
-    ---------------------
- 
-    function Parameter_Count (Subp : Entity_Id) return Nat is
-       Result : Nat := 0;
-       Param  : Entity_Id;
-    begin
-       Param := First_Entity (Subp);
-       while Present (Param) loop
-          Result := Result + 1;
- 
-          Param := Next_Entity (Param);
-       end loop;
- 
-       return Result;
-    end Parameter_Count;
- 
     ----------------------
     -- Policy_In_Effect --
     ----------------------
--- 26737,26742 ----
*************** package body Sem_Util is
*** 27097,27102 ****
--- 27147,27157 ----
        --  the case where Ent is a child unit. This procedure generates an
        --  appropriate cross-reference entry. E is the corresponding entity.
  
+       procedure Get_Attribute_Reference_Name_String (N : Node_Id);
+       --  This procedure append to the Global_Name_Buffer the decoded string
+       --  name of the attribute reference N, including apostrophes and multiple
+       --  prefixes.
+ 
        -------------------------
        -- Generate_Parent_Ref --
        -------------------------
*************** package body Sem_Util is
*** 27118,27123 ****
--- 27173,27193 ----
           end if;
        end Generate_Parent_Ref;
  
+       -----------------------------------------
+       -- Get_Attribute_Reference_Name_String --
+       -----------------------------------------
+ 
+       procedure Get_Attribute_Reference_Name_String (N : Node_Id) is
+       begin
+          if Nkind (N) /= N_Attribute_Reference then
+             Get_Decoded_Name_String (Chars (N));
+          else
+             Get_Attribute_Reference_Name_String (Prefix (N));
+             Append (Global_Name_Buffer, ''');
+             Get_Decoded_Name_String (Attribute_Name (N));
+          end if;
+       end Get_Attribute_Reference_Name_String;
+ 
     --  Start of processing for Process_End_Label
  
     begin
*************** package body Sem_Util is
*** 27198,27206 ****
        --  If the end label is not for the given entity, then either we have
        --  some previous error, or this is a generic instantiation for which
        --  we do not need to make a cross-reference in this case anyway. In
!       --  either case we simply ignore the call.
  
!       if Chars (Ent) /= Chars (Endl) then
           return;
        end if;
  
--- 27268,27279 ----
        --  If the end label is not for the given entity, then either we have
        --  some previous error, or this is a generic instantiation for which
        --  we do not need to make a cross-reference in this case anyway. In
!       --  either case we simply ignore the call. Matching label for direct
!       --  attribute definitions are checked elsewhere.
  
!       if Nkind (Endl) /= N_Attribute_Reference
!         and then Chars (Ent) /= Chars (Endl)
!       then
           return;
        end if;
  
*************** package body Sem_Util is
*** 27227,27233 ****
           --  mean the semicolon immediately following the label). This is
           --  done for the sake of the 'e' or 't' entry generated below.
  
!          Get_Decoded_Name_String (Chars (Endl));
           Set_Sloc (Endl, Sloc (Endl) + Source_Ptr (Name_Len));
        end if;
  
--- 27300,27306 ----
           --  mean the semicolon immediately following the label). This is
           --  done for the sake of the 'e' or 't' entry generated below.
  
!          Get_Attribute_Reference_Name_String (Endl);
           Set_Sloc (Endl, Sloc (Endl) + Source_Ptr (Name_Len));
        end if;
  
diff -Nrcpad gcc-16-20251102/gcc/ada/sem_util.ads gcc-16-20251109/gcc/ada/sem_util.ads
*** gcc-16-20251102/gcc/ada/sem_util.ads	Sun Nov  2 22:32:18 2025
--- gcc-16-20251109/gcc/ada/sem_util.ads	Sun Nov  9 22:32:45 2025
*************** package Sem_Util is
*** 569,574 ****
--- 569,578 ----
     --  of Old_Ent is set and Old_Ent has not yet been Frozen (i.e. Is_Frozen is
     --  False).
  
+    function Direct_Attribute_Definition_Name
+      (Prefix : Entity_Id; Att_Name : Name_Id) return Name_Id;
+    --  Returns the name used for entities of direct attribute definitions.
+ 
     procedure Copy_Assertion_Policy_Attributes (New_Prag, Old_Prag : Node_Id);
     --  Copy Is_Checked, Is_Ignored and Ghost_Assertion_Level attributes from
     --  Old_Node.
*************** package Sem_Util is
*** 674,683 ****
     --  as Needs_Finalization except with pragma Restrictions (No_Finalization),
     --  in which case we know that class-wide objects do not need finalization.
  
-    function Default_Constructor (Typ : Entity_Id) return Entity_Id;
-    --  Determine the default constructor (e.g. the constructor with only one
-    --  formal parameter) for a given type Typ.
- 
     function Defining_Entity (N : Node_Id) return Entity_Id;
     --  Given a declaration N, returns the associated defining entity. If the
     --  declaration has a specification, the entity is obtained from the
--- 678,683 ----
*************** package Sem_Util is
*** 1407,1412 ****
--- 1407,1415 ----
     function Has_Defaulted_Discriminants (Typ : Entity_Id) return Boolean;
     --  Simple predicate to test for defaulted discriminants
  
+    function Has_Default_Constructor (Typ : Entity_Id) return Boolean;
+    --  Determine whether Typ has a constructor with only one formal parameter.
+ 
     function Has_Denormals (E : Entity_Id) return Boolean;
     --  Determines if the floating-point type E supports denormal numbers.
     --  Returns False if E is not a floating-point type.
*************** package Sem_Util is
*** 1880,1885 ****
--- 1883,1892 ----
     function Is_Attribute_Result (N : Node_Id) return Boolean;
     --  Determine whether node N denotes attribute 'Result
  
+    function Is_Direct_Attribute_Subp_Spec (N : Node_Id) return Boolean;
+    --  Determine whether N denotes a direct attribute definition subprogram
+    --  specification node.
+ 
     function Is_Attribute_Update (N : Node_Id) return Boolean;
     --  Determine whether node N denotes attribute 'Update
  
*************** package Sem_Util is
*** 1914,1919 ****
--- 1921,1930 ----
     --  enumeration literal, or an expression composed of constant-bound
     --  subexpressions which are evaluated by means of standard operators.
  
+    function Is_Constructor_Procedure (Subp : Entity_Id) return Boolean;
+    --  Returns True if Subp's name directly references an attribute, has a
+    --  first in out formal that needs construction within the same scope.
+ 
     function Is_Container_Element (Exp : Node_Id) return Boolean;
     --  This routine recognizes expressions that denote an element of one of
     --  the predefined containers, when the source only contains an indexing
*************** package Sem_Util is
*** 2973,2981 ****
     --  WARNING: this routine should be used in debugging scenarios such as
     --  tracking down undefined symbols as it is fairly low level.
  
-    function Parameter_Count (Subp : Entity_Id) return Nat;
-    --  Return the number of parameters for a given subprogram Subp.
- 
     function Param_Entity (N : Node_Id) return Entity_Id;
     --  Given an expression N, determines if the expression is a reference
     --  to a formal (of a subprogram or entry), and if so returns the Id
--- 2984,2989 ----
diff -Nrcpad gcc-16-20251102/gcc/ada/sinfo.ads gcc-16-20251109/gcc/ada/sinfo.ads
*** gcc-16-20251102/gcc/ada/sinfo.ads	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/ada/sinfo.ads	Sun Nov  9 22:32:45 2025
*************** package Sinfo is
*** 690,696 ****
  
     --    Do_Discriminant_Check
     --    Do_Length_Check
-    --    Do_Storage_Check
  
     --  These flags are used in some specific cases by the front end, either
     --  during semantic analysis or during expansion, and cannot be expected
--- 690,695 ----
*************** package Sinfo is
*** 1003,1011 ****
     --    to the defining entity for the corresponding body (NOT the node for
     --    the body itself).
  
!    --    Corresponding_Entry_Body
     --    Defined in N_Subprogram_Body. Set for subprogram bodies that implement
     --    a protected type entry; points to the body for the entry.
  
     --  Corresponding_Formal_Spec
     --    This field is set in subprogram renaming declarations, where it points
--- 1002,1011 ----
     --    to the defining entity for the corresponding body (NOT the node for
     --    the body itself).
  
!    --  Corresponding_Entry_Body
     --    Defined in N_Subprogram_Body. Set for subprogram bodies that implement
     --    a protected type entry; points to the body for the entry.
+    --    Used by codepeer.
  
     --  Corresponding_Formal_Spec
     --    This field is set in subprogram renaming declarations, where it points
*************** package Sinfo is
*** 1057,1069 ****
     --    This field is present in an N_Variant node, It references the entity
     --    for the discriminant checking function for the variant.
  
-    --  Default_Expression
-    --    This field is Empty if there is no default expression. If there is a
-    --    simple default expression (one with no side effects), then this field
-    --    simply contains a copy of the Expression field (both point to the tree
-    --    for the default expression). Default_Expression is used for
-    --    conformance checking.
- 
     --  Default_Storage_Pool
     --    This field is present in N_Compilation_Unit_Aux nodes. It is set to a
     --    copy of Opt.Default_Pool at the end of the compilation unit. See
--- 1057,1062 ----
*************** package Sinfo is
*** 1151,1164 ****
     --    listed above (e.g. in a return statement), an additional type
     --    conversion node is introduced to represent the required check.
  
-    --  Do_Storage_Check
-    --    This flag is set in an N_Allocator node to indicate that a storage
-    --    check is required for the allocation, or in an N_Subprogram_Body node
-    --    to indicate that a stack check is required in the subprogram prologue.
-    --    The N_Allocator case is handled by the routine that expands the call
-    --    to the runtime routine. The N_Subprogram_Body case is handled by the
-    --    backend, and all the semantics does is set the flag.
- 
     --  Elaborate_Present
     --    This flag is set in the N_With_Clause node to indicate that pragma
     --    Elaborate pragma appears for the with'ed units.
--- 1144,1149 ----
*************** package Sinfo is
*** 1188,1199 ****
     --    need for this field, so in the tree passed to Gigi, this field is
     --    always set to No_List.
  
-    --  Enclosing_Variant
-    --    This field is present in the N_Variant node and identifies the Node_Id
-    --    corresponding to the immediately enclosing variant when the variant is
-    --    nested, and N_Empty otherwise. Set during semantic processing of the
-    --    variant part of a record type.
- 
     --  Entity
     --    Appears in all direct names (identifiers, character literals, and
     --    operator symbols), as well as expanded names, and attributes that
--- 1173,1178 ----
*************** package Sinfo is
*** 1394,1407 ****
     --    Generic_Parent_Type is also used in an instance to determine whether a
     --    private operation overrides an inherited one.
  
-    --  Handler_List_Entry
-    --    This field is present in N_Object_Declaration nodes. It is set only
-    --    for the Handler_Record entry generated for an exception in zero cost
-    --    exception handling mode. It references the corresponding item in the
-    --    handler list, and is used to delete this entry if the corresponding
-    --    handler is deleted during optimization. For further details on why
-    --    this is required, see Exp_Ch11.Remove_Handler_Entries.
- 
     --  Has_Dereference_Action
     --    This flag is present in N_Explicit_Dereference nodes. It is set to
     --    indicate that the expansion has aready produced a call to primitive
--- 1373,1378 ----
*************** package Sinfo is
*** 1884,1894 ****
     --    the generic unit on the actual parameters done in the outermost scope
     --    where it would be legal to declare an identical named instantiation.
  
-    --  Is_Subprogram_Descriptor
-    --    Present in N_Object_Declaration, and set only for the object
-    --    declaration generated for a subprogram descriptor in fast exception
-    --    mode. See Exp_Ch11 for details of use.
- 
     --  Is_Task_Allocation_Block
     --    A flag set in a Block_Statement node to indicate that it is the
     --    expansion of a task allocator, or the allocator of an object
--- 1855,1860 ----
*************** package Sinfo is
*** 2237,2250 ****
     --    to indicate that a use is redundant (and therefore need not be undone
     --    on scope exit).
  
-    --  Renaming_Exception
-    --    Present in N_Exception_Declaration node. Used to point back to the
-    --    exception renaming for an exception declared within a subprogram.
-    --    What happens is that an exception declared in a subprogram is moved
-    --    to the library level with a unique name, and the original exception
-    --    becomes a renaming. This link from the library level exception to the
-    --    renaming declaration allows registering of the proper exception name.
- 
     --  Return_Statement_Entity
     --    Present in N_Simple_Return_Statement and N_Extended_Return_Statement.
     --    Points to an E_Return_Statement representing the return statement.
--- 2203,2208 ----
*************** package Sinfo is
*** 3020,3033 ****
        --  Null_Exclusion_Present
        --  Object_Definition subtype indic./array type def./access def.
        --  Expression (set to Empty if not present)
-       --  Handler_List_Entry
        --  Corresponding_Generic_Association
        --  More_Ids (set to False if no more identifiers in list)
        --  Prev_Ids (set to False if no previous identifiers in list)
        --  No_Initialization
        --  Assignment_OK
        --  Exception_Junk
-       --  Is_Subprogram_Descriptor
        --  Has_Init_Expression
        --  Suppress_Assignment_Checks
  
--- 2978,2989 ----
*************** package Sinfo is
*** 3632,3638 ****
        --  Sloc points to WHEN
        --  Discrete_Choices
        --  Component_List
-       --  Enclosing_Variant
        --  Present_Expr
        --  Dcheck_Function
        --  Has_SP_Choice
--- 3588,3593 ----
*************** package Sinfo is
*** 4853,4859 ****
        --  Null_Exclusion_Present
        --  No_Initialization
        --  Is_Static_Coextension
-       --  Do_Storage_Check
        --  Is_Dynamic_Coextension
        --  plus fields for expression
  
--- 4808,4813 ----
*************** package Sinfo is
*** 5505,5514 ****
        --  Out_Present
        --  Null_Exclusion_Present
        --  Parameter_Type subtype mark or access definition
!       --  Expression (set to Empty if no default expression present)
        --  More_Ids (set to False if no more identifiers in list)
        --  Prev_Ids (set to False if no previous identifiers in list)
-       --  Default_Expression
  
        ---------------
        -- 6.1  Mode --
--- 5459,5467 ----
        --  Out_Present
        --  Null_Exclusion_Present
        --  Parameter_Type subtype mark or access definition
!       --  Expression (set to Empty if no default expression)
        --  More_Ids (set to False if no more identifiers in list)
        --  Prev_Ids (set to False if no previous identifiers in list)
  
        ---------------
        -- 6.1  Mode --
*************** package Sinfo is
*** 5541,5547 ****
        --  At_End_Proc (set to Empty if no clean up procedure)
        --  Acts_As_Spec
        --  Bad_Is_Detected used only by parser
-       --  Do_Storage_Check
        --  Has_Relative_Deadline_Pragma
        --  Is_Entry_Barrier_Function
        --  Is_Protected_Subprogram_Body
--- 5494,5499 ----
*************** package Sinfo is
*** 6887,6897 ****
        --  N_Exception_Declaration
        --  Sloc points to EXCEPTION
        --  Defining_Identifier
!       --  Expression
!       --  Renaming_Exception
        --  More_Ids (set to False if no more identifiers in list)
        --  Prev_Ids (set to False if no previous identifiers in list)
  
        ------------------------------------------
        -- 11.2  Handled Sequence Of Statements --
        ------------------------------------------
--- 6839,6854 ----
        --  N_Exception_Declaration
        --  Sloc points to EXCEPTION
        --  Defining_Identifier
!       --  Expression (see below)
        --  More_Ids (set to False if no more identifiers in list)
        --  Prev_Ids (set to False if no previous identifiers in list)
  
+       --  Expression is not present in the syntax; it is set during expansion.
+       --  An exception_declaration is treated by the back end like an object of
+       --  type Standard.Exception_Type, and Expression is the initial value.
+       --  Expression is a syntactic field to match the Expression fields of
+       --  other node kinds.
+ 
        ------------------------------------------
        -- 11.2  Handled Sequence Of Statements --
        ------------------------------------------
*************** package Sinfo is
*** 7236,7242 ****
        --  Null_Exclusion_Present (set to False if not present)
        --  Subtype_Mark (set to Empty if not present)
        --  Access_Definition (set to Empty if not present)
!       --  Default_Expression (set to Empty if no default expression)
        --  More_Ids (set to False if no more identifiers in list)
        --  Prev_Ids (set to False if no previous identifiers in list)
  
--- 7193,7199 ----
        --  Null_Exclusion_Present (set to False if not present)
        --  Subtype_Mark (set to Empty if not present)
        --  Access_Definition (set to Empty if not present)
!       --  Expression (set to Empty if no default expression)
        --  More_Ids (set to False if no more identifiers in list)
        --  Prev_Ids (set to False if no previous identifiers in list)
  
*************** package Sinfo is
*** 7987,7992 ****
--- 7944,7952 ----
        --  N_Compound_Statement
        --  Actions
  
+       --  Note that N_Compound_Statement is unrelated to the Ada syntax rule
+       --  for compound_statement.
+ 
        --------------
        -- Contract --
        --------------
diff -Nrcpad gcc-16-20251102/gcc/ada/snames.adb-tmpl gcc-16-20251109/gcc/ada/snames.adb-tmpl
*** gcc-16-20251102/gcc/ada/snames.adb-tmpl	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/ada/snames.adb-tmpl	Sun Nov  9 22:32:45 2025
*************** package body Snames is
*** 412,417 ****
--- 412,426 ----
        end if;
     end Is_Convention_Name;
  
+    -----------------------------------------
+    -- Is_Direct_Attribute_Definition_Name --
+    -----------------------------------------
+ 
+    function Is_Direct_Attribute_Definition_Name (N : Name_Id) return Boolean is
+    begin
+       return Is_Attribute_Name (N) and then N = Name_Constructor;
+    end Is_Direct_Attribute_Definition_Name;
+ 
     ------------------------------
     -- Is_Entity_Attribute_Name --
     ------------------------------
diff -Nrcpad gcc-16-20251102/gcc/ada/snames.ads-tmpl gcc-16-20251109/gcc/ada/snames.ads-tmpl
*** gcc-16-20251102/gcc/ada/snames.ads-tmpl	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/ada/snames.ads-tmpl	Sun Nov  9 22:32:45 2025
*************** package Snames is
*** 147,153 ****
     --  Names of aspects for which there are no matching pragmas or attributes
     --  so that they need to be included for aspect specification use.
  
-    Name_Constructor                    : constant Name_Id := N + $;
     Name_Default_Value                  : constant Name_Id := N + $;
     Name_Default_Component_Value        : constant Name_Id := N + $;
     Name_Designated_Storage_Model       : constant Name_Id := N + $;
--- 147,152 ----
*************** package Snames is
*** 956,961 ****
--- 955,961 ----
     Name_Component_Size                 : constant Name_Id := N + $;
     Name_Compose                        : constant Name_Id := N + $;
     Name_Constrained                    : constant Name_Id := N + $;
+    Name_Constructor                    : constant Name_Id := N + $;
     Name_Count                          : constant Name_Id := N + $;
     Name_Default_Bit_Order              : constant Name_Id := N + $; -- GNAT
     Name_Default_Scalar_Storage_Order   : constant Name_Id := N + $; -- GNAT
*************** package Snames is
*** 1500,1505 ****
--- 1500,1506 ----
        Attribute_Component_Size,
        Attribute_Compose,
        Attribute_Constrained,
+       Attribute_Constructor,
        Attribute_Count,
        Attribute_Default_Bit_Order,
        Attribute_Default_Scalar_Storage_Order,
*************** package Snames is
*** 2077,2082 ****
--- 2078,2087 ----
     --  mode. This is the mechanism for considering this pragma illegal in
     --  normal GNAT programs.
  
+    function Is_Direct_Attribute_Definition_Name (N : Name_Id) return Boolean;
+    --  Test to see if the name N is the name of a recognized attribute and is
+    --  allowed to be directly referenced in subprogram specification.
+ 
     function Is_Entity_Attribute_Name (N : Name_Id) return Boolean;
     --  Test to see if the name N is the name of a recognized entity attribute,
     --  i.e. an attribute reference that returns an entity.
diff -Nrcpad gcc-16-20251102/gcc/ada/sprint.adb gcc-16-20251109/gcc/ada/sprint.adb
*** gcc-16-20251102/gcc/ada/sprint.adb	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/ada/sprint.adb	Sun Nov  9 22:32:45 2025
*************** package body Sprint is
*** 1963,1971 ****
                    Sprint_Node (Access_Definition (Node));
                 end if;
  
!                if Present (Default_Expression (Node)) then
                    Write_Str (" := ");
!                   Sprint_Node (Default_Expression (Node));
                 end if;
  
                 Write_Char (';');
--- 1963,1971 ----
                    Sprint_Node (Access_Definition (Node));
                 end if;
  
!                if Present (Expression (Node)) then
                    Write_Str (" := ");
!                   Sprint_Node (Expression (Node));
                 end if;
  
                 Write_Char (';');
diff -Nrcpad gcc-16-20251102/gcc/ada/style.adb gcc-16-20251109/gcc/ada/style.adb
*** gcc-16-20251102/gcc/ada/style.adb	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/ada/style.adb	Sun Nov  9 22:32:45 2025
*************** package body Style is
*** 345,356 ****
     begin
        if Style_Check_Xtra_Parens_Precedence
          and then
!           Paren_Count (N) >
!             (if Nkind (N) in N_Case_Expression
!                            | N_Expression_With_Actions
!                            | N_If_Expression
!                            | N_Quantified_Expression
!                            | N_Raise_Expression
               then 1
               else 0)
        then
--- 345,358 ----
     begin
        if Style_Check_Xtra_Parens_Precedence
          and then
!           Paren_Count (Original_Node (N)) >
!             (if Nkind (Original_Node (N)) in N_Case_Expression
!                                            | N_Expression_With_Actions
!                                            | N_If_Expression
!                                            | N_Quantified_Expression
!                                            | N_Raise_Expression
!                                            | N_In
!                                            | N_Not_In
               then 1
               else 0)
        then
diff -Nrcpad gcc-16-20251102/gcc/ada/treepr.adb gcc-16-20251109/gcc/ada/treepr.adb
*** gcc-16-20251102/gcc/ada/treepr.adb	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/ada/treepr.adb	Sun Nov  9 22:32:45 2025
*************** package body Treepr is
*** 338,343 ****
--- 338,345 ----
              return "Is_Elaboration_Checks_OK_Id";
           when F_Is_Elaboration_Warnings_OK_Id =>
              return "Is_Elaboration_Warnings_OK_Id";
+          when F_Is_IEEE_Extended_Precision =>
+             return "Is_IEEE_Extended_Precision";
           when F_Is_RACW_Stub_Type =>
              return "Is_RACW_Stub_Type";
           when F_LSP_Subprogram =>
diff -Nrcpad gcc-16-20251102/gcc/analyzer/ChangeLog gcc-16-20251109/gcc/analyzer/ChangeLog
*** gcc-16-20251102/gcc/analyzer/ChangeLog	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/analyzer/ChangeLog	Sun Nov  9 22:32:45 2025
***************
*** 1,3 ****
--- 1,23 ----
+ 2025-11-07  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* checker-event.cc
+ 	(region_creation_event_allocation_size::print_desc): Fix missing
+ 	"else" leading to stray trailing "allocated here" text in events.
+ 
+ 2025-11-04  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/122544
+ 	* checker-event.cc (catch_cfg_edge_event::get_meaning): New.
+ 	(setjmp_event::get_meaning): New.
+ 	(rewind_event::get_meaning): New.
+ 	(throw_event::get_meaning): New.
+ 	(unwind_event::get_meaning): New.
+ 	* checker-event.h (catch_cfg_edge_event::get_meaning): New decl.
+ 	(setjmp_event::get_meaning): New decl.
+ 	(rewind_event::get_meaning): New decl.
+ 	(throw_event::get_meaning): New decl.
+ 	(unwind_event::get_meaning): New decl.
+ 
  2025-10-16  David Malcolm  <dmalcolm@redhat.com>
  
  	* ana-state-to-diagnostic-state.cc: Reimplement throughout to use
diff -Nrcpad gcc-16-20251102/gcc/analyzer/checker-event.cc gcc-16-20251109/gcc/analyzer/checker-event.cc
*** gcc-16-20251102/gcc/analyzer/checker-event.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/analyzer/checker-event.cc	Sun Nov  9 22:32:45 2025
*************** region_creation_event_allocation_size::p
*** 361,367 ****
  		   "allocated %qE bytes here",
  		   m_capacity);
      }
!   pp_printf (&pp, "allocated here");
  }
  
  void
--- 361,368 ----
  		   "allocated %qE bytes here",
  		   m_capacity);
      }
!   else
!     pp_printf (&pp, "allocated here");
  }
  
  void
*************** start_cfg_edge_event::should_print_expr_
*** 833,838 ****
--- 834,847 ----
    return false;
  }
  
+ /* class catch_cfg_edge_event : public cfg_edge_event.  */
+ 
+ diagnostics::paths::event::meaning
+ catch_cfg_edge_event::get_meaning () const
+ {
+   return meaning (verb::catch_);
+ }
+ 
  /* class call_event : public superedge_event.  */
  
  /* call_event's ctor.  */
*************** setjmp_event::print_desc (pretty_printer
*** 1034,1039 ****
--- 1043,1054 ----
  	     get_user_facing_name (m_setjmp_call));
  }
  
+ diagnostics::paths::event::meaning
+ setjmp_event::get_meaning () const
+ {
+   return meaning (verb::setjmp_);
+ }
+ 
  /* Implementation of checker_event::prepare_for_emission vfunc for setjmp_event.
  
     Record this setjmp's event ID into the path, so that rewind events can
*************** rewind_event::get_setjmp_caller () const
*** 1066,1071 ****
--- 1081,1092 ----
    return m_eedge->m_dest->get_function ()->decl;
  }
  
+ diagnostics::paths::event::meaning
+ rewind_event::get_meaning () const
+ {
+   return meaning (verb::longjmp_);
+ }
+ 
  /* rewind_event's ctor.  */
  
  rewind_event::rewind_event (const exploded_edge *eedge,
*************** rewind_to_setjmp_event::prepare_for_emis
*** 1163,1168 ****
--- 1184,1195 ----
  
  /* class throw_event : public checker_event.  */
  
+ diagnostics::paths::event::meaning
+ throw_event::get_meaning () const
+ {
+   return meaning (verb::throw_);
+ }
+ 
  /* class explicit_throw_event : public throw_event.  */
  void
  explicit_throw_event::print_desc (pretty_printer &pp) const
*************** unwind_event::print_desc (pretty_printer
*** 1205,1210 ****
--- 1232,1243 ----
      pp_printf (&pp, "unwinding stack frame");
  }
  
+ diagnostics::paths::event::meaning
+ unwind_event::get_meaning () const
+ {
+   return meaning (verb::unwind_);
+ }
+ 
  /* class warning_event : public checker_event.  */
  
  /* Implementation of diagnostics::paths::event::print_desc vfunc for
diff -Nrcpad gcc-16-20251102/gcc/analyzer/checker-event.h gcc-16-20251109/gcc/analyzer/checker-event.h
*** gcc-16-20251102/gcc/analyzer/checker-event.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/analyzer/checker-event.h	Sun Nov  9 22:32:45 2025
*************** public:
*** 539,544 ****
--- 539,546 ----
        pp_string (&pp, "...catching exception here");
    }
  
+   meaning get_meaning () const override;
+ 
  private:
    tree m_type;
  };
*************** public:
*** 666,671 ****
--- 668,675 ----
  
    void print_desc (pretty_printer &pp) const final override;
  
+   meaning get_meaning () const override;
+ 
    void prepare_for_emission (checker_path *path,
  			     pending_diagnostic *pd,
  			     diagnostics::paths::event_id_t emission_id) final override;
*************** public:
*** 688,693 ****
--- 692,699 ----
    tree get_setjmp_caller () const;
    const exploded_edge *get_eedge () const { return m_eedge; }
  
+   meaning get_meaning () const override;
+ 
   protected:
    rewind_event (const exploded_edge *eedge,
  		enum event_kind kind,
*************** public:
*** 754,759 ****
--- 760,767 ----
    {
    }
  
+   meaning get_meaning () const override;
+ 
  protected:
    const exploded_node *m_enode;
    const gcall &m_throw_call;
*************** public:
*** 817,822 ****
--- 825,832 ----
    {
    }
  
+   meaning get_meaning () const override;
+ 
    void print_desc (pretty_printer &pp) const final override;
  
    int m_num_frames;
diff -Nrcpad gcc-16-20251102/gcc/c/ChangeLog gcc-16-20251109/gcc/c/ChangeLog
*** gcc-16-20251102/gcc/c/ChangeLog	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c/ChangeLog	Sun Nov  9 22:32:45 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-11-04  Alejandro Colomar  <alx@kernel.org>
+ 
+ 	* c-decl.cc (start_function):
+ 	Rename warn_parm_array_mismatch => warn_parms_array_mismatch.
+ 	* c-parser.cc (c_parser_declaration_or_fndef):
+ 	Rename warn_parm_array_mismatch => warn_parms_array_mismatch.
+ 
  2025-11-01  Martin Uecker  <uecker@tugraz.at>
  
  	* c-decl.cc (build_compound_literal): Add error.
diff -Nrcpad gcc-16-20251102/gcc/c/c-decl.cc gcc-16-20251109/gcc/c/c-decl.cc
*** gcc-16-20251102/gcc/c/c-decl.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c/c-decl.cc	Sun Nov  9 22:32:45 2025
*************** start_function (struct c_declspecs *decl
*** 10920,10926 ****
    if (old_decl)
      {
        location_t origloc = DECL_SOURCE_LOCATION (old_decl);
!       warn_parm_array_mismatch (origloc, old_decl, parms);
      }
  
    /* To enable versions to be created across TU's we mark and mangle all
--- 10920,10926 ----
    if (old_decl)
      {
        location_t origloc = DECL_SOURCE_LOCATION (old_decl);
!       warn_parms_array_mismatch (origloc, old_decl, parms);
      }
  
    /* To enable versions to be created across TU's we mark and mangle all
diff -Nrcpad gcc-16-20251102/gcc/c/c-parser.cc gcc-16-20251109/gcc/c/c-parser.cc
*** gcc-16-20251102/gcc/c/c-parser.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c/c-parser.cc	Sun Nov  9 22:32:45 2025
*************** c_parser_declaration_or_fndef (c_parser
*** 3013,3019 ****
  			  && DECL_INITIAL (d) == NULL_TREE)
  			DECL_ARGUMENTS (d) = parms;
  
! 		      warn_parm_array_mismatch (lastloc, d, parms);
  		    }
  		}
  	      if (omp_declare_simd_clauses
--- 3013,3019 ----
  			  && DECL_INITIAL (d) == NULL_TREE)
  			DECL_ARGUMENTS (d) = parms;
  
! 		      warn_parms_array_mismatch (lastloc, d, parms);
  		    }
  		}
  	      if (omp_declare_simd_clauses
diff -Nrcpad gcc-16-20251102/gcc/c-family/ChangeLog gcc-16-20251109/gcc/c-family/ChangeLog
*** gcc-16-20251102/gcc/c-family/ChangeLog	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c-family/ChangeLog	Sun Nov  9 22:32:45 2025
***************
*** 1,3 ****
--- 1,20 ----
+ 2025-11-05  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121574
+ 	* c.opt: New warning '-Wexpose-global-module-tu-local'.
+ 	* c.opt.urls: Regenerate.
+ 
+ 2025-11-04  Alejandro Colomar  <alx@kernel.org>
+ 
+ 	* c-warn.cc (warn_parms_array_mismatch): Fix typos in comment.
+ 
+ 2025-11-04  Alejandro Colomar  <alx@kernel.org>
+ 
+ 	* c-common.h (warn_parm_array_mismatch):
+ 	Rename warn_parm_array_mismatch => warn_parms_array_mismatch.
+ 	* c-warn.cc (warn_parm_array_mismatch):
+ 	Rename warn_parm_array_mismatch => warn_parms_array_mismatch.
+ 
  2025-10-30  Qing Zhao  <qing.zhao@oracle.com>
  
  	* c-attribs.cc (handle_counted_by_attribute): Allow counted_by for
diff -Nrcpad gcc-16-20251102/gcc/c-family/c-common.h gcc-16-20251109/gcc/c-family/c-common.h
*** gcc-16-20251102/gcc/c-family/c-common.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c-family/c-common.h	Sun Nov  9 22:32:45 2025
*************** extern void c_do_switch_warnings (splay_
*** 1624,1630 ****
  extern void warn_for_omitted_condop (location_t, tree);
  extern bool warn_for_restrict (unsigned, tree *, unsigned);
  extern void warn_for_address_of_packed_member (tree, tree);
! extern void warn_parm_array_mismatch (location_t, tree, tree);
  extern void maybe_warn_sizeof_array_div (location_t, tree, tree, tree, tree);
  extern void do_warn_array_compare (location_t, tree_code, tree, tree);
  
--- 1624,1630 ----
  extern void warn_for_omitted_condop (location_t, tree);
  extern bool warn_for_restrict (unsigned, tree *, unsigned);
  extern void warn_for_address_of_packed_member (tree, tree);
! extern void warn_parms_array_mismatch (location_t, tree, tree);
  extern void maybe_warn_sizeof_array_div (location_t, tree, tree, tree, tree);
  extern void do_warn_array_compare (location_t, tree_code, tree, tree);
  
diff -Nrcpad gcc-16-20251102/gcc/c-family/c-warn.cc gcc-16-20251109/gcc/c-family/c-warn.cc
*** gcc-16-20251102/gcc/c-family/c-warn.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c-family/c-warn.cc	Sun Nov  9 22:32:45 2025
*************** expr_to_str (pretty_printer &pp, tree ex
*** 3431,3437 ****
     (FNDECL's is set to the location of the redeclaration).  */
  
  void
! warn_parm_array_mismatch (location_t origloc, tree fndecl, tree newparms)
  {
    /* The original parameter list (copied from the original declaration
       into the current [re]declaration, FNDECL)).  The two are equal if
--- 3431,3437 ----
     (FNDECL's is set to the location of the redeclaration).  */
  
  void
! warn_parms_array_mismatch (location_t origloc, tree fndecl, tree newparms)
  {
    /* The original parameter list (copied from the original declaration
       into the current [re]declaration, FNDECL)).  The two are equal if
*************** warn_parm_array_mismatch (location_t ori
*** 3505,3512 ****
  
        if (!newa)
  	{
! 	  /* Continue of both parameters are pointers with no size
! 	     associated with it.  */
  	  if (!cura)
  	    continue;
  
--- 3505,3512 ----
  
        if (!newa)
  	{
! 	  /* Continue if both parameters are pointers with no size
! 	     associated with them.  */
  	  if (!cura)
  	    continue;
  
diff -Nrcpad gcc-16-20251102/gcc/c-family/c.opt gcc-16-20251109/gcc/c-family/c.opt
*** gcc-16-20251102/gcc/c-family/c.opt	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c-family/c.opt	Sun Nov  9 22:32:45 2025
*************** Wexternal-tu-local
*** 765,770 ****
--- 765,774 ----
  C++ ObjC++ Var(warn_tu_local) Warning Init(1)
  Warn about naming a TU-local entity declared in another translation unit.
  
+ Wexpose-global-module-tu-local
+ C++ ObjC++ Var(warn_expose_global_module_tu_local) Init(1) Warning
+ Warn when a module exposes a TU-local entity from the global module fragment.
+ 
  Wextra
  C ObjC C++ ObjC++ Warning
  ; in common.opt
diff -Nrcpad gcc-16-20251102/gcc/c-family/c.opt.urls gcc-16-20251109/gcc/c-family/c.opt.urls
*** gcc-16-20251102/gcc/c-family/c.opt.urls	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/c-family/c.opt.urls	Sun Nov  9 22:32:45 2025
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 379,384 ****
--- 379,387 ----
  Wexternal-tu-local
  UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexternal-tu-local)
  
+ Wexpose-global-module-tu-local
+ UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wexpose-global-module-tu-local)
+ 
  Wextra
  UrlSuffix(gcc/Warning-Options.html#index-Wextra) LangUrlSuffix_D(gdc/Warnings.html#index-Wextra) LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wextra)
  
diff -Nrcpad gcc-16-20251102/gcc/cobol/ChangeLog gcc-16-20251109/gcc/cobol/ChangeLog
*** gcc-16-20251102/gcc/cobol/ChangeLog	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/ChangeLog	Sun Nov  9 22:32:45 2025
***************
*** 1,3 ****
--- 1,100 ----
+ 2025-11-06  Robert Dubner  <rdubner@symas.com>
+ 	    James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* Make-lang.in: Repair documentation generation.
+ 	* cdf.y: Changes to tokens.
+ 	* cobol1.cc (cobol_langhook_handle_option): Add comment.
+ 	* genapi.cc (function_pointer_from_name): Use data.original() for
+ 	function name.
+ 	(parser_initialize_programs): Likewise.
+ 	(cobol_compare): Make sure encodings of comparands are the same.
+ 	(move_tree): Change name of DEFAULT_SOURCE_ENCODING macro.
+ 	(parser_enter_program): Typo.
+ 	(psa_FldLiteralN): Break out dirty_to_binary() support routine.
+ 	(dirty_to_binary): Likewise.
+ 	(parser_alphabet): Rename 'alphabet' to 'collation_sequence'.
+ 	(parser_allocate): Change wsclear() to be uint32_t instead of char.
+ 	(parser_label_label): Formatting.
+ 	(parser_label_goto): Likewise.
+ 	(get_the_filename): Breakout get_the_filename(), which handles
+ 	encoding.
+ 	(parser_file_open): Likewise.
+ 	(set_up_delete_file_label): Implement DELETE FILE (Format 2).
+ 	(parser_file_delete_file): Likewise.
+ 	(parser_file_delete_on_exception): Likewise.
+ 	(parser_file_delete_not_exception): Likewise.
+ 	(parser_file_delete_end): Likewise.
+ 	(parser_call): Use data.original().
+ 	(parser_entry): Use data.original().
+ 	(mh_source_is_literalN): Convert from
+ 	sourceref.field->codeset.encoding.
+ 	(binary_initial_from_float128): Change to "binary_initial".
+ 	(binary_initial): Calculate in FIXED_WIDE_INT(128) instead of
+ 	REAL_VALUE_TYPE.
+ 	(digits_from_int128): New routine uses binary_initial.
+ 	(digits_from_float128): Removed.  Kept as comment for reference.
+ 	(initial_from_initial): Use binary_initial.
+ 	(actually_create_the_static_field): Use correct encoding.
+ 	(parser_symbol_add): Likewise.
+ 	* genapi.h (parser_file_delete_file): Implement FILE DELETE.
+ 	(parser_file_delete_on_exception): Implement FILE DELETE.
+ 	(parser_file_delete_not_exception): Implement FILE DELETE.
+ 	(parser_file_delete_end): Implement FILE DELETE.
+ 	* genmath.cc: Include charmaps.h.
+ 	* genutil.cc (get_literal_string):  Change name of
+ 	DEFAULT_SOURCE_ENCODING macro.
+ 	* parse.y: Token changes; numerous changes in support of encoding;
+ 	support for DELETE FILE.
+ 	* parse_ante.h (name_of): Use data.original().
+ 	(class prog_descr_t): Support of locales.
+ 	(current_options): Formatting.
+ 	(current_encoding):  Formatting.
+ 	(current_program_index): Formatting.
+ 	(current_section): Formatting.
+ 	(current_paragraph): Formatting.
+ 	(is_integer_literal): Use correct encoding.
+ 	(value_encoding_check): Handle encoding changes.
+ 	(alphabet_add): Likewise.
+ 	(data_division_ready): Likewise.
+ 	* scan.l: Use data.original().
+ 	* show_parse.h: Use correct encoding.
+ 	* symbols.cc (elementize): Likewise.
+ 	(symbol_elem_cmp): Handle locale.
+ 	(struct symbol_elem_t): Likewise.
+ 	(symbol_locale): Likewise.
+ 	(field_str): Change DEFAULT_SOURCE_ENCODING macro name.
+ 	(symbols_alphabet_set): Formatting.
+ 	(symbols_update): Modify consistency checks.
+ 	(symbol_locale_add): Locale support.
+ 	(cbl_locale_t::cbl_locale_t): Locale support.
+ 	(cbl_alphabet_t::cbl_alphabet_t): New structure.
+ 	(cbl_alphabet_t::reencode): Formatting.
+ 	(cbl_alphabet_t::assign): Change name of collation_sequence.
+ 	(cbl_alphabet_t::also): Likewise.
+ 	(new_literal_add): Anticipate the need for four-byte characters.
+ 	(guess_encoding): Eliminate.
+ 	(cbl_field_t::internalize): Refine conversion of data.initial to
+ 	specified encoding.
+ 	* symbols.h (enum symbol_type_t): Add SymLocale.
+ 	(struct cbl_field_data_t): Incorporate data.orig.
+ 	(struct cbl_field_t): Likewise.
+ 	(struct cbl_delete_file_t): New structure.
+ 	(struct cbl_label_t): Incorporate cbl_delete_file_t.
+ 	(struct cbl_locale_t): Support for locale.
+ 	(hex_decode): Comment.
+ 	(struct cbl_alphabet_t): Incorporate locale; change variable name
+ 	to collation_sequence.
+ 	(struct symbol_elem_t): Incorporate locale.
+ 	(cbl_locale_of): Likewise.
+ 	(cbl_alphabet_of): Likewise.
+ 	(symbol_locale_add): Likewise.
+ 	(wsclear): Type is now uint32_t instead of char.
+ 	* util.cc (symbol_type_str):  Incorporate locale.
+ 	(cbl_field_t::report_invalid_initial_value): Change test so that
+ 	pure PIC A() variables are limited to [a-zA-Z] and space.
+ 	(valid_move): Use DEFAULT_SOURCE_ENCODING macro.
+ 	(cobol_filename): Formatting.
+ 
  2025-10-26  Eric Botcazou  <ebotcazou@adacore.com>
  
  	* Make-lang.in ($(srcdir)/cobol/token_names.h): Silence recipe.
diff -Nrcpad gcc-16-20251102/gcc/cobol/Make-lang.in gcc-16-20251109/gcc/cobol/Make-lang.in
*** gcc-16-20251102/gcc/cobol/Make-lang.in	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/Make-lang.in	Sun Nov  9 22:32:45 2025
*************** cobol.srcpdf: gcobol.pdf gcobol-io.pdf
*** 330,336 ****
  	ln $^ $(srcdir)/cobol/
  
  gcobol.pdf: $(srcdir)/cobol/gcobol.1
! 	groff -mdoc -T pdf  $^ > $@~
  	@mv $@~ $@
  gcobol-io.pdf: $(srcdir)/cobol/gcobol.3
  	groff -mdoc -T pdf  $^ > $@~
--- 330,336 ----
  	ln $^ $(srcdir)/cobol/
  
  gcobol.pdf: $(srcdir)/cobol/gcobol.1
! 	groff -mdoc -t -T pdf  $^ > $@~
  	@mv $@~ $@
  gcobol-io.pdf: $(srcdir)/cobol/gcobol.3
  	groff -mdoc -T pdf  $^ > $@~
diff -Nrcpad gcc-16-20251102/gcc/cobol/cdf.y gcc-16-20251109/gcc/cobol/cdf.y
*** gcc-16-20251102/gcc/cobol/cdf.y	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/cdf.y	Sun Nov  9 22:32:45 2025
*************** apply_cdf_turn( const exception_turn_t&
*** 244,264 ****
  %type	<boolean>	     DEFINED
  %token OTHER 699  PARAMETER_kw 369    "PARAMETER"
  %token OFF 688  OVERRIDE 370
! %token THRU 949
! %token TRUE_kw 814    "True"
  
  %token CALL_COBOL 393    "CALL"
  %token CALL_VERBATIM 394    "CALL (as C)"
  
! %token TURN 816  CHECKING 497  LOCATION 650  ON 690  WITH 843
  
! %left OR 950
! %left AND 951
! %right NOT 952
! %left '<'  '>'  '='  NE 953  LE 954  GE 955
  %left '-'  '+'
  %left '*'  '/'
! %right NEG 957
  
  %define api.prefix {ydf}
  %define api.token.prefix{YDF_}
--- 244,264 ----
  %type	<boolean>	     DEFINED
  %token OTHER 699  PARAMETER_kw 369    "PARAMETER"
  %token OFF 688  OVERRIDE 370
! %token THRU 950
! %token TRUE_kw 815    "True"
  
  %token CALL_COBOL 393    "CALL"
  %token CALL_VERBATIM 394    "CALL (as C)"
  
! %token TURN 817  CHECKING 497  LOCATION 650  ON 690  WITH 844
  
! %left OR 951
! %left AND 952
! %right NOT 953
! %left '<'  '>'  '='  NE 954  LE 955  GE 956
  %left '-'  '+'
  %left '*'  '/'
! %right NEG 958
  
  %define api.prefix {ydf}
  %define api.token.prefix{YDF_}
diff -Nrcpad gcc-16-20251102/gcc/cobol/cobol1.cc gcc-16-20251109/gcc/cobol/cobol1.cc
*** gcc-16-20251102/gcc/cobol/cobol1.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/cobol1.cc	Sun Nov  9 22:32:45 2025
*************** cobol_langhook_handle_option (size_t sco
*** 365,370 ****
--- 365,371 ----
              return true;
  
          case OPT_fdefaultbyte:
+             // cobol_default_byte is an unsigned ing
              wsclear(cobol_default_byte);
              return true;
  
diff -Nrcpad gcc-16-20251102/gcc/cobol/genapi.cc gcc-16-20251109/gcc/cobol/genapi.cc
*** gcc-16-20251102/gcc/cobol/genapi.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/genapi.cc	Sun Nov  9 22:32:45 2025
*************** function_pointer_from_name(const cbl_ref
*** 863,870 ****
                         NULL); // And, hence, no types
  
      // Fetch the FUNCTION_DECL for that FUNCTION_TYPE
!     tree function_decl = gg_build_fn_decl(name.field->data.initial,
                                            fndecl_type);
      // Take the address of the function decl:
      tree address_of_function = gg_get_address_of(function_decl);
      gg_assign(function_pointer, address_of_function);
--- 863,874 ----
                         NULL); // And, hence, no types
  
      // Fetch the FUNCTION_DECL for that FUNCTION_TYPE
!     char *tname = static_cast<char *>(xmalloc(name.field->data.capacity+1));
!     memcpy(tname, name.field->data.original(), name.field->data.capacity);
!     tname[name.field->data.capacity] = '\0';
!     tree function_decl = gg_build_fn_decl(tname,
                                            fndecl_type);
+     free(tname);
      // Take the address of the function decl:
      tree address_of_function = gg_get_address_of(function_decl);
      gg_assign(function_pointer, address_of_function);
*************** function_pointer_from_name(const cbl_ref
*** 877,887 ****
        gg_assign(function_pointer,
                  gg_cast(build_pointer_type(function_type),
                          gg_call_expr( VOID_P,
!                                   "__gg__function_handle_from_literal",
!                                   build_int_cst_type(INT,
!                                     current_function->our_symbol_table_index),
!                                   gg_string_literal(name.field->data.initial),
!                                   NULL_TREE)));
        }
      else
        {
--- 881,891 ----
        gg_assign(function_pointer,
                  gg_cast(build_pointer_type(function_type),
                          gg_call_expr( VOID_P,
!                               "__gg__function_handle_from_literal",
!                               build_int_cst_type(INT,
!                                 current_function->our_symbol_table_index),
!                               gg_string_literal(name.field->data.original()),
!                               NULL_TREE)));
        }
      else
        {
*************** parser_initialize_programs( size_t nprog
*** 919,925 ****
        if( progs[i].field->type == FldLiteralA )
          {
          SHOW_PARSE_TEXT("\"")
!         SHOW_PARSE_TEXT(progs[i].field->data.initial)
          SHOW_PARSE_TEXT("\"")
          }
        else
--- 923,929 ----
        if( progs[i].field->type == FldLiteralA )
          {
          SHOW_PARSE_TEXT("\"")
!         SHOW_PARSE_TEXT(progs[i].field->data.original())
          SHOW_PARSE_TEXT("\"")
          }
        else
*************** cobol_compare(  tree return_int,
*** 2246,2266 ****
                {
                // Comparing a FldLiteralN to an alphanumeric
  
!               // CONVERSION ALERT.  lefty->field->data.initial is an ASCII
!               // string.  We want to convert it to the same encoding as the
!               // right side.
! 
!               cbl_encoding_t enc_left = DEFAULT_CHARMAP_SOURCE;
!               cbl_encoding_t enc_right =
!                   static_cast<cbl_encoding_t>(righty->field->codeset.encoding);
! 
                size_t outlength;
!               char *converted = __gg__iconverter(enc_left,
!                                            enc_right,
!                                            lefty->field->data.initial,
!                                            strlen(lefty->field->data.initial)+1,
!                                            &outlength );
! 
                gg_assign(  return_int, gg_call_expr(
                            INT,
                            "__gg__literaln_alpha_compare",
--- 2250,2268 ----
                {
                // Comparing a FldLiteralN to an alphanumeric
  
!               // This next conversion may be overkill.  But just in case
!               // the encodings of the two variables are different, we are
!               // going to convert left-side text to the right-side encoding
!               cbl_encoding_t enc_left  = lefty->field->codeset.encoding;
!               cbl_encoding_t enc_right = righty->field->codeset.encoding;
                size_t outlength;
!               size_t inlength = strlen(lefty->field->data.initial);
!               char *converted = __gg__iconverter(
!                                          enc_left,
!                                          enc_right,
!                                          lefty->field->data.initial,
!                                          inlength,
!                                          &outlength );
                gg_assign(  return_int, gg_call_expr(
                            INT,
                            "__gg__literaln_alpha_compare",
*************** move_tree(  cbl_field_t  *dest,
*** 2458,2464 ****
        gg_call(VOID,
                "__gg__string_to_alpha_edited",
                location,
!               build_int_cst_type(INT, DEFAULT_CHARMAP_SOURCE),
                psz_source,
                min_length,
                member(dest->var_decl_node, "picture"),
--- 2460,2466 ----
        gg_call(VOID,
                "__gg__string_to_alpha_edited",
                location,
!               build_int_cst_type(INT, DEFAULT_SOURCE_ENCODING),
                psz_source,
                min_length,
                member(dest->var_decl_node, "picture"),
*************** parser_enter_program( const char *funcna
*** 3956,3962 ****
  
    if( strcmp(funcname_, "main") == 0 && this_module_has_main )
      {
!     // setting 'retval' to 1 let's the caller know that we are being told
      // both to synthesize a main() entry point to duplicate GCC's default
      // behavior, and to create an explicit entry point named "main".  This will
      // eventually result in a link error (because of the duplicated entry
--- 3958,3964 ----
  
    if( strcmp(funcname_, "main") == 0 && this_module_has_main )
      {
!     // Setting 'retval' to 1 lets the caller know that we are being told
      // both to synthesize a main() entry point to duplicate GCC's default
      // behavior, and to create an explicit entry point named "main".  This will
      // eventually result in a link error (because of the duplicated entry
*************** parser_init_list()
*** 4164,4341 ****
    gg_call(VOID,
            "__gg__variables_to_init",
            gg_get_address_of(array),
!           wsclear() ? gg_string_literal(wsclear()) : null_pointer_node,
            NULL_TREE);
    }
  
! static void
! psa_FldLiteralN(struct cbl_field_t *field )
    {
!   Analyze();
!   SHOW_PARSE
!     {
!     SHOW_PARSE_HEADER
!     SHOW_PARSE_FIELD(" ", field)
!     SHOW_PARSE_END
!     }
!   // We are constructing a completely static constant structure, based on the
!   // text string in .initial
! 
!   CHECK_FIELD(field);
  
    FIXED_WIDE_INT(128) value = 0;
  
!   do
      {
!     // This is a false do{}while, to isolate the variables:
  
!     // We need to convert data.initial to an FIXED_WIDE_INT(128) value
!     char *p = const_cast<char *>(field->data.initial);
!     int sign = 1;
!     if( *p == '-' )
!       {
!       field->attr |= signable_e;
!       sign = -1;
!       p += 1;
!       }
!     else if( *p == '+' )
!       {
!       // We set it signable so that the instruction DISPLAY +1
!       // actually outputs "+1"
!       field->attr |= signable_e;
!       p += 1;
!       }
  
!     //  We need to be able to handle
!     //  123
!     //  123.456
!     //  123E<exp>
!     //  123.456E<exp>
!     //  where <exp> can be N, +N and -N
!     //
!     //  Oh, yeah, and we're talking handling up to 32 digits, or more, so using
!     //  library routines is off the table.
  
!     int digits = 0;
!     int rdigits = 0;
!     int rdigit_delta = 0;
!     int exponent = 0;
  
!     const char *exp = strchr(p, 'E');
!     if( !exp )
        {
!       exp = strchr(p, 'e');
        }
!     if(exp)
        {
!       exponent = atoi(exp+1);
        }
  
!     // We can now calculate the value, and the number of digits and rdigits.
! 
!     // We count up leading zeroes as part of the attr->digits calculation.
!     // It turns out that certain comparisons need to know the number of digits,
!     // because "IF "2" EQUAL 002" is false, while "IF "2" EQUAL 2" is true.  So,
!     // we need to count up leading zeroes.
! 
!     for(;;)
        {
!       char ch = *p++;
!       if( ch == symbol_decimal_point() )
          {
!         rdigit_delta = 1;
!         continue;
          }
!       if( ch < '0' || ch > '9' )
          {
!         break;
          }
-       digits += 1;
-       rdigits += rdigit_delta;
-       value *= 10;
-       value += ch - '0';
        }
  
!     if( exponent < 0 )
!       {
!       rdigits += -exponent;
!       }
!     else
!       {
!       while(exponent--)
!         {
!         if(rdigits)
!           {
!           rdigits -= 1;
!           }
!         else
!           {
!           digits += 1;
!           value *= 10;
!           }
!         }
!       }
  
!     if(digits < rdigits)
!       {
!       digits = rdigits;
!       }
!     field->data.digits = digits;
!     field->data.rdigits = rdigits;
  
!     // We now need to calculate the capacity.
  
!     unsigned int min_prec = wi::min_precision(value, UNSIGNED);
!     int capacity;
!     if( min_prec > 64 )
!       {
!       // Bytes 15 through 8 are non-zero
!       capacity = 16;
!       }
!     else if( min_prec > 32 )
!       {
!       // Bytes 7 through 4 are non-zero
!       capacity = 8;
!       }
!     else if( min_prec > 16 )
!       {
!       // Bytes 3 and 2
!       capacity = 4;
!       }
!     else if( min_prec > 8 )
        {
!       // Byte 1 is non-zero
!       capacity = 2;
        }
!     else
        {
!       // The value is zero through 0xFF
!       capacity = 1;
        }
  
!     value *= sign;
  
!     // One last adjustment.  The number is signable, so the binary value
!     // is going to be treated as twos complement.  That means that the highest
!     // bit has to be 1 for negative signable numbers, and 0 for positive.  If
!     // necessary, adjust capacity up by one byte so that the variable fits:
  
!     if( capacity < 16 && (field->attr & signable_e) )
!       {
!       FIXED_WIDE_INT(128) mask
!         = wi::set_bit_in_zero<FIXED_WIDE_INT(128)>(capacity * 8 - 1);
!       if( wi::neg_p (value) && (value & mask) == 0 )
!         {
!         capacity *= 2;
!         }
!       else if( !wi::neg_p (value) && (value & mask) != 0 )
!         {
!         capacity *= 2;
!         }
!       }
!     field->data.capacity = capacity;
  
!     }while(0);
  
    char base_name[257];
    char id_string[32] = "";
--- 4166,4362 ----
    gg_call(VOID,
            "__gg__variables_to_init",
            gg_get_address_of(array),
!           wsclear() ? build_string_literal(1, (const char *)wsclear())
!                     : null_pointer_node,
            NULL_TREE);
    }
  
! static
! FIXED_WIDE_INT(128)
! dirty_to_binary(const char  *instring,
!                 uint32_t    &capacity,
!                 uint32_t    &digits,
!                 int32_t     &rdigits,
!                 uint64_t    &attr)
    {
!   digits = 0;
!   rdigits = 0;
!   attr = 0;
  
    FIXED_WIDE_INT(128) value = 0;
  
!   // We need to convert data.initial to an FIXED_WIDE_INT(128) value
!   const char *p = instring;
!   int sign = 1;
!   if( *p == '-' )
      {
!     attr |= signable_e;
!     sign = -1;
!     p += 1;
!     }
!   else if( *p == '+' )
!     {
!     // We set it signable so that the instruction DISPLAY +1
!     // actually outputs "+1"
!     attr |= signable_e;
!     p += 1;
!     }
  
!   //  We need to be able to handle
!   //  123
!   //  123.456
!   //  123E<exp>
!   //  123.456E<exp>
!   //  where <exp> can be N, +N and -N
!   //
!   //  Oh, yeah, and we're talking handling up to 32 digits, or more, so using
!   //  library routines is off the table.
  
!   int rdigit_delta = 0;
!   int exponent = 0;
!   const char *exp = strchr(p, 'E');
!   if( !exp )
!     {
!     exp = strchr(p, 'e');
!     }
!   if(exp)
!     {
!     exponent = atoi(exp+1);
!     }
  
!   // We can now calculate the value, and the number of digits and rdigits.
  
!   // We count up leading zeroes as part of the attr->digits calculation.
!   // It turns out that certain comparisons need to know the number of digits,
!   // because "IF "2" EQUAL 002" is false, while "IF "2" EQUAL 2" is true.  So,
!   // we need to count up leading zeroes.
! 
!   for(;;)
!     {
!     char ch = *p++;
!     if( ch == symbol_decimal_point() )
        {
!       rdigit_delta = 1;
!       continue;
        }
!     if( ch < '0' || ch > '9' )
        {
!       break;
        }
+     digits += 1;
+     rdigits += rdigit_delta;
+     value *= 10;
+     value += ch - '0';
+     }
  
!   if( exponent < 0 )
!     {
!     rdigits += -exponent;
!     }
!   else
!     {
!     while(exponent--)
        {
!       if(rdigits)
          {
!         rdigits -= 1;
          }
!       else
          {
!         digits += 1;
!         value *= 10;
          }
        }
+     }
  
!   if( (int32_t)digits < rdigits )
!     {
!     digits = rdigits;
!     }
  
!   // We now need to calculate the capacity.
  
!   unsigned int min_prec = wi::min_precision(value, UNSIGNED);
!   if( min_prec > 64 )
!     {
!     // Bytes 15 through 8 are non-zero
!     capacity = 16;
!     }
!   else if( min_prec > 32 )
!     {
!     // Bytes 7 through 4 are non-zero
!     capacity = 8;
!     }
!   else if( min_prec > 16 )
!     {
!     // Bytes 3 and 2
!     capacity = 4;
!     }
!   else if( min_prec > 8 )
!     {
!     // Byte 1 is non-zero
!     capacity = 2;
!     }
!   else
!     {
!     // The value is zero through 0xFF
!     capacity = 1;
!     }
  
!   value *= sign;
! 
!   // One last adjustment.  The number is signable, so the binary value
!   // is going to be treated as twos complement.  That means that the highest
!   // bit has to be 1 for negative signable numbers, and 0 for positive.  If
!   // necessary, adjust capacity up by one byte so that the variable fits:
! 
!   if( capacity < 16 && (attr & signable_e) )
!     {
!     FIXED_WIDE_INT(128) mask
!       = wi::set_bit_in_zero<FIXED_WIDE_INT(128)>(capacity * 8 - 1);
!     if( wi::neg_p (value) && (value & mask) == 0 )
        {
!       capacity *= 2;
        }
!     else if( !wi::neg_p (value) && (value & mask) != 0 )
        {
!       capacity *= 2;
        }
+     }
  
!   return value;
!   }
  
! static void
! psa_FldLiteralN(struct cbl_field_t *field )
!   {
!   Analyze();
!   SHOW_PARSE
!     {
!     SHOW_PARSE_HEADER
!     SHOW_PARSE_FIELD(" ", field)
!     SHOW_PARSE_END
!     }
!   // We are constructing a completely static constant structure, based on the
!   // text string in .initial
  
!   CHECK_FIELD(field);
  
!   uint32_t capacity;
!   uint32_t digits;
!   int32_t  rdigits;
!   uint64_t attr;
!   FIXED_WIDE_INT(128) value = dirty_to_binary(field->data.original(),
!                                               capacity,
!                                               digits,
!                                               rdigits,
!                                               attr);
!   // This is a rare occurrence of a parser_xxx call changing the entry
!   // in the symbol table.
!   field->data.capacity = capacity;
!   field->data.digits   = digits;
!   field->data.rdigits  = rdigits;
!   field->attr         |= attr;
  
    char base_name[257];
    char id_string[32] = "";
*************** parser_alphabet( const cbl_alphabet_t& a
*** 5136,5144 ****
          // character i has the ordinal alphabet[i]
          unsigned char ch = i;
  
!         ach[ch] = (alphabet.alphabet[i]);
          gg_assign(  gg_array_value(table256, ch),
!                     build_int_cst_type(UCHAR, (alphabet.alphabet[i])) );
          }
  
        unsigned int low_char  = alphabet.low_char;
--- 5157,5165 ----
          // character i has the ordinal alphabet[i]
          unsigned char ch = i;
  
!         ach[ch] = (alphabet.collation_sequence[i]);
          gg_assign(  gg_array_value(table256, ch),
!                     build_int_cst_type(UCHAR, (alphabet.collation_sequence[i])) );
          }
  
        unsigned int low_char  = alphabet.low_char;
*************** parser_allocate(cbl_refer_t size_or_base
*** 6811,6817 ****
    cbl_field_t *f_working = current_options().initial_working();
    cbl_field_t *f_local   = current_options().initial_local();
  
!   int default_byte = wsclear() ? *wsclear() : -1;
  
    gg_call(VOID,
            "__gg__allocate",
--- 6832,6838 ----
    cbl_field_t *f_working = current_options().initial_working();
    cbl_field_t *f_local   = current_options().initial_local();
  
!   unsigned int default_byte = wsclear() ? *wsclear() : (uint32_t)(-1);
  
    gg_call(VOID,
            "__gg__allocate",
*************** parser_label_label(struct cbl_label_t *l
*** 8201,8207 ****
      }
  
    CHECK_LABEL(label);
!   
  #if 1
    // At the present time, label_verify.lay is returning true, so I edited
    // out the if( !... ) to quiet cppcheck
--- 8222,8228 ----
      }
  
    CHECK_LABEL(label);
! 
  #if 1
    // At the present time, label_verify.lay is returning true, so I edited
    // out the if( !... ) to quiet cppcheck
*************** parser_label_goto(struct cbl_label_t *la
*** 8252,8258 ****
      }
  
    CHECK_LABEL(label);
!   
    label_verify.go_to(label);
  
    label_verify.go_to(label);
--- 8273,8279 ----
      }
  
    CHECK_LABEL(label);
! 
    label_verify.go_to(label);
  
    label_verify.go_to(label);
*************** parser_file_open( size_t nfiles, struct
*** 9933,9938 ****
--- 9954,9997 ----
      }
    }
  
+ static
+ tree get_the_filename(bool &quoted_name, const cbl_file_t *file)
+   {
+   // The cbl_file_t has a cbl_field_t *filename.  This can be a FldAlphanumeric.
+   // The runtime has a (char *)filename, so we need to
+   // do a runtime conversion.
+ 
+   tree psz;   // This is going to be either the name of the file, or the
+   // possible run-time environment variable that will contain
+   // the name of the file.
+ 
+   cbl_field_t *field_of_name = symbol_field_forward(file->filename);
+   quoted_name = false;
+   if( field_of_name->type == FldForward )
+     {
+     // The target of ASSIGN TO was unquoted, but didn't resolve to a
+     // cbl_field_t.  This means that the name of the field is an
+     // environment variable that will hold the file name
+     psz = gg_define_char_star();
+     gg_assign(psz, gg_strdup(gg_string_literal(field_of_name->name)));
+     }
+   else
+     {
+     // The name is coming from a presumably FldAlphaNumeric variable
+     psz = get_string_from(field_of_name);
+     gg_call( CHAR_P,
+              "__gg__convert_encoding",
+              psz,
+              build_int_cst_type(INT,
+                                 field_of_name->codeset.encoding),
+              build_int_cst_type(INT,
+                                 DEFAULT_SOURCE_ENCODING),
+              NULL_TREE);
+     quoted_name = true;
+     }
+   return psz;
+   }
+ 
  void
  parser_file_open( struct cbl_file_t *file, int mode_char )
    {
*************** parser_file_open( struct cbl_file_t *fil
*** 9985,10029 ****
      TRACE1_END
      }
  
!   // The cbl_file_t has a cbl_field_t *filename.  This can be a FldAlphanumeric.
!   // The runtime has a (char *)filename, so we need to
!   // do a runtime conversion.
! 
!   tree psz;   // This is going to be either the name of the file, or the
!   // possible run-time environment variable that will contain
!   // the name of the file.
! 
!   cbl_field_t *field_of_name = symbol_field_forward(file->filename);
!   bool quoted_name = false;
!   if( field_of_name->type == FldForward )
!     {
!     // The target of ASSIGN TO was unquoted, but didn't resolve to a
!     // cbl_field_t.  This means that the name of the field is an
!     // environment variable that will hold the file name
!     psz = gg_define_char_star();
!     gg_assign(psz, gg_strdup(gg_string_literal(field_of_name->name)));
!     }
!   else
!     {
!     // The name is coming from a presumably FldAlphaNumeric variable
!     psz = get_string_from(field_of_name);
!     gg_call( CHAR_P,
!              "__gg__convert_encoding",
!              psz,
!              build_int_cst_type(INT,
!                                 field_of_name->codeset.encoding),
!              build_int_cst_type(INT,
!                                 DEFAULT_CHARMAP_SOURCE),
!              NULL_TREE);
!     quoted_name = true;
!     }
  
    sv_is_i_o = true;
    store_location_stuff("OPEN");
    gg_call(VOID,
            "__gg__file_open",
            gg_get_address_of(file->var_decl_node),
!           psz,
            build_int_cst_type(INT, mode_char),
            quoted_name ? integer_one_node : integer_zero_node,
            NULL_TREE);
--- 10044,10058 ----
      TRACE1_END
      }
  
!   bool quoted_name;
!   tree pszFilename = get_the_filename(quoted_name, file);
  
    sv_is_i_o = true;
    store_location_stuff("OPEN");
    gg_call(VOID,
            "__gg__file_open",
            gg_get_address_of(file->var_decl_node),
!           pszFilename,
            build_int_cst_type(INT, mode_char),
            quoted_name ? integer_one_node : integer_zero_node,
            NULL_TREE);
*************** parser_file_delete( struct cbl_file_t *f
*** 10384,10389 ****
--- 10413,10533 ----
      }
    }
  
+ static void
+ set_up_delete_file_label(cbl_label_t *delete_file_label)
+   {
+   if( delete_file_label )
+     {
+     if( !delete_file_label->structs.delete_file )
+       {
+       delete_file_label->structs.delete_file
+         = static_cast<cbl_delete_file_t *>
+                                   (xmalloc(sizeof(struct cbl_delete_file_t)));
+       // Set up the address pairs for this clause
+       gg_create_goto_pair(
+                   &delete_file_label->structs.delete_file->over.go_to,
+                   &delete_file_label->structs.delete_file->over.label);
+       gg_create_goto_pair(
+                   &delete_file_label->structs.delete_file->exception.go_to,
+                   &delete_file_label->structs.delete_file->exception.label);
+       gg_create_goto_pair(
+                   &delete_file_label->structs.delete_file->no_exception.go_to,
+                   &delete_file_label->structs.delete_file->no_exception.label);
+       gg_create_goto_pair(
+                   &delete_file_label->structs.delete_file->bottom.go_to,
+                   &delete_file_label->structs.delete_file->bottom.label);
+       }
+     }
+   }
+ 
+ void
+ parser_file_delete_file( cbl_label_t *name,
+                          std::vector<cbl_file_t*> filenames )
+   {
+   // This removes a file from the file system.  It is distinct from the
+   // FILE DELETE statement, which deletes a record from a file.
+   SHOW_PARSE
+     {
+     SHOW_PARSE_HEADER
+     SHOW_PARSE_TEXT(" ");
+     SHOW_PARSE_TEXT(name->name);
+     for(size_t i=0; i<filenames.size(); i++)
+       {
+       SHOW_PARSE_INDENT
+       SHOW_PARSE_TEXT(filenames[i]->name)
+       }
+     SHOW_PARSE_END
+     }
+   set_up_delete_file_label(name);
+   tree there_was_an_error = gg_define_int(0);
+   for(size_t i=0; i<filenames.size(); i++)
+     {
+     bool quoted_name;
+     tree pszFilename = get_the_filename(quoted_name, filenames[i]);
+     gg_assign(there_was_an_error,
+               gg_bitwise_or(there_was_an_error,
+                             gg_call_expr(
+                             INT,
+                             "__gg__file_remove",
+                             gg_get_address_of(filenames[i]->var_decl_node),
+                             pszFilename,
+                             quoted_name ? integer_one_node : integer_zero_node,
+                             NULL_TREE)));
+     set_user_status(filenames[i]);
+     }
+   IF( there_was_an_error, eq_op, integer_zero_node )
+     {
+     // There was no error detected.
+     gg_append_statement(name->structs.delete_file->no_exception.go_to);
+     }
+   ELSE
+     {
+     // There was an error detected.
+     gg_append_statement(name->structs.delete_file->exception.go_to);
+     }
+   }
+ 
+ void
+ parser_file_delete_on_exception( cbl_label_t *name )
+   {
+   SHOW_PARSE
+     {
+     SHOW_PARSE_HEADER
+     SHOW_PARSE_TEXT(" ");
+     SHOW_PARSE_TEXT(name->name);
+     SHOW_PARSE_END
+     }
+   gg_append_statement(name->structs.delete_file->bottom.go_to);
+   gg_append_statement(name->structs.delete_file->exception.label);
+   }
+ 
+ void
+ parser_file_delete_not_exception( cbl_label_t *name )
+   {
+   SHOW_PARSE
+     {
+     SHOW_PARSE_HEADER
+     SHOW_PARSE_TEXT(" ");
+     SHOW_PARSE_TEXT(name->name);
+     SHOW_PARSE_END
+     }
+   gg_append_statement(name->structs.delete_file->bottom.go_to);
+   gg_append_statement(name->structs.delete_file->no_exception.label);
+   }
+ 
+ void
+ parser_file_delete_end( cbl_label_t *name )
+   {
+   SHOW_PARSE
+     {
+     SHOW_PARSE_HEADER
+     SHOW_PARSE_TEXT(" ");
+     SHOW_PARSE_TEXT(name->name);
+     SHOW_PARSE_END
+     }
+   gg_append_statement(name->structs.delete_file->bottom.label);
+   }
+ 
  void
  parser_file_rewrite(cbl_file_t *file,
                      cbl_field_t *record_area,
*************** parser_call(   cbl_refer_t name,
*** 13639,13645 ****
      create_and_call(narg,
                      args,
                      NULL_TREE,
!                     name.field->data.initial,
                      returned_value_type,
                      returned,
                      not_except);
--- 13783,13789 ----
      create_and_call(narg,
                      args,
                      NULL_TREE,
!                     name.field->data.original(),
                      returned_value_type,
                      returned,
                      not_except);
*************** parser_entry( const cbl_field_t *name, s
*** 13747,13753 ****
      {
      SHOW_PARSE_HEADER
      SHOW_PARSE_TEXT(" ")
!     SHOW_PARSE_TEXT(name->data.initial)
      SHOW_PARSE_END
      }
  
--- 13891,13897 ----
      {
      SHOW_PARSE_HEADER
      SHOW_PARSE_TEXT(" ")
!     SHOW_PARSE_TEXT(name->data.original())
      SHOW_PARSE_END
      }
  
*************** parser_entry( const cbl_field_t *name, s
*** 13756,13762 ****
  
    // Get the name of the ENTRY point.
    // cppcheck-suppress nullPointerRedundantCheck
!   char *psz = cobol_name_mangler(name->data.initial);
  
    // Create a goto/label pair.  The label will be set up here; the goto will
    // be used when we re-enter the containing function:
--- 13900,13906 ----
  
    // Get the name of the ENTRY point.
    // cppcheck-suppress nullPointerRedundantCheck
!   char *psz = cobol_name_mangler(name->data.original());
  
    // Create a goto/label pair.  The label will be set up here; the goto will
    // be used when we re-enter the containing function:
*************** mh_source_is_literalN(cbl_refer_t &destr
*** 14642,14654 ****
            SHOW_PARSE_TEXT("mh_source_is_literalN: __gg__psz_to_alpha_move")
            }
  
-         // We know that the encoding of the literal::initial is in ASCII
- 
          // We need the data sent to __gg__psz_to_alpha_move to be in the
          // encoding of the destination
  
          size_t charsout;
!         const char *converted = __gg__iconverter(DEFAULT_CHARMAP_SOURCE,
                                           destref.field->codeset.encoding,
                                           sourceref.field->data.initial,
                                           strlen(sourceref.field->data.initial),
--- 14786,14797 ----
            SHOW_PARSE_TEXT("mh_source_is_literalN: __gg__psz_to_alpha_move")
            }
  
          // We need the data sent to __gg__psz_to_alpha_move to be in the
          // encoding of the destination
  
          size_t charsout;
!         const char *converted = __gg__iconverter(
!                                          sourceref.field->codeset.encoding,
                                           destref.field->codeset.encoding,
                                           sourceref.field->data.initial,
                                           strlen(sourceref.field->data.initial),
*************** real_powi10 (uint32_t x)
*** 16086,16139 ****
    return pow10;
  }
  
  char *
! binary_initial_from_float128(cbl_field_t *field, int rdigits,
!                              REAL_VALUE_TYPE value)
    {
    // This routine returns an xmalloced buffer designed to replace the
    // data.initial member of the incoming field
    char *retval = NULL;
  
!   // We need to adjust value so that it has no decimal places
!   if( rdigits )
      {
!       REAL_VALUE_TYPE pow10 = real_powi10 (rdigits);
!       real_arithmetic (&value, MULT_EXPR, &value, &pow10);
!       real_convert (&value, TYPE_MODE (float128_type_node), &value);
      }
-   // We need to make sure that the resulting string will fit into
-   // a number with 'digits' digits
  
!   // Keep in mind that pure binary types, like BINARY-CHAR, have no digits
!   if( field->data.digits )
      {
!       REAL_VALUE_TYPE pow10 = real_powi10 (field->data.digits);
!       mpfr_t m0, m1;
! 
!       mpfr_inits2 (REAL_MODE_FORMAT (TYPE_MODE (float128_type_node))->p,
!                    m0, m1, NULL);
!       mpfr_from_real (m0, &value, MPFR_RNDN);
!       mpfr_from_real (m1, &pow10, MPFR_RNDN);
!       mpfr_clear_flags ();
!       mpfr_fmod (m0, m0, m1, MPFR_RNDN);
!       real_from_mpfr (&value, m0,
!                       REAL_MODE_FORMAT (TYPE_MODE (float128_type_node)),
!                       MPFR_RNDN);
!       real_convert (&value, TYPE_MODE (float128_type_node), &value);
!       mpfr_clears (m0, m1, NULL);
      }
- 
-   real_roundeven (&value, TYPE_MODE (float128_type_node), &value);
- 
-   bool fail = false;
-   FIXED_WIDE_INT(128) i
-     = FIXED_WIDE_INT(128)::from (real_to_integer (&value, &fail, 128), SIGNED);
  
    retval = static_cast<char *>(xmalloc(field->data.capacity));
    gcc_assert(retval);
    switch(field->data.capacity)
      {
!       tree type;
      case 1:
      case 2:
      case 4:
--- 16229,16278 ----
    return pow10;
  }
  
+ static
  char *
! binary_initial(cbl_field_t *field)
    {
    // This routine returns an xmalloced buffer designed to replace the
    // data.initial member of the incoming field
    char *retval = NULL;
  
!   uint32_t capacity;
!   uint32_t ddigits;
!   int32_t  drdigits;
!   uint64_t attr;
!   FIXED_WIDE_INT(128) value128 = dirty_to_binary(field->data.original(),
!                                                  capacity,
!                                                  ddigits,
!                                                  drdigits,
!                                                  attr);
!   int scaled_rdigits = get_scaled_rdigits(field);
! 
!   int i = field->data.rdigits;
!   while( i<0 )
      {
!     value128 = value128/10;
!     i += 1;
      }
  
!   // We take the digits of value128, and put them into ach.  We line up
!   // the rdigits, and we truncate the string after desired_digits
!   while(drdigits < scaled_rdigits)
      {
!     value128 *= 10;
!     drdigits += 1;
!     }
!   while(drdigits > scaled_rdigits)
!     {
!     value128 = value128 / 10;
!     drdigits -= 1;
      }
  
    retval = static_cast<char *>(xmalloc(field->data.capacity));
    gcc_assert(retval);
    switch(field->data.capacity)
      {
!     tree type;
      case 1:
      case 2:
      case 4:
*************** binary_initial_from_float128(cbl_field_t
*** 16141,16152 ****
      case 16:
        type = build_nonstandard_integer_type ( field->data.capacity
                                                * BITS_PER_UNIT, 0);
!       native_encode_wide_int (type, i, PTRCAST(unsigned char, retval),
                                field->data.capacity);
        break;
      default:
        fprintf(stderr,
!               "Trouble in binary_initial_from_float128 at %s() %s:%d\n",
                __func__,
                __FILE__,
                __LINE__);
--- 16280,16291 ----
      case 16:
        type = build_nonstandard_integer_type ( field->data.capacity
                                                * BITS_PER_UNIT, 0);
!       native_encode_wide_int (type, value128, PTRCAST(unsigned char, retval),
                                field->data.capacity);
        break;
      default:
        fprintf(stderr,
!               "Trouble in binary_initial at %s() %s:%d\n",
                __func__,
                __FILE__,
                __LINE__);
*************** binary_initial_from_float128(cbl_field_t
*** 16157,16162 ****
--- 16296,16355 ----
    return retval;
    }
  
+ static void
+ digits_from_int128( char                *ach,
+                     cbl_field_t         *field,
+                     uint32_t             desired_digits,
+                     FIXED_WIDE_INT(128)  value128, // cppcheck-suppress unknownMacro
+                     int32_t              rdigits)
+   {
+   if( value128 < 0 )
+     {
+     value128 = -value128;
+     }
+ 
+   // 'rdigits' are the number of rdigits in value128.
+ 
+   int scaled_rdigits = get_scaled_rdigits(field);
+ 
+   int i = field->data.rdigits;
+   while( i<0 )
+     {
+     value128 = value128/10;
+     i += 1;
+     }
+ 
+   // We take the digits of value128, and put them into ach.  We line up
+   // the rdigits, and we truncate the string after desired_digits
+   while(rdigits < scaled_rdigits)
+     {
+     value128 *= 10;
+     rdigits += 1;
+     }
+   while(rdigits > scaled_rdigits)
+     {
+     value128 = value128 / 10;
+     rdigits -= 1;
+     }
+   char conv[128];
+   print_dec (value128, conv, SIGNED);
+   size_t len = strlen(conv);
+ 
+   if( len<desired_digits )
+     {
+     memset(ach, ascii_0, desired_digits - len);
+     strcpy(ach+desired_digits - len, conv);
+     }
+   else
+     {
+     strcpy(ach, conv + len-desired_digits);
+     }
+   }
+ 
+ #if 0
+ // This routine was replaced with digits_from_int1289.  However, I am choosing
+ // to keep it around for a while, because it is a master class in manipulating
+ // REAL_VALUE_TYPE and FIXED_WIDE_INT
  
  static void
  digits_from_float128(char *retval, cbl_field_t *field, size_t width, int rdigits, REAL_VALUE_TYPE value)
*************** digits_from_float128(char *retval, cbl_f
*** 16194,16201 ****
    // We convert it to a integer string of digits:
    print_dec (i, ach, SIGNED);
  
-   //fprintf(stderr, "digits_from_float128() %s %f %s ", field->name, (double)value, ach);
- 
    gcc_assert( strlen(ach) <= field->data.digits );
    if( strlen(ach) < width )
      {
--- 16387,16392 ----
*************** digits_from_float128(char *retval, cbl_f
*** 16203,16208 ****
--- 16394,16400 ----
      }
    strcpy(retval + (width-strlen(ach)), ach);
    }
+ #endif
  
  static char *
  initial_from_initial(cbl_field_t *field)
*************** initial_from_initial(cbl_field_t *field)
*** 16211,16220 ****
    // This routine returns an xmalloced buffer that is intended to replace the
    // data.initial member of the incoming field.
  
!   //fprintf(stderr, "initial_from_initial %s\n", field->name);
  
    char *retval = NULL;
-   int rdigits;
  
    // Let's handle the possibility of a figurative constant
    cbl_figconst_t figconst = cbl_figconst_of(field->data.initial);
--- 16403,16411 ----
    // This routine returns an xmalloced buffer that is intended to replace the
    // data.initial member of the incoming field.
  
!   //fprintf(stderr, " %s\n", field->name);
  
    char *retval = NULL;
  
    // Let's handle the possibility of a figurative constant
    cbl_figconst_t figconst = cbl_figconst_of(field->data.initial);
*************** initial_from_initial(cbl_field_t *field)
*** 16253,16258 ****
--- 16444,16451 ----
    if( field->data.etc_type == cbl_field_data_t::value_e )
      value = TREE_REAL_CST (field->data.value_of ());
  
+ #if 0
+   int rdigits;
    // There is always the infuriating possibility of a P-scaled number
    if( field->attr & scaled_e )
      {
*************** initial_from_initial(cbl_field_t *field)
*** 16288,16304 ****
      // Not P-scaled
      rdigits = field->data.rdigits;
      }
  
    switch(field->type)
      {
      case FldNumericBin5:
      case FldIndex:
!       retval = binary_initial_from_float128(field, rdigits, value);
        break;
  
      case FldNumericBinary:
        {
!       retval = binary_initial_from_float128(field, rdigits, value);
        size_t left = 0;
        size_t right = field->data.capacity - 1;
        while(left < right)
--- 16481,16498 ----
      // Not P-scaled
      rdigits = field->data.rdigits;
      }
+ #endif
  
    switch(field->type)
      {
      case FldNumericBin5:
      case FldIndex:
!       retval = binary_initial(field);
        break;
  
      case FldNumericBinary:
        {
!       retval = binary_initial(field);
        size_t left = 0;
        size_t right = field->data.capacity - 1;
        while(left < right)
*************** initial_from_initial(cbl_field_t *field)
*** 16328,16334 ****
          negative = false;
          }
  
!       digits_from_float128(ach, field, field->data.digits, rdigits, value);
  
        const char *digits = ach;
        if(    (field->attr & signable_e)
--- 16522,16538 ----
          negative = false;
          }
  
!       // Convert the data.initial to a __int128
!       uint32_t capacity;
!       uint32_t ddigits;
!       int32_t  drdigits;
!       uint64_t attr;
!       FIXED_WIDE_INT(128) value128 = dirty_to_binary(field->data.initial,
!                                                      capacity,
!                                                      ddigits,
!                                                      drdigits,
!                                                      attr);
!       digits_from_int128(ach, field, field->data.digits, value128, drdigits);
  
        const char *digits = ach;
        if(    (field->attr & signable_e)
*************** initial_from_initial(cbl_field_t *field)
*** 16404,16410 ****
        size_t ndigits =   (field->attr & separate_e)
                         ? field->data.capacity * 2
                         : field->data.capacity * 2 - 1;
!       digits_from_float128(ach, field, ndigits, rdigits, value);
  
        const char *digits = ach;
        for(size_t i=0; i<ndigits; i++)
--- 16608,16623 ----
        size_t ndigits =   (field->attr & separate_e)
                         ? field->data.capacity * 2
                         : field->data.capacity * 2 - 1;
!       uint32_t capacity;
!       uint32_t ddigits;
!       int32_t  drdigits;
!       uint64_t attr;
!       FIXED_WIDE_INT(128) value128 = dirty_to_binary(field->data.initial,
!                                                      capacity,
!                                                      ddigits,
!                                                      drdigits,
!                                                      attr);
!       digits_from_int128(ach, field, ndigits, value128, drdigits);
  
        const char *digits = ach;
        for(size_t i=0; i<ndigits; i++)
*************** initial_from_initial(cbl_field_t *field)
*** 16517,16529 ****
          else
            {
            size_t ndigits = field->data.capacity;
!           digits_from_float128(ach, field, ndigits, rdigits, value);
!           /* ???  This resides in libgcobol valconv.cc.  */
            __gg__string_to_numeric_edited( retval,
                                            ach,
                                            field->data.rdigits,
                                            negative,
                                            field->data.picture);
            }
          }
        break;
--- 16730,16760 ----
          else
            {
            size_t ndigits = field->data.capacity;
!           uint32_t capacity;
!           uint32_t ddigits;
!           int32_t  drdigits;
!           uint64_t attr;
!           FIXED_WIDE_INT(128) value128 = dirty_to_binary(field->data.original(),
!                                                          capacity,
!                                                          ddigits,
!                                                          drdigits,
!                                                          attr);
!           digits_from_int128(ach, field, ndigits, value128, drdigits);
! 
!           // __gg__string_to_numeric_edited operates in ASCII space:
            __gg__string_to_numeric_edited( retval,
                                            ach,
                                            field->data.rdigits,
                                            negative,
                                            field->data.picture);
+           // So now we convert it to the target encoding:
+           size_t nbytes;
+           const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
+                                                    field->codeset.encoding,
+                                                    retval,
+                                                    strlen(retval),
+                                                    &nbytes);
+           strcpy(retval, converted);
            }
          }
        break;
*************** initial_from_initial(cbl_field_t *field)
*** 16556,16565 ****
  
      case FldLiteralN:
        {
! ////      retval = static_cast<char *>(xmalloc(field->data.capacity+1));
! ////      gcc_assert(retval);
! ////      memcpy(retval, field->data.initial, field->data.capacity);
! ////      retval[field->data.capacity] = '\0';
        break;
        }
  
--- 16787,16818 ----
  
      case FldLiteralN:
        {
!       // This requires annotation.
! 
!       // The compiler originally used ASCII for field->data.initial. Later we
!       // expanded the field with the addition of the codeset.encoding
!       // For consistency in the parser processing, the FldLiteralN is arriving
!       // with the Object-Computer's character encoding, and field->data.initial
!       // is showing up encoded.
! 
!       // But on the run-time side, if the initial string is needed, it is
!       // invariably more useful in ASCII.  Consider converting that string to
!       // a floating-point value, for example.
! 
!       // So, we are going to convert the data.initial string back to ASCII
!       // here.  Later on, when we establish the run-time encoding, we will
!       // check for FldLiteralN and set that to ASCII as well. See
!       // actually_create_the_static_field().
! 
!       size_t nbytes;
!       const char *converted = __gg__iconverter(field->codeset.encoding,
!                                                DEFAULT_SOURCE_ENCODING,
!                                                field->data.initial,
!                                                strlen(field->data.initial),
!                                                &nbytes);
!       retval = static_cast<char *>(xmalloc(strlen(field->data.initial)+1));
!       gcc_assert(retval);
!       strcpy(retval, converted);
        break;
        }
  
*************** actually_create_the_static_field( cbl_fi
*** 16716,16724 ****
    next_field = TREE_CHAIN(next_field);
  
    //  INT,     "encoding",
    CONSTRUCTOR_APPEND_ELT(CONSTRUCTOR_ELTS(constr),
                          next_field,
!                         build_int_cst_type(INT, new_var->codeset.encoding));
    next_field = TREE_CHAIN(next_field);
  
    //  INT,     "alphabet",
--- 16969,16982 ----
    next_field = TREE_CHAIN(next_field);
  
    //  INT,     "encoding",
+   //  For FldLiteralN we force the encoding to be ASCII.
+   //  See initial_from_initial() for an explanation.
    CONSTRUCTOR_APPEND_ELT(CONSTRUCTOR_ELTS(constr),
                          next_field,
!                         build_int_cst_type(INT,
!                                            new_var->type == FldLiteralN ?
!                                                 DEFAULT_SOURCE_ENCODING
!                                               : new_var->codeset.encoding));
    next_field = TREE_CHAIN(next_field);
  
    //  INT,     "alphabet",
*************** parser_symbol_add(struct cbl_field_t *ne
*** 17643,17648 ****
--- 17901,17910 ----
            length_of_initial_string = new_var->data.capacity+1;
            break;
  
+         case FldLiteralN:
+           length_of_initial_string = strlen(new_initial)+1;
+           break;
+ 
          default:
            length_of_initial_string = new_var->data.capacity;
            break;
diff -Nrcpad gcc-16-20251102/gcc/cobol/genapi.h gcc-16-20251109/gcc/cobol/genapi.h
*** gcc-16-20251102/gcc/cobol/genapi.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/genapi.h	Sun Nov  9 22:32:45 2025
*************** parser_file_rewrite( cbl_file_t *file, c
*** 400,405 ****
--- 400,411 ----
  void
  parser_file_delete( cbl_file_t *file, bool sequentially );
  
+ void parser_file_delete_file( cbl_label_t *name,
+                               std::vector<cbl_file_t*> filenames );
+ void parser_file_delete_on_exception( cbl_label_t *name );
+ void parser_file_delete_not_exception( cbl_label_t *name );
+ void parser_file_delete_end( cbl_label_t *name );
+ 
  #if condition_lists
  struct cbl_conditional_t {
    cbl_field_t *tgt;
diff -Nrcpad gcc-16-20251102/gcc/cobol/genmath.cc gcc-16-20251109/gcc/cobol/genmath.cc
*** gcc-16-20251102/gcc/cobol/genmath.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/genmath.cc	Sun Nov  9 22:32:45 2025
***************
*** 42,47 ****
--- 42,48 ----
  #include "gengen.h"
  #include "structs.h"
  #include "../../libgcobol/gcobolio.h"
+ #include "../../libgcobol/charmaps.h"
  #include "show_parse.h"
  
  void
diff -Nrcpad gcc-16-20251102/gcc/cobol/genutil.cc gcc-16-20251109/gcc/cobol/genutil.cc
*** gcc-16-20251102/gcc/cobol/genutil.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/genutil.cc	Sun Nov  9 22:32:45 2025
*************** get_literal_string(cbl_field_t *field)
*** 1744,1750 ****
    char *buffer = static_cast<char *>(xcalloc(1, buffer_length));
  
    size_t charsout;
!   const char *converted = __gg__iconverter(DEFAULT_CHARMAP_SOURCE,
                                       field->codeset.encoding,
                                       field->data.initial,
                                       field->data.capacity,
--- 1744,1750 ----
    char *buffer = static_cast<char *>(xcalloc(1, buffer_length));
  
    size_t charsout;
!   const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                       field->codeset.encoding,
                                       field->data.initial,
                                       field->data.capacity,
diff -Nrcpad gcc-16-20251102/gcc/cobol/parse.y gcc-16-20251109/gcc/cobol/parse.y
*** gcc-16-20251102/gcc/cobol/parse.y	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/parse.y	Sun Nov  9 22:32:45 2025
***************
*** 51,57 ****
      accept_envar_e,
    };
  
!   struct collating_an_t {
      const char *alpha, *national; 
    };
  
--- 51,57 ----
      accept_envar_e,
    };
  
!   struct coll_alphanat_t {
      const char *alpha, *national; 
    };
  
*************** class locale_tgt_t {
*** 575,581 ****
  			RD RECORD RECORDING RECORDS RECURSIVE
  			REDEFINES REEL REFERENCE RELATIVE REM REMAINDER REMARKS
  			REMOVAL RENAMES	 REPLACE REPLACING REPORT REPORTING REPORTS
! 			REPOSITORY RERUN RESERVE RESTRICTED RESUME
  			REVERSE REVERSED REWIND RF RH RIGHT ROUNDED RUN
  
  			SAME SCREEN SD
--- 575,581 ----
  			RD RECORD RECORDING RECORDS RECURSIVE
  			REDEFINES REEL REFERENCE RELATIVE REM REMAINDER REMARKS
  			REMOVAL RENAMES	 REPLACE REPLACING REPORT REPORTING REPORTS
! 			REPOSITORY RERUN RESERVE RESTRICTED RESUME RETRY
  			REVERSE REVERSED REWIND RF RH RIGHT ROUNDED RUN
  
  			SAME SCREEN SD
*************** class locale_tgt_t {
*** 702,709 ****
  %type   <number>        open_io alphabet_etc
  %type   <special_type>  device_name
  %type   <string>        numed  context_word ctx_name locale_spec
! %type   <collating_sequences> collating_sequences collating_ans 
! %type   <collating_name> collating_an 
  %type   <literal>       namestr alphabet_lit program_as repo_as
  %type   <field>         perform_cond kind_of_name
  %type   <refer>         alloc_ret
--- 702,709 ----
  %type   <number>        open_io alphabet_etc
  %type   <special_type>  device_name
  %type   <string>        numed  context_word ctx_name locale_spec
! %type   <char_class_locales> char_class_locales coll_alphanats 
! %type   <collating_name> coll_alphanat 
  %type   <literal>       namestr alphabet_lit program_as repo_as
  %type   <field>         perform_cond kind_of_name
  %type   <refer>         alloc_ret
*************** class locale_tgt_t {
*** 738,743 ****
--- 738,746 ----
                          relative_key_clause reserve_clause sharing_clause
  
  %type   <file>          filename read_body write_body delete_body
+ %type   <label>         delete_file_body
+ %type   <error>         delete_error delete_except delete_excepts
+                                                 
  %type   <file>		start_impl start_cond start_body
  %type   <rewrite_t>     rewrite_body
  %type   <min_max>       record_vary rec_contains from_to record_desc
*************** class locale_tgt_t {
*** 833,838 ****
--- 836,842 ----
                          global is_global anycase backward
                          end_display
                          exh_changed exh_named
+                         override
  %type   <number>        mistake globally first_last
  %type   <io_mode>   io_mode
  
*************** class locale_tgt_t {
*** 874,879 ****
--- 878,884 ----
  %type	<opt_init_sect>	        opt_init_sect
  %type	<number>        opt_init_value
  %type	<number>        locale_current loc_category user_default
+ %type   <string>        locale_name
  %type   <token_list>    loc_categories locale_tgt
  %type	<opt_round>	rounded round_between rounded_type rounded_mode
  %type	<opt_arith>	opt_arith_type
*************** class locale_tgt_t {
*** 901,907 ****
      struct { YYLTYPE loc; int token; literal_t name; } prog_end;
      struct { int token; special_name_t id; } special_type;
      struct { char locale_type; const char * name; } locale_phrase;
!              collating_an_t collating_sequences;
      struct collating_name_t { int token; const char *name; } collating_name;
      struct { size_t isym; cbl_encoding_t encoding; } codeset;
      struct { cbl_field_type_t type;
--- 906,912 ----
      struct { YYLTYPE loc; int token; literal_t name; } prog_end;
      struct { int token; special_name_t id; } special_type;
      struct { char locale_type; const char * name; } locale_phrase;
!              coll_alphanat_t char_class_locales;
      struct collating_name_t { int token; const char *name; } collating_name;
      struct { size_t isym; cbl_encoding_t encoding; } codeset;
      struct { cbl_field_type_t type;
*************** config_paragraphs: config_paragraph
*** 2371,2376 ****
--- 2376,2398 ----
  config_paragraph:
                  SPECIAL_NAMES '.'
          |       SPECIAL_NAMES '.' special_names '.'
+                 {
+                   std::reverse_iterator<symbol_elem_t *>
+                                         p(symbols_end()),
+                                      pend(symbols_begin(PROGRAM));
+                   for( ++p; p != pend; p++ ) {
+                     if( p->type == SymAlphabet ) {
+                       const auto& alphabet = *cbl_alphabet_of(&*p);
+                       if( alphabet.encoding == no_encoding_e ) {
+                         assert(alphabet.locale != 0 );
+                         const auto& missing = *cbl_locale_of(symbol_at(alphabet.locale));
+                         error_msg(alphabet.loc,
+                           "ALPHABET %qs references LOCALE %qs, which is not defined",
+                                   alphabet.name, missing.name);
+                       }
+                     }
+                   }
+                 }
          |       SOURCE_COMPUTER  '.' 
          |       SOURCE_COMPUTER  '.' NAME '.'
          |       SOURCE_COMPUTER  '.' NAME with_debug '.'
*************** with_debug:     with DEBUGGING MODE {
*** 2507,2525 ****
                  ;
  
  collations:     %empty
!         |       collation_classification
!         |       collation_sequence
!         |       collation_classification collation_sequence
!         |       collation_sequence collation_classification
                  ;
! collation_classification:
!                 character CLASSIFICATION collating_sequences[seq]
                  {
!                   warn_msg(@seq, "CHARACTER CLASSIFICATION ignored");
                  }
                  ;
! collation_sequence:
!                 program_kw collating SEQUENCE collating_sequences[seq]
                  {
                    if( !current.collating_sequence($seq.alpha) ) {
                      error_msg(@seq, "collating sequence already defined as '%s'",
--- 2529,2564 ----
                  ;
  
  collations:     %empty
!         |       char_classification
!         |       collating_sequence
!         |       char_classification collating_sequence
!         |       collating_sequence char_classification
                  ;
! char_classification:
!                 character CLASSIFICATION char_class_locales[seq]
                  {
!                   if( $seq.alpha ) {
!                     auto e = symbol_locale(PROGRAM, $seq.alpha);
!                     if( !e ) {
!                       error_msg(@seq, "no LOCALE defined as %qs", $seq.alpha);
!                     } else {
!                       auto& encoding = cbl_locale_of(e)->encoding;
!                       current.alpha_encoding(symbol_index(e), encoding);
!                     }
!                   }
!                   if( $seq.national ) {
!                     auto e = symbol_locale(PROGRAM, $seq.national);
!                     if( !e ) {
!                       error_msg(@seq, "no LOCALE defined as %qs", $seq.national);
!                     } else {
!                       auto& encoding = cbl_locale_of(e)->encoding;
!                       current.national_encoding(symbol_index(e), encoding);
!                     }
!                   }
                  }
                  ;
! collating_sequence:
!                 program_kw collating SEQUENCE char_class_locales[seq]
                  {
                    if( !current.collating_sequence($seq.alpha) ) {
                      error_msg(@seq, "collating sequence already defined as '%s'",
*************** collation_sequence:
*** 2529,2548 ****
                  }
                  ;
  
! collating_sequences:
                  is NAME[name] {
                    $$.alpha = $name;
                    $$.national = nullptr;
                  }
!         |       collating_ans { $$ = $1; }
                  ;
! collating_ans:  collating_an[encoding] {
!                   $$ = collating_an_t();
                    const char **pname =
                      $encoding.token == ALPHANUMERIC? &$$.alpha : &$$.national;
                    *pname = $encoding.name;
                  }
!         |       collating_ans collating_an[encoding]
                  {
                    const char **pname =
                      $encoding.token == ALPHANUMERIC? &$$.alpha : &$$.national;
--- 2568,2587 ----
                  }
                  ;
  
! char_class_locales:
                  is NAME[name] {
                    $$.alpha = $name;
                    $$.national = nullptr;
                  }
!         |       coll_alphanats { $$ = $1; }
                  ;
! coll_alphanats: coll_alphanat[encoding] {
!                   $$ = coll_alphanat_t();
                    const char **pname =
                      $encoding.token == ALPHANUMERIC? &$$.alpha : &$$.national;
                    *pname = $encoding.name;
                  }
!         |       coll_alphanats coll_alphanat[encoding]
                  {
                    const char **pname =
                      $encoding.token == ALPHANUMERIC? &$$.alpha : &$$.national;
*************** collating_ans:  collating_an[encoding] {
*** 2553,2559 ****
                    *pname = $encoding.name;
                  }
                  ;
! collating_an:   for alphanational is locale_phrase[locale] {
                    $$.token = $alphanational;
                    $$.name = $locale.name;
                    if( ! $locale.name ) {
--- 2592,2598 ----
                    *pname = $encoding.name;
                  }
                  ;
! coll_alphanat:  for alphanational is locale_phrase[locale] {
                    $$.token = $alphanational;
                    $$.name = $locale.name;
                    if( ! $locale.name ) {
*************** collating_an:   for alphanational is loc
*** 2568,2574 ****
                                        keyword_str($$.token),
                                        locale_name);
                    }
-                   warn_msg(@locale, "LOCALE phrase ignored");
                  }
                  ;             
  
--- 2607,2612 ----
*************** special_name:   dev_mnemonic
*** 2643,2651 ****
                  {
                    symbol_decimal_point_set(',');
                  }
!         |       LOCALE NAME is locale_spec[spec] {
!                   current.locale($NAME, $spec);
!                   cbl_unimplementedw("sorry, unimplemented: LOCALE %qs", $spec);
                  }
                  ;
          |       upsi
--- 2681,2700 ----
                  {
                    symbol_decimal_point_set(',');
                  }
!         |       LOCALE NAME is locale_spec[spec]
!                 {
!                   cbl_locale_t locale($NAME, $spec);
!                   if( locale.encoding == no_encoding_e ) {
!                     error_msg(@NAME, "invalid iconv LOCALE name %qs", $spec);
!                     YYERROR;
!                   }
!                   if( locale.encoding == UTF8_e ) {
!                     cbl_unimplemented("UTF-8");
!                     YYERROR; 
!                   }
!                   if( ! current.locale_add(locale) ) {
!                     error_msg(@NAME, "%qs already defined as LOCALE name", $NAME);
!                   }
                  }
                  ;
          |       upsi
*************** special_name:   dev_mnemonic
*** 2655,2660 ****
--- 2704,2711 ----
                  }
                  ;
  locale_spec:    NAME    { $$ = $1; }
+         |       UTF_8   { static char s[] ="UTF-8";  $$ = s; }
+         |       UTF_16  { static char s[] ="UTF-16"; $$ = s; }
          |       LITERAL { $$ = string_of($1); }
  
                  ;
*************** device_name:	SYSIN           { $$.token
*** 2746,2759 ****
  alphabet_name:  STANDARD_ALPHABET  { $$ = alphabet_add(@1, CP1252_e); }
          |       NATIVE             { $$ = alphabet_add(@1, EBCDIC_e); }
          |       EBCDIC             { $$ = alphabet_add(@1, EBCDIC_e); }
!         |       LOCALE ctx_name
                  {
!                   auto e = symbol_alphabet(PROGRAM, $ctx_name);
                    if( !e ) {
!                     error_msg(@ctx_name, "no such ALPHABET %qs", $ctx_name);
!                     YYERROR;
!                   }
!                   $$ = cbl_alphabet_of(e);
                  }
          |       alphabet_seqs
                  {
--- 2797,2812 ----
  alphabet_name:  STANDARD_ALPHABET  { $$ = alphabet_add(@1, CP1252_e); }
          |       NATIVE             { $$ = alphabet_add(@1, EBCDIC_e); }
          |       EBCDIC             { $$ = alphabet_add(@1, EBCDIC_e); }
!         |       LOCALE locale_name[name]
                  {
!                   auto e = symbol_locale(PROGRAM, $name);                  
                    if( !e ) {
!                     dbgmsg("no such LOCALE yet %s", $name);
!                     cbl_locale_t locale($name); // locale is named but not defined 
!                     e = symbol_locale_add(PROGRAM, &locale); 
!                   } 
!                   cbl_alphabet_t alphabet( @name, symbol_index(e), $name);
!                   $$ = alphabet_add(alphabet);
                  }
          |       alphabet_seqs
                  {
*************** const_value:    cce_expr
*** 3592,3598 ****
  
  value78:        literalism
                  {
!                   cbl_field_data_t data = {};
  		  data.capacity = capacity_cast(strlen($1.data));
                    data.initial = $1.data;
                    $$.encoding = $1.encoding;
--- 3645,3651 ----
  
  value78:        literalism
                  {
!                   cbl_field_data_t data;
  		  data.capacity = capacity_cast(strlen($1.data));
                    data.initial = $1.data;
                    $$.encoding = $1.encoding;
*************** value78:        literalism
*** 3600,3612 ****
                  }
          |       const_value
                  {
!                   cbl_field_data_t data = {};
  		  data = build_real (float128_type_node, $1);
                    $$.data = new cbl_field_data_t(data);
                  }
          |       reserved_value[value]
                  {
  		  const auto field = constant_of(constant_index($value));
                    $$.data = new cbl_field_data_t(field->data);
                  }
  
--- 3653,3667 ----
                  }
          |       const_value
                  {
!                   cbl_field_data_t data;
  		  data = build_real (float128_type_node, $1);
+                   $$.encoding = current_encoding('A');
                    $$.data = new cbl_field_data_t(data);
                  }
          |       reserved_value[value]
                  {
  		  const auto field = constant_of(constant_index($value));
+                   $$.encoding = current_encoding('A');
                    $$.data = new cbl_field_data_t(field->data);
                  }
  
*************** data_descr1:    level_name
*** 3638,3643 ****
--- 3693,3699 ----
                    field.type = FldLiteralN;
  		  field.data = build_real (float128_type_node, $const_value);
                    field.data.initial = string_of($const_value);
+                   field.codeset.set();
  
                    if( !cdf_value(field.name, cdfval_t($const_value)) ) {
                      error_msg(@1, "%s was defined by CDF", field.name);
*************** data_descr1:    level_name
*** 3674,3686 ****
                    if( !cdf_value(field.name, $lit.data) ) {
                      error_msg(@1, "%s was defined by CDF", field.name);
                    }
!                   if( ! field.codeset.valid() ) {
!                     if( ! field.codeset.set(field.codeset.standard_internal.type) ) {
!                       error_msg(@lit, "CONSTANT inconsistent with encoding %s",
!                                 cbl_alphabet_t::encoding_str(field.codeset.encoding));
!                     }
                    }
!                   value_encoding_check(@lit, $1, $lit.encoding);
                  }
          |       level_name CONSTANT is_global FROM NAME
                  {
--- 3730,3741 ----
                    if( !cdf_value(field.name, $lit.data) ) {
                      error_msg(@1, "%s was defined by CDF", field.name);
                    }
!                   if( ! field.codeset.set() ) {
!                     error_msg(@lit, "CONSTANT inconsistent with encoding %s",
!                               cbl_alphabet_t::encoding_str(field.codeset.encoding));
                    }
!                   
!                   value_encoding_check(@lit, $1);
                  }
          |       level_name CONSTANT is_global FROM NAME
                  {
*************** data_descr1:    level_name
*** 3718,3723 ****
--- 3773,3779 ----
                    } else {
                      field.type = FldLiteralN;
                      field.data.initial = string_of(field.data.value_of());
+                     field.codeset.set($data.encoding);
                      if( !cdf_value(field.name, field.as_integer()) ) {
                        yywarn("%s was defined by CDF", field.name);
                      }
*************** data_descr1:    level_name
*** 3975,3980 ****
--- 4031,4045 ----
                    // Verify VALUE
                    $field->report_invalid_initial_value(@data_clauses);
  
+                   bool numerical =
+                       $field->type == FldNumericDisplay || is_numeric($field);
+ 
+                   if( $field->data.initial && ! numerical ) {
+                     if( normal_value_e == cbl_figconst_of($field->data.initial) ) {
+                       value_encoding_check(@data_clauses, $field);
+                     }
+                   }
+ 
                    // verify REDEFINES
                    const auto parent = parent_of($field);
                    if( parent && $field->level == parent->level ) {
*************** picture_clause: PIC signed nps[fore] nin
*** 4287,4300 ****
                    if( field->data.initial != NULL ) {
                      if( 0 < field->data.capacity &&
                              field->data.capacity < uint32_t($size) ) {
!                       auto p = blank_pad_initial( field->data.initial,
!                                                   field->data.capacity, $size );
                        if( !p ) YYERROR;
                        field->data.initial = p;
                      }
                    }
  
!                   field->data.capacity = $size;
                    field->data.picture = NULL;
  
                    if( false ) dbgmsg("PIC alphanum_pic[size]:%d: %s",
--- 4352,4367 ----
                    if( field->data.initial != NULL ) {
                      if( 0 < field->data.capacity &&
                              field->data.capacity < uint32_t($size) ) {
!                       auto p = blank_pad_initial(field->data.initial,
!                                                  field->data.capacity, $size );
                        if( !p ) YYERROR;
                        field->data.initial = p;
                      }
                    }
  
!                   charmap_t *charmap = 
!                                     __gg__get_charmap(field->codeset.encoding);
!                   field->data.capacity = $size * charmap->stride();
                    field->data.picture = NULL;
  
                    if( false ) dbgmsg("PIC alphanum_pic[size]:%d: %s",
*************** usage_clause1:  usage BIT
*** 4708,4721 ****
  
  value_clause:   VALUE all LITERAL[lit] {
                    cbl_field_t *field = current_field();
!                   if( ! field->codeset.set($lit.encoding) ) {
!                     error_msg(@lit, "VALUE inconsistent with encoding %s",
!                               cbl_alphabet_t::encoding_str(field->codeset.encoding));
                    }
                    field->data.initial  = $lit.data;
                    field->attr |= literal_attr($lit.prefix);
-                   // The __gg__initialize_data routine needs to know that VALUE is a
-                   // quoted literal. This is critical for NumericEdited variables
                    field->attr |= quoted_e;
  
                    if( field->data.capacity == 0 ) {
--- 4775,4797 ----
  
  value_clause:   VALUE all LITERAL[lit] {
                    cbl_field_t *field = current_field();
! 
!                   if( $lit.prefix[0] ) { // not the default encoding
!                     if( ! field->codeset.set($lit.encoding) ) {
!                       error_msg(@lit, "VALUE inconsistent with encoding %s",
!                                 cbl_alphabet_t::encoding_str(field->codeset.encoding));
!                     }
!                   } else {
!                     field->codeset.set();
                    }
+ 
+                   if( field->codeset.encoding != $lit.encoding ) {
+                     error_msg(@lit, "PICTURE inconsistent with VALUE %s'%s'",
+                               $lit.prefix, $lit.data);
+                   }
+ 
                    field->data.initial  = $lit.data;
                    field->attr |= literal_attr($lit.prefix);
                    field->attr |= quoted_e;
  
                    if( field->data.capacity == 0 ) {
*************** value_clause:   VALUE all LITERAL[lit] {
*** 4732,4738 ****
                        }
                      }
                    }
-                   value_encoding_check(@lit, field, $lit.encoding);
                  }
          |       VALUE all cce_expr[value] {
                    cbl_field_t *field = current_field();
--- 4808,4813 ----
*************** value_clause:   VALUE all LITERAL[lit] {
*** 4761,4771 ****
          |       VALUE all reserved_value[value]
                  {
                    cbl_field_t *field = current_field();
!                   if( ! field->codeset.valid() ) {
!                     if( ! field->codeset.set(field->codeset.standard_internal.type) ) {
!                       error_msg(@value, "VALUE inconsistent with encoding %s",
!                                 cbl_alphabet_t::encoding_str(field->codeset.encoding));
!                     }
                    }
                    if( $value != NULLS ) {
                      auto fig = constant_of(constant_index($value));
--- 4836,4844 ----
          |       VALUE all reserved_value[value]
                  {
                    cbl_field_t *field = current_field();
!                   if( ! field->codeset.set() ) {
!                     error_msg(@value, "VALUE inconsistent with encoding %s",
!                               cbl_alphabet_t::encoding_str(field->codeset.encoding));
                    }
                    if( $value != NULLS ) {
                      auto fig = constant_of(constant_index($value));
*************** typedef_clause: is TYPEDEF strong
*** 5017,5022 ****
--- 5090,5096 ----
                      error_msg(@2, "%s %s IS TYPEDEF must be level 01",
  			    field->level_str(), field->name);
                    }
+                   field->codeset.set();
                    field->attr |= typedef_e;
                    if( $strong ) field->attr |= strongdef_e;
                    if( ! current.typedef_add(field) ) {
*************** context_word:   APPLY
*** 7007,7012 ****
--- 7081,7088 ----
                                           $$ = s; } // LOCK MODE clause
          |       MULTIPLE               { static char s[] ="MULTIPLE";
                                           $$ = s; } // LOCK ON phrase
+         |       NAT                    { static char s[] ="NAT";
+                                          $$ = s; } // CONVERT function
          |       NEAREST_AWAY_FROM_ZERO { static char s[] ="NEAREST-AWAY-FROM-ZERO";
                                           $$ = s; } // INTERMEDIATE ROUNDING clause and ROUNDED phrase
          |       NEAREST_EVEN           { static char s[] ="NEAREST-EVEN";
*************** advance_by:     scalar lines { $$ = $1;
*** 8544,8550 ****
                     * number of lines is negative.  So, we use the
                     * negative Number Of The Beast as a PAGE flag.
                     */
!                   $$ = new_reference( new_literal("-666") );
                  }
          |       device_name { $$ = new_reference(literally_one); }
                  ;
--- 8620,8626 ----
                     * number of lines is negative.  So, we use the
                     * negative Number Of The Beast as a PAGE flag.
                     */
!                   $$ = new_reference( new_literal(xstrdup("-666")) );
                  }
          |       device_name { $$ = new_reference(literally_one); }
                  ;
*************** io_invalid:     INVALID key {
*** 8601,8607 ****
--- 8677,8709 ----
  
  delete:         delete_impl  end_delete
          |       delete_cond  end_delete
+         |       delete_file  end_delete
+                 ;
+ delete_file:    DELETE delete_file_body[stmt] delete_error[err] {
+                   if( ! $err.on_error )  parser_file_delete_on_exception($stmt);
+                   if( ! $err.not_error ) parser_file_delete_not_exception($stmt);
+                   parser_file_delete_end($stmt);
+                   current.declaratives_evaluate();
+                 }
+ delete_file_body:
+                 FILE_KW override filenames retry_phrase {
+                   $$ = label_add(@$, LblXml, uniq_label("xfile"));
+                   xml_statements.push($$);
+                   statement_begin(@$, DELETE);
+                   std::vector<cbl_file_t*>
+                       filenames($filenames->files.begin(),
+                                 $filenames->files.end() );
+                   parser_file_delete_file( $$, filenames);
+                 }
                  ;
+ retry_phrase:   %empty
+         |       RETRY expr TIMES
+         |       FOR expr  SECONDS
+         |       FOREVER {
+                   cbl_unimplemented("DELETE FILE RETRY");
+                 }
+                 ;
+ 
  delete_impl:    DELETE delete_body[file]
                  {
                    file_delete_args.call_parser_file_delete(true);
*************** delete_body:    filename[file] record
*** 8634,8639 ****
--- 8736,8798 ----
                    $$ = $file;
                  }
                  ;
+ 
+ delete_error:   %empty	%prec DELETE {
+                   $$.on_error = $$.not_error = nullptr;
+                 }
+         |       delete_excepts %prec DELETE
+                 ;
+ delete_excepts:     delete_except[a] statements %prec DELETE
+                 {
+                   assert( $a.on_error || $a.not_error );
+                   assert( ! ($a.on_error && $a.not_error) );
+                   $$ = $a;
+                 }
+         |       delete_excepts[a] delete_except[b] statements %prec DELETE
+                 {
+                   if( $a.on_error && $a.not_error ) {
+                     error_msg(@1, "too many ON ERROR clauses");
+                     YYERROR;
+                   }
+                   // "ON" and "NOT ON" could be reversed, but not duplicated.
+                   if( $a.on_error && $b.on_error ) {
+                     error_msg(@1, "duplicate ON ERROR clauses");
+                     YYERROR;
+                   }
+                   if( $a.not_error && $b.not_error ) {
+                     error_msg(@1, "duplicate NOT ON ERROR clauses");
+                     YYERROR;
+                   }
+                   $$ = $a;
+                   if( $$.on_error ) {
+                     assert($b.not_error);
+                     $$.not_error = $b.not_error;
+                   } else {
+                 assert($b.on_error);
+                     $$.on_error = $b.on_error;
+                   }
+                 }
+                 ;
+ delete_except:  EXCEPTION
+                 {
+                   auto xml_stmt = xml_statements.top();
+                   // The value of the pointer no longer matters, only NULL or not. 
+                   $$.on_error = $$.not_error = nullptr;
+                   switch($1) {
+                   case EXCEPTION:
+                     $$.on_error = xml_stmt;
+                     parser_file_delete_on_exception(xml_stmt);
+                     break;
+                   case NOT:
+                     $$.not_error = xml_stmt;
+                     parser_file_delete_not_exception(xml_stmt);
+                     break;
+                   default:
+                     gcc_unreachable();
+                   }
+                 }
+                 ;
+ 
  end_delete:     %empty %prec DELETE
          |       END_DELETE
                  ;
*************** function_udf:   FUNCTION_UDF '(' arg_lis
*** 10536,10542 ****
  				    cbl_ffi_arg_t actual(param.crv, ar);
  				    return actual;
  				  } );
! 		  auto name = new_literal(strlen(L->name), L->name, quoted_e);
  		  ast_call( @1, name, $$, args.size(), args.data(), NULL, NULL, true );
                  }
          |       FUNCTION_UDF_0 {
--- 10695,10703 ----
  				    cbl_ffi_arg_t actual(param.crv, ar);
  				    return actual;
  				  } );
!                   // Pretend hex-encoded because that means use verbatim.
!                   auto attr = cbl_field_attr_t(quoted_e | hex_encoded_e);
!                   auto name = new_literal(strlen(L->name), L->name, attr);
  		  ast_call( @1, name, $$, args.size(), args.data(), NULL, NULL, true );
                  }
          |       FUNCTION_UDF_0 {
*************** function_udf:   FUNCTION_UDF '(' arg_lis
*** 10547,10554 ****
  		  const auto returning = cbl_field_of(symbol_at(L->returning));
                    $$ = new_temporary_clone(returning);
  		  $$->data.initial = returning->name; // user's name for the field
! 
!                   auto name = new_literal(strlen(L->name), L->name, quoted_e);
                    ast_call( @1, name, $$, narg, args, NULL, NULL, true );
                  }
                  ;
--- 10708,10718 ----
  		  const auto returning = cbl_field_of(symbol_at(L->returning));
                    $$ = new_temporary_clone(returning);
  		  $$->data.initial = returning->name; // user's name for the field
!                   cbl_field_attr_t call_attr
!                                  = (cbl_field_attr_t)(quoted_e|hex_encoded_e);
!                   cbl_field_t *name = new_literal(strlen(L->name),
!                                                   L->name,
!                                                   call_attr);
                    ast_call( @1, name, $$, narg, args, NULL, NULL, true );
                  }
                  ;
*************** subst_input:    anycase first_last varg[
*** 11135,11140 ****
--- 11299,11316 ----
                  }
                  ;
  
+ locale_name:    NAME
+                 {
+                   auto e = symbol_locale(PROGRAM, $NAME);
+                   if( !e ) {
+                     error_msg(@NAME, "no such SPECIAL-NAMES LOCALE: %qs", $NAME);
+                     YYERROR;
+                   }
+                   $$ = const_cast<char*>(
+                            __gg__encoding_iconv_name(cbl_locale_of(e)->encoding) );
+                 }
+                 ;
+ 
  intrinsic_locale:
                  LOCALE_COMPARE '(' varg[r1] varg[r2]  ')'
                  {
*************** intrinsic_locale:
*** 11143,11153 ****
                    cbl_refer_t dummy = {};
                    if( ! intrinsic_call_3($$, LOCALE_COMPARE, $r1, $r2, &dummy) ) YYERROR;
                  }
!         |       LOCALE_COMPARE '(' varg[r1] varg[r2] varg[r3] ')'
                  {
                    location_set(@1);
                    $$ = new_alphanumeric();
!                   if( ! intrinsic_call_3($$, LOCALE_COMPARE, $r1, $r2, $r3) ) YYERROR;
                  }
  
          |       LOCALE_DATE '(' varg[r1]  ')'
--- 11319,11330 ----
                    cbl_refer_t dummy = {};
                    if( ! intrinsic_call_3($$, LOCALE_COMPARE, $r1, $r2, &dummy) ) YYERROR;
                  }
!         |       LOCALE_COMPARE '(' varg[r1] varg[r2] locale_name ')'
                  {
                    location_set(@1);
                    $$ = new_alphanumeric();
!                   cbl_refer_t locale(new_literal($locale_name));
!                   if( ! intrinsic_call_3($$, LOCALE_COMPARE, $r1, $r2, &locale) ) YYERROR;
                  }
  
          |       LOCALE_DATE '(' varg[r1]  ')'
*************** optional:       %empty   { $$ = false; }
*** 11453,11458 ****
--- 11630,11639 ----
          |       OPTIONAL { $$ = true;  }
                  ;
  
+ override:	%empty   { $$ = false; }
+ 	|	OVERRIDE { $$ = true; }
+ 		;
+ 
  program_kw:     %empty
          |       PROGRAM_kw
                  ;
*************** void ast_call( const YYLTYPE& loc, cbl_r
*** 11900,11905 ****
--- 12081,12087 ----
    if( is_literal(name.field) ) {
      cbl_field_t called = { FldLiteralA, quoted_e | constant_e,
                             name.field->data, 77 };
+     called.attr |= name.field->attr;
      snprintf(called.name, sizeof(called.name), "_%s", name.field->data.initial);
      name.field = cbl_field_of(symbol_field_add(PROGRAM, &called));
      symbol_field_location(field_index(name.field), loc);
*************** struct expand_group : public std::list<c
*** 13030,13042 ****
  };
  
  
! static const char * initial_default_value;
!        const char * wsclear() { return initial_default_value; }
  
  void
! wsclear( char ch ) {
!   static char byte = ch;
!   initial_default_value = &byte;
    current.program_needs_initial();
  }
  
--- 13212,13224 ----
  };
  
  
! static const uint32_t * initial_default_value;
!        const uint32_t * wsclear() { return initial_default_value; }
  
  void
! wsclear( uint32_t i ) {
!   static uint32_t init_val = i;
!   initial_default_value = &init_val;
    current.program_needs_initial();
  }
  
*************** literal_t::set( const cbl_field_t * fiel
*** 13558,13573 ****
  
  literal_t&
  literal_t::set_prefix( const char *input, size_t len ) {
!   encoding = current_encoding('A');
    assert(len < sizeof(prefix));
    std::fill(prefix, prefix + sizeof(prefix), '\0');
    std::transform(input, input + len, prefix, toupper);
    switch(prefix[0]) {
    case '\0': case 'Z':
!     encoding = current_encoding('A');
      break;
    case 'N':
!     encoding = current_encoding('N');
      if( 'X' == prefix[1] ) {
        cbl_unimplemented("NX literals");
      }
--- 13740,13755 ----
  
  literal_t&
  literal_t::set_prefix( const char *input, size_t len ) {
!   encoding = current_encoding(display_encoding_e);
    assert(len < sizeof(prefix));
    std::fill(prefix, prefix + sizeof(prefix), '\0');
    std::transform(input, input + len, prefix, toupper);
    switch(prefix[0]) {
    case '\0': case 'Z':
!     encoding = current_encoding(display_encoding_e);
      break;
    case 'N':
!     encoding = current_encoding(national_encoding_e);
      if( 'X' == prefix[1] ) {
        cbl_unimplemented("NX literals");
      }
*************** literal_t::set_prefix( const char *input
*** 13583,13589 ****
    default:
      gcc_unreachable();
    }
!   assert(encoding <= iconv_YU_e);
    return *this;
  }
  
--- 13765,13771 ----
    default:
      gcc_unreachable();
    }
!   assert(valid_encoding(encoding));
    return *this;
  }
  
*************** literal_attr( const char prefix[] ) {
*** 13608,13615 ****
      case 'X':
        switch(prefix[0]) {
        case 'B': return cbl_field_attr_t(hex_encoded_e | bool_encoded_e);
!       case 'N': 
!       case 'U': cbl_unimplemented("National"); return none_e;
        }
        break;
      }
--- 13790,13797 ----
      case 'X':
        switch(prefix[0]) {
        case 'B': return cbl_field_attr_t(hex_encoded_e | bool_encoded_e);
!       case 'N': cbl_unimplemented("Hexadecimal National"); return none_e;
!       case 'U': cbl_unimplemented("Hexadecimal Unicode");  return none_e;
        }
        break;
      }
diff -Nrcpad gcc-16-20251102/gcc/cobol/parse_ante.h gcc-16-20251109/gcc/cobol/parse_ante.h
*** gcc-16-20251102/gcc/cobol/parse_ante.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/parse_ante.h	Sun Nov  9 22:32:45 2025
*************** static inline char * dequote( char input
*** 273,310 ****
  static const char *
  name_of( cbl_field_t *field ) {
    assert(field);
!   // Because this can be called after .initial has been converted to the
!   // field->codeset.encoding, we have to undo that.  There may be some danger
!   // associated with returning a static.  I don't actually know. -- RJD.
!   static size_t static_length = 0;
!   static char * static_buffer = nullptr;
!   
!   if( field->data.initial == nullptr ) return field->name;
! 
!   if( field->name[0] == '_' )
!     {
!     // Make a copy of .initial
!     if( static_length < field->data.capacity+1 )
!       {
!       static_length = field->data.capacity+1;
!       static_buffer = static_cast<char *>(xrealloc(static_buffer,
!                                                    static_length));
!       memcpy(static_buffer, field->data.initial, field->data.capacity);
!       static_buffer[field->data.capacity] = '\0';
!       }
!     // Convert it from ->encoding to DEFAULT_CHARMAP_SOURCE
!     size_t charsout;
!     char *converted =  __gg__iconverter(field->codeset.encoding,
!                                         DEFAULT_CHARMAP_SOURCE,
!                                         field->data.initial,
!                                         field->data.capacity,
!                                         &charsout );
!     memcpy(static_buffer, converted, charsout);
!     static_buffer[charsout] = '\0';
!     }
! 
    return field->name[0] == '_' && field->data.initial?
!     static_buffer : field->name;
  }
  
  static const char *
--- 273,283 ----
  static const char *
  name_of( cbl_field_t *field ) {
    assert(field);
!   if( field->data.initial == nullptr ) {
!     return field->name;
!   }
    return field->name[0] == '_' && field->data.initial?
!     field->data.original() : field->name;
  }
  
  static const char *
*************** std::map<std::string, std::list<std::str
*** 1337,1342 ****
--- 1310,1316 ----
  
  class prog_descr_t {
    std::set<std::string> call_targets, subprograms;
+   std::set<cbl_locale_t> locales;
  public:
    std::set<function_descr_t> function_repository;
    size_t program_index;
*************** public:
*** 1361,1377 ****
      } alpha, national;
      encoding_t() : national(EBCDIC_e) {}
    } alphabet;
!   struct locale_t {
!     cbl_name_t name; const char *os_name;
!     locale_t() : name(""), os_name(nullptr) {}
!     locale_t(const cbl_name_t name, const char *os_name)
!       : name(""), os_name(os_name) {
!       if( name ) {
!         bool ok = namcpy(YYLTYPE(), this->name, name);
!         gcc_assert(ok);
!       }
!     }
!   } locale;
    cbl_options_t options;
  
    explicit prog_descr_t( size_t isymbol )
--- 1335,1348 ----
      } alpha, national;
      encoding_t() : national(EBCDIC_e) {}
    } alphabet;
!   
!   bool locale_add( const cbl_locale_t& locale ) {
!     auto e = symbol_locale_add(program_index, &locale);
!     assert(e);
!     auto p = locales.insert(locale);
!     return p.second;
!   }
!       
    cbl_options_t options;
  
    explicit prog_descr_t( size_t isymbol )
*************** static class current_t {
*** 1904,1910 ****
      return program.alphabet.alpha.encoding;
    }
    cbl_encoding_t  national_encoding() const {
!     if( programs.empty() ) return EBCDIC_e;
      const prog_descr_t& program = programs.top();
      return program.alphabet.national.encoding;
    }
--- 1875,1888 ----
      return program.alphabet.alpha.encoding;
    }
    cbl_encoding_t  national_encoding() const {
!     cbl_encoding_t when_empty = EBCDIC_e;
!     char *alternate = getenv("NATIONAL");
!     if( alternate )
!       {
!       when_empty = __gg__encoding_iconv_type(alternate);
!       gcc_assert(when_empty);
!       }
!     if( programs.empty() ) return when_empty;
      const prog_descr_t& program = programs.top();
      return program.alphabet.national.encoding;
    }
*************** static class current_t {
*** 1929,1951 ****
      return programs.top().options.default_round = mode;
    }
  
!   const char *
!   locale() {
!     return programs.empty()? NULL : programs.top().locale.os_name;
!   }
!   const char *
!   locale( const cbl_name_t name ) {
!     if( programs.empty() ) return NULL;
!     const prog_descr_t::locale_t& locale = programs.top().locale;
!     return 0 == strcmp(name, locale.name)? locale.name : NULL;
!   }
!   const prog_descr_t::locale_t&
!   locale( const cbl_name_t name, const char os_name[] ) {
!     if( programs.empty() ) {
!       static prog_descr_t::locale_t empty;
!       return empty;
!     }
!     return programs.top().locale = prog_descr_t::locale_t(name, os_name);
    }
  
    bool new_program ( const YYLTYPE& loc, cbl_label_type_t type,
--- 1907,1914 ----
      return programs.top().options.default_round = mode;
    }
  
!   bool locale_add( const cbl_locale_t& locale ) {
!     return programs.top().locale_add(locale);
    }
  
    bool new_program ( const YYLTYPE& loc, cbl_label_type_t type,
*************** add_debugging_declarative( const cbl_lab
*** 2296,2306 ****
    }
  }
  
! cbl_options_t current_options() {
    return current.options_paragraph;
  }
  
! cbl_encoding_t current_encoding( char a_or_n ) {
    cbl_encoding_t retval;
    switch(a_or_n) {
    case 'A':
--- 2259,2271 ----
    }
  }
  
! cbl_options_t
! current_options() {
    return current.options_paragraph;
  }
  
! cbl_encoding_t
! current_encoding( char a_or_n ) {
    cbl_encoding_t retval;
    switch(a_or_n) {
    case 'A':
*************** cbl_encoding_t current_encoding( char a_
*** 2316,2329 ****
    return retval;
  }
  
! size_t current_program_index() {
    return current.program()? current.program_index() : 0;
  }
  
! cbl_label_t * current_section() {
    return current.section();
  }
! cbl_label_t * current_paragraph() {
    return current.paragraph();
  }
  
--- 2281,2297 ----
    return retval;
  }
  
! size_t
! current_program_index() {
    return current.program()? current.program_index() : 0;
  }
  
! cbl_label_t *
! current_section() {
    return current.section();
  }
! cbl_label_t *
! current_paragraph() {
    return current.paragraph();
  }
  
*************** literal_refmod_valid( YYLTYPE loc, const
*** 2402,2409 ****
  static bool
  is_integer_literal( const cbl_field_t *field ) {
    if( field->type == FldLiteralN ) {
!     const char *initial = field->data.initial;
! 
      switch( *initial ) {
      case '-': case '+': ++initial;
      }
--- 2370,2382 ----
  static bool
  is_integer_literal( const cbl_field_t *field ) {
    if( field->type == FldLiteralN ) {
!     size_t nchar;
!     const char *initial = __gg__iconverter(field->codeset.encoding,
!                                            DEFAULT_SOURCE_ENCODING,
!                                            field->data.initial,
!                                            strlen(field->data.initial),
!                                            &nchar);
!     assert(strlen(initial) == nchar);
      switch( *initial ) {
      case '-': case '+': ++initial;
      }
*************** blank_pad_initial( const char initial[],
*** 2982,2997 ****
    return p;
  }
  
  static void
! value_encoding_check( const YYLTYPE& loc, cbl_field_t *field, cbl_encoding_t encoding ) {
    if( ! field->internalize() ) {
      error_msg(loc, "inconsistent string literal encoding for '%s'",
                field->data.initial);
    }
-   if( encoding != field->codeset.encoding ) {
-     warn_msg(loc, "VALUE encoded as %qs for data item encoded as %qs",
-              __gg__encoding_iconv_name(encoding), field->codeset.name());
-   }
  }
  
  #pragma GCC diagnostic push
--- 2955,2982 ----
    return p;
  }
  
+ /*
+  * When cbl_field_t::internalize is called, its data.initial value has been
+  * set, but nothing has been done to it.  It is encoded according to the source
+  * code.  internalize() converts data.initial to the field's encoding. 
+  *
+  * If syntax used was was PIC VALUE, in that order, then PIC set the field's
+  * encoding, and the VALUE clause can verify that its encoding matches.  If the
+  * order was VALUE PIC, the value leaves the encoding uninitialized unless the
+  * value string bore an encoding prefix.  When PIC is processed, codeset_t::set
+  * allows it to set the encoding only if it's either uninitialized, or the PIC
+  * encoding matches the existing one set by VALUE.  In no event does one
+  * override the other; they must agree.
+  *
+  * internalize() fails if data.initial cannot be converted to the field's
+  * encoding.
+  */
  static void
! value_encoding_check( const YYLTYPE& loc, cbl_field_t *field ) {
    if( ! field->internalize() ) {
      error_msg(loc, "inconsistent string literal encoding for '%s'",
                field->data.initial);
    }
  }
  
  #pragma GCC diagnostic push
*************** file_add( YYLTYPE loc, cbl_file_t *file
*** 3046,3057 ****
  
  
  static cbl_alphabet_t *
! alphabet_add( const YYLTYPE& loc, cbl_encoding_t encoding ) {
!   cbl_alphabet_t alphabet(loc, encoding);
    symbol_elem_t *e = symbol_alphabet_add(PROGRAM, &alphabet);
    assert(e);
    return cbl_alphabet_of(e);
  }
  
  // The current field always exists in the symbol table, even if it's incomplete.
  static cbl_field_t *
--- 3031,3046 ----
  
  
  static cbl_alphabet_t *
! alphabet_add( const cbl_alphabet_t& alphabet ) {
    symbol_elem_t *e = symbol_alphabet_add(PROGRAM, &alphabet);
    assert(e);
    return cbl_alphabet_of(e);
  }
+ static cbl_alphabet_t *
+ alphabet_add( const YYLTYPE& loc, cbl_encoding_t encoding ) {
+   cbl_alphabet_t alphabet(loc, encoding);
+   return alphabet_add(alphabet);
+ }
  
  // The current field always exists in the symbol table, even if it's incomplete.
  static cbl_field_t *
*************** data_division_ready() {
*** 3302,3309 ****
    static size_t nsymbol = 0;
    if( (nsymbol = symbols_update(nsymbol, nparse_error == 0)) > 0 ) {
      if( ! literally_one ) {
!       literally_one = new_literal("1");
!       literally_zero = new_literal("0");
      }
    }
  
--- 3291,3299 ----
    static size_t nsymbol = 0;
    if( (nsymbol = symbols_update(nsymbol, nparse_error == 0)) > 0 ) {
      if( ! literally_one ) {
!       // Use strdup so cbl_field_t::internalize can free them if need be.
!       literally_one = new_literal(xstrdup("1"));
!       literally_zero = new_literal(xstrdup("0"));
      }
    }
  
diff -Nrcpad gcc-16-20251102/gcc/cobol/scan.l gcc-16-20251109/gcc/cobol/scan.l
*** gcc-16-20251102/gcc/cobol/scan.l	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/scan.l	Sun Nov  9 22:32:45 2025
*************** B-SHIFT-RC
*** 1801,1808 ****
  				  if( elem->type == SymField ) {
  				    auto f = cbl_field_of(elem);
  				    if( f->type == FldLiteralA && f->has_attr(constant_e) ) {
! 				      type = date_time_fmt(f->data.initial);
! 				      yylval.string = xstrdup(f->data.initial);
  				    }
  				  } else {
  				    yylval.string = xstrdup(yytext);
--- 1801,1808 ----
  				  if( elem->type == SymField ) {
  				    auto f = cbl_field_of(elem);
  				    if( f->type == FldLiteralA && f->has_attr(constant_e) ) {
! 				      type = date_time_fmt(f->data.original());
! 				      yylval.string = xstrdup(f->data.original());
  				    }
  				  } else {
  				    yylval.string = xstrdup(yytext);
diff -Nrcpad gcc-16-20251102/gcc/cobol/show_parse.h gcc-16-20251109/gcc/cobol/show_parse.h
*** gcc-16-20251102/gcc/cobol/show_parse.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/show_parse.h	Sun Nov  9 22:32:45 2025
*************** extern bool cursor_at_sol;
*** 140,146 ****
                  fprintf(stderr, "%s", (b).field->name); \
                  if( (b).field->type == FldLiteralA || (b).field->type == FldLiteralN ) \
                      { \
!                     fprintf(stderr, " \"%s\"", (b).field->data.initial); \
                      } \
                  else \
                      { \
--- 140,152 ----
                  fprintf(stderr, "%s", (b).field->name); \
                  if( (b).field->type == FldLiteralA || (b).field->type == FldLiteralN ) \
                      { \
!                     size_t nbytes; \
!                     const char *literal = __gg__iconverter((b).field->codeset.encoding, \
!                                                            DEFAULT_SOURCE_ENCODING, \
!                                                            (b).field->data.initial, \
!                                                            strlen((b).field->data.initial), \
!                                                            &nbytes); \
!                     fprintf(stderr, " \"%s\"", literal); \
                      } \
                  else \
                      { \
diff -Nrcpad gcc-16-20251102/gcc/cobol/symbols.cc gcc-16-20251109/gcc/cobol/symbols.cc
*** gcc-16-20251102/gcc/cobol/symbols.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/symbols.cc	Sun Nov  9 22:32:45 2025
*************** elementize( const cbl_field_t& field ) {
*** 293,299 ****
    // Dubner did the following because he didn't feel like creating yet another
    // cbl_field_t constructor that included the hardcoded encoding for the
    // global special registers.
!   sym.elem.field.codeset.encoding = iconv_CP1252_e;
    return sym;
  }
  
--- 293,299 ----
    // Dubner did the following because he didn't feel like creating yet another
    // cbl_field_t constructor that included the hardcoded encoding for the
    // global special registers.
!   sym.elem.field.codeset.set();
    return sym;
  }
  
*************** symbol_elem_cmp( const void *K, const vo
*** 511,516 ****
--- 511,519 ----
    case SymSpecial:
      return special_pair_cmp(k->elem.special, e->elem.special)? 0 : 1;
      break;
+   case SymLocale:
+     return strcasecmp(k->elem.locale.name, e->elem.locale.name);
+     break;
    case SymAlphabet:
      return strcasecmp(k->elem.alphabet.name, e->elem.alphabet.name);
      break;
*************** symbol_special( size_t program, const ch
*** 677,682 ****
--- 680,701 ----
  }
  
  struct symbol_elem_t *
+ symbol_locale( size_t program, const char name[] )
+ {
+   cbl_locale_t locale(name);
+   assert(strlen(name) < sizeof locale.name);
+   strcpy(locale.name, name);
+ 
+   struct symbol_elem_t key(SymLocale, program), *e;
+   key.elem.locale = locale;
+ 
+   e = static_cast<struct symbol_elem_t *>(lfind( &key, symbols.elems,
+                                                  &symbols.nelem, sizeof(key),
+                                                  symbol_elem_cmp ) );
+   return e;
+ }
+ 
+ struct symbol_elem_t *
  symbol_alphabet( size_t program, const char name[] )
  {
    cbl_alphabet_t alphabet(YYLTYPE(), custom_encoding_e); // cppcheck-suppress syntaxError
*************** field_str( const cbl_field_t *field ) {
*** 1510,1520 ****
          {
          // Apparently we need to trace back the meaning of data.literal for
          // field::type == FldNumericDisplay
!         enc_from = DEFAULT_CHARMAP_SOURCE;
          }
  
        init = __gg__iconverter(enc_from,
!                               DEFAULT_CHARMAP_SOURCE,
                                false_data,
                                field->data.capacity,
                                &charsout);
--- 1529,1539 ----
          {
          // Apparently we need to trace back the meaning of data.literal for
          // field::type == FldNumericDisplay
!         enc_from = DEFAULT_SOURCE_ENCODING;
          }
  
        init = __gg__iconverter(enc_from,
!                               DEFAULT_SOURCE_ENCODING,
                                false_data,
                                field->data.capacity,
                                &charsout);
*************** field_str( const cbl_field_t *field ) {
*** 1522,1533 ****
        auto eoinit = init + strlen(init);
        char *s = xasprintf("'%s'", init);
  
!       // No NUL within the initial data. 
        auto ok = std::none_of( init, eoinit,
                                []( char ch ) { return ch == '\0'; } );
        assert(ok);
  
!       // If any of the init are unprintable, provide a hex version. 
        if( ! std::all_of(init, eoinit, fisprint) ) {
          if( is_elementary(field->type) && field->type != FldPointer ) {
            const size_t len = strlen(s) + 8 + 2 * field->data.capacity;
--- 1541,1552 ----
        auto eoinit = init + strlen(init);
        char *s = xasprintf("'%s'", init);
  
!       // No NUL within the initial data.
        auto ok = std::none_of( init, eoinit,
                                []( char ch ) { return ch == '\0'; } );
        assert(ok);
  
!       // If any of the init are unprintable, provide a hex version.
        if( ! std::all_of(init, eoinit, fisprint) ) {
          if( is_elementary(field->type) && field->type != FldPointer ) {
            const size_t len = strlen(s) + 8 + 2 * field->data.capacity;
*************** symbols_alphabet_set( size_t program, co
*** 1663,1669 ****
  ////  // Define alphabets for codegen.
  ////  const cbl_alphabet_t *alphabet = nullptr;
  ////  bool supported = true;
! ////  
  ////  std::for_each( symbols_begin(program), symbols_end(),
  ////                 [&alphabet, &supported]( const auto& sym ) {
  ////                   if( sym.type == SymAlphabet ) {
--- 1682,1688 ----
  ////  // Define alphabets for codegen.
  ////  const cbl_alphabet_t *alphabet = nullptr;
  ////  bool supported = true;
! ////
  ////  std::for_each( symbols_begin(program), symbols_end(),
  ////                 [&alphabet, &supported]( const auto& sym ) {
  ////                   if( sym.type == SymAlphabet ) {
*************** symbols_alphabet_set( size_t program, co
*** 1679,1685 ****
  ////    cbl_unimplemented("alphabet %qs (as %qs)", alphabet->name, encoding);
  ////    return false;
  ////  }
! ////  
  ////  // Set collation sequence before parser_symbol_add.`
  ////  if( name ) {
  ////    symbol_elem_t *e = symbol_alphabet(program, name);
--- 1698,1704 ----
  ////    cbl_unimplemented("alphabet %qs (as %qs)", alphabet->name, encoding);
  ////    return false;
  ////  }
! ////
  ////  // Set collation sequence before parser_symbol_add.`
  ////  if( name ) {
  ////    symbol_elem_t *e = symbol_alphabet(program, name);
*************** symbols_update( size_t first, bool parse
*** 1906,1943 ****
        }
      }
  
!     if( ! field->codeset.valid() ) {
!       switch(field->type) {
!       case FldForward:
!       case FldInvalid:
!         gcc_unreachable();
!       case FldAlphaEdited:
!       case FldAlphanumeric:
!       case FldClass:
!       case FldDisplay:
!       case FldGroup:
!       case FldLiteralA:
!       case FldNumericDisplay:
!       case FldNumericEdited:
          if( ! (field->has_attr(register_e) || field->has_attr(hex_encoded_e)) ) {
            error_msg(symbol_field_location(field_index(field)),
!                    "internal: %qs encoding not defined", field->name);
          }
-         break;
-       case FldConditional:
-       case FldFloat:
-       case FldIndex:
-       case FldLiteralN:
-       case FldNumericBin5:
-       case FldNumericBinary:
-       case FldPacked:
-       case FldPointer:
-       case FldSwitch:
-         break;
        }
      }
  
- 
      assert( ! field->is_typedef() );
  
      if( parsed_ok ) parser_symbol_add(field);
--- 1925,1970 ----
        }
      }
  
!     if( ! field->codeset.consistent() ) {
!       if( ! field->codeset.valid() ) {
!         switch(field->type) {
!         case FldForward:
!         case FldInvalid:
!           gcc_unreachable();
!         case FldAlphaEdited:
!         case FldAlphanumeric:
!         case FldClass:
!         case FldDisplay:
!         case FldGroup:
!         case FldLiteralA:
!         case FldLiteralN:
!         case FldNumericDisplay:
!         case FldNumericEdited:
!           if( ! (field->has_attr(register_e) || field->has_attr(hex_encoded_e)) ) {
!             error_msg(symbol_field_location(field_index(field)),
!                       "internal: %qs encoding not defined", field->name);
!           }
!           break;
!         case FldConditional:
!         case FldFloat:
!         case FldIndex:
!         case FldNumericBin5:
!         case FldNumericBinary:
!         case FldPacked:
!         case FldPointer:
!         case FldSwitch:
!           break;
!         }
!       } else {
          if( ! (field->has_attr(register_e) || field->has_attr(hex_encoded_e)) ) {
            error_msg(symbol_field_location(field_index(field)),
!                     "internal: %qs encoding %qs inconsistent",
!                     field->name,
!                     cbl_alphabet_t::encoding_str(field->codeset.encoding) );
          }
        }
      }
  
      assert( ! field->is_typedef() );
  
      if( parsed_ok ) parser_symbol_add(field);
*************** symbol_file_add( size_t program, cbl_fil
*** 2542,2547 ****
--- 2569,2581 ----
  }
  
  symbol_elem_t *
+ symbol_locale_add( size_t program, const cbl_locale_t *locale ) {
+   symbol_elem_t sym{ SymLocale, program };
+   sym.elem.locale = *locale;
+   return symbol_add(&sym);
+ }
+ 
+ symbol_elem_t *
  symbol_alphabet_add( size_t program, const cbl_alphabet_t *alphabet ) {
    symbol_elem_t sym{ SymAlphabet, program };
    sym.elem.alphabet = *alphabet;
*************** constant_of( size_t isym )
*** 3202,3220 ****
    return field;
  }
  
  /*
   * As parsed, the alphabet reflects the encoding of the source code.  If the
   * program uses a different encoding for alphanumeric, convert the alphabet to
!  * that. 
!  * 
   * Because a custom alphabet is rare and occurs at most only once per program,
   * we don't attempt to avoid re-encoding.  "Conversion" of ASCII to ASCII is at
!  * most 256 calls to iconv(3).  
   */
  void
  cbl_alphabet_t::reencode()  {
  
!   const unsigned char * const pend = alphabet + sizeof(alphabet);
    std::vector<char> tgt(256, (char)0xFF);
  
    /*  Keep copies of low_index and last_index for use in run-time as LOW-VALUE
--- 3236,3291 ----
    return field;
  }
  
+ cbl_locale_t::cbl_locale_t( const cbl_name_t name, const char iconv_name[] ) {
+   gcc_assert(strlen(name) < sizeof this->name);
+   strcpy(this->name, name);
+ 
+   if( iconv_name ) {
+     encoding = __gg__encoding_iconv_type(iconv_name);
+ 
+     strcpy(collation, "C");
+     // If the iconv_name is prefixed by langauge_COUNTRY (e.g. en_US), capture that.
+     auto pend = iconv_name + strlen(iconv_name);
+     auto p = std::find(iconv_name, pend, '.');
+     if( p < pend ) {
+       auto pend2 = std::copy(iconv_name, p, collation);
+       std::fill(pend2, collation + sizeof(collation), '\0');
+       iconv_name = ++p;
+     }
+     encoding = __gg__encoding_iconv_type(iconv_name);
+   }
+ }
+ 
+ cbl_alphabet_t::cbl_alphabet_t(const YYLTYPE& loc, size_t locale, cbl_name_t name )
+   : loc(loc)
+   , locale(locale)
+   , low_index(0)
+   , high_index(255)
+   , last_index(0)
+ {
+   if( locale >  0 ) {
+     encoding = cbl_locale_of(symbol_at(locale))->encoding;
+   }
+   memset(collation_sequence, 0xFF, sizeof(collation_sequence));
+   if( name ) { // from Special-Names collation_sequence
+     assert(strlen(name) < sizeof(cbl_name_t));
+     strcpy(this->name, name);
+   }
+ }
+ 
  /*
   * As parsed, the alphabet reflects the encoding of the source code.  If the
   * program uses a different encoding for alphanumeric, convert the alphabet to
!  * that.
!  *
   * Because a custom alphabet is rare and occurs at most only once per program,
   * we don't attempt to avoid re-encoding.  "Conversion" of ASCII to ASCII is at
!  * most 256 calls to iconv(3).
   */
  void
  cbl_alphabet_t::reencode()  {
  
!   const unsigned char * const pend = collation_sequence + sizeof(collation_sequence);
    std::vector<char> tgt(256, (char)0xFF);
  
    /*  Keep copies of low_index and last_index for use in run-time as LOW-VALUE
*************** cbl_alphabet_t::reencode()  {
*** 3230,3242 ****
     * a custom alphabet are from NIST, which of course are ASCII.
     */
    const char *fromcode = __gg__encoding_iconv_name(CP1252_e);
!   const char *tocode = __gg__encoding_iconv_name(current_encoding('A'));
    iconv_t cd = iconv_open(tocode, fromcode);
!   
  #if optimal_reencode
    if( fromcode == tocode ) { // semantically
      tgt.resize(0);
!     return tgt; // Return empty vector; caller copies zero bytes.  
    }
  #endif
  
--- 3301,3314 ----
     * a custom alphabet are from NIST, which of course are ASCII.
     */
    const char *fromcode = __gg__encoding_iconv_name(CP1252_e);
!   const char *tocode =
!               __gg__encoding_iconv_name(current_encoding(display_encoding_e));
    iconv_t cd = iconv_open(tocode, fromcode);
! 
  #if optimal_reencode
    if( fromcode == tocode ) { // semantically
      tgt.resize(0);
!     return tgt; // Return empty vector; caller copies zero bytes.
    }
  #endif
  
*************** cbl_alphabet_t::reencode()  {
*** 3247,3260 ****
     * that letter in the alphanumeric encoding, and set its collation position
     * in that alphabet.
     */
!   for( const unsigned char *p = alphabet; p < pend; p++ ) {
      if( *p == 0xFF ) continue;
!     unsigned char ch = p - alphabet;
      unsigned char pos[8] = {};
      size_t  inbytesleft = 1, outbytesleft = sizeof(pos);
      char *inbuf = reinterpret_cast<char*>(&ch),
          *outbuf = reinterpret_cast<char*>(pos);
!     
      size_t n = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
  
      if( n == size_t(-1) ) {
--- 3319,3332 ----
     * that letter in the alphanumeric encoding, and set its collation position
     * in that alphabet.
     */
!   for( const unsigned char *p = collation_sequence; p < pend; p++ ) {
      if( *p == 0xFF ) continue;
!     unsigned char ch = p - collation_sequence;
      unsigned char pos[8] = {};
      size_t  inbytesleft = 1, outbytesleft = sizeof(pos);
      char *inbuf = reinterpret_cast<char*>(&ch),
          *outbuf = reinterpret_cast<char*>(pos);
! 
      size_t n = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
  
      if( n == size_t(-1) ) {
*************** cbl_alphabet_t::reencode()  {
*** 3273,3279 ****
                  fromcode, ch, ch, n, tocode);
        continue;
      }
!     
      if( ch == low_index ) {
        low_index = pos[0];
      }
--- 3345,3351 ----
                  fromcode, ch, ch, n, tocode);
        continue;
      }
! 
      if( ch == low_index ) {
        low_index = pos[0];
      }
*************** cbl_alphabet_t::reencode()  {
*** 3283,3303 ****
      if( ch == high_index ) {
       high_index = pos[0];
      }
!     
      tgt.at(pos[0]) = *p;
    }
!   
!   std::copy(tgt.begin(), tgt.end(), alphabet); 
  }
  
  bool
  cbl_alphabet_t::assign( const YYLTYPE& loc, unsigned char ch, unsigned char high_value ) {
!   if( alphabet[ch] == 0xFF || alphabet[ch] == high_value) {
!     alphabet[ch] = high_value;
      last_index = ch;
      return true;
    }
!   auto taken = alphabet[ch];
    error_msg(loc, "ALPHABET %s, character %<%c%> (X%'%x%') "
             "in position %d already defined at position %d",
             name,
--- 3355,3375 ----
      if( ch == high_index ) {
       high_index = pos[0];
      }
! 
      tgt.at(pos[0]) = *p;
    }
! 
!   std::copy(tgt.begin(), tgt.end(), collation_sequence);
  }
  
  bool
  cbl_alphabet_t::assign( const YYLTYPE& loc, unsigned char ch, unsigned char high_value ) {
!   if( collation_sequence[ch] == 0xFF || collation_sequence[ch] == high_value) {
!     collation_sequence[ch] = high_value;
      last_index = ch;
      return true;
    }
!   auto taken = collation_sequence[ch];
    error_msg(loc, "ALPHABET %s, character %<%c%> (X%'%x%') "
             "in position %d already defined at position %d",
             name,
*************** cbl_alphabet_t::assign( const YYLTYPE& l
*** 3310,3316 ****
  void
  cbl_alphabet_t::also( const YYLTYPE& loc, size_t ch ) {
    if( ch < 256 ) {
!     alphabet[ch] = alphabet[last_index];
      if( ch == high_index ) high_index--;
      return;
    } // else it's a figurative constant ...
--- 3382,3388 ----
  void
  cbl_alphabet_t::also( const YYLTYPE& loc, size_t ch ) {
    if( ch < 256 ) {
!     collation_sequence[ch] = collation_sequence[last_index];
      if( ch == high_index ) high_index--;
      return;
    } // else it's a figurative constant ...
*************** cbl_alphabet_t::also( const YYLTYPE& loc
*** 3323,3342 ****
  
    // last_index is already set; use it as the "last value before ALSO"
    if( attr & low_value_e ) {
!     alphabet[0] = alphabet[last_index];
      return;
    }
    if( attr & high_value_e ) {
!     alphabet[high_index--] = alphabet[last_index];
      return;
    }
    if( attr & (space_value_e|quote_value_e) ) {
      ch = field->data.initial[0];
!     alphabet[ch] = alphabet[last_index];
      return;
    }
    if( attr & (zero_value_e) ) {
!     alphabet[0] = alphabet[last_index];
      error_msg(loc, "ALSO value '%s' is unknown", field->name);
      return;
    }
--- 3395,3414 ----
  
    // last_index is already set; use it as the "last value before ALSO"
    if( attr & low_value_e ) {
!     collation_sequence[0] = collation_sequence[last_index];
      return;
    }
    if( attr & high_value_e ) {
!     collation_sequence[high_index--] = collation_sequence[last_index];
      return;
    }
    if( attr & (space_value_e|quote_value_e) ) {
      ch = field->data.initial[0];
!     collation_sequence[ch] = collation_sequence[last_index];
      return;
    }
    if( attr & (zero_value_e) ) {
!     collation_sequence[0] = collation_sequence[last_index];
      error_msg(loc, "ALSO value '%s' is unknown", field->name);
      return;
    }
*************** new_literal_add( const char initial[], u
*** 3448,3465 ****
      }
    else
      {
-     static char empty[2] = "\0";
      field = new_temporary_impl(FldLiteralA);
      field->attr |= attr;
!     field->data.initial = len > 0? initial : empty;
      field->data.capacity = len;
      }
  
    if( ! field->has_attr(hex_encoded_e) ) {
!     field->codeset.set(encoding);
!     if( ! field->internalize() ) {
!       ERROR_FIELD(field, "inconsistent string literal encoding for '%s'", initial);
      }
    }
  
    static size_t literal_count = 1;
--- 3520,3552 ----
      }
    else
      {
      field = new_temporary_impl(FldLiteralA);
      field->attr |= attr;
! 
!     if(len == 0)
!       {
!       // This will cover UTF-32, should that arise.
!       size_t nbytes = 4;
!       char *init = static_cast<char *>(xmalloc(nbytes));
!       memset(init, 0, nbytes);
!       field->data.initial = init;
!       }
!     if(len)
!       {
!       char *init = static_cast<char *>(xmalloc(len+4));
!       memcpy(init, initial, len);
!       memset(init+len, 0, 4);
!       field->data.initial = init;
!       }
      field->data.capacity = len;
      }
  
    if( ! field->has_attr(hex_encoded_e) ) {
!     // If the literal bore a prefix, set the encoding,
!     if( encoding != cbl_field_t::codeset_t::source_encoding->type ) {
!       field->codeset.set(encoding);
      }
+     field->internalize();
    }
  
    static size_t literal_count = 1;
*************** new_alphanumeric( size_t capacity, const
*** 3595,3600 ****
--- 3682,3695 ----
  
  extern os_locale_t os_locale;
  
+ const encodings_t cbl_field_t::codeset_t::source_encodings[2] = {
+   { false, iconv_UTF_8_e, "UTF-8" },
+   { true,  iconv_CP1252_e, "CP1252" },
+ };
+ const encodings_t * cbl_field_t::codeset_t::source_encoding = {
+   cbl_field_t::codeset_t::source_encodings
+ };
+ 
  const encodings_t cbl_field_t::codeset_t::standard_internal = {
    true, iconv_CP1252_e, "CP1252"
  };
*************** const encodings_t cbl_field_t::codeset_t
*** 3603,3609 ****
  cbl_field_t *
  new_temporary( enum cbl_field_type_t type, const char *initial, bool is_signed ) {
    const bool force_unsigned = type == FldNumericBin5 && ! is_signed;
!   
    if( ! initial && ! force_unsigned ) {
      assert( ! is_literal(type) ); // Literal type must have literal value.
      return temporaries.acquire(type, initial);
--- 3698,3704 ----
  cbl_field_t *
  new_temporary( enum cbl_field_type_t type, const char *initial, bool is_signed ) {
    const bool force_unsigned = type == FldNumericBin5 && ! is_signed;
! 
    if( ! initial && ! force_unsigned ) {
      assert( ! is_literal(type) ); // Literal type must have literal value.
      return temporaries.acquire(type, initial);
*************** cbl_field_t::is_ascii() const {
*** 3719,3747 ****
   * never reverts.
   */
  
- static const char *
- guess_encoding() {
-   static const char *fromcode;
- 
-   if( ! fromcode ) {
-     return fromcode = os_locale.assumed;
-   }
- 
-   if( fromcode == os_locale.assumed ) {
-     fromcode = os_locale.codeset;
-     if( 0 != strcmp(fromcode, "C") ) { // anything but that
-       return fromcode;
-     }
-   }
- 
-   return standard_internal.name;
- }
- 
  const char *
  cbl_field_t::internalize() {
!   static const char *fromcode = guess_encoding();
    static const size_t noconv = size_t(-1);
!   static std::map<std::string, iconv_t> tocodes;
  
    if( ! codeset.valid() ) {
      dbgmsg("%s:%d: not converting %s", __func__, __LINE__, data.initial);
--- 3814,3839 ----
   * never reverts.
   */
  
  const char *
  cbl_field_t::internalize() {
!   /*  The purpose of this routine is to return a nul-terminated string which
!       is data.initial converted from the source-code characters to the
!       codeset.encoding characters.
!       
!       The contract between this routine and the routines that call it is that
!       for alphanumeric types, data.initial shall have the same number of
!       characters as will be needed to fill data.capacity.
! 
!       Be aware that for PIC X(32) Z"foo", there are the characters "foo",
!       followed by a NUL, and then 28 spaces to fill it out.  It turns out that
!       iconv, given a character count of 32, converts all 32, including the
!       embedded NUL.  So, that case works even through strlen(initial) is
!       smaller than the length of initial, which is the same as capacity.
!   */
! 
!   static const char *fromcode = codeset.source_encodings[0].name;
    static const size_t noconv = size_t(-1);
!   static std::unordered_map<std::string, iconv_t> tocodes;
  
    if( ! codeset.valid() ) {
      dbgmsg("%s:%d: not converting %s", __func__, __LINE__, data.initial);
*************** cbl_field_t::internalize() {
*** 3769,3788 ****
      assert(0 == strlen(data.initial));
      return data.initial;
    }
!   if( holds_ascii() && is_ascii() ) return data.initial;
    assert(data.capacity > 0);
  
    // The final 2 bytes of the output are "!\0".  It's a debugging sentinel.
    size_t n;
    size_t inbytesleft = data.capacity;
    size_t outbytesleft = inbytesleft;
-   char *in  = const_cast<char*>(data.initial);
-   char *out = static_cast<char*>( xcalloc(1, outbytesleft + 2) ), *output = out;
    if( !is_literal(this) && inbytesleft < strlen(data.initial) ) {
      inbytesleft = strlen(data.initial);
    }
    const unsigned int in_len = inbytesleft;
  
    assert(fromcode != tocode);
  
    /*
--- 3861,3893 ----
      assert(0 == strlen(data.initial));
      return data.initial;
    }
!   if( holds_ascii() && is_ascii() ) {
!     if( type != FldNumericEdited ) {
!       if( ! data.initial_within_capacity() ) {
!         ERROR_FIELD(this, "%s %s VALUE %qs of %zu exceeds size %u",
!                     cbl_field_t::level_str(level), name, data.initial,
!                     strlen(data.initial), data.capacity );
!       }
!     }
!     return data.initial;
!   }
    assert(data.capacity > 0);
  
    // The final 2 bytes of the output are "!\0".  It's a debugging sentinel.
    size_t n;
    size_t inbytesleft = data.capacity;
    size_t outbytesleft = inbytesleft;
    if( !is_literal(this) && inbytesleft < strlen(data.initial) ) {
      inbytesleft = strlen(data.initial);
    }
+   if( type == FldNumericEdited ) {
+     outbytesleft = inbytesleft;
+   }
    const unsigned int in_len = inbytesleft;
  
+   char *in  = const_cast<char*>(data.initial);
+   char *out = static_cast<char*>( xcalloc(1, outbytesleft + 2) ), *output = out;
+ 
    assert(fromcode != tocode);
  
    /*
*************** cbl_field_t::internalize() {
*** 3799,3806 ****
  
    do {
      if( (n = iconv( cd, &in, &inbytesleft, &out, &outbytesleft)) == noconv ) {
!       if( fromcode == os_locale.assumed ) {
!         fromcode = standard_internal.name;
          tocodes.clear();
          cd = tocodes[toname] = iconv_open(tocode, fromcode);
          dbgmsg("%s: trying input encoding %s", __func__, fromcode);
--- 3904,3912 ----
  
    do {
      if( (n = iconv( cd, &in, &inbytesleft, &out, &outbytesleft)) == noconv ) {
!       if( fromcode == codeset.source_encodings[0].name ) {
!         codeset.source_encoding = &codeset.source_encodings[1];
!         fromcode = codeset.source_encoding->name;
          tocodes.clear();
          cd = tocodes[toname] = iconv_open(tocode, fromcode);
          dbgmsg("%s: trying input encoding %s", __func__, fromcode);
*************** cbl_field_t::internalize() {
*** 3813,3819 ****
  
    if( n == noconv ) {
      size_t i = in_len - inbytesleft;
!     yywarn("failed to encode %s %qs as %s (%zu of %u bytes left)",
             fromcode, data.initial + i, tocode, inbytesleft, in_len);
      if( false ) return NULL;
      return data.initial;
--- 3919,3925 ----
  
    if( n == noconv ) {
      size_t i = in_len - inbytesleft;
!     yyerror("failed to encode %s %qs as %s (%zu of %u bytes left)",
             fromcode, data.initial + i, tocode, inbytesleft, in_len);
      if( false ) return NULL;
      return data.initial;
*************** cbl_field_t::internalize() {
*** 3821,3827 ****
  
    if( 0 < inbytesleft ) {
      // data.capacity + inbytesleft is not correct if the remaining portion has
!     // multibyte characters.  But the fact reamins that the VALUE is too big.
      ERROR_FIELD(this, "%s %s VALUE '%s' requires %zu bytes for size %u",
              cbl_field_t::level_str(level), name, data.initial,
              data.capacity + inbytesleft, data.capacity );
--- 3927,3933 ----
  
    if( 0 < inbytesleft ) {
      // data.capacity + inbytesleft is not correct if the remaining portion has
!     // multibyte characters.  But the fact remains that the VALUE is too big.
      ERROR_FIELD(this, "%s %s VALUE '%s' requires %zu bytes for size %u",
              cbl_field_t::level_str(level), name, data.initial,
              data.capacity + inbytesleft, data.capacity );
*************** cbl_field_t::internalize() {
*** 3829,3835 ****
  
    // Replace data.initial only if iconv output differs.
    if( 0 != memcmp(data.initial, output, out - output) ) {
!     assert(out <= output + data.capacity);
      dbgmsg("%s: converted '%.*s' to %s",
                          __func__, data.capacity, data.initial, tocode);
      struct localspace_t {
--- 3935,3941 ----
  
    // Replace data.initial only if iconv output differs.
    if( 0 != memcmp(data.initial, output, out - output) ) {
!     assert(out <= output + data.capacity || type == FldNumericEdited);
      dbgmsg("%s: converted '%.*s' to %s",
                          __func__, data.capacity, data.initial, tocode);
      struct localspace_t {
*************** cbl_field_t::internalize() {
*** 3858,3871 ****
        data.capacity = out - output; // trailing '!' will be overwritten
      }
      // Pad with trailing blanks, tacking a '!' on the end.
!     for( const char *eout = output + data.capacity; 
           out < eout;
           out += spc.len ) {
        memcpy(out, spc.space, spc.len);
      }
!     out[0] = '!';
      assert(out[1] == '\0');
!     free(const_cast<char*>(data.initial));
      data.initial = output;
    } else {
      free(output);
--- 3964,3979 ----
        data.capacity = out - output; // trailing '!' will be overwritten
      }
      // Pad with trailing blanks, tacking a '!' on the end.
!     for( const char *eout = output + data.capacity;
           out < eout;
           out += spc.len ) {
        memcpy(out, spc.space, spc.len);
      }
!     // Numeric literal strings may have leading zeros, making their length
!     // longer than their capacity.
!     out[0] = type == FldLiteralN? '\0' : '!';
      assert(out[1] == '\0');
!     data.orig = data.initial;
      data.initial = output;
    } else {
      free(output);
diff -Nrcpad gcc-16-20251102/gcc/cobol/symbols.h gcc-16-20251109/gcc/cobol/symbols.h
*** gcc-16-20251102/gcc/cobol/symbols.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/symbols.h	Sun Nov  9 22:32:45 2025
*************** enum symbol_type_t {
*** 224,229 ****
--- 224,230 ----
    SymAlphabet,
    SymFile,
    SymDataSection,
+   SymLocale, 
  };
  
  // The ISO specification says alphanumeric literals have a maximum length of
*************** struct cbl_field_data_t {
*** 237,243 ****
    uint32_t capacity,            // allocated space
             digits;              // magnitude: total digits (or characters)
    int32_t  rdigits;             // digits to the right
!   const char *initial, *picture;
  
    enum etc_type_t { val88_e, upsi_e, value_e } etc_type;
    const char *
--- 238,244 ----
    uint32_t capacity,            // allocated space
             digits;              // magnitude: total digits (or characters)
    int32_t  rdigits;             // digits to the right
!   const char *orig, *initial, *picture;
  
    enum etc_type_t { val88_e, upsi_e, value_e } etc_type;
    const char *
*************** struct cbl_field_data_t {
*** 268,273 ****
--- 269,275 ----
      , capacity(0)
      , digits(0)
      , rdigits(0)
+     , orig(0)
      , initial(0)
      , picture(0)
      , etc_type(value_e)
*************** struct cbl_field_data_t {
*** 279,284 ****
--- 281,287 ----
      , capacity(capacity)
      , digits(0)
      , rdigits(0)
+     , orig(0)
      , initial(0)
      , picture(0)
      , etc_type(value_e)
*************** struct cbl_field_data_t {
*** 293,298 ****
--- 296,302 ----
      , capacity(capacity)
      , digits(digits)
      , rdigits(rdigits)
+     , orig(0)
      , initial(initial)
      , picture(picture)
      , etc_type(value_e)
*************** struct cbl_field_data_t {
*** 387,392 ****
--- 391,402 ----
      return valify();
    }
  
+   bool initial_within_capacity() const {
+     return initial[capacity] == '\0'
+       ||   initial[capacity] == '!';
+   }
+   const char *original() const { return orig? orig : initial; }
+ 
   protected:
    cbl_field_data_t& copy_self( const cbl_field_data_t& that ) {
      memsize = that.memsize;
*************** struct cbl_field_t {
*** 531,537 ****
    uint32_t level;
    cbl_occurs_t occurs;
    struct codeset_t {
!     static const encodings_t standard_internal;
      cbl_encoding_t encoding;
      size_t alphabet;  // unlikely
      explicit codeset_t(cbl_encoding_t encoding = custom_encoding_e,
--- 541,547 ----
    uint32_t level;
    cbl_occurs_t occurs;
    struct codeset_t {
!     static const encodings_t standard_internal, source_encodings[2], *source_encoding;
      cbl_encoding_t encoding;
      size_t alphabet;  // unlikely
      explicit codeset_t(cbl_encoding_t encoding = custom_encoding_e,
*************** struct cbl_field_t {
*** 544,565 ****
          ||
          (alphabet != 0 && encoding == custom_encoding_e);
      }
      bool set( cbl_encoding_t encoding, size_t alphabet = 0 ) {
!       assert(encoding <= iconv_YU_e);
        if( ! valid() ) { // setting first time
          this->encoding = encoding;
          this->alphabet = alphabet;
          return valid();
        }
-       // DUBNER override.  Encoding has to change when
-       //  01 FOO VALUE ZERO.  Just 0 is okay; ZERO is not.
-           this->encoding = encoding;
        return this->encoding == encoding && this->alphabet == alphabet;
      }
      bool set( const char picture_fragment[] = nullptr) {
        if( ! picture_fragment ) {
!         cbl_encoding_t currenc = current_encoding('A');
!         bool retval = set(currenc);
          return retval;
        }
        size_t len = strlen(picture_fragment);
--- 554,579 ----
          ||
          (alphabet != 0 && encoding == custom_encoding_e);
      }
+     bool consistent() const {
+       return valid() && ( encoding == current_encoding('A')
+                           ||
+                           encoding == current_encoding('N')
+                           ||
+                           encoding == UTF8_e );
+     }
      bool set( cbl_encoding_t encoding, size_t alphabet = 0 ) {
!       assert(valid_encoding(encoding));
        if( ! valid() ) { // setting first time
          this->encoding = encoding;
          this->alphabet = alphabet;
          return valid();
        }
        return this->encoding == encoding && this->alphabet == alphabet;
      }
      bool set( const char picture_fragment[] = nullptr) {
        if( ! picture_fragment ) {
!         cbl_encoding_t enc = current_encoding('A');
!         bool retval = set(enc);
          return retval;
        }
        size_t len = strlen(picture_fragment);
*************** struct cbl_field_t {
*** 568,581 ****
                       frag.begin(), ftoupper);
        switch(frag[0]) { 
        case 'A': case 'X': case '9':
!         return set(current_encoding('A'));
        case 'N': case 'U': 
          if( std::all_of(frag.begin(), frag.end(),
                          [first = frag[0]]( char ch ) {
                            return first == ch;
                          } ) ) {
            // All N's indicates National; all U's indicates UTF-8.
!           auto enc = frag[0] == 'N'? current_encoding('N') : UTF8_e;
            return set(enc);
          }
          return false; // They all must be the same. 
--- 582,596 ----
                       frag.begin(), ftoupper);
        switch(frag[0]) { 
        case 'A': case 'X': case '9':
!         return set(current_encoding(display_encoding_e));
        case 'N': case 'U': 
          if( std::all_of(frag.begin(), frag.end(),
                          [first = frag[0]]( char ch ) {
                            return first == ch;
                          } ) ) {
            // All N's indicates National; all U's indicates UTF-8.
!           auto enc = frag[0] == 'N' ? current_encoding(national_encoding_e)
!                                     : UTF8_e;
            return set(enc);
          }
          return false; // They all must be the same. 
*************** struct cbl_field_t {
*** 739,745 ****
    uint32_t size() const; // table capacity or capacity
  
    const char * pretty_name() const {
!     if( name[0] == '_' && data.initial ) return data.initial;
      return name;
    }
    static const char * level_str(uint32_t level );
--- 754,760 ----
    uint32_t size() const; // table capacity or capacity
  
    const char * pretty_name() const {
!     if( name[0] == '_' && data.original() ) return data.original();
      return name;
    }
    static const char * level_str(uint32_t level );
*************** struct cbl_arith_error_t {
*** 1185,1190 ****
--- 1200,1212 ----
      cbl_label_addresses_t bottom;
  };
  
+ struct cbl_delete_file_t {
+     cbl_label_addresses_t over;
+     cbl_label_addresses_t exception;
+     cbl_label_addresses_t no_exception;
+     cbl_label_addresses_t bottom;
+ };
+ 
  struct cbl_compute_error_t {
      // This is an int.  The value is a cbl_compute_error_code_t
      tree compute_error_code;
*************** struct cbl_label_t {
*** 1232,1238 ****
      
      // for parse_xml processing:
      struct cbl_xml_parse_t *xml_parse;
!     
      } structs;
  
    bool is_function() const { return type == LblFunction; }
--- 1254,1263 ----
      
      // for parse_xml processing:
      struct cbl_xml_parse_t *xml_parse;
! 
!     // For parser_file_delete_file
!     struct cbl_delete_file_t *delete_file;
! 
      } structs;
  
    bool is_function() const { return type == LblFunction; }
*************** struct cbl_section_t {
*** 1525,1530 ****
--- 1550,1568 ----
    }
  };
  
+ struct cbl_locale_t {
+   cbl_name_t name;
+   cbl_encoding_t encoding;
+   cbl_name_t collation;
+ 
+   explicit cbl_locale_t(const cbl_name_t name,
+                         const char iconv_name[] = nullptr );
+ 
+   bool operator<( const cbl_locale_t& that ) const {
+     return strcmp(name, that.name) < 0;
+   }
+ };
+ 
  struct cbl_special_name_t {
    int token;
    enum special_name_t id;
*************** struct cbl_special_name_t {
*** 1536,1557 ****
  char * hex_decode( const char text[] );
  
  /*
!  * For a custom alphabet of single-byte encoding, cbl_alphabet_t::alphabet
   * holds the collation position of each encoded value.  
!  * If 'A' sorts first (after LOW-VALUE), then alphabet['A'] == 1. 
!  * If the encoding is ASCII,         then 'A' is  65 and alphabet[ 65] == 1.
!  * If the encoding is EBCDIC CP1140, then 'A' is 193 and alphabet[193] == 1.
   */
  struct cbl_alphabet_t {
    YYLTYPE loc;
    cbl_name_t name;
    cbl_encoding_t encoding;
!   unsigned char low_index, high_index, last_index, alphabet[256];
    unsigned char low_char, high_char;
  
    cbl_alphabet_t()
      : loc { 1,1, 1,1 }
      , encoding(ASCII_e)
      , low_index(0)
      , high_index(255)
      , last_index(0)
--- 1574,1608 ----
  char * hex_decode( const char text[] );
  
  /*
!  * An alphabet may just name an encoding, which implies binary collation.
!  *
!  * An alphabet may reference a Special-Names LOCALE, which defines an encoding
!  * and a collation (perhaps by default).
!  * 
!  * During Special-Names parsing, an Alphabet may reference an as-yet undefined
!  * LOCALE with an as-yet unknown encoding. As a placeholder it inserts a named,
!  * undefined cbl_locale_t symbol, which the Alphabet references.  If that
!  * locale is never defined, the encoding remains unknown, resulting in an error
!  * diagnostic at the end of Special-Names.
!  *
!  * For a custom alphabet of single-byte encoding, cbl_alphabet_t::collation_sequence
   * holds the collation position of each encoded value.  
!  * If 'A' sorts first (after LOW-VALUE), then collation_sequence['A'] == 1. 
!  * If the encoding is ASCII,         then 'A' is  65 and collation_sequence[ 65] == 1.
!  * If the encoding is EBCDIC CP1140, then 'A' is 193 and collation_sequence[193] == 1.
   */
  struct cbl_alphabet_t {
    YYLTYPE loc;
    cbl_name_t name;
    cbl_encoding_t encoding;
!   size_t locale;  // index to cbl_locale_t symbol
!   unsigned char low_index, high_index, last_index, collation_sequence[256];
    unsigned char low_char, high_char;
  
    cbl_alphabet_t()
      : loc { 1,1, 1,1 }
      , encoding(ASCII_e)
+     , locale(0)
      , low_index(0)
      , high_index(255)
      , last_index(0)
*************** struct cbl_alphabet_t {
*** 1559,1570 ****
      , high_char(0)
    {
      memset(name, '\0', sizeof(name));
!     memset(alphabet, 0xFF, sizeof(alphabet));
    }
  
    cbl_alphabet_t(const YYLTYPE& loc, cbl_encoding_t enc)
      : loc(loc)
      , encoding(enc)
      , low_index(0)
      , high_index(255)
      , last_index(0)
--- 1610,1622 ----
      , high_char(0)
    {
      memset(name, '\0', sizeof(name));
!     memset(collation_sequence, 0xFF, sizeof(collation_sequence));
    }
  
    cbl_alphabet_t(const YYLTYPE& loc, cbl_encoding_t enc)
      : loc(loc)
      , encoding(enc)
+     , locale(0)
      , low_index(0)
      , high_index(255)
      , last_index(0)
*************** struct cbl_alphabet_t {
*** 1572,1585 ****
      , high_char(0)
    {
      memset(name, '\0', sizeof(name));
!     memset(alphabet, 0xFF, sizeof(alphabet));
    }
  
    cbl_alphabet_t( const YYLTYPE& loc, const cbl_name_t name,
                    unsigned char low_index, unsigned char high_index,
!                   unsigned char alphabet[] )
      : loc(loc)
      , encoding(custom_encoding_e)
      , low_index(low_index), high_index(high_index)
      , last_index(high_index)
      , low_char(low_index)
--- 1624,1640 ----
      , high_char(0)
    {
      memset(name, '\0', sizeof(name));
!     memset(collation_sequence, 0xFF, sizeof(collation_sequence));
    }
  
+   cbl_alphabet_t(const YYLTYPE& loc, size_t locale, cbl_name_t name );
+ 
    cbl_alphabet_t( const YYLTYPE& loc, const cbl_name_t name,
                    unsigned char low_index, unsigned char high_index,
!                   unsigned char collation_sequence[] )
      : loc(loc)
      , encoding(custom_encoding_e)
+     , locale(0)
      , low_index(low_index), high_index(high_index)
      , last_index(high_index)
      , low_char(low_index)
*************** struct cbl_alphabet_t {
*** 1587,1607 ****
    {
      assert(strlen(name) < sizeof(this->name));
      strcpy(this->name, name);
!     std::copy(alphabet, alphabet + sizeof(this->alphabet), this->alphabet);
    }
  
    unsigned char low_value() const {
!     return alphabet[low_index];
    }
    unsigned char high_value() const {
!     return alphabet[high_index];
    }
  
    void
    add_sequence( const YYLTYPE& loc, const unsigned char seq[] ) {
      if( low_index == 0 ) low_index = seq[0];
  
!     unsigned char last = last_index > 0? alphabet[last_index] + 1 : 0;
  
      for( const unsigned char *p = seq; !end_of_string(p); p++  ) {
        assign(loc, *p, last++);
--- 1642,1664 ----
    {
      assert(strlen(name) < sizeof(this->name));
      strcpy(this->name, name);
!     std::copy(collation_sequence,
!               collation_sequence + sizeof(this->collation_sequence),
!               this->collation_sequence);
    }
  
    unsigned char low_value() const {
!     return collation_sequence[low_index];
    }
    unsigned char high_value() const {
!     return collation_sequence[high_index];
    }
  
    void
    add_sequence( const YYLTYPE& loc, const unsigned char seq[] ) {
      if( low_index == 0 ) low_index = seq[0];
  
!     unsigned char last = last_index > 0? collation_sequence[last_index] + 1 : 0;
  
      for( const unsigned char *p = seq; !end_of_string(p); p++  ) {
        assign(loc, *p, last++);
*************** struct cbl_alphabet_t {
*** 1612,1618 ****
    add_interval( const YYLTYPE& loc, unsigned char low, unsigned char high ) {
      if( low_index == 0 ) low_index = low;
  
!     unsigned char last = alphabet[last_index];
  
      for( unsigned char ch = low; ch < high; ch++  ) {
        assign(loc, ch, last++);
--- 1669,1675 ----
    add_interval( const YYLTYPE& loc, unsigned char low, unsigned char high ) {
      if( low_index == 0 ) low_index = low;
  
!     unsigned char last = collation_sequence[last_index];
  
      for( unsigned char ch = low; ch < high; ch++  ) {
        assign(loc, ch, last++);
*************** struct cbl_alphabet_t {
*** 1649,1656 ****
                 "  0   1   2   3   4   5   6   7"
                "   8   9   A   B   C   C   E   F");
        unsigned int row = 0;
!       for( auto p = alphabet; p < alphabet + sizeof(alphabet); p++ ) {
!         if( (p - alphabet) % 16 == 0 ) fprintf(stderr, "\n%4X\t", row++);
          fprintf(stderr, "%3u ", *p);
        }
        fprintf(stderr, "\n");
--- 1706,1716 ----
                 "  0   1   2   3   4   5   6   7"
                "   8   9   A   B   C   C   E   F");
        unsigned int row = 0;
!       for( auto p = collation_sequence;
!            p < collation_sequence + sizeof(collation_sequence); p++ ) {
!         if( (p - collation_sequence) % 16 == 0 ) {
!           fprintf(stderr, "\n%4X\t", row++);
!         }
          fprintf(stderr, "%3u ", *p);
        }
        fprintf(stderr, "\n");
*************** struct symbol_elem_t {
*** 1870,1875 ****
--- 1930,1936 ----
      cbl_field_t        field;
      cbl_label_t        label;
      cbl_special_name_t special;
+     cbl_locale_t       locale;
      cbl_alphabet_t     alphabet;
      cbl_file_t         file;
      cbl_section_t      section;
*************** struct symbol_elem_t {
*** 1927,1932 ****
--- 1988,1996 ----
      case SymSpecial:
        elem.special = that.elem.special;
        break;
+     case SymLocale:
+       elem.locale = that.elem.locale;
+       break;
      case SymAlphabet:
        elem.alphabet = that.elem.alphabet;
        break;
*************** cbl_special_name_of( symbol_elem_t *e )
*** 2092,2097 ****
--- 2156,2173 ----
    return &e->elem.special;
  }
  
+ static inline cbl_locale_t *
+ cbl_locale_of( symbol_elem_t *e ) {
+   assert(e && e->type == SymLocale);
+   return &e->elem.locale;
+ }
+ 
+ static inline const cbl_locale_t *
+ cbl_locale_of( const symbol_elem_t *e ) {
+   assert(e && e->type == SymLocale);
+   return &e->elem.locale;
+ }
+ 
  static inline cbl_alphabet_t *
  cbl_alphabet_of( symbol_elem_t *e ) {
    assert(e && e->type == SymAlphabet);
*************** cbl_alphabet_of( const symbol_elem_t *e
*** 2104,2109 ****
--- 2180,2186 ----
    return &e->elem.alphabet;
  }
  
+ 
  static inline cbl_file_t *
  cbl_file_of( symbol_elem_t *e ) {
    assert(e && e->type == SymFile);
*************** struct symbol_elem_t * symbol_literalA(
*** 2477,2482 ****
--- 2554,2560 ----
  
  struct cbl_special_name_t * symbol_special( special_name_t id );
  struct symbol_elem_t * symbol_special( size_t program, const char name[] );
+ struct symbol_elem_t * symbol_locale( size_t program, const char name[] );
  struct symbol_elem_t * symbol_alphabet( size_t program, const char name[] );
  
  struct symbol_elem_t * symbol_file( size_t program, const char name[] );
*************** cbl_label_t *   symbol_label_add( size_t
*** 2524,2529 ****
--- 2602,2608 ----
  cbl_label_t *   symbol_program_add( size_t program, cbl_label_t *input );
  symbol_elem_t * symbol_special_add( size_t program,
  				    cbl_special_name_t *special );
+ symbol_elem_t * symbol_locale_add( size_t program, const cbl_locale_t *locale );
  symbol_elem_t * symbol_alphabet_add( size_t program,
  				     const cbl_alphabet_t *alphabet );
  symbol_elem_t * symbol_file_add( size_t program,
*************** static inline size_t upsi_register() {
*** 2548,2555 ****
    return symbol_index(symbol_field(0,0,"UPSI-0"));
  }
  
! void wsclear( char ch);
! const char *wsclear();
  
  enum cbl_call_convention_t {
    cbl_call_verbatim_e = 'V',
--- 2627,2634 ----
    return symbol_index(symbol_field(0,0,"UPSI-0"));
  }
  
! void wsclear( uint32_t ch);
! const uint32_t *wsclear();
  
  enum cbl_call_convention_t {
    cbl_call_verbatim_e = 'V',
diff -Nrcpad gcc-16-20251102/gcc/cobol/util.cc gcc-16-20251109/gcc/cobol/util.cc
*** gcc-16-20251102/gcc/cobol/util.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/cobol/util.cc	Sun Nov  9 22:32:45 2025
*************** symbol_type_str( enum symbol_type_t type
*** 271,276 ****
--- 271,278 ----
          return "SymLabel";
      case SymSpecial:
          return "SymSpecial";
+     case SymLocale:
+         return "SymLocale";
      case SymAlphabet:
          return "SymAlphabet";
      case SymFile:
*************** cbl_field_t::report_invalid_initial_valu
*** 1094,1121 ****
    if( has_attr(all_alpha_e) ) {
      bool alpha_value = fig != zero_value_e;
      
-     // In order to check for all alphabetic characters, we have to convert
-     // data.initial back to ASCII:
- 
-     size_t outchars;
-     char *initial = __gg__iconverter(codeset.encoding,
-                                      DEFAULT_CHARMAP_SOURCE,
-                                      data.initial,
-                                      data.capacity,
-                                      &outchars);
- 
      if( fig == normal_value_e ) {
!       alpha_value = std::all_of( initial,
!                                  initial +
!                                  data.capacity,
!                                  []( char ch ) {
!                                    return ISSPACE(ch) ||
!                                      ISPUNCT(ch) ||
!                                      ISALPHA(ch); } );
      }
      if( ! alpha_value ) {
        error_msg(loc, "alpha-only %s VALUE '%s' contains non-alphabetic data",
!                name, fig == zero_value_e? cbl_figconst_str(fig) : initial);
      }
    }
  
--- 1096,1113 ----
    if( has_attr(all_alpha_e) ) {
      bool alpha_value = fig != zero_value_e;
      
      if( fig == normal_value_e ) {
!       alpha_value = std::none_of( data.initial,
!                                   data.initial +
!                                   data.capacity,
!                                   []( char ch ) {
!                                     return 
!                                       ISPUNCT(ch) ||
!                                       ISDIGIT(ch); } );
      }
      if( ! alpha_value ) {
        error_msg(loc, "alpha-only %s VALUE '%s' contains non-alphabetic data",
!                name, fig == zero_value_e? cbl_figconst_str(fig) : data.initial);
      }
    }
  
*************** valid_move( const struct cbl_field_t *tg
*** 1315,1321 ****
          size_t outcount;
          char *in_ascii = static_cast<char *>(xmalloc(4 * src->data.capacity));
          const char *in_asciip = __gg__iconverter( src->codeset.encoding,
!                                                   DEFAULT_CHARMAP_SOURCE,
                                                    src->data.initial,
                                                    src->data.capacity,
                                                    &outcount );
--- 1307,1313 ----
          size_t outcount;
          char *in_ascii = static_cast<char *>(xmalloc(4 * src->data.capacity));
          const char *in_asciip = __gg__iconverter( src->codeset.encoding,
!                                                   DEFAULT_SOURCE_ENCODING,
                                                    src->data.initial,
                                                    src->data.capacity,
                                                    &outcount );
*************** cobol_lineno() {
*** 2078,2084 ****
  
  const char *
  cobol_filename() {
!   return input_filenames.empty()? input_filename_vestige : input_filenames.top().name;
  }
  
  void
--- 2070,2077 ----
  
  const char *
  cobol_filename() {
!   return input_filenames.empty()?
!     input_filename_vestige : input_filenames.top().name;
  }
  
  void
diff -Nrcpad gcc-16-20251102/gcc/config/aarch64/aarch64-option-extensions.def gcc-16-20251109/gcc/config/aarch64/aarch64-option-extensions.def
*** gcc-16-20251102/gcc/config/aarch64/aarch64-option-extensions.def	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/aarch64/aarch64-option-extensions.def	Sun Nov  9 22:32:45 2025
*************** AARCH64_OPT_EXTENSION("fp16fml", F16FML,
*** 155,160 ****
--- 155,166 ----
  
  AARCH64_FMV_FEATURE("fp16fml", FP16FML, (F16FML))
  
+ AARCH64_FMV_FEATURE("dit", DIT, ())
+ 
+ AARCH64_FMV_FEATURE("dpb", DPB, ())
+ 
+ AARCH64_FMV_FEATURE("dpb2", DPB2, ())
+ 
  AARCH64_OPT_FMV_EXTENSION("jscvt", JSCVT, (FP), (), (), "jscvt")
  
  AARCH64_OPT_FMV_EXTENSION("fcma", FCMA, (SIMD), (), (), "fcma")
*************** AARCH64_OPT_EXTENSION("sve2p1", SVE2p1,
*** 209,221 ****
  
  AARCH64_OPT_FMV_EXTENSION("sme", SME, (BF16, FCMA, F16, F16FML), (), (), "sme")
  
! AARCH64_OPT_EXTENSION("memtag", MEMTAG, (), (), (), "")
  
  AARCH64_OPT_FMV_EXTENSION("sb", SB, (), (), (), "sb")
  
  AARCH64_OPT_EXTENSION("predres", PREDRES, (), (), (), "")
  
! AARCH64_OPT_EXTENSION("ssbs", SSBS, (), (), (), "ssbs")
  
  AARCH64_OPT_EXTENSION("profile", PROFILE, (), (), (), "")
  
--- 215,229 ----
  
  AARCH64_OPT_FMV_EXTENSION("sme", SME, (BF16, FCMA, F16, F16FML), (), (), "sme")
  
! AARCH64_OPT_FMV_EXTENSION("memtag", MEMTAG, (), (), (), "")
  
  AARCH64_OPT_FMV_EXTENSION("sb", SB, (), (), (), "sb")
  
  AARCH64_OPT_EXTENSION("predres", PREDRES, (), (), (), "")
  
! AARCH64_OPT_FMV_EXTENSION("ssbs", SSBS, (), (), (), "ssbs")
! 
! AARCH64_FMV_FEATURE("bti", BTI, ())
  
  AARCH64_OPT_EXTENSION("profile", PROFILE, (), (), (), "")
  
diff -Nrcpad gcc-16-20251102/gcc/config/aarch64/aarch64.cc gcc-16-20251109/gcc/config/aarch64/aarch64.cc
*** gcc-16-20251102/gcc/config/aarch64/aarch64.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/aarch64/aarch64.cc	Sun Nov  9 22:32:45 2025
*************** handle_aarch64_vector_pcs_attribute (tre
*** 749,754 ****
--- 749,756 ----
        *no_add_attrs = true;
        return NULL_TREE;
  
+       /* Rely on the exclusions list for preserve_none.  */
+     case ARM_PCS_PRESERVE_NONE:
      case ARM_PCS_TLSDESC:
      case ARM_PCS_UNKNOWN:
        break;
*************** handle_arm_shared (tree *node, tree name
*** 851,856 ****
--- 853,868 ----
    return NULL_TREE;
  }
  
+ /* Mutually-exclusive function type attributes for various PCS variants.  */
+ static const struct attribute_spec::exclusions aarch64_pcs_exclusions[] =
+ {
+   /* Attribute name     exclusion applies to:
+ 			function, type, variable */
+   { "aarch64_vector_pcs", false, true, false },
+   { "preserve_none", false, true, false },
+   { NULL, false, false, false }
+ };
+ 
  /* Mutually-exclusive function type attributes for controlling PSTATE.SM.  */
  static const struct attribute_spec::exclusions attr_streaming_exclusions[] =
  {
*************** static const attribute_spec aarch64_gnu_
*** 867,873 ****
    /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
         affects_type_identity, handler, exclude } */
    { "aarch64_vector_pcs", 0, 0, false, true,  true,  true,
! 			  handle_aarch64_vector_pcs_attribute, NULL },
    { "indirect_return",    0, 0, false, true, true, true, NULL, NULL },
    { "arm_sve_vector_bits", 1, 1, false, true,  false, true,
  			  aarch64_sve::handle_arm_sve_vector_bits_attribute,
--- 879,888 ----
    /* { name, min_len, max_len, decl_req, type_req, fn_type_req,
         affects_type_identity, handler, exclude } */
    { "aarch64_vector_pcs", 0, 0, false, true,  true,  true,
! 			  handle_aarch64_vector_pcs_attribute,
! 			  aarch64_pcs_exclusions },
!   { "preserve_none",      0, 0, false, true,  true,  true,  NULL,
! 			  aarch64_pcs_exclusions },
    { "indirect_return",    0, 0, false, true, true, true, NULL, NULL },
    { "arm_sve_vector_bits", 1, 1, false, true,  false, true,
  			  aarch64_sve::handle_arm_sve_vector_bits_attribute,
*************** aarch64_sve_abi (void)
*** 1317,1322 ****
--- 1332,1354 ----
    return sve_abi;
  }
  
+ /* Return the descriptor of the preserve_none PCS.  */
+ 
+ static const predefined_function_abi &
+ aarch64_preserve_none_abi (void)
+ {
+   auto &preserve_none_abi = function_abis[ARM_PCS_PRESERVE_NONE];
+   if (!preserve_none_abi.initialized_p ())
+     {
+       HARD_REG_SET preserved_regs = {};
+       if (!CALL_USED_X18)
+ 	SET_HARD_REG_BIT (preserved_regs, R18_REGNUM);
+       auto full_reg_clobbers = reg_class_contents[ALL_REGS] & ~preserved_regs;
+       preserve_none_abi.initialize (ARM_PCS_PRESERVE_NONE, full_reg_clobbers);
+     }
+   return preserve_none_abi;
+ }
+ 
  /* If X is an UNSPEC_SALT_ADDR expression, return the address that it
     wraps, otherwise return X itself.  */
  
*************** aarch64_fntype_abi (const_tree fntype)
*** 2312,2317 ****
--- 2344,2352 ----
    if (lookup_attribute ("aarch64_vector_pcs", TYPE_ATTRIBUTES (fntype)))
      return aarch64_simd_abi ();
  
+   if (lookup_attribute ("preserve_none", TYPE_ATTRIBUTES (fntype)))
+     return aarch64_preserve_none_abi ();
+ 
    if (aarch64_returns_value_in_sve_regs_p (fntype)
        || aarch64_takes_arguments_in_sve_regs_p (fntype))
      return aarch64_sve_abi ();
*************** aarch64_reg_save_mode (unsigned int regn
*** 2519,2524 ****
--- 2554,2563 ----
    if (FP_REGNUM_P (regno))
      switch (crtl->abi->id ())
        {
+       case ARM_PCS_PRESERVE_NONE:
+ 	/* In preserve_none all fpr registers are caller saved, so the choice
+ 	   here should not matter.  Nevertheless, fall back to the base AAPCS
+ 	   for consistency.  */
        case ARM_PCS_AAPCS64:
  	/* Only the low 64 bits are saved by the base PCS.  */
  	return DFmode;
*************** aarch64_hard_regno_call_part_clobbered (
*** 2649,2655 ****
  					unsigned int regno,
  					machine_mode mode)
  {
!   if (FP_REGNUM_P (regno) && abi_id != ARM_PCS_SVE)
      {
        poly_int64 per_register_size = GET_MODE_SIZE (mode);
        unsigned int nregs = hard_regno_nregs (regno, mode);
--- 2688,2696 ----
  					unsigned int regno,
  					machine_mode mode)
  {
!   if (FP_REGNUM_P (regno)
!       && abi_id != ARM_PCS_SVE
!       && abi_id != ARM_PCS_PRESERVE_NONE)
      {
        poly_int64 per_register_size = GET_MODE_SIZE (mode);
        unsigned int nregs = hard_regno_nregs (regno, mode);
*************** aarch64_function_ok_for_sibcall (tree, t
*** 6826,6831 ****
--- 6867,6876 ----
    auto from_abi = crtl->abi->id ();
    auto to_abi = expr_callee_abi (exp).id ();
  
+   /* preserve_none functions can tail-call anything that the base PCS can.  */
+   if (from_abi != to_abi && from_abi == ARM_PCS_PRESERVE_NONE)
+     from_abi = ARM_PCS_AAPCS64;
+ 
    /* ARM_PCS_SVE preserves strictly more than ARM_PCS_SIMD, which in
       turn preserves strictly more than the base PCS.  The callee must
       preserve everything that the caller is required to preserve.  */
*************** bitint_or_aggr_of_bitint_p (tree type)
*** 7287,7292 ****
--- 7332,7380 ----
    return false;
  }
  
+ /* How many GPR are available for argument passing in the procedure call
+    standard.  */
+ static int
+ num_pcs_arg_regs (enum arm_pcs pcs)
+ {
+   switch (pcs)
+     {
+     case ARM_PCS_PRESERVE_NONE:
+       return NUM_PRESERVE_NONE_ARG_REGS;
+     case ARM_PCS_AAPCS64:
+     case ARM_PCS_SIMD:
+     case ARM_PCS_SVE:
+     case ARM_PCS_TLSDESC:
+     case ARM_PCS_UNKNOWN:
+       return NUM_ARG_REGS;
+     }
+   gcc_unreachable ();
+ }
+ 
+ /* Get the NUM'th GPR argument passing register from the PCS procedure call
+  * standard.  */
+ 
+ static int
+ get_pcs_arg_reg (enum arm_pcs pcs, int num)
+ {
+   static const int ARM_PCS_PRESERVE_NONE_REGISTERS[] = PRESERVE_NONE_REGISTERS;
+ 
+   gcc_assert (num < num_pcs_arg_regs (pcs));
+ 
+   switch (pcs)
+     {
+     case ARM_PCS_PRESERVE_NONE:
+       return ARM_PCS_PRESERVE_NONE_REGISTERS[num];
+     case ARM_PCS_AAPCS64:
+     case ARM_PCS_SIMD:
+     case ARM_PCS_SVE:
+     case ARM_PCS_TLSDESC:
+     case ARM_PCS_UNKNOWN:
+       return R0_REGNUM + num;
+     }
+   gcc_unreachable ();
+ }
+ 
  /* Layout a function argument according to the AAPCS64 rules.  The rule
     numbers refer to the rule numbers in the AAPCS64.  ORIG_MODE is the
     mode that was originally given to us by the target hook, whereas the
*************** aarch64_layout_arg (cumulative_args_t pc
*** 7385,7391 ****
  	 unprototyped function.  There is no ABI-defined location we
  	 can return in this case, so we have no real choice but to raise
  	 an error immediately, even though this is only a query function.  */
!       if (arg.named && pcum->pcs_variant != ARM_PCS_SVE)
  	{
  	  gcc_assert (!pcum->silent_p);
  	  error ("SVE type %qT cannot be passed to an unprototyped function",
--- 7473,7481 ----
  	 unprototyped function.  There is no ABI-defined location we
  	 can return in this case, so we have no real choice but to raise
  	 an error immediately, even though this is only a query function.  */
!       if (arg.named
! 	  && pcum->pcs_variant != ARM_PCS_SVE
! 	  && pcum->pcs_variant != ARM_PCS_PRESERVE_NONE)
  	{
  	  gcc_assert (!pcum->silent_p);
  	  error ("SVE type %qT cannot be passed to an unprototyped function",
*************** aarch64_layout_arg (cumulative_args_t pc
*** 7400,7406 ****
        pcum->aapcs_nextnvrn = pcum->aapcs_nvrn + pst_info.num_zr ();
        pcum->aapcs_nextnprn = pcum->aapcs_nprn + pst_info.num_pr ();
        gcc_assert (arg.named
- 		  && pcum->pcs_variant == ARM_PCS_SVE
  		  && pcum->aapcs_nextnvrn <= NUM_FP_ARG_REGS
  		  && pcum->aapcs_nextnprn <= NUM_PR_ARG_REGS);
        pcum->aapcs_reg = pst_info.get_rtx (mode, V0_REGNUM + pcum->aapcs_nvrn,
--- 7490,7495 ----
*************** aarch64_layout_arg (cumulative_args_t pc
*** 7514,7520 ****
    /* C6 - C9.  though the sign and zero extension semantics are
       handled elsewhere.  This is the case where the argument fits
       entirely general registers.  */
!   if (allocate_ncrn && (ncrn + nregs <= NUM_ARG_REGS))
      {
        gcc_assert (nregs == 0 || nregs == 1 || nregs == 2);
  
--- 7603,7609 ----
    /* C6 - C9.  though the sign and zero extension semantics are
       handled elsewhere.  This is the case where the argument fits
       entirely general registers.  */
!   if (allocate_ncrn && (ncrn + nregs <= num_pcs_arg_regs (pcum->pcs_variant)))
      {
        gcc_assert (nregs == 0 || nregs == 1 || nregs == 2);
  
*************** aarch64_layout_arg (cumulative_args_t pc
*** 7550,7556 ****
  		inform (input_location, "parameter passing for argument of type "
  			"%qT changed in GCC 9.1", type);
  	      ++ncrn;
! 	      gcc_assert (ncrn + nregs <= NUM_ARG_REGS);
  	    }
  	}
  
--- 7639,7645 ----
  		inform (input_location, "parameter passing for argument of type "
  			"%qT changed in GCC 9.1", type);
  	      ++ncrn;
! 	      gcc_assert (ncrn + nregs <= num_pcs_arg_regs (pcum->pcs_variant));
  	    }
  	}
  
*************** aarch64_layout_arg (cumulative_args_t pc
*** 7572,7578 ****
        if (nregs == 0
  	  || (nregs == 1 && !sve_p)
  	  || GET_MODE_CLASS (mode) == MODE_INT)
! 	pcum->aapcs_reg = gen_rtx_REG (mode, R0_REGNUM + ncrn);
        else
  	{
  	  rtx par;
--- 7661,7668 ----
        if (nregs == 0
  	  || (nregs == 1 && !sve_p)
  	  || GET_MODE_CLASS (mode) == MODE_INT)
! 	pcum->aapcs_reg
! 	  = gen_rtx_REG (mode, get_pcs_arg_reg (pcum->pcs_variant, ncrn));
        else
  	{
  	  rtx par;
*************** aarch64_layout_arg (cumulative_args_t pc
*** 7584,7590 ****
  	      scalar_int_mode reg_mode = word_mode;
  	      if (nregs == 1)
  		reg_mode = int_mode_for_mode (mode).require ();
! 	      rtx tmp = gen_rtx_REG (reg_mode, R0_REGNUM + ncrn + i);
  	      tmp = gen_rtx_EXPR_LIST (VOIDmode, tmp,
  				       GEN_INT (i * UNITS_PER_WORD));
  	      XVECEXP (par, 0, i) = tmp;
--- 7674,7681 ----
  	      scalar_int_mode reg_mode = word_mode;
  	      if (nregs == 1)
  		reg_mode = int_mode_for_mode (mode).require ();
! 	      int reg = get_pcs_arg_reg (pcum->pcs_variant, ncrn + i);
! 	      rtx tmp = gen_rtx_REG (reg_mode, reg);
  	      tmp = gen_rtx_EXPR_LIST (VOIDmode, tmp,
  				       GEN_INT (i * UNITS_PER_WORD));
  	      XVECEXP (par, 0, i) = tmp;
*************** aarch64_layout_arg (cumulative_args_t pc
*** 7597,7603 ****
      }
  
    /* C.11  */
!   pcum->aapcs_nextncrn = NUM_ARG_REGS;
  
    /* The argument is passed on stack; record the needed number of words for
       this argument and align the total size if necessary.  */
--- 7688,7694 ----
      }
  
    /* C.11  */
!   pcum->aapcs_nextncrn = num_pcs_arg_regs (pcum->pcs_variant);
  
    /* The argument is passed on stack; record the needed number of words for
       this argument and align the total size if necessary.  */
*************** aarch64_function_arg (cumulative_args_t
*** 7675,7681 ****
    CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
    gcc_assert (pcum->pcs_variant == ARM_PCS_AAPCS64
  	      || pcum->pcs_variant == ARM_PCS_SIMD
! 	      || pcum->pcs_variant == ARM_PCS_SVE);
  
    if (arg.end_marker_p ())
      {
--- 7766,7773 ----
    CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
    gcc_assert (pcum->pcs_variant == ARM_PCS_AAPCS64
  	      || pcum->pcs_variant == ARM_PCS_SIMD
! 	      || pcum->pcs_variant == ARM_PCS_SVE
! 	      || pcum->pcs_variant == ARM_PCS_PRESERVE_NONE);
  
    if (arg.end_marker_p ())
      {
*************** aarch64_function_arg_advance (cumulative
*** 7767,7773 ****
    CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
    if (pcum->pcs_variant == ARM_PCS_AAPCS64
        || pcum->pcs_variant == ARM_PCS_SIMD
!       || pcum->pcs_variant == ARM_PCS_SVE)
      {
        aarch64_layout_arg (pcum_v, arg);
        gcc_assert ((pcum->aapcs_reg != NULL_RTX)
--- 7859,7866 ----
    CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
    if (pcum->pcs_variant == ARM_PCS_AAPCS64
        || pcum->pcs_variant == ARM_PCS_SIMD
!       || pcum->pcs_variant == ARM_PCS_SVE
!       || pcum->pcs_variant == ARM_PCS_PRESERVE_NONE)
      {
        aarch64_layout_arg (pcum_v, arg);
        gcc_assert ((pcum->aapcs_reg != NULL_RTX)
*************** aarch64_function_arg_advance (cumulative
*** 7786,7798 ****
      }
  }
  
! bool
! aarch64_function_arg_regno_p (unsigned regno)
  {
!   return ((GP_REGNUM_P (regno) && regno < R0_REGNUM + NUM_ARG_REGS)
  	  || (FP_REGNUM_P (regno) && regno < V0_REGNUM + NUM_FP_ARG_REGS)
  	  || (PR_REGNUM_P (regno) && regno < P0_REGNUM + NUM_PR_ARG_REGS));
  }
  
  /* Implement FUNCTION_ARG_BOUNDARY.  Every parameter gets at least
     PARM_BOUNDARY bits of alignment, but will be given anything up
--- 7879,7919 ----
      }
  }
  
! /* Checks if a register is live at entry of a preserve_none pcs function.
!    That is, it used for passing registers.  See ARM_PCS_PRESERVE_NONE_REGISTERS
!    for full list and order of argument passing registers.  */
! 
! static bool
! function_arg_preserve_none_regno_p (unsigned regno)
  {
!   return ((GP_REGNUM_P (regno) && regno != R8_REGNUM && regno != R15_REGNUM
! 	   && regno != R16_REGNUM && regno != R17_REGNUM && regno != R18_REGNUM
! 	   && regno != R19_REGNUM && regno != R29_REGNUM && regno != R30_REGNUM)
  	  || (FP_REGNUM_P (regno) && regno < V0_REGNUM + NUM_FP_ARG_REGS)
  	  || (PR_REGNUM_P (regno) && regno < P0_REGNUM + NUM_PR_ARG_REGS));
  }
+ /* Implements FUNCTION_ARG_REGNO_P.  */
+ bool
+ aarch64_function_arg_regno_p (unsigned regno)
+ {
+   enum arm_pcs pcs
+     = cfun ? (arm_pcs) fndecl_abi (cfun->decl).id () : ARM_PCS_AAPCS64;
+ 
+   switch (pcs)
+     {
+     case ARM_PCS_AAPCS64:
+     case ARM_PCS_SIMD:
+     case ARM_PCS_SVE:
+     case ARM_PCS_TLSDESC:
+     case ARM_PCS_UNKNOWN:
+       return ((GP_REGNUM_P (regno) && regno < R0_REGNUM + NUM_ARG_REGS)
+ 	      || (FP_REGNUM_P (regno) && regno < V0_REGNUM + NUM_FP_ARG_REGS)
+ 	      || (PR_REGNUM_P (regno) && regno < P0_REGNUM + NUM_PR_ARG_REGS));
+     case ARM_PCS_PRESERVE_NONE:
+       return function_arg_preserve_none_regno_p (regno);
+     }
+   gcc_unreachable ();
+ }
  
  /* Implement FUNCTION_ARG_BOUNDARY.  Every parameter gets at least
     PARM_BOUNDARY bits of alignment, but will be given anything up
*************** typedef struct
*** 20380,20385 ****
--- 20501,20508 ----
  /* The "rdma" alias uses a different FEAT_NAME to avoid a duplicate
     feature_deps name.  */
  #define FEAT_RDMA FEAT_RDM
+ #define FEAT_SSBS FEAT_SSBS2
+ #define FEAT_MEMTAG FEAT_MEMTAG2
  
  /* FMV features are listed in priority order, to make it easier to sort target
     strings.  */
*************** aarch64_expand_builtin_va_start (tree va
*** 21775,21782 ****
  
    cum = &crtl->args.info;
    if (cfun->va_list_gpr_size)
!     gr_save_area_size = MIN ((NUM_ARG_REGS - cum->aapcs_ncrn) * UNITS_PER_WORD,
! 			     cfun->va_list_gpr_size);
    if (cfun->va_list_fpr_size)
      vr_save_area_size = MIN ((NUM_FP_ARG_REGS - cum->aapcs_nvrn)
  			     * UNITS_PER_VREG, cfun->va_list_fpr_size);
--- 21898,21906 ----
  
    cum = &crtl->args.info;
    if (cfun->va_list_gpr_size)
!     gr_save_area_size = MIN ((num_pcs_arg_regs (cum->pcs_variant)
! 			      - cum->aapcs_ncrn)
! 			     * UNITS_PER_WORD, cfun->va_list_gpr_size);
    if (cfun->va_list_fpr_size)
      vr_save_area_size = MIN ((NUM_FP_ARG_REGS - cum->aapcs_nvrn)
  			     * UNITS_PER_VREG, cfun->va_list_fpr_size);
*************** aarch64_setup_incoming_varargs (cumulati
*** 22161,22167 ****
    /* Found out how many registers we need to save.
       Honor tree-stdvar analysis results.  */
    if (cfun->va_list_gpr_size)
!     gr_saved = MIN (NUM_ARG_REGS - local_cum.aapcs_ncrn,
  		    cfun->va_list_gpr_size / UNITS_PER_WORD);
    if (cfun->va_list_fpr_size)
      vr_saved = MIN (NUM_FP_ARG_REGS - local_cum.aapcs_nvrn,
--- 22285,22292 ----
    /* Found out how many registers we need to save.
       Honor tree-stdvar analysis results.  */
    if (cfun->va_list_gpr_size)
!     gr_saved = MIN (num_pcs_arg_regs (local_cum.pcs_variant)
! 		    - local_cum.aapcs_ncrn,
  		    cfun->va_list_gpr_size / UNITS_PER_WORD);
    if (cfun->va_list_fpr_size)
      vr_saved = MIN (NUM_FP_ARG_REGS - local_cum.aapcs_nvrn,
*************** aarch64_setup_incoming_varargs (cumulati
*** 22185,22192 ****
  	  mem = gen_frame_mem (BLKmode, ptr);
  	  set_mem_alias_set (mem, get_varargs_alias_set ());
  
! 	  move_block_from_reg (local_cum.aapcs_ncrn + R0_REGNUM,
! 			       mem, gr_saved);
  	}
        if (vr_saved > 0)
  	{
--- 22310,22331 ----
  	  mem = gen_frame_mem (BLKmode, ptr);
  	  set_mem_alias_set (mem, get_varargs_alias_set ());
  
! 	  /* For preserve_none pcs we can't use move_block_from_reg as the
! 	     argument passing register order is not consecutive.  */
! 	  if (local_cum.pcs_variant == ARM_PCS_PRESERVE_NONE)
! 	    {
! 	      for (int i = 0; i < gr_saved; ++i)
! 		{
! 		  rtx tem = operand_subword (mem, i, 1, BLKmode);
! 		  gcc_assert (tem);
! 		  int reg = get_pcs_arg_reg (local_cum.pcs_variant,
! 					     local_cum.aapcs_ncrn + i);
! 		  emit_move_insn (tem, gen_rtx_REG (word_mode, reg));
! 		}
! 	    }
! 	  else
! 	    move_block_from_reg (R0_REGNUM + local_cum.aapcs_ncrn, mem,
! 				 gr_saved);
  	}
        if (vr_saved > 0)
  	{
*************** aarch64_is_variant_pcs (tree fndecl)
*** 25492,25498 ****
  {
    /* Check for ABIs that preserve more registers than usual.  */
    arm_pcs pcs = (arm_pcs) fndecl_abi (fndecl).id ();
!   if (pcs == ARM_PCS_SIMD || pcs == ARM_PCS_SVE)
      return true;
  
    /* Check for ABIs that allow PSTATE.SM to be 1 on entry.  */
--- 25631,25637 ----
  {
    /* Check for ABIs that preserve more registers than usual.  */
    arm_pcs pcs = (arm_pcs) fndecl_abi (fndecl).id ();
!   if (pcs == ARM_PCS_SIMD || pcs == ARM_PCS_SVE || pcs == ARM_PCS_PRESERVE_NONE)
      return true;
  
    /* Check for ABIs that allow PSTATE.SM to be 1 on entry.  */
*************** aarch64_comp_type_attributes (const_tree
*** 30223,30228 ****
--- 30362,30369 ----
  
    if (!check_attr ("gnu", "aarch64_vector_pcs"))
      return 0;
+   if (!check_attr ("gnu", "preserve_none"))
+     return 0;
    if (!check_attr ("gnu", "indirect_return"))
      return 0;
    if (!check_attr ("gnu", "Advanced SIMD type"))
diff -Nrcpad gcc-16-20251102/gcc/config/aarch64/aarch64.h gcc-16-20251109/gcc/config/aarch64/aarch64.h
*** gcc-16-20251102/gcc/config/aarch64/aarch64.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/aarch64/aarch64.h	Sun Nov  9 22:32:45 2025
*************** through +ssve-fp8dot2.  */
*** 696,701 ****
--- 696,726 ----
  #define NUM_FP_ARG_REGS			8
  #define NUM_PR_ARG_REGS			4
  
+ /* The argument passing regs for preserve_none pcs.  */
+ #if TARGET_AARCH64_MS_ABI
+ #define NUM_PRESERVE_NONE_ARG_REGS 23
+ #define PRESERVE_NONE_REGISTERS \
+ { \
+   R20_REGNUM, R21_REGNUM, R22_REGNUM, R23_REGNUM, R24_REGNUM, R25_REGNUM,\
+   R26_REGNUM, R27_REGNUM, R28_REGNUM,\
+   R0_REGNUM, R1_REGNUM, R2_REGNUM, R3_REGNUM, R4_REGNUM, R5_REGNUM,\
+   R6_REGNUM, R7_REGNUM,\
+   R10_REGNUM, R11_REGNUM, R12_REGNUM, R13_REGNUM, R14_REGNUM, R9_REGNUM\
+ }
+ #else
+ #define NUM_PRESERVE_NONE_ARG_REGS 24
+ #define PRESERVE_NONE_REGISTERS \
+ { \
+   R20_REGNUM, R21_REGNUM, R22_REGNUM, R23_REGNUM, R24_REGNUM, R25_REGNUM,\
+   R26_REGNUM, R27_REGNUM, R28_REGNUM,\
+   R0_REGNUM, R1_REGNUM, R2_REGNUM, R3_REGNUM, R4_REGNUM, R5_REGNUM,\
+   R6_REGNUM, R7_REGNUM,\
+   R10_REGNUM, R11_REGNUM, R12_REGNUM, R13_REGNUM, R14_REGNUM, R9_REGNUM,\
+   R15_REGNUM\
+ }
+ #endif
+ 
+ 
  /* A Homogeneous Floating-Point or Short-Vector Aggregate may have at most
     four members.  */
  #define HA_MAX_NUM_FLDS		4
*************** enum arm_pcs
*** 1150,1155 ****
--- 1175,1182 ----
    ARM_PCS_SVE,			/* For functions that pass or return
  				   values in SVE registers.  */
    ARM_PCS_TLSDESC,		/* For targets of tlsdesc calls.  */
+   ARM_PCS_PRESERVE_NONE,	/* PCS variant with no call-preserved
+ 				   registers except X29.  */
    ARM_PCS_UNKNOWN
  };
  
diff -Nrcpad gcc-16-20251102/gcc/config/arc/arc.cc gcc-16-20251109/gcc/config/arc/arc.cc
*** gcc-16-20251102/gcc/config/arc/arc.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/arc/arc.cc	Sun Nov  9 22:32:45 2025
*************** arc_cannot_force_const_mem (machine_mode
*** 6705,6711 ****
  
  enum arc_builtin_id
    {
! #define DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK)	\
      ARC_BUILTIN_ ## NAME,
  #include "builtins.def"
  #undef DEF_BUILTIN
--- 6705,6711 ----
  
  enum arc_builtin_id
    {
! #define DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK, ATTRS)	\
      ARC_BUILTIN_ ## NAME,
  #include "builtins.def"
  #undef DEF_BUILTIN
*************** struct GTY(()) arc_builtin_description
*** 6723,6729 ****
  static GTY(()) struct arc_builtin_description
  arc_bdesc[ARC_BUILTIN_COUNT] =
  {
! #define DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK)		\
    { (enum insn_code) CODE_FOR_ ## ICODE, N_ARGS, NULL_TREE },
  #include "builtins.def"
  #undef DEF_BUILTIN
--- 6723,6729 ----
  static GTY(()) struct arc_builtin_description
  arc_bdesc[ARC_BUILTIN_COUNT] =
  {
! #define DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK, ATTRS)		\
    { (enum insn_code) CODE_FOR_ ## ICODE, N_ARGS, NULL_TREE },
  #include "builtins.def"
  #undef DEF_BUILTIN
*************** arc_init_builtins (void)
*** 6855,6862 ****
      = build_function_type_list (long_long_integer_type_node,
  				V2SI_type_node, V2HI_type_node, NULL_TREE);
  
    /* Add the builtins.  */
! #define DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK)			\
    {									\
      int id = ARC_BUILTIN_ ## NAME;					\
      const char *Name = "__builtin_arc_" #NAME;				\
--- 6855,6865 ----
      = build_function_type_list (long_long_integer_type_node,
  				V2SI_type_node, V2HI_type_node, NULL_TREE);
  
+   /* Create const attribute for mathematical functions.  */
+   tree attr_const = tree_cons (get_identifier ("const"), NULL, NULL);
+ 
    /* Add the builtins.  */
! #define DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK, ATTRS)		\
    {									\
      int id = ARC_BUILTIN_ ## NAME;					\
      const char *Name = "__builtin_arc_" #NAME;				\
*************** arc_init_builtins (void)
*** 6866,6872 ****
      if (MASK)								\
        arc_bdesc[id].fndecl						\
  	= add_builtin_function (arc_tolower(name, Name), TYPE, id,	\
! 				BUILT_IN_MD, NULL, NULL_TREE);		\
    }
  #include "builtins.def"
  #undef DEF_BUILTIN
--- 6869,6875 ----
      if (MASK)								\
        arc_bdesc[id].fndecl						\
  	= add_builtin_function (arc_tolower(name, Name), TYPE, id,	\
! 				BUILT_IN_MD, NULL, ATTRS);		\
    }
  #include "builtins.def"
  #undef DEF_BUILTIN
diff -Nrcpad gcc-16-20251102/gcc/config/arc/builtins.def gcc-16-20251109/gcc/config/arc/builtins.def
*** gcc-16-20251102/gcc/config/arc/builtins.def	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/arc/builtins.def	Sun Nov  9 22:32:45 2025
***************
*** 20,26 ****
     builtins defined in the ARC part of the GNU compiler.  Before
     including this file, define a macro
  
!    DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK)
  
     NAME:    `__builtin_arc_name' will be the user-level name of the builtin.
              `ARC_BUILTIN_NAME' will be the internal builtin's id.
--- 20,26 ----
     builtins defined in the ARC part of the GNU compiler.  Before
     including this file, define a macro
  
!    DEF_BUILTIN(NAME, N_ARGS, TYPE, ICODE, MASK, ATTRS)
  
     NAME:    `__builtin_arc_name' will be the user-level name of the builtin.
              `ARC_BUILTIN_NAME' will be the internal builtin's id.
***************
*** 29,222 ****
     TYPE:    A tree node describing the prototype of the built-in.
     ICODE:   Name of attached insn or expander.  If special treatment in arc.cc
              is needed to expand the built-in, use `nothing'.
!    MASK:    CPU selector mask.  */
  
  /* Special builtins.  */
! DEF_BUILTIN (NOP,        0, void_ftype_void,        nothing,     1)
! DEF_BUILTIN (RTIE,       0, void_ftype_void,        rtie,        !TARGET_ARC600_FAMILY)
! DEF_BUILTIN (SYNC,       0, void_ftype_void,        sync,        1)
! DEF_BUILTIN (BRK,        0, void_ftype_void,        brk,         1)
! DEF_BUILTIN (SWI,        0, void_ftype_void,        swi,         1)
! DEF_BUILTIN (UNIMP_S,    0, void_ftype_void,        unimp_s,     !TARGET_ARC600_FAMILY)
! DEF_BUILTIN (TRAP_S,     1, void_ftype_usint,       trap_s,      !TARGET_ARC600_FAMILY)
! DEF_BUILTIN (ALIGNED,    2, int_ftype_pcvoid_int,   nothing,     1)
! DEF_BUILTIN (CLRI,       0, int_ftype_void,         clri,        TARGET_V2)
! DEF_BUILTIN (SLEEP,      1, void_ftype_usint,       sleep,       1)
  
! DEF_BUILTIN (FLAG,       1, void_ftype_usint,       flag,       1)
! DEF_BUILTIN (SR,         2, void_ftype_usint_usint, sr,         1)
! DEF_BUILTIN (KFLAG,      1, void_ftype_usint,       kflag,      TARGET_V2)
! DEF_BUILTIN (CORE_WRITE, 2, void_ftype_usint_usint, core_write, 1)
! DEF_BUILTIN (SETI,       1, void_ftype_int,         seti,       TARGET_V2)
  
  /* Regular builtins.  */
! DEF_BUILTIN (NORM,       1, int_ftype_int,     clrsbsi2,      TARGET_NORM)
! DEF_BUILTIN (NORMW,      1, int_ftype_short,   normw,         TARGET_NORM)
! DEF_BUILTIN (SWAP,       1, int_ftype_int,     rotlsi2_cnt16, TARGET_SWAP)
! DEF_BUILTIN (DIVAW,      2, int_ftype_int_int, divaw,         TARGET_EA_SET)
! DEF_BUILTIN (CORE_READ,  1, usint_ftype_usint, core_read,     1)
! DEF_BUILTIN (LR,         1, usint_ftype_usint, lr,            1)
! DEF_BUILTIN (FFS,        1, int_ftype_int,     ffs,           (TARGET_EM && TARGET_NORM) || TARGET_HS)
! DEF_BUILTIN (FLS,        1, int_ftype_int,     fls,           (TARGET_EM && TARGET_NORM) || TARGET_HS)
  
  /* ARC SIMD extenssion.  */
  /* BEGIN SIMD marker.  */
! DEF_BUILTIN (SIMD_BEGIN, 0, void_ftype_void, nothing, 0)
  
! DEF_BUILTIN ( VADDAW, 2, v8hi_ftype_v8hi_v8hi,  vaddaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VADDW, 2, v8hi_ftype_v8hi_v8hi,   vaddw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VAVB, 2, v8hi_ftype_v8hi_v8hi,    vavb_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VAVRB, 2, v8hi_ftype_v8hi_v8hi,   vavrb_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VDIFAW, 2, v8hi_ftype_v8hi_v8hi,  vdifaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VDIFW, 2, v8hi_ftype_v8hi_v8hi,   vdifw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMAXAW, 2, v8hi_ftype_v8hi_v8hi,  vmaxaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMAXW, 2, v8hi_ftype_v8hi_v8hi,   vmaxw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMINAW, 2, v8hi_ftype_v8hi_v8hi,  vminaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMINW, 2, v8hi_ftype_v8hi_v8hi,   vminw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMULAW, 2, v8hi_ftype_v8hi_v8hi,  vmulaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VMULFAW, 2, v8hi_ftype_v8hi_v8hi, vmulfaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMULFW, 2, v8hi_ftype_v8hi_v8hi,  vmulfw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMULW, 2, v8hi_ftype_v8hi_v8hi,   vmulw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VSUBAW, 2, v8hi_ftype_v8hi_v8hi,  vsubaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VSUBW, 2, v8hi_ftype_v8hi_v8hi,   vsubw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VSUMMW, 2, v8hi_ftype_v8hi_v8hi,  vsummw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VAND, 2, v8hi_ftype_v8hi_v8hi,    vand_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VANDAW, 2, v8hi_ftype_v8hi_v8hi,  vandaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VBIC, 2, v8hi_ftype_v8hi_v8hi,    vbic_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VBICAW, 2, v8hi_ftype_v8hi_v8hi,  vbicaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (    VOR, 2, v8hi_ftype_v8hi_v8hi,     vor_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VXOR, 2, v8hi_ftype_v8hi_v8hi,    vxor_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VXORAW, 2, v8hi_ftype_v8hi_v8hi,  vxoraw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VEQW, 2, v8hi_ftype_v8hi_v8hi,    veqw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VLEW, 2, v8hi_ftype_v8hi_v8hi,    vlew_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VLTW, 2, v8hi_ftype_v8hi_v8hi,    vltw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VNEW, 2, v8hi_ftype_v8hi_v8hi,    vnew_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMR1AW, 2, v8hi_ftype_v8hi_v8hi,  vmr1aw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMR1W, 2, v8hi_ftype_v8hi_v8hi,   vmr1w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMR2AW, 2, v8hi_ftype_v8hi_v8hi,  vmr2aw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMR2W, 2, v8hi_ftype_v8hi_v8hi,   vmr2w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMR3AW, 2, v8hi_ftype_v8hi_v8hi,  vmr3aw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMR3W, 2, v8hi_ftype_v8hi_v8hi,   vmr3w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMR4AW, 2, v8hi_ftype_v8hi_v8hi,  vmr4aw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMR4W, 2, v8hi_ftype_v8hi_v8hi,   vmr4w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMR5AW, 2, v8hi_ftype_v8hi_v8hi,  vmr5aw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMR5W, 2, v8hi_ftype_v8hi_v8hi,   vmr5w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMR6AW, 2, v8hi_ftype_v8hi_v8hi,  vmr6aw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMR6W, 2, v8hi_ftype_v8hi_v8hi,   vmr6w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMR7AW, 2, v8hi_ftype_v8hi_v8hi,  vmr7aw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMR7W, 2, v8hi_ftype_v8hi_v8hi,   vmr7w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VMRB, 2, v8hi_ftype_v8hi_v8hi,    vmrb_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VH264F, 2, v8hi_ftype_v8hi_v8hi,  vh264f_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VH264FT, 2, v8hi_ftype_v8hi_v8hi, vh264ft_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VH264FW, 2, v8hi_ftype_v8hi_v8hi, vh264fw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VVC1F, 2, v8hi_ftype_v8hi_v8hi,   vvc1f_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VVC1FT, 2, v8hi_ftype_v8hi_v8hi,  vvc1ft_insn, TARGET_SIMD_SET)
  
! DEF_BUILTIN ( VBADDW, 2, v8hi_ftype_v8hi_int,  vbaddw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VBMAXW, 2, v8hi_ftype_v8hi_int,  vbmaxw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VBMINW, 2, v8hi_ftype_v8hi_int,  vbminw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VBMULAW, 2, v8hi_ftype_v8hi_int, vbmulaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VBMULFW, 2, v8hi_ftype_v8hi_int, vbmulfw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VBMULW, 2, v8hi_ftype_v8hi_int,  vbmulw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VBRSUBW, 2, v8hi_ftype_v8hi_int, vbrsubw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VBSUBW, 2, v8hi_ftype_v8hi_int,  vbsubw_insn, TARGET_SIMD_SET)
  
  /* Va, Vb, Ic instructions.  */
! DEF_BUILTIN ( VASRW, 2, v8hi_ftype_v8hi_int,  vasrw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VSR8, 2, v8hi_ftype_v8hi_int,   vsr8_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VSR8AW, 2, v8hi_ftype_v8hi_int, vsr8aw_insn, TARGET_SIMD_SET)
  
  /* Va, Vb, u6 instructions.  */
! DEF_BUILTIN (  VASRRWi, 2, v8hi_ftype_v8hi_int,   vasrrwi_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VASRSRWi, 2, v8hi_ftype_v8hi_int,  vasrsrwi_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VASRWi, 2, v8hi_ftype_v8hi_int,    vasrwi_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VASRPWBi, 2, v8hi_ftype_v8hi_int,  vasrpwbi_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VASRRPWBi, 2, v8hi_ftype_v8hi_int, vasrrpwbi_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VSR8AWi, 2, v8hi_ftype_v8hi_int,   vsr8awi_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (    VSR8i, 2, v8hi_ftype_v8hi_int,     vsr8i_insn, TARGET_SIMD_SET)
  
  /* Va, Vb, u8 (simm) instructions.  */
! DEF_BUILTIN (  VMVAW, 2, v8hi_ftype_v8hi_int,   vmvaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VMVW, 2, v8hi_ftype_v8hi_int,    vmvw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VMVZW, 2, v8hi_ftype_v8hi_int,   vmvzw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VD6TAPF, 2, v8hi_ftype_v8hi_int, vd6tapf_insn, TARGET_SIMD_SET)
  
  /* Va, rlimm, u8 (simm) instructions.  */
! DEF_BUILTIN (VMOVAW, 2, v8hi_ftype_int_int, vmovaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VMOVW, 2, v8hi_ftype_int_int,  vmovw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VMOVZW, 2, v8hi_ftype_int_int, vmovzw_insn, TARGET_SIMD_SET)
  
  /* Va, Vb instructions.  */
! DEF_BUILTIN ( VABSAW, 1, v8hi_ftype_v8hi,  vabsaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VABSW, 1, v8hi_ftype_v8hi,   vabsw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VADDSUW, 1, v8hi_ftype_v8hi, vaddsuw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VSIGNW, 1, v8hi_ftype_v8hi,  vsignw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VEXCH1, 1, v8hi_ftype_v8hi,  vexch1_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VEXCH2, 1, v8hi_ftype_v8hi,  vexch2_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VEXCH4, 1, v8hi_ftype_v8hi,  vexch4_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VUPBAW, 1, v8hi_ftype_v8hi,  vupbaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VUPBW, 1, v8hi_ftype_v8hi,   vupbw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VUPSBAW, 1, v8hi_ftype_v8hi, vupsbaw_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VUPSBW, 1, v8hi_ftype_v8hi,  vupsbw_insn, TARGET_SIMD_SET)
  
  /* SIMD special DIb, rlimm, rlimm instructions.  */
! DEF_BUILTIN (VDIRUN, 2, void_ftype_int_int, vdirun_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VDORUN, 2, void_ftype_int_int, vdorun_insn, TARGET_SIMD_SET)
  
  /* SIMD special DIb, limm, rlimm instructions.  */
! DEF_BUILTIN (VDIWR, 2, void_ftype_int_int, vdiwr_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VDOWR, 2, void_ftype_int_int, vdowr_insn, TARGET_SIMD_SET)
  
  /* rlimm instructions.  */
! DEF_BUILTIN (   VREC, 1, void_ftype_int,    vrec_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (   VRUN, 1, void_ftype_int,    vrun_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VRECRUN, 1, void_ftype_int, vrecrun_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VENDREC, 1, void_ftype_int, vendrec_insn, TARGET_SIMD_SET)
  
  /* Va, [Ib,u8] instructions.  */
! DEF_BUILTIN (VLD32WH, 3, v8hi_ftype_v8hi_int_int, vld32wh_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VLD32WL, 3, v8hi_ftype_v8hi_int_int, vld32wl_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VLD64, 3, v8hi_ftype_v8hi_int_int,   vld64_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (  VLD32, 3, v8hi_ftype_v8hi_int_int,   vld32_insn, TARGET_SIMD_SET)
  
! DEF_BUILTIN (VLD64W, 2, v8hi_ftype_int_int,      vld64w_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VLD128, 2, v8hi_ftype_int_int,      vld128_insn, TARGET_SIMD_SET)
  
! DEF_BUILTIN (VST128, 3, void_ftype_v8hi_int_int, vst128_insn, TARGET_SIMD_SET)
! DEF_BUILTIN ( VST64, 3, void_ftype_v8hi_int_int,  vst64_insn, TARGET_SIMD_SET)
  
  /* Va, [Ib, u8] instructions.  */
! DEF_BUILTIN (VST16_N, 4, void_ftype_v8hi_int_int_int, vst16_n_insn, TARGET_SIMD_SET)
! DEF_BUILTIN (VST32_N, 4, void_ftype_v8hi_int_int_int, vst32_n_insn, TARGET_SIMD_SET)
  
! DEF_BUILTIN (VINTI, 1, void_ftype_int, vinti_insn, TARGET_SIMD_SET)
  
  /* END SIMD marker.  */
! DEF_BUILTIN (SIMD_END, 0, void_ftype_void, nothing, 0)
  
  /* ARCv2 SIMD instructions that use/clobber the accumulator reg.  */
! DEF_BUILTIN (QMACH,      2, long_ftype_v4hi_v4hi,   qmach,      TARGET_PLUS_QMACW)
! DEF_BUILTIN (QMACHU,     2, long_ftype_v4hi_v4hi,   qmachu,     TARGET_PLUS_QMACW)
! DEF_BUILTIN (QMPYH,      2, long_ftype_v4hi_v4hi,   qmpyh,      TARGET_PLUS_QMACW)
! DEF_BUILTIN (QMPYHU,     2, long_ftype_v4hi_v4hi,   qmpyhu,     TARGET_PLUS_QMACW)
  
! DEF_BUILTIN (DMACH,      2, int_ftype_v2hi_v2hi,    dmach,      TARGET_PLUS_DMPY)
! DEF_BUILTIN (DMACHU,     2, int_ftype_v2hi_v2hi,    dmachu,     TARGET_PLUS_DMPY)
! DEF_BUILTIN (DMPYH,      2, int_ftype_v2hi_v2hi,    dmpyh,      TARGET_PLUS_DMPY)
! DEF_BUILTIN (DMPYHU,     2, int_ftype_v2hi_v2hi,    dmpyhu,     TARGET_PLUS_DMPY)
  
! DEF_BUILTIN (DMACWH,     2, long_ftype_v2si_v2hi,   dmacwh,     TARGET_PLUS_QMACW)
! DEF_BUILTIN (DMACWHU,    2, long_ftype_v2si_v2hi,   dmacwhu,    TARGET_PLUS_QMACW)
  
! DEF_BUILTIN (VMAC2H,     2, v2si_ftype_v2hi_v2hi,   vmac2h,     TARGET_PLUS_MACD)
! DEF_BUILTIN (VMAC2HU,    2, v2si_ftype_v2hi_v2hi,   vmac2hu,    TARGET_PLUS_MACD)
! DEF_BUILTIN (VMPY2H,     2, v2si_ftype_v2hi_v2hi,   vmpy2h,     TARGET_PLUS_MACD)
! DEF_BUILTIN (VMPY2HU,    2, v2si_ftype_v2hi_v2hi,   vmpy2hu,    TARGET_PLUS_MACD)
  
  /* Combined add/sub HS SIMD instructions.  */
! DEF_BUILTIN (VADDSUB2H,  2, v2hi_ftype_v2hi_v2hi,   addsubv2hi3, TARGET_PLUS_DMPY)
! DEF_BUILTIN (VSUBADD2H,  2, v2hi_ftype_v2hi_v2hi,   subaddv2hi3, TARGET_PLUS_DMPY)
! DEF_BUILTIN (VADDSUB,    2, v2si_ftype_v2si_v2si,   addsubv2si3, TARGET_PLUS_QMACW)
! DEF_BUILTIN (VSUBADD,    2, v2si_ftype_v2si_v2si,   subaddv2si3, TARGET_PLUS_QMACW)
! DEF_BUILTIN (VADDSUB4H,  2, v4hi_ftype_v4hi_v4hi,   addsubv4hi3, TARGET_PLUS_QMACW)
! DEF_BUILTIN (VSUBADD4H,  2, v4hi_ftype_v4hi_v4hi,   subaddv4hi3, TARGET_PLUS_QMACW)
--- 29,224 ----
     TYPE:    A tree node describing the prototype of the built-in.
     ICODE:   Name of attached insn or expander.  If special treatment in arc.cc
              is needed to expand the built-in, use `nothing'.
!    MASK:    CPU selector mask.
!    ATTRS:   Function attributes like "attr_const" for the `const' attribute
!             or "NULL_TREE" for no attribute.  */
  
  /* Special builtins.  */
! DEF_BUILTIN (NOP,        0, void_ftype_void,        nothing,     1, NULL_TREE)
! DEF_BUILTIN (RTIE,       0, void_ftype_void,        rtie,        !TARGET_ARC600_FAMILY, NULL_TREE)
! DEF_BUILTIN (SYNC,       0, void_ftype_void,        sync,        1, NULL_TREE)
! DEF_BUILTIN (BRK,        0, void_ftype_void,        brk,         1, NULL_TREE)
! DEF_BUILTIN (SWI,        0, void_ftype_void,        swi,         1, NULL_TREE)
! DEF_BUILTIN (UNIMP_S,    0, void_ftype_void,        unimp_s,     !TARGET_ARC600_FAMILY, NULL_TREE)
! DEF_BUILTIN (TRAP_S,     1, void_ftype_usint,       trap_s,      !TARGET_ARC600_FAMILY, NULL_TREE)
! DEF_BUILTIN (ALIGNED,    2, int_ftype_pcvoid_int,   nothing,     1, NULL_TREE)
! DEF_BUILTIN (CLRI,       0, int_ftype_void,         clri,        TARGET_V2, NULL_TREE)
! DEF_BUILTIN (SLEEP,      1, void_ftype_usint,       sleep,       1, NULL_TREE)
  
! DEF_BUILTIN (FLAG,       1, void_ftype_usint,       flag,       1, NULL_TREE)
! DEF_BUILTIN (SR,         2, void_ftype_usint_usint, sr,         1, NULL_TREE)
! DEF_BUILTIN (KFLAG,      1, void_ftype_usint,       kflag,      TARGET_V2, NULL_TREE)
! DEF_BUILTIN (CORE_WRITE, 2, void_ftype_usint_usint, core_write, 1, NULL_TREE)
! DEF_BUILTIN (SETI,       1, void_ftype_int,         seti,       TARGET_V2, NULL_TREE)
  
  /* Regular builtins.  */
! DEF_BUILTIN (NORM,       1, int_ftype_int,     clrsbsi2,      TARGET_NORM, attr_const)
! DEF_BUILTIN (NORMW,      1, int_ftype_short,   normw,         TARGET_NORM, attr_const)
! DEF_BUILTIN (SWAP,       1, int_ftype_int,     rotlsi2_cnt16, TARGET_SWAP, attr_const)
! DEF_BUILTIN (DIVAW,      2, int_ftype_int_int, divaw,         TARGET_EA_SET, NULL_TREE)
! DEF_BUILTIN (CORE_READ,  1, usint_ftype_usint, core_read,     1, NULL_TREE)
! DEF_BUILTIN (LR,         1, usint_ftype_usint, lr,            1, NULL_TREE)
! DEF_BUILTIN (FFS,        1, int_ftype_int,     ffs,           (TARGET_EM && TARGET_NORM) || TARGET_HS, attr_const)
! DEF_BUILTIN (FLS,        1, int_ftype_int,     fls,           (TARGET_EM && TARGET_NORM) || TARGET_HS, attr_const)
  
  /* ARC SIMD extenssion.  */
  /* BEGIN SIMD marker.  */
! DEF_BUILTIN (SIMD_BEGIN, 0, void_ftype_void, nothing, 0, NULL_TREE)
  
! DEF_BUILTIN ( VADDAW, 2, v8hi_ftype_v8hi_v8hi,  vaddaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VADDW, 2, v8hi_ftype_v8hi_v8hi,   vaddw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VAVB, 2, v8hi_ftype_v8hi_v8hi,    vavb_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VAVRB, 2, v8hi_ftype_v8hi_v8hi,   vavrb_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VDIFAW, 2, v8hi_ftype_v8hi_v8hi,  vdifaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VDIFW, 2, v8hi_ftype_v8hi_v8hi,   vdifw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMAXAW, 2, v8hi_ftype_v8hi_v8hi,  vmaxaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMAXW, 2, v8hi_ftype_v8hi_v8hi,   vmaxw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMINAW, 2, v8hi_ftype_v8hi_v8hi,  vminaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMINW, 2, v8hi_ftype_v8hi_v8hi,   vminw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMULAW, 2, v8hi_ftype_v8hi_v8hi,  vmulaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VMULFAW, 2, v8hi_ftype_v8hi_v8hi, vmulfaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMULFW, 2, v8hi_ftype_v8hi_v8hi,  vmulfw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMULW, 2, v8hi_ftype_v8hi_v8hi,   vmulw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VSUBAW, 2, v8hi_ftype_v8hi_v8hi,  vsubaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VSUBW, 2, v8hi_ftype_v8hi_v8hi,   vsubw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VSUMMW, 2, v8hi_ftype_v8hi_v8hi,  vsummw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VAND, 2, v8hi_ftype_v8hi_v8hi,    vand_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VANDAW, 2, v8hi_ftype_v8hi_v8hi,  vandaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VBIC, 2, v8hi_ftype_v8hi_v8hi,    vbic_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VBICAW, 2, v8hi_ftype_v8hi_v8hi,  vbicaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (    VOR, 2, v8hi_ftype_v8hi_v8hi,     vor_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VXOR, 2, v8hi_ftype_v8hi_v8hi,    vxor_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VXORAW, 2, v8hi_ftype_v8hi_v8hi,  vxoraw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VEQW, 2, v8hi_ftype_v8hi_v8hi,    veqw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VLEW, 2, v8hi_ftype_v8hi_v8hi,    vlew_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VLTW, 2, v8hi_ftype_v8hi_v8hi,    vltw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VNEW, 2, v8hi_ftype_v8hi_v8hi,    vnew_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMR1AW, 2, v8hi_ftype_v8hi_v8hi,  vmr1aw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMR1W, 2, v8hi_ftype_v8hi_v8hi,   vmr1w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMR2AW, 2, v8hi_ftype_v8hi_v8hi,  vmr2aw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMR2W, 2, v8hi_ftype_v8hi_v8hi,   vmr2w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMR3AW, 2, v8hi_ftype_v8hi_v8hi,  vmr3aw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMR3W, 2, v8hi_ftype_v8hi_v8hi,   vmr3w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMR4AW, 2, v8hi_ftype_v8hi_v8hi,  vmr4aw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMR4W, 2, v8hi_ftype_v8hi_v8hi,   vmr4w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMR5AW, 2, v8hi_ftype_v8hi_v8hi,  vmr5aw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMR5W, 2, v8hi_ftype_v8hi_v8hi,   vmr5w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMR6AW, 2, v8hi_ftype_v8hi_v8hi,  vmr6aw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMR6W, 2, v8hi_ftype_v8hi_v8hi,   vmr6w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMR7AW, 2, v8hi_ftype_v8hi_v8hi,  vmr7aw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMR7W, 2, v8hi_ftype_v8hi_v8hi,   vmr7w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VMRB, 2, v8hi_ftype_v8hi_v8hi,    vmrb_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VH264F, 2, v8hi_ftype_v8hi_v8hi,  vh264f_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VH264FT, 2, v8hi_ftype_v8hi_v8hi, vh264ft_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VH264FW, 2, v8hi_ftype_v8hi_v8hi, vh264fw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VVC1F, 2, v8hi_ftype_v8hi_v8hi,   vvc1f_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VVC1FT, 2, v8hi_ftype_v8hi_v8hi,  vvc1ft_insn, TARGET_SIMD_SET, NULL_TREE)
  
! DEF_BUILTIN ( VBADDW, 2, v8hi_ftype_v8hi_int,  vbaddw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VBMAXW, 2, v8hi_ftype_v8hi_int,  vbmaxw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VBMINW, 2, v8hi_ftype_v8hi_int,  vbminw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VBMULAW, 2, v8hi_ftype_v8hi_int, vbmulaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VBMULFW, 2, v8hi_ftype_v8hi_int, vbmulfw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VBMULW, 2, v8hi_ftype_v8hi_int,  vbmulw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VBRSUBW, 2, v8hi_ftype_v8hi_int, vbrsubw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VBSUBW, 2, v8hi_ftype_v8hi_int,  vbsubw_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* Va, Vb, Ic instructions.  */
! DEF_BUILTIN ( VASRW, 2, v8hi_ftype_v8hi_int,  vasrw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VSR8, 2, v8hi_ftype_v8hi_int,   vsr8_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VSR8AW, 2, v8hi_ftype_v8hi_int, vsr8aw_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* Va, Vb, u6 instructions.  */
! DEF_BUILTIN (  VASRRWi, 2, v8hi_ftype_v8hi_int,   vasrrwi_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VASRSRWi, 2, v8hi_ftype_v8hi_int,  vasrsrwi_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VASRWi, 2, v8hi_ftype_v8hi_int,    vasrwi_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VASRPWBi, 2, v8hi_ftype_v8hi_int,  vasrpwbi_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VASRRPWBi, 2, v8hi_ftype_v8hi_int, vasrrpwbi_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VSR8AWi, 2, v8hi_ftype_v8hi_int,   vsr8awi_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (    VSR8i, 2, v8hi_ftype_v8hi_int,     vsr8i_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* Va, Vb, u8 (simm) instructions.  */
! DEF_BUILTIN (  VMVAW, 2, v8hi_ftype_v8hi_int,   vmvaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VMVW, 2, v8hi_ftype_v8hi_int,    vmvw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VMVZW, 2, v8hi_ftype_v8hi_int,   vmvzw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VD6TAPF, 2, v8hi_ftype_v8hi_int, vd6tapf_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* Va, rlimm, u8 (simm) instructions.  */
! DEF_BUILTIN (VMOVAW, 2, v8hi_ftype_int_int, vmovaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VMOVW, 2, v8hi_ftype_int_int,  vmovw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VMOVZW, 2, v8hi_ftype_int_int, vmovzw_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* Va, Vb instructions.  */
! DEF_BUILTIN ( VABSAW, 1, v8hi_ftype_v8hi,  vabsaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VABSW, 1, v8hi_ftype_v8hi,   vabsw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VADDSUW, 1, v8hi_ftype_v8hi, vaddsuw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VSIGNW, 1, v8hi_ftype_v8hi,  vsignw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VEXCH1, 1, v8hi_ftype_v8hi,  vexch1_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VEXCH2, 1, v8hi_ftype_v8hi,  vexch2_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VEXCH4, 1, v8hi_ftype_v8hi,  vexch4_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VUPBAW, 1, v8hi_ftype_v8hi,  vupbaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VUPBW, 1, v8hi_ftype_v8hi,   vupbw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VUPSBAW, 1, v8hi_ftype_v8hi, vupsbaw_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VUPSBW, 1, v8hi_ftype_v8hi,  vupsbw_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* SIMD special DIb, rlimm, rlimm instructions.  */
! DEF_BUILTIN (VDIRUN, 2, void_ftype_int_int, vdirun_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VDORUN, 2, void_ftype_int_int, vdorun_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* SIMD special DIb, limm, rlimm instructions.  */
! DEF_BUILTIN (VDIWR, 2, void_ftype_int_int, vdiwr_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VDOWR, 2, void_ftype_int_int, vdowr_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* rlimm instructions.  */
! DEF_BUILTIN (   VREC, 1, void_ftype_int,    vrec_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (   VRUN, 1, void_ftype_int,    vrun_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VRECRUN, 1, void_ftype_int, vrecrun_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VENDREC, 1, void_ftype_int, vendrec_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* Va, [Ib,u8] instructions.  */
! DEF_BUILTIN (VLD32WH, 3, v8hi_ftype_v8hi_int_int, vld32wh_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VLD32WL, 3, v8hi_ftype_v8hi_int_int, vld32wl_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VLD64, 3, v8hi_ftype_v8hi_int_int,   vld64_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (  VLD32, 3, v8hi_ftype_v8hi_int_int,   vld32_insn, TARGET_SIMD_SET, NULL_TREE)
  
! DEF_BUILTIN (VLD64W, 2, v8hi_ftype_int_int,      vld64w_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VLD128, 2, v8hi_ftype_int_int,      vld128_insn, TARGET_SIMD_SET, NULL_TREE)
  
! DEF_BUILTIN (VST128, 3, void_ftype_v8hi_int_int, vst128_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN ( VST64, 3, void_ftype_v8hi_int_int,  vst64_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* Va, [Ib, u8] instructions.  */
! DEF_BUILTIN (VST16_N, 4, void_ftype_v8hi_int_int_int, vst16_n_insn, TARGET_SIMD_SET, NULL_TREE)
! DEF_BUILTIN (VST32_N, 4, void_ftype_v8hi_int_int_int, vst32_n_insn, TARGET_SIMD_SET, NULL_TREE)
  
! DEF_BUILTIN (VINTI, 1, void_ftype_int, vinti_insn, TARGET_SIMD_SET, NULL_TREE)
  
  /* END SIMD marker.  */
! DEF_BUILTIN (SIMD_END, 0, void_ftype_void, nothing, 0, NULL_TREE)
  
  /* ARCv2 SIMD instructions that use/clobber the accumulator reg.  */
! DEF_BUILTIN (QMACH,      2, long_ftype_v4hi_v4hi,   qmach,      TARGET_PLUS_QMACW, NULL_TREE)
! DEF_BUILTIN (QMACHU,     2, long_ftype_v4hi_v4hi,   qmachu,     TARGET_PLUS_QMACW, NULL_TREE)
! DEF_BUILTIN (QMPYH,      2, long_ftype_v4hi_v4hi,   qmpyh,      TARGET_PLUS_QMACW, NULL_TREE)
! DEF_BUILTIN (QMPYHU,     2, long_ftype_v4hi_v4hi,   qmpyhu,     TARGET_PLUS_QMACW, NULL_TREE)
  
! DEF_BUILTIN (DMACH,      2, int_ftype_v2hi_v2hi,    dmach,      TARGET_PLUS_DMPY, NULL_TREE)
! DEF_BUILTIN (DMACHU,     2, int_ftype_v2hi_v2hi,    dmachu,     TARGET_PLUS_DMPY, NULL_TREE)
! DEF_BUILTIN (DMPYH,      2, int_ftype_v2hi_v2hi,    dmpyh,      TARGET_PLUS_DMPY, NULL_TREE)
! DEF_BUILTIN (DMPYHU,     2, int_ftype_v2hi_v2hi,    dmpyhu,     TARGET_PLUS_DMPY, NULL_TREE)
  
! DEF_BUILTIN (DMACWH,     2, long_ftype_v2si_v2hi,   dmacwh,     TARGET_PLUS_QMACW, NULL_TREE)
! DEF_BUILTIN (DMACWHU,    2, long_ftype_v2si_v2hi,   dmacwhu,    TARGET_PLUS_QMACW, NULL_TREE)
  
! DEF_BUILTIN (VMAC2H,     2, v2si_ftype_v2hi_v2hi,   vmac2h,     TARGET_PLUS_MACD, NULL_TREE)
! DEF_BUILTIN (VMAC2HU,    2, v2si_ftype_v2hi_v2hi,   vmac2hu,    TARGET_PLUS_MACD, NULL_TREE)
! DEF_BUILTIN (VMPY2H,     2, v2si_ftype_v2hi_v2hi,   vmpy2h,     TARGET_PLUS_MACD, NULL_TREE)
! DEF_BUILTIN (VMPY2HU,    2, v2si_ftype_v2hi_v2hi,   vmpy2hu,    TARGET_PLUS_MACD, NULL_TREE)
  
  /* Combined add/sub HS SIMD instructions.  */
! DEF_BUILTIN (VADDSUB2H,  2, v2hi_ftype_v2hi_v2hi,   addsubv2hi3, TARGET_PLUS_DMPY, NULL_TREE)
! DEF_BUILTIN (VSUBADD2H,  2, v2hi_ftype_v2hi_v2hi,   subaddv2hi3, TARGET_PLUS_DMPY, NULL_TREE)
! DEF_BUILTIN (VADDSUB,    2, v2si_ftype_v2si_v2si,   addsubv2si3, TARGET_PLUS_QMACW, NULL_TREE)
! DEF_BUILTIN (VSUBADD,    2, v2si_ftype_v2si_v2si,   subaddv2si3, TARGET_PLUS_QMACW, NULL_TREE)
! DEF_BUILTIN (VADDSUB4H,  2, v4hi_ftype_v4hi_v4hi,   addsubv4hi3, TARGET_PLUS_QMACW, NULL_TREE)
! DEF_BUILTIN (VSUBADD4H,  2, v4hi_ftype_v4hi_v4hi,   subaddv4hi3, TARGET_PLUS_QMACW, NULL_TREE)
diff -Nrcpad gcc-16-20251102/gcc/config/arc/simdext.md gcc-16-20251109/gcc/config/arc/simdext.md
*** gcc-16-20251102/gcc/config/arc/simdext.md	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/arc/simdext.md	Sun Nov  9 22:32:45 2025
***************
*** 1438,1448 ****
    "reload_completed && GET_CODE (operands[1]) == CONST_VECTOR"
    [(set (match_dup 0) (match_dup 2))]
    {
!    HOST_WIDE_INT intval = INTVAL (XVECEXP (operands[1], 0, 1)) << 16;
!    intval |= INTVAL (XVECEXP (operands[1], 0, 0)) & 0xFFFF;
! 
!    operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));
!    operands[2] = GEN_INT (trunc_int_for_mode (intval, SImode));
    }
    [(set_attr "type" "move,move,load,store")
     (set_attr "predicable" "yes,yes,no,no")
--- 1438,1452 ----
    "reload_completed && GET_CODE (operands[1]) == CONST_VECTOR"
    [(set (match_dup 0) (match_dup 2))]
    {
!     int hi = TARGET_BIG_ENDIAN ? 0 : 1;
!     int lo = TARGET_BIG_ENDIAN ? 1 : 0;
!     HOST_WIDE_INT hi_val = INTVAL (XVECEXP (operands[1], 0, hi));
!     HOST_WIDE_INT lo_val = INTVAL (XVECEXP (operands[1], 0, lo));
!     hi_val = zext_hwi (hi_val, 16);
!     lo_val = zext_hwi (lo_val, 16);
!     HOST_WIDE_INT intval = lo_val | (hi_val << 16);
!     operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));
!     operands[2] = GEN_INT (trunc_int_for_mode (intval, SImode));
    }
    [(set_attr "type" "move,move,load,store")
     (set_attr "predicable" "yes,yes,no,no")
diff -Nrcpad gcc-16-20251102/gcc/config/avr/avr.cc gcc-16-20251109/gcc/config/avr/avr.cc
*** gcc-16-20251102/gcc/config/avr/avr.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/avr/avr.cc	Sun Nov  9 22:32:45 2025
*************** avr_output_addr_vec (rtx_insn *labl, rtx
*** 14394,14399 ****
--- 14394,14409 ----
  {
    FILE *stream = asm_out_file;
  
+   // AVR-SD: On functional safety devices, each executed instruction must
+   // be followed by a valid opcode.  This is because instruction validation
+   // runs at fetch and decode for the next instruction and while the 2-stage
+   // pipeline is executing the current one.  There is no multilib option for
+   // these devices, so take all multilib variants that contain AVR-SD.
+   const bool maybe_sd = (AVR_HAVE_JMP_CALL
+ 			 && (avr_arch_index == ARCH_AVRXMEGA2
+ 			     || avr_arch_index == ARCH_AVRXMEGA3));
+   bool uses_subsection = false;
+ 
    app_disable ();
  
    // Switch to appropriate (sub)section.
*************** avr_output_addr_vec (rtx_insn *labl, rtx
*** 14407,14412 ****
--- 14417,14423 ----
  
        switch_to_section (current_function_section ());
        fprintf (stream, "\t.subsection\t1\n");
+       uses_subsection = true;
      }
    else
      {
*************** avr_output_addr_vec (rtx_insn *labl, rtx
*** 14429,14438 ****
  	       AVR_HAVE_JMP_CALL ? "a" : "ax");
      }
  
-   // Output the label that precedes the table.
- 
    ASM_OUTPUT_ALIGN (stream, 1);
  
    char s_labl[40];
    targetm.asm_out.generate_internal_label (s_labl, "L",
  					   CODE_LABEL_NUMBER (labl));
--- 14440,14460 ----
  	       AVR_HAVE_JMP_CALL ? "a" : "ax");
      }
  
    ASM_OUTPUT_ALIGN (stream, 1);
  
+   if (maybe_sd && uses_subsection)
+     {
+       // Insert a valid opcode prior to the first gs() label.
+       // Any valid opcode will do.  Use CLH since it disassembles
+       // more nicely than NOP = 0x0000.  This is all GCC can do.
+       // Other cases, like inserting CLH after the vector table and
+       // after the last instruction, are handled by other parts of
+       // the toolchain.
+       fprintf (stream, "\tclh\n");
+     }
+ 
+   // Output the label that precedes the table.
+ 
    char s_labl[40];
    targetm.asm_out.generate_internal_label (s_labl, "L",
  					   CODE_LABEL_NUMBER (labl));
diff -Nrcpad gcc-16-20251102/gcc/config/avr/elf.h gcc-16-20251109/gcc/config/avr/elf.h
*** gcc-16-20251102/gcc/config/avr/elf.h	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/avr/elf.h	Sun Nov  9 22:32:45 2025
***************
*** 18,23 ****
--- 18,36 ----
     along with GCC; see the file COPYING3.  If not see
     <http://www.gnu.org/licenses/>.  */
  
+ /* defaults.h requires HAVE_INITFINI_ARRAY_SUPPORT to be present
+    in order for attribute "retain" to be recognized.  This is due
+    to some quirks in crtstuff.h -- which isn't even used by avr.
+    All we need is that Binutils supports the "R"etain section flag.
+    If that's the case, define SUPPORTS_SHF_GNU_RETAIN so that
+    defaults.h doesn't define it to 0.  */
+ #if defined(IN_GCC) && !defined(USED_FOR_TARGET) && !defined(GENERATOR_FILE)
+ #include "auto-host.h" /* HAVE_GAS_SHF_GNU_RETAIN */
+ #if HAVE_GAS_SHF_GNU_RETAIN
+ #undef SUPPORTS_SHF_GNU_RETAIN
+ #define SUPPORTS_SHF_GNU_RETAIN 1
+ #endif
+ #endif
  
  /* Overriding some definitions from elfos.h for AVR.  */
  
diff -Nrcpad gcc-16-20251102/gcc/config/bpf/bpf.cc gcc-16-20251109/gcc/config/bpf/bpf.cc
*** gcc-16-20251102/gcc/config/bpf/bpf.cc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config/bpf/bpf.cc	Sun Nov  9 22:32:46 2025
*************** static void
*** 1252,1264 ****
  emit_move_loop (rtx src, rtx dst, machine_mode mode, int offset, int inc,
  		unsigned iters, unsigned remainder)
  {
-   rtx reg = gen_reg_rtx (mode);
- 
    /* First copy in chunks as large as alignment permits.  */
    for (unsigned int i = 0; i < iters; i++)
      {
!       emit_move_insn (reg, adjust_address (src, mode, offset));
!       emit_move_insn (adjust_address (dst, mode, offset), reg);
        offset += inc;
      }
  
--- 1252,1262 ----
  emit_move_loop (rtx src, rtx dst, machine_mode mode, int offset, int inc,
  		unsigned iters, unsigned remainder)
  {
    /* First copy in chunks as large as alignment permits.  */
    for (unsigned int i = 0; i < iters; i++)
      {
!       emit_insn (gen_rtx_SET (adjust_address (dst, mode, offset),
! 			      adjust_address (src, mode, offset)));
        offset += inc;
      }
  
*************** emit_move_loop (rtx src, rtx dst, machin
*** 1266,1287 ****
       used above.  */
    if (remainder & 4)
      {
!       emit_move_insn (reg, adjust_address (src, SImode, offset));
!       emit_move_insn (adjust_address (dst, SImode, offset), reg);
        offset += (inc < 0 ? -4 : 4);
        remainder -= 4;
      }
    if (remainder & 2)
      {
!       emit_move_insn (reg, adjust_address (src, HImode, offset));
!       emit_move_insn (adjust_address (dst, HImode, offset), reg);
        offset += (inc < 0 ? -2 : 2);
        remainder -= 2;
      }
    if (remainder & 1)
      {
!       emit_move_insn (reg, adjust_address (src, QImode, offset));
!       emit_move_insn (adjust_address (dst, QImode, offset), reg);
      }
  }
  
--- 1264,1285 ----
       used above.  */
    if (remainder & 4)
      {
!       emit_insn (gen_rtx_SET (adjust_address (dst, SImode, offset),
! 			      adjust_address (src, SImode, offset)));
        offset += (inc < 0 ? -4 : 4);
        remainder -= 4;
      }
    if (remainder & 2)
      {
!       emit_insn (gen_rtx_SET (adjust_address (dst, HImode, offset),
! 			      adjust_address (src, HImode, offset)));
        offset += (inc < 0 ? -2 : 2);
        remainder -= 2;
      }
    if (remainder & 1)
      {
!       emit_insn (gen_rtx_SET (adjust_address (dst, QImode, offset),
! 			      adjust_address (src, QImode, offset)));
      }
  }
  
*************** bpf_expand_cpymem (rtx *operands, bool i
*** 1351,1363 ****
        fwd_label = gen_label_rtx ();
        done_label = gen_label_rtx ();
  
!       rtx dst_addr = copy_to_mode_reg (Pmode, XEXP (dst, 0));
!       rtx src_addr = copy_to_mode_reg (Pmode, XEXP (src, 0));
        emit_cmp_and_jump_insns (src_addr, dst_addr, GEU, NULL_RTX, Pmode,
  			       true, fwd_label, profile_probability::even ());
  
        /* Emit the "backwards" unrolled loop.  */
!       emit_move_loop (src, dst, mode, size_bytes, -inc, iters, remainder);
        emit_jump_insn (gen_jump (done_label));
        emit_barrier ();
  
--- 1349,1361 ----
        fwd_label = gen_label_rtx ();
        done_label = gen_label_rtx ();
  
!       rtx src_addr = force_operand (XEXP (src, 0), NULL_RTX);
!       rtx dst_addr = force_operand (XEXP (dst, 0), NULL_RTX);
        emit_cmp_and_jump_insns (src_addr, dst_addr, GEU, NULL_RTX, Pmode,
  			       true, fwd_label, profile_probability::even ());
  
        /* Emit the "backwards" unrolled loop.  */
!       emit_move_loop (src, dst, mode, (size_bytes - 1), -inc, iters, remainder);
        emit_jump_insn (gen_jump (done_label));
        emit_barrier ();
  
diff -Nrcpad gcc-16-20251102/gcc/config/i386/i386-expand.cc gcc-16-20251109/gcc/config/i386/i386-expand.cc
*** gcc-16-20251102/gcc/config/i386/i386-expand.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/i386/i386-expand.cc	Sun Nov  9 22:32:46 2025
*************** ix86_expand_set_or_cpymem (rtx dst, rtx
*** 9995,10000 ****
--- 9995,10748 ----
    return true;
  }
  
+ /* Fully unroll memmove of known size with up to 8 registers.  */
+ 
+ static bool
+ ix86_expand_unroll_movmem (rtx dst, rtx src, rtx destreg, rtx srcreg,
+ 			   unsigned HOST_WIDE_INT count,
+ 			   machine_mode mode)
+ {
+   /* If 8 registers registers can cover all memory, load them into
+      registers and store them together to avoid possible address
+      overlap between source and destination.  */
+   unsigned HOST_WIDE_INT moves = count / GET_MODE_SIZE (mode);
+   if (moves == 0)
+     {
+       mode = smallest_int_mode_for_size
+ 	(count * BITS_PER_UNIT).require ();
+       if (count == GET_MODE_SIZE (mode))
+ 	moves = 1;
+       else
+ 	{
+ 	  /* Reduce the smallest move size by half so that MOVES == 1.  */
+ 	  mode = smallest_int_mode_for_size
+ 	    (GET_MODE_BITSIZE (mode) / 2).require ();
+ 	  moves = count / GET_MODE_SIZE (mode);
+ 	  gcc_assert (moves == 1);
+ 	}
+     }
+   else if (moves > 8)
+     return false;
+ 
+   unsigned int i;
+   rtx tmp[9];
+ 
+   for (i = 0; i < moves; i++)
+     tmp[i] = gen_reg_rtx (mode);
+ 
+   rtx srcmem = change_address (src, mode, srcreg);
+   for (i = 0; i < moves; i++)
+     {
+       emit_move_insn (tmp[i], srcmem);
+       srcmem = offset_address (srcmem,
+ 			       GEN_INT (GET_MODE_SIZE (mode)),
+ 			       GET_MODE_SIZE (mode));
+     }
+ 
+   unsigned int epilogue_size = count & (GET_MODE_SIZE (mode) - 1);
+   machine_mode epilogue_mode = VOIDmode;
+   if (epilogue_size)
+     {
+       /* Handle the remaining bytes with overlapping move.  */
+       epilogue_mode = smallest_int_mode_for_size
+ 	(epilogue_size * BITS_PER_UNIT).require ();
+       tmp[8] = gen_reg_rtx (epilogue_mode);
+       srcmem = adjust_address (srcmem, epilogue_mode, 0);
+       srcmem = offset_address (srcmem, GEN_INT (epilogue_size), 1);
+       srcmem = offset_address (srcmem,
+ 			       GEN_INT (-GET_MODE_SIZE (epilogue_mode)),
+ 			       GET_MODE_SIZE (epilogue_mode));
+       emit_move_insn (tmp[8], srcmem);
+     }
+ 
+   rtx destmem = change_address (dst, mode, destreg);
+   for (i = 0; i < moves; i++)
+     {
+       emit_move_insn (destmem, tmp[i]);
+       destmem = offset_address (destmem,
+ 				GEN_INT (GET_MODE_SIZE (mode)),
+ 				GET_MODE_SIZE (mode));
+     }
+ 
+   if (epilogue_size)
+     {
+       /* Use overlapping move.  */
+       destmem = adjust_address (destmem, epilogue_mode, 0);
+       destmem = offset_address (destmem, GEN_INT (epilogue_size), 1);
+       destmem = offset_address (destmem,
+ 				GEN_INT (-GET_MODE_SIZE (epilogue_mode)),
+ 				GET_MODE_SIZE (epilogue_mode));
+       emit_move_insn (destmem, tmp[8]);
+     }
+ 
+   return true;
+ }
+ 
+ /* Expand memmove of size with MOVES * mode size and MOVES <= 4.  If
+    FORWARD is true, copy forward.  Otherwise copy backward.  */
+ 
+ static void
+ ix86_expand_n_move_movmem (rtx destmem, rtx srcmem, machine_mode mode,
+ 			   unsigned int moves, bool forward)
+ {
+   gcc_assert (moves <= 4);
+ 
+   unsigned int i;
+   rtx tmp[8];
+ 
+   for (i = 0; i < moves; i++)
+     tmp[i] = gen_reg_rtx (mode);
+ 
+   rtx step;
+   if (forward)
+     step = GEN_INT (GET_MODE_SIZE (mode));
+   else
+     step = GEN_INT (-GET_MODE_SIZE (mode));
+ 
+   /* Load MOVES.  */
+   for (i = 0; i < moves - 1; i++)
+     {
+       emit_move_insn (tmp[i], srcmem);
+       srcmem = offset_address (srcmem, step, GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (tmp[i], srcmem);
+ 
+   /* Store MOVES.  */
+   for (i = 0; i < moves - 1; i++)
+     {
+       emit_move_insn (destmem, tmp[i]);
+       destmem = offset_address (destmem, step, GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (destmem, tmp[i]);
+ }
+ 
+ /* Load MOVES of mode size into REGS.  If LAST is true, load the
+    last MOVES.  Otherwise, load the first MOVES.  */
+ 
+ static void
+ ix86_expand_load_movmem (rtx src, rtx srcreg, rtx count_exp,
+ 			 machine_mode mode, unsigned int moves,
+ 			 rtx regs[], bool last)
+ {
+   unsigned int i;
+ 
+   for (i = 0; i < moves; i++)
+     regs[i] = gen_reg_rtx (mode);
+ 
+   rtx srcmem = change_address (src, mode, srcreg);
+   rtx step;
+   if (last)
+     {
+       srcmem = offset_address (srcmem, count_exp, 1);
+       step = GEN_INT (-GET_MODE_SIZE (mode));
+       srcmem = offset_address (srcmem, step, GET_MODE_SIZE (mode));
+     }
+   else
+     step = GEN_INT (GET_MODE_SIZE (mode));
+ 
+   for (i = 0; i < moves - 1; i++)
+     {
+       emit_move_insn (regs[i], srcmem);
+       srcmem = offset_address (srcmem, step, GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (regs[i], srcmem);
+ }
+ 
+ /* Store MOVES of mode size into REGS.  If LAST is true, store the
+    last MOVES.  Otherwise, store the first MOVES.  */
+ 
+ static void
+ ix86_expand_store_movmem (rtx dst, rtx destreg, rtx count_exp,
+ 			  machine_mode mode, unsigned int moves,
+ 			  rtx regs[], bool last)
+ {
+   unsigned int i;
+ 
+   rtx destmem = change_address (dst, mode, destreg);
+   rtx step;
+   if (last)
+     {
+       destmem = offset_address (destmem, count_exp, 1);
+       step = GEN_INT (-GET_MODE_SIZE (mode));
+       destmem = offset_address (destmem, step, GET_MODE_SIZE (mode));
+     }
+   else
+     step = GEN_INT (GET_MODE_SIZE (mode));
+ 
+   for (i = 0; i < moves - 1; i++)
+     {
+       emit_move_insn (destmem, regs[i]);
+       destmem = offset_address (destmem, step, GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (destmem, regs[i]);
+ }
+ 
+ /* Expand memmove of size between (MOVES / 2) * mode size and
+    MOVES * mode size with overlapping load and store.  MOVES is even.
+    MOVES >= 2 and MOVES <= 8.  */
+ 
+ static void
+ ix86_expand_n_overlapping_move_movmem (rtx dst, rtx src, rtx destreg,
+ 				       rtx srcreg, rtx count_exp,
+ 				       machine_mode mode,
+ 				       unsigned int moves)
+ {
+   gcc_assert (moves >= 2 && moves <= 8 && (moves & 1) == 0);
+ 
+   unsigned int half_moves = moves / 2;
+   unsigned int i, j;
+   rtx tmp[8];
+ 
+   for (i = 0; i < moves; i++)
+     tmp[i] = gen_reg_rtx (mode);
+ 
+   rtx base_srcmem = change_address (src, mode, srcreg);
+ 
+   /* Load the first half.  */
+   rtx srcmem = base_srcmem;
+   for (i = 0; i < half_moves - 1; i++)
+     {
+       emit_move_insn (tmp[i], srcmem);
+       srcmem = offset_address (srcmem,
+ 			       GEN_INT (GET_MODE_SIZE (mode)),
+ 			       GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (tmp[i], srcmem);
+ 
+   /* Load the second half.  */
+   srcmem = offset_address (base_srcmem, count_exp, 1);
+   srcmem = offset_address (srcmem,
+ 			   GEN_INT (-GET_MODE_SIZE (mode)),
+ 			   GET_MODE_SIZE (mode));
+   for (j = half_moves, i = 0; i < half_moves - 1; i++, j++)
+     {
+       emit_move_insn (tmp[j], srcmem);
+       srcmem = offset_address (srcmem,
+ 			       GEN_INT (-GET_MODE_SIZE (mode)),
+ 			       GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (tmp[j], srcmem);
+ 
+   rtx base_destmem = change_address (dst, mode, destreg);
+ 
+   /* Store the first half.  */
+   rtx destmem = base_destmem;
+   for (i = 0; i < half_moves - 1; i++)
+     {
+       emit_move_insn (destmem, tmp[i]);
+       destmem = offset_address (destmem,
+ 				GEN_INT (GET_MODE_SIZE (mode)),
+ 				GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (destmem, tmp[i]);
+ 
+   /* Store the second half.  */
+   destmem = offset_address (base_destmem, count_exp, 1);
+   destmem = offset_address (destmem, GEN_INT (-GET_MODE_SIZE (mode)),
+ 			    GET_MODE_SIZE (mode));
+   for (j = half_moves, i = 0; i < half_moves - 1; i++, j++)
+     {
+       emit_move_insn (destmem, tmp[j]);
+       destmem = offset_address (destmem, GEN_INT (-GET_MODE_SIZE (mode)),
+ 				GET_MODE_SIZE (mode));
+     }
+   emit_move_insn (destmem, tmp[j]);
+ }
+ 
+ /* Expand memmove of size < mode size which is <= 64.  */
+ 
+ static void
+ ix86_expand_less_move_movmem (rtx dst, rtx src, rtx destreg,
+ 			      rtx srcreg, rtx count_exp,
+ 			      unsigned HOST_WIDE_INT min_size,
+ 			      machine_mode mode,
+ 			      rtx_code_label *done_label)
+ {
+   bool skip = false;
+   machine_mode count_mode = counter_mode (count_exp);
+ 
+   rtx_code_label *between_32_63_label
+     = GET_MODE_SIZE (mode) > 32 ? gen_label_rtx () : nullptr;
+   /* Jump to BETWEEN_32_64_LABEL if size >= 32 and size < 64.  */
+   if (between_32_63_label)
+     {
+       if (min_size && min_size >= 32)
+ 	{
+ 	  emit_jump_insn (gen_jump (between_32_63_label));
+ 	  emit_barrier ();
+ 	  skip = true;
+ 	}
+       else
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (32), GEU,
+ 				 nullptr, count_mode, 1,
+ 				 between_32_63_label);
+     }
+ 
+   rtx_code_label *between_16_31_label
+     = (!skip && GET_MODE_SIZE (mode) > 16) ? gen_label_rtx () : nullptr;
+   /* Jump to BETWEEN_16_31_LABEL if size >= 16 and size < 31.  */
+   if (between_16_31_label)
+     {
+       if (min_size && min_size >= 16)
+ 	{
+ 	  emit_jump_insn (gen_jump (between_16_31_label));
+ 	  emit_barrier ();
+ 	  skip = true;
+ 	}
+       else
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (16), GEU,
+ 				 nullptr, count_mode, 1,
+ 				 between_16_31_label);
+     }
+ 
+   rtx_code_label *between_8_15_label
+     = (!skip && GET_MODE_SIZE (mode) > 8) ? gen_label_rtx () : nullptr;
+   /* Jump to BETWEEN_8_15_LABEL if size >= 8 and size < 15.  */
+   if (between_8_15_label)
+     {
+       if (min_size && min_size >= 8)
+ 	{
+ 	  emit_jump_insn (gen_jump (between_8_15_label));
+ 	  emit_barrier ();
+ 	  skip = true;
+ 	}
+       else
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (8), GEU,
+ 				 nullptr, count_mode, 1,
+ 				 between_8_15_label);
+     }
+ 
+   rtx_code_label *between_4_7_label
+     = (!skip && GET_MODE_SIZE (mode) > 4) ? gen_label_rtx () : nullptr;
+   /* Jump to BETWEEN_4_7_LABEL if size >= 4 and size < 7.  */
+   if (between_4_7_label)
+     {
+       if (min_size && min_size >= 4)
+ 	{
+ 	  emit_jump_insn (gen_jump (between_4_7_label));
+ 	  emit_barrier ();
+ 	  skip = true;
+ 	}
+       else
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (4), GEU,
+ 				 nullptr, count_mode, 1,
+ 				 between_4_7_label);
+     }
+ 
+   rtx_code_label *between_2_3_label
+     = (!skip && GET_MODE_SIZE (mode) > 2) ? gen_label_rtx () : nullptr;
+   /* Jump to BETWEEN_2_3_LABEL if size >= 2 and size < 3.  */
+   if (between_2_3_label)
+     {
+       if (min_size && min_size >= 2)
+ 	{
+ 	  emit_jump_insn (gen_jump (between_2_3_label));
+ 	  emit_barrier ();
+ 	  skip = true;
+ 	}
+       else
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (1), GT,
+ 				 nullptr, count_mode, 1,
+ 				 between_2_3_label);
+     }
+ 
+   if (!skip)
+     {
+       rtx_code_label *zero_label
+ 	= min_size == 0 ? gen_label_rtx () : nullptr;
+       /* Skip if size == 0.  */
+       if (zero_label)
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (1), LT,
+ 				 nullptr, count_mode, 1,
+ 				 zero_label,
+ 				 profile_probability::unlikely ());
+ 
+       /* Move 1 byte.  */
+       rtx tmp0 = gen_reg_rtx (QImode);
+       rtx srcmem = change_address (src, QImode, srcreg);
+       emit_move_insn (tmp0, srcmem);
+       rtx destmem = change_address (dst, QImode, destreg);
+       emit_move_insn (destmem, tmp0);
+ 
+       if (zero_label)
+ 	emit_label (zero_label);
+ 
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ 
+   if (between_32_63_label)
+     {
+       emit_label (between_32_63_label);
+       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
+ 					     count_exp, OImode, 2);
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ 
+   if (between_16_31_label)
+     {
+       emit_label (between_16_31_label);
+       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
+ 					     count_exp, TImode, 2);
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ 
+   if (between_8_15_label)
+     {
+       emit_label (between_8_15_label);
+       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
+ 					     count_exp, DImode, 2);
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ 
+   if (between_4_7_label)
+     {
+       emit_label (between_4_7_label);
+       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
+ 					     count_exp, SImode, 2);
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ 
+   if (between_2_3_label)
+     {
+       emit_label (between_2_3_label);
+       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
+ 					     count_exp, HImode, 2);
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ }
+ 
+ /* Expand movmem with overlapping unaligned loads and stores:
+    1. Load all sources into registers and store them together to avoid
+       possible address overlap between source and destination.
+    2. For known size, first try to fully unroll with 8 registers.
+    3. For size <= 2 * MOVE_MAX, load all sources into 2 registers first
+       and then store them together.
+    4. For size > 2 * MOVE_MAX and size <= 4 * MOVE_MAX, load all sources
+       into 4 registers first and then store them together.
+    5. For size > 4 * MOVE_MAX and size <= 8 * MOVE_MAX, load all sources
+       into 8 registers first and then store them together.
+    6. For size > 8 * MOVE_MAX,
+       a. If address of destination > address of source, copy backward
+ 	 with a 4 * MOVE_MAX loop with unaligned loads and stores.  Load
+ 	 the first 4 * MOVE_MAX into 4 registers before the loop and
+ 	 store them after the loop to support overlapping addresses.
+       b. Otherwise, copy forward with a 4 * MOVE_MAX loop with unaligned
+ 	 loads and stores.  Load the last 4 * MOVE_MAX into 4 registers
+ 	 before the loop and store them after the loop to support
+ 	 overlapping addresses.
+  */
+ 
+ bool
+ ix86_expand_movmem (rtx operands[])
+ {
+   /* Since there are much less registers available in 32-bit mode, don't
+      inline movmem in 32-bit mode.  */
+   if (!TARGET_64BIT)
+     return false;
+ 
+   rtx dst = operands[0];
+   rtx src = operands[1];
+   rtx count_exp = operands[2];
+   rtx expected_size_exp = operands[5];
+   rtx min_size_exp = operands[6];
+   rtx probable_max_size_exp = operands[8];
+   unsigned HOST_WIDE_INT count = HOST_WIDE_INT_0U;
+   HOST_WIDE_INT expected_size = HOST_WIDE_INT_M1U;
+   unsigned HOST_WIDE_INT min_size = HOST_WIDE_INT_0U;
+   unsigned HOST_WIDE_INT probable_max_size = HOST_WIDE_INT_M1U;
+ 
+   if (CONST_INT_P (count_exp))
+     {
+       min_size = probable_max_size = count = expected_size
+ 	= INTVAL (count_exp);
+       /* When COUNT is 0, there is nothing to do.  */
+       if (!count)
+ 	return true;
+     }
+   else
+     {
+       if (min_size_exp)
+ 	min_size = INTVAL (min_size_exp);
+       if (probable_max_size_exp)
+ 	probable_max_size = INTVAL (probable_max_size_exp);
+       if (CONST_INT_P (expected_size_exp))
+ 	expected_size = INTVAL (expected_size_exp);
+      }
+ 
+   /* Make sure we don't need to care about overflow later on.  */
+   if (count > (HOST_WIDE_INT_1U << 30))
+     return false;
+ 
+   addr_space_t dst_as = MEM_ADDR_SPACE (dst);
+   addr_space_t src_as = MEM_ADDR_SPACE (src);
+   int dynamic_check;
+   bool noalign;
+   enum stringop_alg alg = decide_alg (count, expected_size, min_size,
+ 				      probable_max_size, false, false,
+ 				      dst_as, src_as, &dynamic_check,
+ 				      &noalign, false);
+   if (alg == libcall)
+     return false;
+ 
+   rtx destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
+   rtx srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
+ 
+   unsigned int move_max = MOVE_MAX;
+   machine_mode mode = smallest_int_mode_for_size
+     (move_max * BITS_PER_UNIT).require ();
+   if (probable_max_size && probable_max_size < move_max)
+     {
+       /* Get a usable MOVE_MAX.  */
+       mode = smallest_int_mode_for_size
+ 	(probable_max_size * BITS_PER_UNIT).require ();
+       /* Reduce MOVE_MAX by half so that MOVE_MAX can be used.  */
+       if (GET_MODE_SIZE (mode) > probable_max_size)
+ 	mode = smallest_int_mode_for_size
+ 	  (GET_MODE_BITSIZE (mode) / 2).require ();
+       move_max = GET_MODE_SIZE (mode);
+     }
+ 
+   /* Try to fully unroll memmove of known size first.  */
+   if (count
+       && ix86_expand_unroll_movmem (dst, src, destreg, srcreg, count,
+ 				    mode))
+     return true;
+ 
+   rtx_code_label *done_label = gen_label_rtx ();
+ 
+   rtx_code_label *less_vec_label = nullptr;
+   if (min_size == 0 || min_size < move_max)
+     less_vec_label = gen_label_rtx ();
+ 
+   machine_mode count_mode = counter_mode (count_exp);
+ 
+   /* Jump to LESS_VEC_LABEL if size < MOVE_MAX.  */
+   if (less_vec_label)
+     emit_cmp_and_jump_insns (count_exp, GEN_INT (move_max), LTU,
+ 			     nullptr, count_mode, 1,
+ 			     less_vec_label);
+ 
+   rtx_code_label *more_2x_vec_label = nullptr;
+   if (probable_max_size == 0 || probable_max_size > 2 * move_max)
+     more_2x_vec_label = gen_label_rtx ();
+ 
+   /* Jump to MORE_2X_VEC_LABEL if size > 2 * MOVE_MAX.  */
+   if (more_2x_vec_label)
+     emit_cmp_and_jump_insns (count_exp, GEN_INT (2 * move_max), GTU,
+ 			     nullptr, count_mode, 1,
+ 			     more_2x_vec_label);
+ 
+   if (min_size == 0 || min_size <= 2 * move_max)
+     {
+       /* Size >= MOVE_MAX and size <= 2 * MOVE_MAX.  */
+       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
+ 					     count_exp, mode, 2);
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ 
+   if (less_vec_label)
+     {
+       /* Size < MOVE_MAX.  */
+       emit_label (less_vec_label);
+       ix86_expand_less_move_movmem (dst, src, destreg, srcreg,
+ 				    count_exp, min_size, mode,
+ 				    done_label);
+       emit_jump_insn (gen_jump (done_label));
+       emit_barrier ();
+     }
+ 
+   if (more_2x_vec_label)
+     {
+       /* Size > 2 * MOVE_MAX and destination may overlap with source.  */
+       emit_label (more_2x_vec_label);
+ 
+       rtx_code_label *more_8x_vec_label = nullptr;
+       if (probable_max_size == 0 || probable_max_size > 8 * move_max)
+ 	more_8x_vec_label = gen_label_rtx ();
+ 
+       /* Jump to MORE_8X_VEC_LABEL if size > 8 * MOVE_MAX.  */
+       if (more_8x_vec_label)
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (8 * move_max), GTU,
+ 				 nullptr, count_mode, 1,
+ 				 more_8x_vec_label);
+ 
+       rtx_code_label *last_4x_vec_label = nullptr;
+       if (min_size == 0 || min_size < 4 * move_max)
+ 	last_4x_vec_label = gen_label_rtx ();
+ 
+       /* Jump to LAST_4X_VEC_LABEL if size < 4 * MOVE_MAX.  */
+       if (last_4x_vec_label)
+ 	emit_cmp_and_jump_insns (count_exp, GEN_INT (4 * move_max), LTU,
+ 				 nullptr, count_mode, 1,
+ 				 last_4x_vec_label);
+ 
+       if (probable_max_size == 0 || probable_max_size > 4 * move_max)
+ 	{
+ 	  /* Size > 4 * MOVE_MAX and size <= 8 * MOVE_MAX.  */
+ 	  ix86_expand_n_overlapping_move_movmem (dst, src, destreg,
+ 						 srcreg, count_exp,
+ 						 mode, 8);
+ 	  emit_jump_insn (gen_jump (done_label));
+ 	  emit_barrier ();
+ 	}
+ 
+       if (last_4x_vec_label)
+ 	{
+ 	  /* Size > 2 * MOVE_MAX and size <= 4 * MOVE_MAX.  */
+ 	  emit_label (last_4x_vec_label);
+ 	  ix86_expand_n_overlapping_move_movmem (dst, src, destreg,
+ 						 srcreg, count_exp,
+ 						 mode, 4);
+ 	  emit_jump_insn (gen_jump (done_label));
+ 	  emit_barrier ();
+ 	}
+ 
+       if (more_8x_vec_label)
+ 	{
+ 	  /* Size > 8 * MOVE_MAX.  */
+ 	  emit_label (more_8x_vec_label);
+ 
+ 	  rtx loop_count = gen_reg_rtx (count_mode);
+ 	  emit_move_insn (loop_count, count_exp);
+ 
+ 	  /* Jump to MORE_8X_VEC_BACKWARD_LABEL if source address is
+ 	     lower than destination address.  */
+ 	  rtx_code_label *more_8x_vec_backward_label = gen_label_rtx ();
+ 	  emit_cmp_and_jump_insns (srcreg, destreg, LTU, nullptr,
+ 				   GET_MODE (destreg), 1,
+ 				   more_8x_vec_backward_label);
+ 
+ 	  /* Skip if source == destination which is less common.  */
+ 	  emit_cmp_and_jump_insns (srcreg, destreg, EQ, nullptr,
+ 				   GET_MODE (destreg), 1, done_label,
+ 				   profile_probability::unlikely ());
+ 
+ 	  rtx base_destreg = gen_reg_rtx (GET_MODE (destreg));
+ 	  emit_move_insn (base_destreg, destreg);
+ 
+ 	  /* Load the last 4 * MOVE_MAX.  */
+ 	  rtx regs[4];
+ 	  ix86_expand_load_movmem (src, srcreg, count_exp, mode,
+ 				   ARRAY_SIZE (regs), regs, true);
+ 
+ 	  rtx srcmem = change_address (src, mode, srcreg);
+ 	  rtx destmem = change_address (dst, mode, destreg);
+ 
+ 	  /* Copy forward with a 4 * MOVE_MAX loop.  */
+ 	  rtx_code_label *loop_4x_vec_forward_label = gen_label_rtx ();
+ 	  emit_label (loop_4x_vec_forward_label);
+ 
+ 	  ix86_expand_n_move_movmem (destmem, srcmem, mode, 4, true);
+ 
+ 	  rtx tmp;
+ 	  rtx delta = GEN_INT (4 * MOVE_MAX);
+ 
+ 	  /* Decrement LOOP_COUNT by 4 * MOVE_MAX.  */
+ 	  tmp = expand_simple_binop (GET_MODE (loop_count), MINUS,
+ 				     loop_count, delta, nullptr, 1,
+ 				     OPTAB_DIRECT);
+ 	  if (tmp != loop_count)
+ 	    emit_move_insn (loop_count, tmp);
+ 
+ 	  /* Increment DESTREG and SRCREG by 4 * MOVE_MAX.  */
+ 	  tmp = expand_simple_binop (GET_MODE (destreg), PLUS,
+ 				     destreg, delta, nullptr, 1,
+ 				     OPTAB_DIRECT);
+ 	  if (tmp != destreg)
+ 	    emit_move_insn (destreg, tmp);
+ 	  tmp = expand_simple_binop (GET_MODE (srcreg), PLUS, srcreg,
+ 				     delta, nullptr, 1, OPTAB_DIRECT);
+ 	  if (tmp != srcreg)
+ 	    emit_move_insn (srcreg, tmp);
+ 
+ 	  /* Stop if LOOP_EXP <= 4 * MOVE_MAX.  */
+ 	  emit_cmp_and_jump_insns (loop_count, delta, GTU, nullptr,
+ 				   GET_MODE (loop_count), 1,
+ 				   loop_4x_vec_forward_label);
+ 
+ 	  /* Store the last 4 * MOVE_MAX.  */
+ 	  ix86_expand_store_movmem (dst, base_destreg, count_exp, mode,
+ 				    ARRAY_SIZE (regs), regs, true);
+ 
+ 	  emit_jump_insn (gen_jump (done_label));
+ 	  emit_barrier ();
+ 
+ 	  /* Copy backward with a 4 * MOVE_MAX loop.  */
+ 	  emit_label (more_8x_vec_backward_label);
+ 
+ 	  base_destreg = gen_reg_rtx (GET_MODE (destreg));
+ 	  emit_move_insn (base_destreg, destreg);
+ 
+ 	  /* Load the first 4 * MOVE_MAX.  */
+ 	  ix86_expand_load_movmem (src, srcreg, count_exp, mode,
+ 				   ARRAY_SIZE (regs), regs, false);
+ 
+ 	  /* Increment DESTREG and SRCREG by COUNT_EXP.  */
+ 	  tmp = expand_simple_binop (GET_MODE (destreg), PLUS,
+ 				     destreg, count_exp, nullptr, 1,
+ 				     OPTAB_DIRECT);
+ 	  if (tmp != destreg)
+ 	    emit_move_insn (destreg, tmp);
+ 	  tmp = expand_simple_binop (GET_MODE (srcreg), PLUS, srcreg,
+ 				     count_exp, nullptr, 1, OPTAB_DIRECT);
+ 	  if (tmp != srcreg)
+ 	    emit_move_insn (srcreg, tmp);
+ 
+ 	  srcmem = change_address (src, mode, srcreg);
+ 	  destmem = change_address (dst, mode, destreg);
+ 	  rtx step = GEN_INT (-GET_MODE_SIZE (mode));
+ 	  srcmem = offset_address (srcmem, step, GET_MODE_SIZE (mode));
+ 	  destmem = offset_address (destmem, step, GET_MODE_SIZE (mode));
+ 
+ 	  rtx_code_label *loop_4x_vec_backward_label = gen_label_rtx ();
+ 	  emit_label (loop_4x_vec_backward_label);
+ 
+ 	  ix86_expand_n_move_movmem (destmem, srcmem, mode, 4, false);
+ 
+ 	  /* Decrement LOOP_COUNT by 4 * MOVE_MAX.  */
+ 	  tmp = expand_simple_binop (GET_MODE (loop_count), MINUS,
+ 				     loop_count, delta, nullptr, 1,
+ 				     OPTAB_DIRECT);
+ 	  if (tmp != loop_count)
+ 	    emit_move_insn (loop_count, tmp);
+ 
+ 	  /* Decrement DESTREG and SRCREG by 4 * MOVE_MAX.  */
+ 	  tmp = expand_simple_binop (GET_MODE (destreg), MINUS,
+ 				     destreg, delta, nullptr, 1,
+ 				     OPTAB_DIRECT);
+ 	  if (tmp != destreg)
+ 	    emit_move_insn (destreg, tmp);
+ 	  tmp = expand_simple_binop (GET_MODE (srcreg), MINUS, srcreg,
+ 				     delta, nullptr, 1, OPTAB_DIRECT);
+ 	  if (tmp != srcreg)
+ 	    emit_move_insn (srcreg, tmp);
+ 
+ 	  /* Stop if LOOP_EXP <= 4 * MOVE_MAX.  */
+ 	  emit_cmp_and_jump_insns (loop_count, delta, GTU, nullptr,
+ 				   GET_MODE (loop_count), 1,
+ 				   loop_4x_vec_backward_label);
+ 
+ 	  /* Store the first 4 * MOVE_MAX.  */
+ 	  ix86_expand_store_movmem (dst, base_destreg, count_exp, mode,
+ 				    ARRAY_SIZE (regs), regs, false);
+ 
+ 	  emit_jump_insn (gen_jump (done_label));
+ 	  emit_barrier ();
+ 	}
+     }
+ 
+   emit_label (done_label);
+ 
+   return true;
+ }
+ 
  /* Expand cmpstrn or memcmp.  */
  
  bool
diff -Nrcpad gcc-16-20251102/gcc/config/i386/i386-protos.h gcc-16-20251109/gcc/config/i386/i386-protos.h
*** gcc-16-20251102/gcc/config/i386/i386-protos.h	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/i386/i386-protos.h	Sun Nov  9 22:32:46 2025
*************** extern void substitute_vpternlog_operand
*** 78,83 ****
--- 78,84 ----
  extern bool ix86_expand_strlen (rtx, rtx, rtx, rtx);
  extern bool ix86_expand_set_or_cpymem (rtx, rtx, rtx, rtx, rtx, rtx,
  				       rtx, rtx, rtx, rtx, bool);
+ extern bool ix86_expand_movmem (rtx[]);
  extern bool ix86_expand_cmpstrn_or_cmpmem (rtx, rtx, rtx, rtx, rtx, bool);
  
  extern enum reg_class ix86_insn_base_reg_class (rtx_insn *);
diff -Nrcpad gcc-16-20251102/gcc/config/i386/i386.md gcc-16-20251109/gcc/config/i386/i386.md
*** gcc-16-20251102/gcc/config/i386/i386.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/i386/i386.md	Sun Nov  9 22:32:46 2025
***************
*** 8860,8865 ****
--- 8860,8894 ----
  			     (match_dup 0)))
  	      (clobber (reg:CC FLAGS_REG))])])
  
+ (define_insn "*add<mode>3_carry_2"
+   [(set (reg FLAGS_REG)
+ 	(compare
+ 	  (plus:SWI
+ 	    (plus:SWI
+ 	      (match_operator:SWI 4 "ix86_carry_flag_operator"
+ 	       [(match_operand 3 "flags_reg_operand") (const_int 0)])
+ 	      (match_operand:SWI 1 "nonimmediate_operand" "%0,0,rm,r"))
+ 	    (match_operand:SWI 2 "<general_operand>" "<r><i>,<m>,r<i>,<m>"))
+ 	  (const_int 0)))
+    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>,r,r")
+ 	(plus:SWI
+ 	  (plus:SWI
+ 	    (match_op_dup 4 [(match_dup 3) (const_int 0)])
+ 	    (match_dup 1))
+ 	  (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+    && ix86_binary_operator_ok (PLUS, <MODE>mode, operands, TARGET_APX_NDD)"
+   "@
+    adc{<imodesuffix>}\t{%2, %0|%0, %2}
+    adc{<imodesuffix>}\t{%2, %0|%0, %2}
+    adc{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}
+    adc{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}"
+   [(set_attr "isa" "*,*,apx_ndd,apx_ndd")
+    (set_attr "type" "alu")
+    (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_insn "*add<mode>3_carry_0"
    [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
  	(plus:SWI
***************
*** 8874,8879 ****
--- 8903,8928 ----
     (set_attr "pent_pair" "pu")
     (set_attr "mode" "<MODE>")])
  
+ (define_insn "*add<mode>3_carry_0_cc"
+   [(set (reg FLAGS_REG)
+ 	(compare
+ 	  (plus:SWI
+ 	    (match_operator:SWI 2 "ix86_carry_flag_operator"
+ 	      [(match_operand 3 "flags_reg_operand") (const_int 0)])
+ 	    (match_operand:SWI 1 "nonimmediate_operand" "0"))
+ 	  (const_int 0)))
+    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
+ 	(plus:SWI
+ 	  (match_op_dup 2 [(match_dup 3) (const_int 0)])
+ 	  (match_dup 1)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+    && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))"
+   "adc{<imodesuffix>}\t{$0, %0|%0, 0}"
+   [(set_attr "type" "alu")
+    (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_insn "*add<mode>3_carry_0r"
    [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
  	(plus:SWI
***************
*** 8888,8893 ****
--- 8937,8962 ----
     (set_attr "pent_pair" "pu")
     (set_attr "mode" "<MODE>")])
  
+ (define_insn "*add<mode>3_carry_0r_cc"
+   [(set (reg FLAGS_REG)
+ 	(compare
+ 	  (plus:SWI
+ 	    (match_operator:SWI 2 "ix86_carry_flag_unset_operator"
+ 	      [(match_operand 3 "flags_reg_operand") (const_int 0)])
+ 	    (match_operand:SWI 1 "nonimmediate_operand" "0"))
+ 	  (const_int 0)))
+    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
+ 	(plus:SWI
+ 	  (match_op_dup 2 [(match_dup 3) (const_int 0)])
+ 	  (match_dup 1)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+    && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))"
+   "sbb{<imodesuffix>}\t{$-1, %0|%0, -1}"
+   [(set_attr "type" "alu")
+    (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_insn "*addqi3_carry_zext<mode>"
    [(set (match_operand:SWI248x 0 "register_operand" "=r,r")
  	(zero_extend:SWI248x
***************
*** 9456,9461 ****
--- 9525,9559 ----
  			      (match_dup 0)))
  	      (clobber (reg:CC FLAGS_REG))])])
  
+ (define_insn "*sub<mode>3_carry_2"
+   [(set (reg FLAGS_REG)
+ 	(compare
+ 	  (minus:SWI
+ 	    (minus:SWI
+ 	      (match_operand:SWI 1 "nonimmediate_operand" "0,0,rm,r")
+ 	      (match_operator:SWI 4 "ix86_carry_flag_operator"
+ 	       [(match_operand 3 "flags_reg_operand") (const_int 0)]))
+ 	    (match_operand:SWI 2 "<general_operand>" "<r><i>,<m>,r<i>,<m>"))
+ 	  (const_int 0)))
+    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>,r,r")
+ 	(minus:SWI
+ 	  (minus:SWI
+ 	    (match_dup 1)
+ 	    (match_op_dup 4 [(match_dup 3) (const_int 0)]))
+ 	  (match_dup 2)))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+    && ix86_binary_operator_ok (MINUS, <MODE>mode, operands, TARGET_APX_NDD)"
+   "@
+   sbb{<imodesuffix>}\t{%2, %0|%0, %2}
+   sbb{<imodesuffix>}\t{%2, %0|%0, %2}
+   sbb{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}
+   sbb{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}"
+   [(set_attr "isa" "*,*,apx_ndd,apx_ndd")
+    (set_attr "type" "alu")
+    (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_insn "*sub<mode>3_carry_0"
    [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
  	(minus:SWI
***************
*** 9470,9475 ****
--- 9568,9593 ----
     (set_attr "pent_pair" "pu")
     (set_attr "mode" "<MODE>")])
  
+ (define_insn "*sub<mode>3_carry_0_cc"
+   [(set (reg FLAGS_REG)
+ 	(compare
+ 	  (minus:SWI
+ 	    (match_operand:SWI 1 "nonimmediate_operand" "0")
+ 	    (match_operator:SWI 2 "ix86_carry_flag_operator"
+ 	      [(match_operand 3 "flags_reg_operand") (const_int 0)]))
+ 	  (const_int 0)))
+    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
+ 	(minus:SWI
+ 	  (match_dup 1)
+ 	  (match_op_dup 2 [(match_dup 3) (const_int 0)])))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+    && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))"
+   "sbb{<imodesuffix>}\t{$0, %0|%0, 0}"
+   [(set_attr "type" "alu")
+    (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_insn "*sub<mode>3_carry_0r"
    [(set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
  	(minus:SWI
***************
*** 9484,9489 ****
--- 9602,9627 ----
     (set_attr "pent_pair" "pu")
     (set_attr "mode" "<MODE>")])
  
+ (define_insn "*sub<mode>3_carry_0r_cc"
+   [(set (reg FLAGS_REG)
+ 	(compare
+ 	  (minus:SWI
+ 	    (match_operand:SWI 1 "nonimmediate_operand" "0")
+ 	    (match_operator:SWI 2 "ix86_carry_flag_unset_operator"
+ 	      [(match_operand 3 "flags_reg_operand") (const_int 0)]))
+ 	  (const_int 0)))
+    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m")
+ 	(minus:SWI
+ 	  (match_dup 1)
+ 	  (match_op_dup 2 [(match_dup 3) (const_int 0)])))]
+   "ix86_match_ccmode (insn, CCGOCmode)
+    && (!MEM_P (operands[0]) || rtx_equal_p (operands[0], operands[1]))"
+   "adc{<imodesuffix>}\t{$-1, %0|%0, -1}"
+   [(set_attr "type" "alu")
+    (set_attr "use_carry" "1")
+    (set_attr "pent_pair" "pu")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_insn "*subqi3_carry_zext<mode>"
    [(set (match_operand:SWI248x 0 "register_operand" "=r,r")
  	(zero_extend:SWI248x
***************
*** 12213,12219 ****
  	(compare:CCNO
  	  (and:SWI48
  	    (match_operand:SWI48 0 "nonimmediate_operand")
! 	    (match_operand:SWI48 1 "<nonmemory_szext_operand>"))
  	  (const_int 0)))])
  
  (define_expand "testqi_ccz_1"
--- 12351,12357 ----
  	(compare:CCNO
  	  (and:SWI48
  	    (match_operand:SWI48 0 "nonimmediate_operand")
! 	    (match_operand:SWI48 1 "<general_szext_operand>"))
  	  (const_int 0)))])
  
  (define_expand "testqi_ccz_1"
***************
*** 12221,12227 ****
  	(compare:CCZ
  	  (and:QI
  	    (match_operand:QI 0 "nonimmediate_operand")
! 	    (match_operand:QI 1 "nonmemory_operand"))
  	  (const_int 0)))])
  
  (define_insn "*testdi_1"
--- 12359,12365 ----
  	(compare:CCZ
  	  (and:QI
  	    (match_operand:QI 0 "nonimmediate_operand")
! 	    (match_operand:QI 1 "general_operand"))
  	  (const_int 0)))])
  
  (define_insn "*testdi_1"
***************
*** 12229,12235 ****
  	(compare
  	  (and:DI
  	    (match_operand:DI 0 "nonimmediate_operand" "%r,rm")
! 	    (match_operand:DI 1 "x86_64_szext_nonmemory_operand" "Z,re"))
  	 (const_int 0)))]
    "TARGET_64BIT
     && ix86_match_ccmode
--- 12367,12373 ----
  	(compare
  	  (and:DI
  	    (match_operand:DI 0 "nonimmediate_operand" "%r,rm")
! 	    (match_operand:DI 1 "x86_64_szext_general_operand" "Z,re"))
  	 (const_int 0)))]
    "TARGET_64BIT
     && ix86_match_ccmode
***************
*** 12242,12248 ****
  	 (satisfies_constraint_Z (operands[1])
  	  && (!CONST_INT_P (operands[1])
  	      || val_signbit_known_set_p (SImode, INTVAL (operands[1]))))
! 	 ? CCZmode : CCNOmode)"
    "@
     test{l}\t{%k1, %k0|%k0, %k1}
     test{q}\t{%1, %0|%0, %1}"
--- 12380,12387 ----
  	 (satisfies_constraint_Z (operands[1])
  	  && (!CONST_INT_P (operands[1])
  	      || val_signbit_known_set_p (SImode, INTVAL (operands[1]))))
! 	 ? CCZmode : CCNOmode)
!    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
    "@
     test{l}\t{%k1, %k0|%k0, %k1}
     test{q}\t{%1, %0|%0, %1}"
***************
*** 12253,12264 ****
    [(set (reg FLAGS_REG)
  	(compare
  	  (and:QI
! 	    (match_operand:QI 0 "nonimmediate_operand" "%qm,qm,r")
! 	    (match_operand:QI 1 "nonmemory_operand" "q,n,n"))
  	  (const_int 0)))]
    "ix86_match_ccmode (insn,
  		      CONST_INT_P (operands[1])
! 		      && INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)"
  {
    if (get_attr_mode (insn) == MODE_SI)
      {
--- 12392,12404 ----
    [(set (reg FLAGS_REG)
  	(compare
  	  (and:QI
! 	    (match_operand:QI 0 "nonimmediate_operand" "%qm,*a,qm,r")
! 	    (match_operand:QI 1 "general_operand" "q,n,n,n"))
  	  (const_int 0)))]
    "ix86_match_ccmode (insn,
  		      CONST_INT_P (operands[1])
! 		      && INTVAL (operands[1]) >= 0 ? CCNOmode : CCZmode)
!    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
  {
    if (get_attr_mode (insn) == MODE_SI)
      {
***************
*** 12270,12276 ****
  }
    [(set_attr "type" "test")
     (set (attr "mode")
!      (cond [(eq_attr "alternative" "2")
  	      (const_string "SI")
  	    (and (match_test "optimize_insn_for_size_p ()")
  		 (and (match_operand 0 "ext_QIreg_operand")
--- 12410,12416 ----
  }
    [(set_attr "type" "test")
     (set (attr "mode")
!      (cond [(eq_attr "alternative" "3")
  	      (const_string "SI")
  	    (and (match_test "optimize_insn_for_size_p ()")
  		 (and (match_operand 0 "ext_QIreg_operand")
***************
*** 12278,12293 ****
  	      (const_string "SI")
  	   ]
  	   (const_string "QI")))
!    (set_attr "pent_pair" "uv,np,np")])
  
  (define_insn "*test<mode>_1"
    [(set (reg FLAGS_REG)
  	(compare
  	  (and:SWI124
  	    (match_operand:SWI124 0 "nonimmediate_operand" "%<r>m,*a,<r>m")
! 	    (match_operand:SWI124 1 "<nonmemory_szext_operand>" "<r>,<i>,<i>"))
! 	 (const_int 0)))]
!   "ix86_match_ccmode (insn, CCNOmode)"
    "test{<imodesuffix>}\t{%1, %0|%0, %1}"
    [(set_attr "type" "test")
     (set_attr "mode" "<MODE>")
--- 12418,12434 ----
  	      (const_string "SI")
  	   ]
  	   (const_string "QI")))
!    (set_attr "pent_pair" "uv,uv,np,np")])
  
  (define_insn "*test<mode>_1"
    [(set (reg FLAGS_REG)
  	(compare
  	  (and:SWI124
  	    (match_operand:SWI124 0 "nonimmediate_operand" "%<r>m,*a,<r>m")
! 	    (match_operand:SWI124 1 "<general_operand>" "<r>,<i>,<i>"))
! 	  (const_int 0)))]
!   "ix86_match_ccmode (insn, CCNOmode)
!    && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
    "test{<imodesuffix>}\t{%1, %0|%0, %1}"
    [(set_attr "type" "test")
     (set_attr "mode" "<MODE>")
***************
*** 25708,25713 ****
--- 25849,25871 ----
     (set_attr "length_immediate" "0")
     (set_attr "modrm" "0")])
  
+ (define_expand "movmem<mode>"
+   [(use (match_operand:BLK 0 "memory_operand"))
+    (use (match_operand:BLK 1 "memory_operand"))
+    (use (match_operand:SWI48 2 "nonmemory_operand"))
+    (use (match_operand:SWI48 3 "const_int_operand"))
+    (use (match_operand:SI 4 "const_int_operand"))
+    (use (match_operand:SI 5 "const_int_operand"))
+    (use (match_operand:SI 6 ""))
+    (use (match_operand:SI 7 ""))
+    (use (match_operand:SI 8 ""))]
+   ""
+ {
+   if (ix86_expand_movmem (operands))
+     DONE;
+   FAIL;
+ })
+ 
  (define_expand "cpymem<mode>"
    [(use (match_operand:BLK 0 "memory_operand"))
     (use (match_operand:BLK 1 "memory_operand"))
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/lasx.md gcc-16-20251109/gcc/config/loongarch/lasx.md
*** gcc-16-20251102/gcc/config/loongarch/lasx.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/lasx.md	Sun Nov  9 22:32:46 2025
***************
*** 130,135 ****
--- 130,136 ----
  
  ;; Only used for splitting insert_d and copy_{u,s}.d.
  (define_mode_iterator LASX_WD [V4DI V4DF V8SI V8SF])
+ (define_mode_iterator LASX_PART [V4DI V4DF V8SF])
  
  ;; Only used for copy256_{u,s}.w.
  (define_mode_iterator LASX_W    [V8SI V8SF])
***************
*** 514,520 ****
     (set_attr "mode" "<MODE>")])
  
  ;; xvpermi.q
! (define_insn "lasx_xvpermi_q_<LASX:mode>"
    [(set (match_operand:LASX 0 "register_operand" "=f")
  	(unspec:LASX
  	  [(match_operand:LASX 1 "register_operand" "0")
--- 515,521 ----
     (set_attr "mode" "<MODE>")])
  
  ;; xvpermi.q
! (define_insn_and_split "lasx_xvpermi_q_<LASX:mode>"
    [(set (match_operand:LASX 0 "register_operand" "=f")
  	(unspec:LASX
  	  [(match_operand:LASX 1 "register_operand" "0")
***************
*** 525,530 ****
--- 526,562 ----
  {
    return "xvpermi.q\t%u0,%u2,%3";
  }
+   "&& ((INTVAL (operands[3]) & 0xee) == 0x0
+        || (INTVAL (operands[3]) & 0xee) == 0x22)"
+   [(const_int 0)]
+ {
+   HOST_WIDE_INT selector = INTVAL (operands[3]);
+   /* Reduce the dependency caused by using output operands[0] as input.  */
+   switch (INTVAL (operands[3]))
+     {
+     case 0x22:
+     case 0x23:
+     case 0x33:
+       selector -= 0x22;
+       operands[2] = operands[1];
+     /* FALLTHRU.  */
+     case 0x0:
+     case 0x1:
+     case 0x11:
+       emit_insn (gen_lasx_xvpermi_d_<mode> (operands[0], operands[2],
+ 					    GEN_INT (selector * 0xa + 0x44)));
+       break;
+     case 0x10:
+       emit_move_insn (operands[0], operands[2]);
+       break;
+     case 0x32:
+       emit_move_insn (operands[0], operands[1]);
+       break;
+     default:
+       gcc_unreachable ();
+     }
+   DONE;
+ }
    [(set_attr "type" "simd_splat")
     (set_attr "mode" "<MODE>")])
  
***************
*** 672,677 ****
--- 704,744 ----
    [(set_attr "move_type" "fmove")
     (set_attr "mode" "<MODE>")])
  
+ ;; vr0 -> low xr0
+ ;;
+ (define_insn "vec_cast<mode>"
+   [(set (match_operand:LASX_PART 0 "register_operand" "=f")
+        (subreg:LASX_PART
+          (match_operand:<VHMODE256_ALL> 1 "register_operand" "0") 0))]
+   "ISA_HAS_LASX"
+   ""
+   [(set_attr "type" "simd_splat")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "vec_insert_lo_<mode>"
+   [(set (match_operand:LASX_PART 0 "register_operand" "=f")
+     (vec_concat:LASX_PART
+       (match_operand:<VHMODE256_ALL> 2 "register_operand" "f")
+       (vec_select:<VHMODE256_ALL>
+        (match_operand:LASX_PART 1 "register_operand" "0")
+        (match_operand:LASX_PART 3 "vect_par_cnst_high_half"))))]
+   "ISA_HAS_LASX"
+   "xvpermi.q\t%u0,%u2,0x30"
+   [(set_attr "type" "simd_splat")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "vec_insert_hi_<mode>"
+   [(set (match_operand:LASX_PART 0 "register_operand" "=f")
+     (vec_concat:LASX_PART
+       (vec_select:<VHMODE256_ALL>
+        (match_operand:LASX_PART 1 "register_operand" "0")
+        (match_operand:LASX_PART 3 "vect_par_cnst_low_half"))
+       (match_operand:<VHMODE256_ALL> 2 "register_operand" "f")))]
+   "ISA_HAS_LASX"
+   "xvpermi.q\t%u0,%u2,0x02"
+   [(set_attr "type" "simd_splat")
+    (set_attr "mode" "<MODE>")])
+ 
  (define_expand "vec_perm<mode>"
   [(match_operand:LASX 0 "register_operand")
    (match_operand:LASX 1 "register_operand")
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/lasxintrin.h gcc-16-20251109/gcc/config/loongarch/lasxintrin.h
*** gcc-16-20251102/gcc/config/loongarch/lasxintrin.h	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/lasxintrin.h	Sun Nov  9 22:32:46 2025
***************
*** 23,28 ****
--- 23,30 ----
     see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     <http://www.gnu.org/licenses/>.  */
  
+ #include <lsxintrin.h>
+ 
  #ifndef _GCC_LOONGSON_ASXINTRIN_H
  #define _GCC_LOONGSON_ASXINTRIN_H 1
  
*************** __m256i __lasx_xvfcmp_sun_s (__m256 _1,
*** 5368,5372 ****
--- 5370,5528 ----
  #define __lasx_xvrepli_w(/*si10*/ _1) \
    ((__m256i)__builtin_lasx_xvrepli_w ((_1)))
  
+ #if defined (__loongarch_asx_sx_conv)
+ /* Add builtin interfaces for 128 and 256 vector conversions.
+    For the assembly instruction format of some functions of the following vector
+    conversion, it is not described exactly in accordance with the format of the
+    generated assembly instruction.
+    In the front end of the Rust language, different built-in functions are called
+    by analyzing the format of assembly instructions. The data types of instructions
+    are all defined based on the interfaces of the defined functions, in the
+    following order: output, input... .  */
+ /* Assembly instruction format:	xd, vj.  */
+ /* Data types in instruction templates:  V8SF, V4SF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256 __lasx_cast_128_s (__m128 _1)
+ {
+   return  (__m256)__builtin_lasx_cast_128_s ((v4f32)_1);
+ }
+ 
+ /* Assembly instruction format:	xd, vj.  */
+ /* Data types in instruction templates:  V4DF, V2DF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256d __lasx_cast_128_d (__m128d _1)
+ {
+   return  (__m256d)__builtin_lasx_cast_128_d ((v2f64)_1);
+ }
+ 
+ /* Assembly instruction format:	xd, vj.  */
+ /* Data types in instruction templates:  V4DI, V2DI.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256i __lasx_cast_128 (__m128i _1)
+ {
+   return  (__m256i)__builtin_lasx_cast_128 ((v2i64)_1);
+ }
+ 
+ /* Assembly instruction format:	xd, vj, vk.  */
+ /* Data types in instruction templates:  V8SF, V4SF, V4SF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256 __lasx_concat_128_s (__m128 _1, __m128 _2)
+ {
+   return  (__m256)__builtin_lasx_concat_128_s ((v4f32)_1, (v4f32)_2);
+ }
+ 
+ /* Assembly instruction format:	xd, vj, vk.  */
+ /* Data types in instruction templates:  V4DF, V2DF, V2DF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256d __lasx_concat_128_d (__m128d _1, __m128d _2)
+ {
+   return  (__m256d)__builtin_lasx_concat_128_d ((v2f64)_1, (v2f64)_2);
+ }
+ 
+ /* Assembly instruction format:	xd, vj, vk.  */
+ /* Data types in instruction templates:  V4DI, V2DI, V2DI.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256i __lasx_concat_128 (__m128i _1, __m128i _2)
+ {
+   return  (__m256i)__builtin_lasx_concat_128 ((v2i64)_1, (v2i64)_2);
+ }
+ 
+ /* Assembly instruction format:	vd, xj.  */
+ /* Data types in instruction templates:  V4SF, V8SF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m128 __lasx_extract_128_lo_s (__m256 _1)
+ {
+   return  (__m128)__builtin_lasx_extract_128_lo_s ((v8f32)_1);
+ }
+ 
+ /* Assembly instruction format:	vd, xj.  */
+ /* Data types in instruction templates:  V4SF, V8SF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m128 __lasx_extract_128_hi_s (__m256 _1)
+ {
+   return  (__m128)__builtin_lasx_extract_128_hi_s ((v8f32)_1);
+ }
+ 
+ /* Assembly instruction format:	vd, xj.  */
+ /* Data types in instruction templates:  V2DF, V4DF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m128d __lasx_extract_128_lo_d (__m256d _1)
+ {
+   return  (__m128d)__builtin_lasx_extract_128_lo_d ((v4f64)_1);
+ }
+ 
+ /* Assembly instruction format:	vd, xj.  */
+ /* Data types in instruction templates:  V2DF, V4DF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m128d __lasx_extract_128_hi_d (__m256d _1)
+ {
+   return  (__m128d)__builtin_lasx_extract_128_hi_d ((v4f64)_1);
+ }
+ 
+ /* Assembly instruction format:	vd, xj.  */
+ /* Data types in instruction templates:  V2DI, V4DI.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m128i __lasx_extract_128_lo (__m256i _1)
+ {
+   return  (__m128i)__builtin_lasx_extract_128_lo ((v4i64)_1);
+ }
+ 
+ /* Assembly instruction format:	vd, xj.  */
+ /* Data types in instruction templates:  V2DI, V4DI.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m128i __lasx_extract_128_hi (__m256i _1)
+ {
+   return  (__m128i)__builtin_lasx_extract_128_hi ((v4i64)_1);
+ }
+ 
+ /* Assembly instruction format:	xd, xj, vk.  */
+ /* Data types in instruction templates:  V8SF, V8SF, V4SF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256 __lasx_insert_128_lo_s (__m256 _1, __m128 _2)
+ {
+   return  (__m256)__builtin_lasx_insert_128_lo_s ((v8f32)_1, (v4f32)_2);
+ }
+ 
+ /* Assembly instruction format:	xd, xj, vk.  */
+ /* Data types in instruction templates:  V8SF, V8SF, V4SF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256 __lasx_insert_128_hi_s (__m256 _1, __m128 _2)
+ {
+   return  (__m256)__builtin_lasx_insert_128_hi_s ((v8f32)_1, (v4f32)_2);
+ }
+ 
+ /* Assembly instruction format:	xd, xj, vk.  */
+ /* Data types in instruction templates:  V4DF, V4DF, V2DF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256d __lasx_insert_128_lo_d (__m256d _1, __m128d _2)
+ {
+   return  (__m256d)__builtin_lasx_insert_128_lo_d ((v4f64)_1, (v2f64)_2);
+ }
+ 
+ /* Assembly instruction format:	xd, xj, vk.  */
+ /* Data types in instruction templates:  V4DF, V4DF, V2DF.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256d __lasx_insert_128_hi_d (__m256d _1, __m128d _2)
+ {
+   return  (__m256d)__builtin_lasx_insert_128_hi_d ((v4f64)_1, (v2f64)_2);
+ }
+ 
+ /* Assembly instruction format:	xd, xj, vk.  */
+ /* Data types in instruction templates:  V4DI, V4DI, V2DI.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256i __lasx_insert_128_lo (__m256i _1, __m128i _2)
+ {
+   return  (__m256i)__builtin_lasx_insert_128_lo ((v4i64)_1, (v2i64)_2);
+ }
+ 
+ /* Assembly instruction format:	xd, xj, vk.  */
+ /* Data types in instruction templates:  V4DI, V4DI, V2DI.  */
+ extern __inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ __m256i __lasx_insert_128_hi (__m256i _1, __m128i _2)
+ {
+   return  (__m256i)__builtin_lasx_insert_128_hi ((v4i64)_1, (v2i64)_2);
+ }
+ 
+ #endif /* defined(__loongarch_asx_sx_conv).  */
  #endif /* defined(__loongarch_asx).  */
  #endif /* _GCC_LOONGSON_ASXINTRIN_H.  */
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/loongarch-builtins.cc gcc-16-20251109/gcc/config/loongarch/loongarch-builtins.cc
*** gcc-16-20251102/gcc/config/loongarch/loongarch-builtins.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/loongarch-builtins.cc	Sun Nov  9 22:32:46 2025
*************** AVAIL_ALL (lasx_frecipe, ISA_HAS_LASX &&
*** 865,870 ****
--- 865,891 ----
  #define CODE_FOR_lasx_xvmaddwod_q_du	CODE_FOR_lasx_maddwod_q_du_punned
  #define CODE_FOR_lasx_xvmaddwod_q_du_d	CODE_FOR_lasx_maddwod_q_du_d_punned
  
+ 
+ /* Add mutual conversion between 128 and 256 vectors.  */
+ #define CODE_FOR_lasx_extract_128_lo_s	CODE_FOR_vec_extract_lo_v8sf
+ #define CODE_FOR_lasx_extract_128_hi_s	CODE_FOR_vec_extract_hi_v8sf
+ #define CODE_FOR_lasx_extract_128_lo_d	CODE_FOR_vec_extract_lo_v4df
+ #define CODE_FOR_lasx_extract_128_hi_d	CODE_FOR_vec_extract_hi_v4df
+ #define CODE_FOR_lasx_extract_128_lo	CODE_FOR_vec_extract_lo_v4di
+ #define CODE_FOR_lasx_extract_128_hi	CODE_FOR_vec_extract_hi_v4di
+ #define CODE_FOR_lasx_insert_128_lo_s	CODE_FOR_vec_insert_lo_v8sf
+ #define CODE_FOR_lasx_insert_128_hi_s	CODE_FOR_vec_insert_hi_v8sf
+ #define CODE_FOR_lasx_insert_128_lo_d	CODE_FOR_vec_insert_lo_v4df
+ #define CODE_FOR_lasx_insert_128_hi_d	CODE_FOR_vec_insert_hi_v4df
+ #define CODE_FOR_lasx_insert_128_lo	CODE_FOR_vec_insert_lo_v4di
+ #define CODE_FOR_lasx_insert_128_hi	CODE_FOR_vec_insert_hi_v4di
+ #define CODE_FOR_lasx_concat_128_s	CODE_FOR_vec_concatv8sf
+ #define CODE_FOR_lasx_concat_128_d	CODE_FOR_vec_concatv4df
+ #define CODE_FOR_lasx_concat_128	CODE_FOR_vec_concatv4di
+ #define CODE_FOR_lasx_cast_128_s   	CODE_FOR_vec_castv8sf
+ #define CODE_FOR_lasx_cast_128_d  	CODE_FOR_vec_castv4df
+ #define CODE_FOR_lasx_cast_128   	CODE_FOR_vec_castv4di
+ 
  static const struct loongarch_builtin_description loongarch_builtins[] = {
  #define LARCH_MOVFCSR2GR 0
    DIRECT_BUILTIN (movfcsr2gr, LARCH_USI_FTYPE_UQI, hard_float),
*************** static const struct loongarch_builtin_de
*** 2407,2413 ****
    LASX_BUILTIN (xvssrarni_bu_h, LARCH_UV32QI_FTYPE_UV32QI_V32QI_USI),
    LASX_BUILTIN (xvssrarni_hu_w, LARCH_UV16HI_FTYPE_UV16HI_V16HI_USI),
    LASX_BUILTIN (xvssrarni_wu_d, LARCH_UV8SI_FTYPE_UV8SI_V8SI_USI),
!   LASX_BUILTIN (xvssrarni_du_q, LARCH_UV4DI_FTYPE_UV4DI_V4DI_USI)
  };
  
  /* Index I is the function declaration for loongarch_builtins[I], or null if
--- 2428,2452 ----
    LASX_BUILTIN (xvssrarni_bu_h, LARCH_UV32QI_FTYPE_UV32QI_V32QI_USI),
    LASX_BUILTIN (xvssrarni_hu_w, LARCH_UV16HI_FTYPE_UV16HI_V16HI_USI),
    LASX_BUILTIN (xvssrarni_wu_d, LARCH_UV8SI_FTYPE_UV8SI_V8SI_USI),
!   LASX_BUILTIN (xvssrarni_du_q, LARCH_UV4DI_FTYPE_UV4DI_V4DI_USI),
!   LASX_BUILTIN (extract_128_lo_s, LARCH_V4SF_FTYPE_V8SF),
!   LASX_BUILTIN (extract_128_hi_s, LARCH_V4SF_FTYPE_V8SF),
!   LASX_BUILTIN (extract_128_lo_d, LARCH_V2DF_FTYPE_V4DF),
!   LASX_BUILTIN (extract_128_hi_d, LARCH_V2DF_FTYPE_V4DF),
!   LASX_BUILTIN (extract_128_lo, LARCH_V2DI_FTYPE_V4DI),
!   LASX_BUILTIN (extract_128_hi, LARCH_V2DI_FTYPE_V4DI),
!   LASX_BUILTIN (insert_128_lo_s, LARCH_V8SF_FTYPE_V8SF_V4SF),
!   LASX_BUILTIN (insert_128_hi_s, LARCH_V8SF_FTYPE_V8SF_V4SF),
!   LASX_BUILTIN (insert_128_lo_d, LARCH_V4DF_FTYPE_V4DF_V2DF),
!   LASX_BUILTIN (insert_128_hi_d, LARCH_V4DF_FTYPE_V4DF_V2DF),
!   LASX_BUILTIN (insert_128_lo, LARCH_V4DI_FTYPE_V4DI_V2DI),
!   LASX_BUILTIN (insert_128_hi, LARCH_V4DI_FTYPE_V4DI_V2DI),
!   LASX_BUILTIN (concat_128_s, LARCH_V8SF_FTYPE_V4SF_V4SF),
!   LASX_BUILTIN (concat_128_d, LARCH_V4DF_FTYPE_V2DF_V2DF),
!   LASX_BUILTIN (concat_128, LARCH_V4DI_FTYPE_V2DI_V2DI),
!   LASX_BUILTIN (cast_128_s, LARCH_V8SF_FTYPE_V4SF),
!   LASX_BUILTIN (cast_128_d, LARCH_V4DF_FTYPE_V2DF),
!   LASX_BUILTIN (cast_128, LARCH_V4DI_FTYPE_V2DI)
  };
  
  /* Index I is the function declaration for loongarch_builtins[I], or null if
*************** loongarch_expand_builtin_direct (enum in
*** 3001,3006 ****
--- 3040,3049 ----
  {
    struct expand_operand ops[MAX_RECOG_OPERANDS];
    int opno, argno;
+   /* For vector extraction/insertion operations, sel_high_p being true
+      indicates that the high of the data is selected/retained from the
+      vector register.  */
+   bool sel_high_p = true;
  
    /* Map any target to operand 0.  */
    opno = 0;
*************** loongarch_expand_builtin_direct (enum in
*** 3019,3024 ****
--- 3062,3112 ----
        create_input_operand (&ops[1], CONST1_RTX (ops[0].mode), ops[0].mode);
        return loongarch_expand_builtin_insn (icode, 3, ops, has_target_p);
  
+     case CODE_FOR_vec_extract_lo_v8sf:
+     case CODE_FOR_vec_extract_lo_v4df:
+     case CODE_FOR_vec_extract_lo_v4di:
+       sel_high_p = false;
+     /* Fall through.  */
+     case CODE_FOR_vec_extract_hi_v8sf:
+     case CODE_FOR_vec_extract_hi_v4df:
+     case CODE_FOR_vec_extract_hi_v4di:
+       {
+ 	/* The selection method for constructing the high/low half.  */
+ 	loongarch_prepare_builtin_arg (&ops[1], exp, 0);
+ 	int nelts = GET_MODE_NUNITS (GET_MODE (ops[1].value));
+ 	int half_nelts = nelts / 2;
+ 	int base = sel_high_p ? half_nelts : 0;
+ 
+ 	rtx pat_rtx
+ 	    = loongarch_gen_stepped_int_parallel (half_nelts, base, 1);
+ 	create_input_operand (&ops[2], pat_rtx, ops[1].mode);
+ 
+ 	return loongarch_expand_builtin_insn (icode, 3, ops, has_target_p);
+       }
+ 
+     case CODE_FOR_vec_insert_hi_v8sf:
+     case CODE_FOR_vec_insert_hi_v4df:
+     case CODE_FOR_vec_insert_hi_v4di:
+       sel_high_p = false;
+     /* Fall through.  */
+     case CODE_FOR_vec_insert_lo_v8sf:
+     case CODE_FOR_vec_insert_lo_v4df:
+     case CODE_FOR_vec_insert_lo_v4di:
+       {
+ 	/* The selection method for constructing the high/low half.  */
+ 	loongarch_prepare_builtin_arg (&ops[1], exp, 0);
+ 	loongarch_prepare_builtin_arg (&ops[2], exp, 1);
+ 	int nelts = GET_MODE_NUNITS (GET_MODE (ops[1].value));
+ 	int half_nelts = nelts / 2;
+ 	int base = sel_high_p ? half_nelts : 0;
+ 
+ 	rtx pat_rtx
+ 	    = loongarch_gen_stepped_int_parallel (half_nelts, base, 1);
+ 	create_input_operand (&ops[3], pat_rtx, ops[1].mode);
+ 
+ 	return loongarch_expand_builtin_insn (icode, 4, ops, has_target_p);
+       }
+ 
      default:
        break;
      }
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/loongarch-c.cc gcc-16-20251109/gcc/config/loongarch/loongarch-c.cc
*** gcc-16-20251102/gcc/config/loongarch/loongarch-c.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/loongarch-c.cc	Sun Nov  9 22:32:46 2025
*************** loongarch_update_cpp_builtins (cpp_reade
*** 132,137 ****
--- 132,138 ----
    loongarch_def_or_undef (ISA_HAS_LSX, "__loongarch_simd", pfile);
    loongarch_def_or_undef (ISA_HAS_LSX, "__loongarch_sx", pfile);
    loongarch_def_or_undef (ISA_HAS_LASX, "__loongarch_asx", pfile);
+   loongarch_def_or_undef (ISA_HAS_LASX, "__loongarch_asx_sx_conv", pfile);
  
    builtin_undef ("__loongarch_simd_width");
    if (ISA_HAS_LSX)
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/loongarch-ftypes.def gcc-16-20251109/gcc/config/loongarch/loongarch-ftypes.def
*** gcc-16-20251102/gcc/config/loongarch/loongarch-ftypes.def	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/loongarch-ftypes.def	Sun Nov  9 22:32:46 2025
*************** DEF_LARCH_FTYPE (1, (USI, USI))
*** 42,47 ****
--- 42,53 ----
  DEF_LARCH_FTYPE (1, (UDI, USI))
  DEF_LARCH_FTYPE (1, (USI, UQI))
  DEF_LARCH_FTYPE (1, (VOID, USI))
+ DEF_LARCH_FTYPE (1, (V4SF, V8SF))
+ DEF_LARCH_FTYPE (1, (V2DF, V4DF))
+ DEF_LARCH_FTYPE (1, (V2DI, V4DI))
+ DEF_LARCH_FTYPE (1, (V8SF, V4SF))
+ DEF_LARCH_FTYPE (1, (V4DF, V2DF))
+ DEF_LARCH_FTYPE (1, (V4DI, V2DI))
  
  DEF_LARCH_FTYPE (2, (VOID, UQI, USI))
  DEF_LARCH_FTYPE (2, (VOID, UHI, USI))
*************** DEF_LARCH_FTYPE (2, (SI, SI, SI))
*** 58,63 ****
--- 64,75 ----
  DEF_LARCH_FTYPE (2, (SI, DI, SI))
  DEF_LARCH_FTYPE (2, (USI, USI, USI))
  DEF_LARCH_FTYPE (2, (UDI, UDI, USI))
+ DEF_LARCH_FTYPE (2, (V8SF, V4SF, V4SF))
+ DEF_LARCH_FTYPE (2, (V4DF, V2DF, V2DF))
+ DEF_LARCH_FTYPE (2, (V4DI, V2DI, V2DI))
+ DEF_LARCH_FTYPE (2, (V8SF, V8SF, V4SF))
+ DEF_LARCH_FTYPE (2, (V4DF, V4DF, V2DF))
+ DEF_LARCH_FTYPE (2, (V4DI, V4DI, V2DI))
  
  DEF_LARCH_FTYPE (3, (VOID, USI, USI, SI))
  DEF_LARCH_FTYPE (3, (VOID, USI, UDI, SI))
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/loongarch-opts.cc gcc-16-20251109/gcc/config/loongarch/loongarch-opts.cc
*** gcc-16-20251102/gcc/config/loongarch/loongarch-opts.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/loongarch-opts.cc	Sun Nov  9 22:32:46 2025
*************** fallback:
*** 540,546 ****
  
  
    /* 5.  Target code model */
!   t.cmodel = constrained.cmodel ? target->cmodel : CMODEL_NORMAL;
  
    switch (t.cmodel)
      {
--- 540,546 ----
  
  
    /* 5.  Target code model */
!   t.cmodel = constrained.cmodel ? target->cmodel : TARGET_DEFAULT_CMODEL;
  
    switch (t.cmodel)
      {
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/loongarch-protos.h gcc-16-20251109/gcc/config/loongarch/loongarch-protos.h
*** gcc-16-20251102/gcc/config/loongarch/loongarch-protos.h	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/loongarch-protos.h	Sun Nov  9 22:32:46 2025
*************** extern bool loongarch_use_ins_ext_p (rtx
*** 159,164 ****
--- 159,165 ----
  extern bool loongarch_check_zero_div_p (void);
  extern bool loongarch_pre_reload_split (void);
  extern int loongarch_use_bstrins_for_ior_with_mask (machine_mode, rtx *);
+ extern bool loongarch_use_bstrins_bstrpick_for_and (rtx, machine_mode);
  extern rtx loongarch_rewrite_mem_for_simple_ldst (rtx);
  
  union loongarch_gen_fn_ptrs
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/loongarch.cc gcc-16-20251109/gcc/config/loongarch/loongarch.cc
*** gcc-16-20251102/gcc/config/loongarch/loongarch.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/loongarch.cc	Sun Nov  9 22:32:46 2025
*************** loongarch_const_vector_same_bytes_p (rtx
*** 1835,1841 ****
  
    first = CONST_VECTOR_ELT (op, 0);
    bytes = GET_MODE_UNIT_SIZE (mode);
!   val = INTVAL (first);
    first_byte = val & 0xff;
    for (i = 1; i < bytes; i++)
      {
--- 1835,1861 ----
  
    first = CONST_VECTOR_ELT (op, 0);
    bytes = GET_MODE_UNIT_SIZE (mode);
! 
!   if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
!     {
!       rtx val_s = CONST_VECTOR_ELT (op, 0);
!       const REAL_VALUE_TYPE *x = CONST_DOUBLE_REAL_VALUE (val_s);
!       if (GET_MODE (val_s) == DFmode)
! 	{
! 	  long tmp[2];
! 	  REAL_VALUE_TO_TARGET_DOUBLE (*x, tmp);
! 	  val = (unsigned HOST_WIDE_INT) tmp[1] << 32 | tmp[0];
! 	}
!       else
! 	{
! 	  long tmp;
! 	  REAL_VALUE_TO_TARGET_SINGLE (*x, tmp);
! 	  val = (unsigned HOST_WIDE_INT) tmp;
! 	}
!     }
!   else
!     val = UINTVAL (first);
! 
    first_byte = val & 0xff;
    for (i = 1; i < bytes; i++)
      {
*************** loongarch_move_integer (rtx temp, rtx de
*** 3439,3451 ****
    x = GEN_INT (codes[0].value);
    for (i = 1; i < num_ops; i++)
      {
!       if (!can_create_pseudo_p ())
! 	{
! 	  emit_insn (gen_rtx_SET (temp, x));
! 	  x = temp;
! 	}
!       else
! 	x = force_reg (mode, x);
  
        set_unique_reg_note (get_last_insn (), REG_EQUAL,
  			   GEN_INT (codes[i-1].curr_value));
--- 3459,3466 ----
    x = GEN_INT (codes[0].value);
    for (i = 1; i < num_ops; i++)
      {
!       emit_insn (gen_rtx_SET (temp, x));
!       x = temp;
  
        set_unique_reg_note (get_last_insn (), REG_EQUAL,
  			   GEN_INT (codes[i-1].curr_value));
*************** loongarch_legitimize_move (machine_mode
*** 3539,3545 ****
  {
    if (!register_operand (dest, mode) && !reg_or_0_operand (src, mode))
      {
!       loongarch_emit_move (dest, force_reg (mode, src));
        return true;
      }
  
--- 3554,3573 ----
  {
    if (!register_operand (dest, mode) && !reg_or_0_operand (src, mode))
      {
!       /* When loading fixed-point scalar data, if the size of the mode
! 	 is smaller than the size of `word_mode`, the immediate value
! 	 is first loaded into a register of type `word_mode`.
! 	 This facilitates the elimination of common self-expressions.
! 	 This reduces redundant immediate value loading instructions.  */
!       rtx tmp;
!       if (GET_MODE_CLASS (mode) == MODE_INT
! 	  && GET_CODE (src) == CONST_INT
! 	  && GET_MODE_SIZE (mode) < UNITS_PER_WORD)
! 	tmp = gen_lowpart (mode, force_reg (word_mode, src));
!       else
! 	tmp = force_reg (mode, src);
! 
!       loongarch_emit_move (dest, tmp);
        return true;
      }
  
*************** loongarch_use_bstrins_for_ior_with_mask_
*** 3803,3808 ****
--- 3831,3864 ----
    return 0;
  }
  
+ /* Check if it is possible to optimize AND operation with an immediate:
+    a. immediate is loaded by more than 1 instruction
+    b. can use bstrpick.d + bstrins.d.  */
+ 
+ bool
+ loongarch_use_bstrins_bstrpick_for_and (rtx op, machine_mode mode)
+ {
+   if (!TARGET_64BIT)
+     return false;
+ 
+   /* Avoid aggressive optimization of combine before reload.  */
+   if (!reload_completed)
+     return false;
+ 
+   /* It's meaningless if the OP is not splittable
+      and skip the cases already supported in AND operation.  */
+   if (!splittable_const_int_operand (op, mode) || and_operand (op, mode))
+     return false;
+ 
+   int leading_zero_bit = __builtin_clzll (UINTVAL (op));
+   unsigned HOST_WIDE_INT mask = (~0ULL) << (64 - leading_zero_bit);
+ 
+   if (ins_zero_bitmask_operand (GEN_INT (UINTVAL (op) | mask), mode))
+     return true;
+ 
+   return false;
+ }
+ 
  /* Return the cost of moving between two registers of mode MODE.  */
  
  static int
*************** loongarch_rtx_costs (rtx x, machine_mode
*** 3922,3935 ****
        return false;
  
      case AND:
!       /* Check for a *clear_upper32 pattern and treat it like a zero
! 	 extension.  See the pattern's comment for details.  */
!       if (TARGET_64BIT && mode == DImode && CONST_INT_P (XEXP (x, 1))
! 	  && UINTVAL (XEXP (x, 1)) == 0xffffffff)
  	{
! 	  *total = (loongarch_zero_extend_cost (XEXP (x, 0))
! 		    + set_src_cost (XEXP (x, 0), mode, speed));
! 	  return true;
  	}
        /* (AND (NOT op0) (NOT op1) is a nor operation that can be done in
  	 a single instruction.  */
--- 3978,4001 ----
        return false;
  
      case AND:
!       if (TARGET_64BIT && mode == DImode && CONST_INT_P (XEXP (x, 1)))
  	{
! 	  /* Check for a *clear_upper32 pattern and treat it like a zero
! 	     extension.  See the pattern's comment for details.  */
! 	  if (UINTVAL (XEXP (x, 1)) == 0xffffffff)
! 	    {
! 	      *total = (loongarch_zero_extend_cost (XEXP (x, 0))
! 			+ set_src_cost (XEXP (x, 0), mode, speed));
! 	      return true;
! 	    }
! 	  /* Check if it can be done by bstrpick.d and bstrins.d.  */
! 	  else if (loongarch_use_bstrins_bstrpick_for_and (XEXP (x, 1), mode))
! 	    {
! 	      /* The pattern will be split into 2 insns.  */
! 	      *total = (COSTS_N_INSNS (2)
! 			+ set_src_cost (XEXP (x, 0), mode, speed));
! 	      return true;
! 	    }
  	}
        /* (AND (NOT op0) (NOT op1) is a nor operation that can be done in
  	 a single instruction.  */
*************** loongarch_rtx_costs (rtx x, machine_mode
*** 3983,3991 ****
  				      speed);
        return true;
  
      case ASHIFT:
      case ASHIFTRT:
-     case LSHIFTRT:
      case ROTATE:
      case ROTATERT:
        if (CONSTANT_P (XEXP (x, 1)))
--- 4049,4082 ----
  				      speed);
        return true;
  
+     case LSHIFTRT:
+       /* Correct the cost of mulh.{w[u]/d[u]}.  */
+       if (outer_code == TRUNCATE && CONST_INT_P (XEXP (x, 1))
+ 	  && INTVAL (XEXP (x, 1)) == (GET_MODE_BITSIZE (mode) / 2)
+ 	  && GET_CODE (XEXP (x, 0)) == MULT
+ 	  && ((GET_CODE (XEXP (XEXP (x, 0), 0)) == ZERO_EXTEND
+ 	       && GET_CODE (XEXP (XEXP (x, 0), 1)) == ZERO_EXTEND)
+ 	      || (GET_CODE (XEXP (XEXP (x, 0), 0)) == SIGN_EXTEND
+ 		  && GET_CODE (XEXP (XEXP (x, 0), 1)) == SIGN_EXTEND))
+ 	  && GET_CODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == REG
+ 	  && GET_CODE (XEXP (XEXP (XEXP (x, 0), 1), 0)) == REG)
+ 	{
+ 	  if (GET_MODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == SImode
+ 	      && GET_MODE (XEXP (XEXP (XEXP (x, 0), 1), 0)) == SImode)
+ 	    {
+ 	      *total = loongarch_cost->int_mult_si;
+ 	      return true;
+ 	    }
+ 	  if (GET_MODE (XEXP (XEXP (XEXP (x, 0), 0), 0)) == DImode
+ 	      && GET_MODE (XEXP (XEXP (XEXP (x, 0), 1), 0)) == DImode)
+ 	    {
+ 	      *total = loongarch_cost->int_mult_di;
+ 	      return true;
+ 	    }
+ 	}
+       /* Fall through.  */
      case ASHIFT:
      case ASHIFTRT:
      case ROTATE:
      case ROTATERT:
        if (CONSTANT_P (XEXP (x, 1)))
*************** loongarch_rtx_costs (rtx x, machine_mode
*** 4234,4240 ****
  machine_mode
  loongarch_split_reduction (machine_mode mode)
  {
!   if (LSX_SUPPORTED_MODE_P (mode))
      return mode;
  
    return mode_for_vector (as_a <scalar_mode> (GET_MODE_INNER (mode)),
--- 4325,4332 ----
  machine_mode
  loongarch_split_reduction (machine_mode mode)
  {
!   if (!VECTOR_MODE_P (mode)
!       || LSX_SUPPORTED_MODE_P (mode))
      return mode;
  
    return mode_for_vector (as_a <scalar_mode> (GET_MODE_INNER (mode)),
*************** loongarch_canonicalize_int_order_test (e
*** 5217,5245 ****
    if (loongarch_int_order_operand_ok_p (*code, *cmp1))
      return true;
  
-   if (CONST_INT_P (*cmp1))
      switch (*code)
        {
        case LE:
! 	plus_one = trunc_int_for_mode (UINTVAL (*cmp1) + 1, mode);
! 	if (INTVAL (*cmp1) < plus_one)
  	  {
! 	    *code = LT;
! 	    *cmp1 = force_reg (mode, GEN_INT (plus_one));
! 	    return true;
  	  }
  	break;
  
        case LEU:
! 	plus_one = trunc_int_for_mode (UINTVAL (*cmp1) + 1, mode);
! 	if (plus_one != 0)
  	  {
! 	    *code = LTU;
! 	    *cmp1 = force_reg (mode, GEN_INT (plus_one));
! 	    return true;
  	  }
  	break;
  
        default:
  	break;
        }
--- 5309,5349 ----
    if (loongarch_int_order_operand_ok_p (*code, *cmp1))
      return true;
  
      switch (*code)
        {
        case LE:
! 	if (CONST_INT_P (*cmp1))
  	  {
! 	    plus_one = trunc_int_for_mode (UINTVAL (*cmp1) + 1, mode);
! 	    if (INTVAL (*cmp1) < plus_one)
! 	      {
! 		*code = LT;
! 		*cmp1 = force_reg (mode, GEN_INT (plus_one));
! 		return true;
! 	      }
  	  }
  	break;
  
        case LEU:
! 	if (CONST_INT_P (*cmp1))
  	  {
! 	    plus_one = trunc_int_for_mode (UINTVAL (*cmp1) + 1, mode);
! 	    if (plus_one != 0)
! 	      {
! 		*code = LTU;
! 		*cmp1 = force_reg (mode, GEN_INT (plus_one));
! 		return true;
! 	      }
  	  }
  	break;
  
+       case GT:
+       case GTU:
+       case LT:
+       case LTU:
+ 	*cmp1 = force_reg (mode, *cmp1);
+ 	break;
+ 
        default:
  	break;
        }
*************** loongarch_zero_if_equal (rtx cmp0, rtx c
*** 5304,5309 ****
--- 5408,5433 ----
  		       OPTAB_DIRECT);
  }
  
+ /* Helper function for loongarch_extend_comparands to Sign-extend the OP.
+    However if the OP is SI subreg promoted with an inner DI, such as
+        (subreg/s/v:SI (reg/v:DI) 0)
+    just peel off the SUBREG to get DI, avoiding extraneous extension.
+    This modification refers to riscv's commit r14-5506.  */
+ 
+ static void
+ loongarch_sign_extend_if_subreg_prom_p (rtx *op)
+ {
+   if (SUBREG_P (*op)
+       && SUBREG_PROMOTED_VAR_P (*op)
+       && SUBREG_PROMOTED_SIGNED_P (*op)
+       && REG_P (XEXP (*op, 0))
+       && (GET_MODE_SIZE (GET_MODE (XEXP (*op, 0)))
+ 	  == GET_MODE_SIZE (word_mode)))
+     *op = XEXP (*op, 0);
+   else
+     *op = gen_rtx_SIGN_EXTEND (word_mode, *op);
+ }
+ 
  /* Sign- or zero-extend OP0 and OP1 for integer comparisons.  */
  
  static void
*************** loongarch_extend_comparands (rtx_code co
*** 5333,5346 ****
  	}
        else
  	{
! 	  *op0 = gen_rtx_SIGN_EXTEND (word_mode, *op0);
! 	  if (*op1 != const0_rtx)
! 	    *op1 = gen_rtx_SIGN_EXTEND (word_mode, *op1);
  	}
      }
  }
  
- 
  /* Convert a comparison into something that can be used in a branch.  On
     entry, *OP0 and *OP1 are the values being compared and *CODE is the code
     used to compare them.  Update them to describe the final comparison.  */
--- 5457,5472 ----
  	}
        else
  	{
! 	  loongarch_sign_extend_if_subreg_prom_p (op0);
! 	  /* Regardless of whether *op1 is any immediate number, it is not
! 	     loaded into the register, in order to facilitate the generation
! 	     of slt{u}i.  */
! 	  if (!CONST_INT_P (*op1))
! 	    loongarch_sign_extend_if_subreg_prom_p (op1);
  	}
      }
  }
  
  /* Convert a comparison into something that can be used in a branch.  On
     entry, *OP0 and *OP1 are the values being compared and *CODE is the code
     used to compare them.  Update them to describe the final comparison.  */
*************** loongarch_expand_conditional_move (rtx *
*** 5481,5491 ****
    enum rtx_code code = GET_CODE (operands[1]);
    rtx op0 = XEXP (operands[1], 0);
    rtx op1 = XEXP (operands[1], 1);
-   rtx op0_extend = op0;
-   rtx op1_extend = op1;
  
!   /* Record whether operands[2] and operands[3] modes are promoted to word_mode.  */
!   bool promote_op[2] = {false, false};
    bool promote_p = false;
    machine_mode mode = GET_MODE (operands[0]);
  
--- 5607,5614 ----
    enum rtx_code code = GET_CODE (operands[1]);
    rtx op0 = XEXP (operands[1], 0);
    rtx op1 = XEXP (operands[1], 1);
  
!   /* Record whether operands[0] is extended by SImode.  */
    bool promote_p = false;
    machine_mode mode = GET_MODE (operands[0]);
  
*************** loongarch_expand_conditional_move (rtx *
*** 5588,5612 ****
  	    }
  	}
  
-       if (GET_MODE_SIZE (GET_MODE (op0)) < UNITS_PER_WORD)
- 	{
- 	  promote_op[0] = (REG_P (op0) && REG_P (operands[2]) &&
- 			   REGNO (op0) == REGNO (operands[2]));
- 	  promote_op[1] = (REG_P (op1) && REG_P (operands[3]) &&
- 			   REGNO (op1) == REGNO (operands[3]));
- 	}
- 
-       if (promote_op[0] || promote_op[1])
- 	{
- 	  mode = word_mode;
- 	  promote_p = true;
- 	}
- 
        loongarch_extend_comparands (code, &op0, &op1);
  
        op0 = force_reg (word_mode, op0);
!       op0_extend = op0;
!       op1_extend = force_reg (word_mode, op1);
  
        rtx target = gen_reg_rtx (GET_MODE (op0));
  
--- 5711,5720 ----
  	    }
  	}
  
        loongarch_extend_comparands (code, &op0, &op1);
  
        op0 = force_reg (word_mode, op0);
!       op1 = CONST_INT_P (op1) ? op1 : force_reg (word_mode, op1);
  
        rtx target = gen_reg_rtx (GET_MODE (op0));
  
*************** loongarch_expand_conditional_move (rtx *
*** 5652,5716 ****
  	}
      }
  
    rtx cond = gen_rtx_fmt_ee (code, GET_MODE (op0), op0, op1);
    /* There is no direct support for general conditional GP move involving
       two registers using SEL.  */
!   if (INTEGRAL_MODE_P (GET_MODE (operands[2]))
!       && register_operand (operands[2], VOIDmode)
!       && register_operand (operands[3], VOIDmode))
      {
!       rtx op2 = operands[2];
!       rtx op3 = operands[3];
  
!       if (promote_p)
  	{
! 	  if (promote_op[0])
! 	    op2 = op0_extend;
! 	  else
! 	    {
! 	      loongarch_extend_comparands (code, &op2, &const0_rtx);
! 	      op2 = force_reg (mode, op2);
! 	    }
! 
! 	  if (promote_op[1])
! 	    op3 = op1_extend;
! 	  else
! 	    {
! 	      loongarch_extend_comparands (code, &op3, &const0_rtx);
! 	      op3 = force_reg (mode, op3);
! 	    }
! 	}
! 
!       rtx temp = gen_reg_rtx (mode);
!       rtx temp2 = gen_reg_rtx (mode);
! 
!       emit_insn (gen_rtx_SET (temp,
! 			      gen_rtx_IF_THEN_ELSE (mode, cond,
! 						    op2, const0_rtx)));
  
!       /* Flip the test for the second operand.  */
!       cond = gen_rtx_fmt_ee ((code == EQ) ? NE : EQ, GET_MODE (op0), op0, op1);
  
!       emit_insn (gen_rtx_SET (temp2,
! 			      gen_rtx_IF_THEN_ELSE (mode, cond,
! 						    op3, const0_rtx)));
  
-       /* Merge the two results, at least one is guaranteed to be zero.  */
        if (promote_p)
  	{
! 	  rtx temp3 = gen_reg_rtx (mode);
! 	  emit_insn (gen_rtx_SET (temp3, gen_rtx_IOR (mode, temp, temp2)));
! 	  temp3 = gen_lowpart (GET_MODE (operands[0]), temp3);
  	  /* Nonzero in a subreg if it was made when accessing an object that
  	     was promoted to a wider mode in accord with the PROMOTED_MODE
  	     machine description macro.  */
! 	  SUBREG_PROMOTED_VAR_P (temp3) = 1;
  	  /* Sets promoted mode for SUBREG_PROMOTED_VAR_P.  */
! 	  SUBREG_PROMOTED_SET (temp3, SRP_SIGNED);
! 	  loongarch_emit_move (operands[0], temp3);
  	}
-       else
- 	emit_insn (gen_rtx_SET (operands[0], gen_rtx_IOR (mode, temp, temp2)));
      }
    else
      emit_insn (gen_rtx_SET (operands[0],
--- 5760,5824 ----
  	}
      }
  
+   /* If the target of the mov<mode> is SImode, then the two operands are
+      extended to display symbols.  */
+   if (TARGET_64BIT && mode == SImode)
+     {
+       loongarch_extend_comparands (code, &operands[2], &operands[3]);
+       operands[2] = force_reg (word_mode, operands[2]);
+       operands[3] = CONST_INT_P (operands[3]) ? operands[3]
+        : force_reg (word_mode, operands[3]);
+ 
+       promote_p = true;
+       mode = DImode;
+     }
+ 
    rtx cond = gen_rtx_fmt_ee (code, GET_MODE (op0), op0, op1);
    /* There is no direct support for general conditional GP move involving
       two registers using SEL.  */
!   if (INTEGRAL_MODE_P (GET_MODE (operands[0])))
      {
!       rtx pdest = promote_p ? gen_reg_rtx (mode) : operands[0];
  
!       if (register_operand (operands[2], VOIDmode)
! 	  && register_operand (operands[3], VOIDmode))
  	{
! 	  rtx sel1 = gen_reg_rtx (mode);
! 	  rtx sel2 = gen_reg_rtx (mode);
! 	  emit_insn (gen_rtx_SET (sel1,
! 				  gen_rtx_IF_THEN_ELSE (mode, cond,
! 							operands[2],
! 							const0_rtx)));
! 	  /* Flip the test for the second operand.  */
! 	  cond = gen_rtx_fmt_ee ((code == EQ) ? NE
! 				 : EQ, GET_MODE (op0),
! 				 op0, op1);
  
! 	  emit_insn (gen_rtx_SET (sel2,
! 				  gen_rtx_IF_THEN_ELSE (mode, cond,
! 							operands[3],
! 							const0_rtx)));
  
! 	  /* Merge the two results, at least one is guaranteed to be zero.  */
! 	  emit_insn (gen_rtx_SET (pdest, gen_rtx_IOR (mode, sel1, sel2)));
! 	}
!       else
! 	emit_insn (gen_rtx_SET (pdest,
! 				gen_rtx_IF_THEN_ELSE (mode, cond,
! 						      operands[2],
! 						      operands[3])));
  
        if (promote_p)
  	{
! 	  pdest = gen_lowpart (GET_MODE (operands[0]), pdest);
  	  /* Nonzero in a subreg if it was made when accessing an object that
  	     was promoted to a wider mode in accord with the PROMOTED_MODE
  	     machine description macro.  */
! 	  SUBREG_PROMOTED_VAR_P (pdest) = 1;
  	  /* Sets promoted mode for SUBREG_PROMOTED_VAR_P.  */
! 	  SUBREG_PROMOTED_SET (pdest, SRP_SIGNED);
! 	  loongarch_emit_move (operands[0], pdest);
  	}
      }
    else
      emit_insn (gen_rtx_SET (operands[0],
*************** static bool
*** 7087,7092 ****
--- 7195,7204 ----
  loongarch_can_change_mode_class (machine_mode from, machine_mode to,
  				 reg_class_t rclass)
  {
+   if ((INTEGRAL_MODE_P (from) && FLOAT_MODE_P (to))
+       || (INTEGRAL_MODE_P (to) && FLOAT_MODE_P (from)))
+     return true;
+ 
    /* Allow conversions between different LSX/LASX vector modes.  */
    if (LASX_SUPPORTED_MODE_P (from) && LASX_SUPPORTED_MODE_P (to))
      return true;
*************** loongarch_modes_tieable_p (machine_mode
*** 7133,7139 ****
       prefer to put one of them in FPRs.  */
    return (mode1 == mode2
  	  || (!loongarch_mode_ok_for_mov_fmt_p (mode1)
! 	      && !loongarch_mode_ok_for_mov_fmt_p (mode2)));
  }
  
  /* Implement TARGET_PREFERRED_RELOAD_CLASS.  */
--- 7245,7255 ----
       prefer to put one of them in FPRs.  */
    return (mode1 == mode2
  	  || (!loongarch_mode_ok_for_mov_fmt_p (mode1)
! 	      && !loongarch_mode_ok_for_mov_fmt_p (mode2))
! 	  || (GET_MODE_CLASS(mode1) == MODE_FLOAT
! 	      && GET_MODE_CLASS(mode2) == MODE_INT)
! 	  || (GET_MODE_CLASS(mode2) == MODE_FLOAT
! 	      && GET_MODE_CLASS(mode1) == MODE_INT));
  }
  
  /* Implement TARGET_PREFERRED_RELOAD_CLASS.  */
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/loongarch.md gcc-16-20251109/gcc/config/loongarch/loongarch.md
*** gcc-16-20251102/gcc/config/loongarch/loongarch.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/loongarch.md	Sun Nov  9 22:32:46 2025
***************
*** 518,523 ****
--- 518,524 ----
  
  ;; These code iterators allow the signed and unsigned scc operations to use
  ;; the same template.
+ (define_code_iterator any_ge [ge geu])
  (define_code_iterator any_gt [gt gtu])
  (define_code_iterator any_lt [lt ltu])
  (define_code_iterator any_le [le leu])
***************
*** 1636,1641 ****
--- 1637,1657 ----
      operands[3] = tmp;
    })
  
+ (define_insn "and_load_zero_extend<mode>"
+   [(set (match_operand:X 0 "register_operand" "=r,r,r,r,r,r")
+ 	(and:X (match_operand:X 1 "memory_operand" "%m,m,m,k,k,k")
+ 	       (match_operand:X 2 "mask_operand" "Yb,Yh,Yw,Yb,Yh,Yw")))]
+   ""
+   "@
+    ld.bu\t%0,%1
+    ld.hu\t%0,%1
+    ld.wu\t%0,%1
+    ldx.bu\t%0,%1
+    ldx.hu\t%0,%1
+    ldx.wu\t%0,%1"
+   [(set_attr "move_type" "load,load,load,load,load,load")
+    (set_attr "mode" "<MODE>")])
+ 
  ;; We always avoid the shift operation in bstrins_<mode>_for_ior_mask
  ;; if possible, but the result may be sub-optimal when one of the masks
  ;; is (1 << N) - 1 and one of the src register is the dest register.
***************
*** 1670,1675 ****
--- 1686,1709 ----
      DONE;
    })
  
+ (define_insn_and_split "bstrins_bstrpick_for_and_imm<mode>"
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(and:X (match_operand:X 1 "register_operand" "r")
+ 	       (match_operand:X 2 "const_int_operand" "i")))]
+   "loongarch_use_bstrins_bstrpick_for_and (operands[2], <MODE>mode)"
+   "#"
+   "&& true"
+   [(const_int 0)]
+ {
+   unsigned HOST_WIDE_INT op2 = INTVAL (operands[2]);
+   int leading_zero_bit = __builtin_clzll (op2);
+   unsigned HOST_WIDE_INT mask = (~0ULL) << (64 - leading_zero_bit);
+   emit_insn (gen_extzv<mode> (operands[0], operands[1],
+ 			      GEN_INT (64 - leading_zero_bit), const0_rtx));
+   emit_insn (gen_and<mode>3 (operands[0], operands[0], GEN_INT (op2 | mask)));
+ }
+   [(set_attr "length" "8")])
+ 
  (define_insn "*iorhi3"
    [(set (match_operand:HI 0 "register_operand" "=r,r")
  	(ior:HI (match_operand:HI 1 "register_operand" "%r,r")
***************
*** 1740,1760 ****
  
  ;; This attribute used for get connection of scalar mode and corresponding
  ;; vector mode.
! (define_mode_attr cntmap [(SI "v4si") (DI "v2di")])
  
! (define_expand "popcount<mode>2"
!   [(set (match_operand:GPR 0 "register_operand")
! 	(popcount:GPR (match_operand:GPR 1 "register_operand")))]
    "ISA_HAS_LSX"
  {
!   rtx in = operands[1];
!   rtx out = operands[0];
!   rtx vreg = <MODE>mode == SImode ? gen_reg_rtx (V4SImode) :
! 				    gen_reg_rtx (V2DImode);
!   emit_insn (gen_lsx_vinsgr2vr_<size> (vreg, in, vreg, GEN_INT (1)));
!   emit_insn (gen_popcount<cntmap>2 (vreg, vreg));
!   emit_insn (gen_lsx_vpickve2gr_<size> (out, vreg, GEN_INT (0)));
!   DONE;
  })
  
  ;;
--- 1774,1796 ----
  
  ;; This attribute used for get connection of scalar mode and corresponding
  ;; vector mode.
! (define_mode_attr cntmap [(SI "V4SI") (DI "V2DI")])
  
! (define_insn_and_split "popcount<mode>2"
!   [(set (match_operand:GPR 0 "register_operand" "=f")
! 	(popcount:GPR (match_operand:GPR 1 "register_operand" "f")))]
    "ISA_HAS_LSX"
+   "#"
+   ;; Do the split very lately to work around init-regs unneeded zero-
+   ;; initialization from init-regs.  See PR61810 and all the referenced
+   ;; issues.
+   "&& reload_completed"
+   [(set (match_operand:<cntmap> 0 "register_operand" "=f")
+ 	(popcount:<cntmap>
+ 	  (match_operand:<cntmap> 1 "register_operand" "f")))]
  {
!   operands[0] = gen_rtx_REG (<cntmap>mode, REGNO (operands[0]));
!   operands[1] = gen_rtx_REG (<cntmap>mode, REGNO (operands[1]));
  })
  
  ;;
***************
*** 2306,2313 ****
  })
  
  (define_insn_and_split "*movsi_internal"
!   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,w,*f,f,*r,*m")
! 	(match_operand:SI 1 "move_operand" "r,Yd,w,rJ,*r*J,m,*f,*f"))]
    "(register_operand (operands[0], SImode)
      || reg_or_0_operand (operands[1], SImode))"
    { return loongarch_output_move (operands); }
--- 2342,2349 ----
  })
  
  (define_insn_and_split "*movsi_internal"
!   [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,r,w,f,f,r,*m")
! 	(match_operand:SI 1 "move_operand" "r,Yd,w,rJ,rJ,m,f,*f"))]
    "(register_operand (operands[0], SImode)
      || reg_or_0_operand (operands[1], SImode))"
    { return loongarch_output_move (operands); }
***************
*** 3495,3500 ****
--- 3531,3545 ----
    [(set_attr "type" "slt")
     (set_attr "mode" "<X:MODE>")])
  
+ (define_insn "*sge<u>_<X:mode><GPR:mode>"
+   [(set (match_operand:GPR           0 "register_operand" "=r")
+ 	(any_ge:GPR (match_operand:X 1 "register_operand" " r")
+ 		    (const_int 1)))]
+   ""
+   "slti<u>\t%0,zero,%1"
+   [(set_attr "type" "slt")
+    (set_attr "mode" "<X:MODE>")])
+ 
  (define_insn "*sgt<u>_<X:mode><GPR:mode>"
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(any_gt:GPR (match_operand:X 1 "register_operand" "r")
diff -Nrcpad gcc-16-20251102/gcc/config/loongarch/predicates.md gcc-16-20251109/gcc/config/loongarch/predicates.md
*** gcc-16-20251102/gcc/config/loongarch/predicates.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/loongarch/predicates.md	Sun Nov  9 22:32:46 2025
***************
*** 413,418 ****
--- 413,423 ----
         (match_operand 0 "low_bitmask_operand")
         (match_operand 0 "ins_zero_bitmask_operand")))
  
+ (define_predicate "mask_operand"
+   (ior (match_operand 0 "qi_mask_operand")
+        (match_operand 0 "hi_mask_operand")
+        (match_operand 0 "si_mask_operand")))
+ 
  (define_predicate "const_call_insn_operand"
    (match_code "const,symbol_ref,label_ref")
  {
diff -Nrcpad gcc-16-20251102/gcc/config/riscv/autovec-opt.md gcc-16-20251109/gcc/config/riscv/autovec-opt.md
*** gcc-16-20251102/gcc/config/riscv/autovec-opt.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/riscv/autovec-opt.md	Sun Nov  9 22:32:47 2025
***************
*** 1951,1956 ****
--- 1951,1981 ----
    }
    [(set_attr "type" "viwalu")])
  
+ (define_insn_and_split "*widen_mul_plus_vx_<mode>"
+   [(set (match_operand:VWEXTI                 0 "register_operand")
+ 	(plus:VWEXTI
+ 	  (mult:VWEXTI
+ 	    (zero_extend:VWEXTI
+ 	      (match_operand:<V_DOUBLE_TRUNC> 2 "register_operand"))
+ 	    (vec_duplicate:VWEXTI
+ 	      (zero_extend:<VEL>
+ 		(match_operand:<VSUBEL>       1 "register_operand"))))
+ 	  (match_operand:VWEXTI               3 "register_operand")))]
+   "TARGET_VECTOR && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     insn_code icode = code_for_pred_widen_mul_plus_u_vx (<MODE>mode);
+     rtx v_undef = RVV_VUNDEF(<MODE>mode);
+     rtx ops[] = {operands[0], operands[1], operands[2], operands[3], v_undef};
+ 
+     riscv_vector::emit_vlmax_insn (icode, riscv_vector::TERNARY_OP, ops);
+ 
+     DONE;
+   }
+   [(set_attr "type" "viwmuladd")])
+ 
  ;; =============================================================================
  ;; Combine vec_duplicate + op.vv to op.vf
  ;; Include
***************
*** 2399,2401 ****
--- 2424,2467 ----
    }
    [(set_attr "type" "vfalu")]
  )
+ 
+ ;; Combine vsext.vf + vsll.vi to vwsll.vi depends on ZVBB.
+ ;; The vwsll.vi is zero extend, thus only the ashift bits
+ ;; is equal or greater than double truncated bits is valid.
+ ;; Appears in the satd function of x264.
+ (define_insn_and_split "*vwsll_sign_extend_<mode>"
+   [(set (match_operand:VWEXTI               0 "register_operand")
+ 	(ashift:VWEXTI
+ 	  (sign_extend:VWEXTI
+ 	    (match_operand:<V_DOUBLE_TRUNC> 1 "register_operand"))
+ 	  (match_operand                    2 "const_int_operand")))]
+   "TARGET_VECTOR && TARGET_ZVBB && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+   {
+     int imm = INTVAL (operands[2]);
+     int trunc_prec = GET_MODE_PRECISION (GET_MODE_INNER (<V_DOUBLE_TRUNC>mode));
+ 
+     if (imm >= trunc_prec)
+       {
+ 	insn_code icode = code_for_pred_vwsll_scalar (<MODE>mode);
+ 	emit_vlmax_insn (icode, riscv_vector::BINARY_OP, operands);
+       }
+     else
+       {
+ 	insn_code icode = code_for_pred_vf2 (SIGN_EXTEND, <MODE>mode);
+ 	rtx extend = gen_reg_rtx (<MODE>mode);
+ 	rtx unary_ops[] = {extend, operands[1]};
+ 	riscv_vector::emit_vlmax_insn (icode, riscv_vector::UNARY_OP,
+ 				       unary_ops);
+ 
+ 	icode = code_for_pred_scalar (ASHIFT, <MODE>mode);
+ 	rtx binary_ops[] = {operands[0], extend, operands[2]};
+ 	riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP,
+ 				       binary_ops);
+       }
+ 
+     DONE;
+   }
+ )
diff -Nrcpad gcc-16-20251102/gcc/config/riscv/autovec.md gcc-16-20251109/gcc/config/riscv/autovec.md
*** gcc-16-20251102/gcc/config/riscv/autovec.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/riscv/autovec.md	Sun Nov  9 22:32:47 2025
***************
*** 55,62 ****
    [(match_operand:RATIO64 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO64I 2 "register_operand")
!    (match_operand 3 "<RATIO64:gs_extension>")
!    (match_operand 4 "<RATIO64:gs_scale>")
     (match_operand:<RATIO64:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
--- 55,62 ----
    [(match_operand:RATIO64 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO64I 2 "register_operand")
!    (match_operand 3 "const_1_operand")
!    (match_operand 4 "const_1_operand")
     (match_operand:<RATIO64:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
***************
*** 71,78 ****
    [(match_operand:RATIO32 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO32I 2 "register_operand")
!    (match_operand 3 "<RATIO32:gs_extension>")
!    (match_operand 4 "<RATIO32:gs_scale>")
     (match_operand:<RATIO32:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
--- 71,78 ----
    [(match_operand:RATIO32 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO32I 2 "register_operand")
!    (match_operand 3 "const_1_operand")
!    (match_operand 4 "const_1_operand")
     (match_operand:<RATIO32:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
***************
*** 87,94 ****
    [(match_operand:RATIO16 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO16I 2 "register_operand")
!    (match_operand 3 "<RATIO16:gs_extension>")
!    (match_operand 4 "<RATIO16:gs_scale>")
     (match_operand:<RATIO16:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
--- 87,94 ----
    [(match_operand:RATIO16 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO16I 2 "register_operand")
!    (match_operand 3 "const_1_operand")
!    (match_operand 4 "const_1_operand")
     (match_operand:<RATIO16:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
***************
*** 103,110 ****
    [(match_operand:RATIO8 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO8I 2 "register_operand")
!    (match_operand 3 "<RATIO8:gs_extension>")
!    (match_operand 4 "<RATIO8:gs_scale>")
     (match_operand:<RATIO8:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
--- 103,110 ----
    [(match_operand:RATIO8 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO8I 2 "register_operand")
!    (match_operand 3 "const_1_operand")
!    (match_operand 4 "const_1_operand")
     (match_operand:<RATIO8:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
***************
*** 119,126 ****
    [(match_operand:RATIO4 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO4I 2 "register_operand")
!    (match_operand 3 "<RATIO4:gs_extension>")
!    (match_operand 4 "<RATIO4:gs_scale>")
     (match_operand:<RATIO4:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
--- 119,126 ----
    [(match_operand:RATIO4 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO4I 2 "register_operand")
!    (match_operand 3 "const_1_operand")
!    (match_operand 4 "const_1_operand")
     (match_operand:<RATIO4:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
***************
*** 135,142 ****
    [(match_operand:RATIO2 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO2I 2 "register_operand")
!    (match_operand 3 "<RATIO2:gs_extension>")
!    (match_operand 4 "<RATIO2:gs_scale>")
     (match_operand:<RATIO2:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
--- 135,142 ----
    [(match_operand:RATIO2 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO2I 2 "register_operand")
!    (match_operand 3 "const_1_operand")
!    (match_operand 4 "const_1_operand")
     (match_operand:<RATIO2:VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
***************
*** 155,162 ****
    [(match_operand:RATIO1 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO1 2 "register_operand")
!    (match_operand 3 "<gs_extension>")
!    (match_operand 4 "<gs_scale>")
     (match_operand:<VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
--- 155,162 ----
    [(match_operand:RATIO1 0 "register_operand")
     (match_operand 1 "pmode_reg_or_0_operand")
     (match_operand:RATIO1 2 "register_operand")
!    (match_operand 3 "const_1_operand")
!    (match_operand 4 "const_1_operand")
     (match_operand:<VM> 5 "vector_mask_operand")
     (match_operand 6 "maskload_else_operand")
     (match_operand 7 "autovec_length_operand")
***************
*** 174,181 ****
  (define_expand "mask_len_scatter_store<RATIO64:mode><RATIO64I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO64I 1 "register_operand")
!    (match_operand 2 "<RATIO64:gs_extension>")
!    (match_operand 3 "<RATIO64:gs_scale>")
     (match_operand:RATIO64 4 "register_operand")
     (match_operand:<RATIO64:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
--- 174,181 ----
  (define_expand "mask_len_scatter_store<RATIO64:mode><RATIO64I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO64I 1 "register_operand")
!    (match_operand 2 "const_1_operand")
!    (match_operand 3 "const_1_operand")
     (match_operand:RATIO64 4 "register_operand")
     (match_operand:<RATIO64:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
***************
*** 189,196 ****
  (define_expand "mask_len_scatter_store<RATIO32:mode><RATIO32I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO32I 1 "register_operand")
!    (match_operand 2 "<RATIO32:gs_extension>")
!    (match_operand 3 "<RATIO32:gs_scale>")
     (match_operand:RATIO32 4 "register_operand")
     (match_operand:<RATIO32:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
--- 189,196 ----
  (define_expand "mask_len_scatter_store<RATIO32:mode><RATIO32I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO32I 1 "register_operand")
!    (match_operand 2 "const_1_operand")
!    (match_operand 3 "const_1_operand")
     (match_operand:RATIO32 4 "register_operand")
     (match_operand:<RATIO32:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
***************
*** 204,211 ****
  (define_expand "mask_len_scatter_store<RATIO16:mode><RATIO16I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO16I 1 "register_operand")
!    (match_operand 2 "<RATIO16:gs_extension>")
!    (match_operand 3 "<RATIO16:gs_scale>")
     (match_operand:RATIO16 4 "register_operand")
     (match_operand:<RATIO16:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
--- 204,211 ----
  (define_expand "mask_len_scatter_store<RATIO16:mode><RATIO16I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO16I 1 "register_operand")
!    (match_operand 2 "const_1_operand")
!    (match_operand 3 "const_1_operand")
     (match_operand:RATIO16 4 "register_operand")
     (match_operand:<RATIO16:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
***************
*** 219,226 ****
  (define_expand "mask_len_scatter_store<RATIO8:mode><RATIO8I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO8I 1 "register_operand")
!    (match_operand 2 "<RATIO8:gs_extension>")
!    (match_operand 3 "<RATIO8:gs_scale>")
     (match_operand:RATIO8 4 "register_operand")
     (match_operand:<RATIO8:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
--- 219,226 ----
  (define_expand "mask_len_scatter_store<RATIO8:mode><RATIO8I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO8I 1 "register_operand")
!    (match_operand 2 "const_1_operand")
!    (match_operand 3 "const_1_operand")
     (match_operand:RATIO8 4 "register_operand")
     (match_operand:<RATIO8:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
***************
*** 234,241 ****
  (define_expand "mask_len_scatter_store<RATIO4:mode><RATIO4I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO4I 1 "register_operand")
!    (match_operand 2 "<RATIO4:gs_extension>")
!    (match_operand 3 "<RATIO4:gs_scale>")
     (match_operand:RATIO4 4 "register_operand")
     (match_operand:<RATIO4:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
--- 234,241 ----
  (define_expand "mask_len_scatter_store<RATIO4:mode><RATIO4I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO4I 1 "register_operand")
!    (match_operand 2 "const_1_operand")
!    (match_operand 3 "const_1_operand")
     (match_operand:RATIO4 4 "register_operand")
     (match_operand:<RATIO4:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
***************
*** 249,256 ****
  (define_expand "mask_len_scatter_store<RATIO2:mode><RATIO2I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO2I 1 "register_operand")
!    (match_operand 2 "<RATIO2:gs_extension>")
!    (match_operand 3 "<RATIO2:gs_scale>")
     (match_operand:RATIO2 4 "register_operand")
     (match_operand:<RATIO2:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
--- 249,256 ----
  (define_expand "mask_len_scatter_store<RATIO2:mode><RATIO2I:mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO2I 1 "register_operand")
!    (match_operand 2 "const_1_operand")
!    (match_operand 3 "const_1_operand")
     (match_operand:RATIO2 4 "register_operand")
     (match_operand:<RATIO2:VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
***************
*** 268,275 ****
  (define_expand "mask_len_scatter_store<mode><mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO1 1 "register_operand")
!    (match_operand 2 "<gs_extension>")
!    (match_operand 3 "<gs_scale>")
     (match_operand:RATIO1 4 "register_operand")
     (match_operand:<VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
--- 268,275 ----
  (define_expand "mask_len_scatter_store<mode><mode>"
    [(match_operand 0 "pmode_reg_or_0_operand")
     (match_operand:RATIO1 1 "register_operand")
!    (match_operand 2 "const_1_operand")
!    (match_operand 3 "const_1_operand")
     (match_operand:RATIO1 4 "register_operand")
     (match_operand:<VM> 5 "vector_mask_operand")
     (match_operand 6 "autovec_length_operand")
diff -Nrcpad gcc-16-20251102/gcc/config/riscv/riscv-v.cc gcc-16-20251109/gcc/config/riscv/riscv-v.cc
*** gcc-16-20251102/gcc/config/riscv/riscv-v.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/riscv/riscv-v.cc	Sun Nov  9 22:32:47 2025
*************** void
*** 4747,4754 ****
  expand_gather_scatter (rtx *ops, bool is_load)
  {
    rtx ptr, vec_offset, vec_reg;
-   bool zero_extend_p;
-   int shift;
    rtx mask = ops[5];
    rtx len = ops[6];
    if (is_load)
--- 4747,4752 ----
*************** expand_gather_scatter (rtx *ops, bool is
*** 4758,4835 ****
        vec_reg = ops[0];
        ptr = ops[1];
        vec_offset = ops[2];
-       zero_extend_p = INTVAL (ops[3]);
-       shift = exact_log2 (INTVAL (ops[4]));
      }
    else
      {
        vec_reg = ops[4];
        ptr = ops[0];
        vec_offset = ops[1];
-       zero_extend_p = INTVAL (ops[2]);
-       shift = exact_log2 (INTVAL (ops[3]));
      }
  
    machine_mode vec_mode = GET_MODE (vec_reg);
    machine_mode idx_mode = GET_MODE (vec_offset);
-   scalar_mode inner_idx_mode = GET_MODE_INNER (idx_mode);
-   unsigned inner_offsize = GET_MODE_BITSIZE (inner_idx_mode);
-   poly_int64 nunits = GET_MODE_NUNITS (vec_mode);
    bool is_vlmax = is_vlmax_len_p (vec_mode, len);
  
-   bool use_widening_shift = false;
- 
-   /* Extend the offset element to address width.  */
-   if (inner_offsize < BITS_PER_WORD)
-     {
-       use_widening_shift = TARGET_ZVBB && zero_extend_p && shift == 1;
-       /* 7.2. Vector Load/Store Addressing Modes.
- 	 If the vector offset elements are narrower than XLEN, they are
- 	 zero-extended to XLEN before adding to the ptr effective address. If
- 	 the vector offset elements are wider than XLEN, the least-significant
- 	 XLEN bits are used in the address calculation. An implementation must
- 	 raise an illegal instruction exception if the EEW is not supported for
- 	 offset elements.
- 
- 	 RVV spec only refers to the shift == 0 case.  */
-       if (!zero_extend_p || shift)
- 	{
- 	  if (zero_extend_p)
- 	    inner_idx_mode
- 	      = int_mode_for_size (inner_offsize * 2, 0).require ();
- 	  else
- 	    inner_idx_mode = int_mode_for_size (BITS_PER_WORD, 0).require ();
- 	  machine_mode new_idx_mode
- 	    = get_vector_mode (inner_idx_mode, nunits).require ();
- 	  if (!use_widening_shift)
- 	    {
- 	      rtx tmp = gen_reg_rtx (new_idx_mode);
- 	      emit_insn (gen_extend_insn (tmp, vec_offset, new_idx_mode, idx_mode,
- 					  zero_extend_p ? true : false));
- 	      vec_offset = tmp;
- 	    }
- 	  idx_mode = new_idx_mode;
- 	}
-     }
- 
-   if (shift)
-     {
-       rtx tmp;
-       if (!use_widening_shift)
- 	tmp = expand_binop (idx_mode, ashl_optab, vec_offset,
- 			    gen_int_mode (shift, Pmode), NULL_RTX, 0,
- 			    OPTAB_DIRECT);
-       else
- 	{
- 	  tmp = gen_reg_rtx (idx_mode);
- 	  insn_code icode = code_for_pred_vwsll_scalar (idx_mode);
- 	  rtx ops[] = {tmp, vec_offset, const1_rtx};
- 	  emit_vlmax_insn (icode, BINARY_OP, ops);
- 	}
- 
-       vec_offset = tmp;
-     }
- 
    insn_code icode = prepare_gather_scatter (vec_mode, idx_mode, is_load);
    if (is_vlmax)
      {
--- 4756,4773 ----
diff -Nrcpad gcc-16-20251102/gcc/config/riscv/riscv.cc gcc-16-20251109/gcc/config/riscv/riscv.cc
*** gcc-16-20251102/gcc/config/riscv/riscv.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/riscv/riscv.cc	Sun Nov  9 22:32:47 2025
*************** riscv_noce_conversion_profitable_p (rtx_
*** 4722,4727 ****
--- 4722,4734 ----
  	      if (last_dest)
  		last_dest = dest;
  	    }
+ 	  else if (REG_P (dest) && src == CONST0_RTX (GET_MODE (dest)))
+ 	    {
+ 	      /* A GPR set to zero can always be replaced with x0, so any
+ 		 insn that sets a GPR to zero will eventually be eliminated.  */
+ 	      riscv_if_info.original_cost += COSTS_N_INSNS (1);
+ 	      riscv_if_info.max_seq_cost += COSTS_N_INSNS (1);
+ 	    }
  	  else
  	    last_dest = NULL_RTX;
  
*************** static int
*** 5886,5896 ****
--- 5893,5939 ----
  riscv_flatten_aggregate_field (const_tree type, riscv_aggregate_field *fields,
  			       int n, HOST_WIDE_INT offset,
  			       bool ignore_zero_width_bit_field_p,
+ 			       bool ignore_empty_union_and_zero_len_array_p,
  			       bool vls_p = false, unsigned abi_vlen = 0)
  {
    int max_aggregate_field = vls_p ? 8 : 2;
    switch (TREE_CODE (type))
      {
+     case UNION_TYPE:
+       {
+ 	if (!ignore_empty_union_and_zero_len_array_p)
+ 	  return -1;
+ 	/* Empty union should ignore.  */
+ 	if (TYPE_SIZE (type) == NULL || integer_zerop (TYPE_SIZE (type)))
+ 	  return n;
+ 	/* Or all union member are empty union or empty struct. */
+ 	for (tree f = TYPE_FIELDS (type); f; f = DECL_CHAIN (f))
+ 	  {
+ 	    if (TREE_CODE (f) != FIELD_DECL)
+ 	      continue;
+ 	    int m;
+ 	    HOST_WIDE_INT pos = offset + int_byte_position (f);
+ 	    switch (TREE_CODE (TREE_TYPE (f)))
+ 	      {
+ 	      case ARRAY_TYPE:
+ 	      case UNION_TYPE:
+ 	      case RECORD_TYPE:
+ 		m = riscv_flatten_aggregate_field (
+ 		      TREE_TYPE (f), fields, n, pos,
+ 		      ignore_zero_width_bit_field_p,
+ 		      true);
+ 		/* Any non-empty struct/union/array will stop the flatten.  */
+ 		if (m != n)
+ 		  return -1;
+ 	        break;
+ 	      default:
+ 		/* Any member are not struct, union or array will stop the
+ 		   flatten.  */
+ 	      return -1;
+ 	    }
+ 	}
+       return n;
+       }
      case RECORD_TYPE:
       /* Can't handle incomplete types nor sizes that are not fixed.  */
       if (!COMPLETE_TYPE_P (type)
*************** riscv_flatten_aggregate_field (const_tre
*** 5916,5922 ****
  	      {
  		HOST_WIDE_INT pos = offset + int_byte_position (f);
  		n = riscv_flatten_aggregate_field (
! 		  TREE_TYPE (f), fields, n, pos, ignore_zero_width_bit_field_p,
  		  vls_p, abi_vlen);
  	      }
  	    if (n < 0)
--- 5959,5967 ----
  	      {
  		HOST_WIDE_INT pos = offset + int_byte_position (f);
  		n = riscv_flatten_aggregate_field (
! 		  TREE_TYPE (f), fields, n, pos,
! 		  ignore_zero_width_bit_field_p,
! 		  ignore_empty_union_and_zero_len_array_p,
  		  vls_p, abi_vlen);
  	      }
  	    if (n < 0)
*************** riscv_flatten_aggregate_field (const_tre
*** 5930,5943 ****
  	riscv_aggregate_field subfields[8];
  	tree index = TYPE_DOMAIN (type);
  	tree elt_size = TYPE_SIZE_UNIT (TREE_TYPE (type));
  	int n_subfields
! 	  = riscv_flatten_aggregate_field (TREE_TYPE (type), subfields, 0,
! 					   offset,
! 					   ignore_zero_width_bit_field_p, vls_p,
! 					   abi_vlen);
  	/* Can't handle incomplete types nor sizes that are not fixed.  */
! 	if (n_subfields <= 0
! 	    || !COMPLETE_TYPE_P (type)
  	    || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
  	    || !index
  	    || !TYPE_MAX_VALUE (index)
--- 5975,5994 ----
  	riscv_aggregate_field subfields[8];
  	tree index = TYPE_DOMAIN (type);
  	tree elt_size = TYPE_SIZE_UNIT (TREE_TYPE (type));
+ 
+ 	/* Array with zero size member should be ignored.  */
+ 	if (ignore_empty_union_and_zero_len_array_p && integer_zerop (elt_size))
+ 	  return n;
+ 
  	int n_subfields
! 	  = riscv_flatten_aggregate_field (
! 	      TREE_TYPE (type), subfields, 0,
! 	      offset,
! 	      ignore_zero_width_bit_field_p,
! 	      ignore_empty_union_and_zero_len_array_p,
! 	      vls_p, abi_vlen);
  	/* Can't handle incomplete types nor sizes that are not fixed.  */
! 	if (!COMPLETE_TYPE_P (type)
  	    || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
  	    || !index
  	    || !TYPE_MAX_VALUE (index)
*************** riscv_flatten_aggregate_field (const_tre
*** 5947,5952 ****
--- 5998,6012 ----
  	    || !tree_fits_uhwi_p (elt_size))
  	  return -1;
  
+ 	/* Zero-length array with empty union/struct should be ignored.  */
+ 	if (ignore_empty_union_and_zero_len_array_p && n_subfields == 0
+ 	    && integer_zerop (TYPE_MIN_VALUE (index))
+ 	    && integer_all_onesp (TYPE_MAX_VALUE (index)))
+ 	  return n;
+ 
+ 	if (n_subfields <= 0)
+ 	  return -1;
+ 
  	n_elts = 1 + tree_to_uhwi (TYPE_MAX_VALUE (index))
  		   - tree_to_uhwi (TYPE_MIN_VALUE (index));
  	gcc_assert (n_elts >= 0);
*************** static int
*** 6026,6039 ****
  riscv_flatten_aggregate_argument (const_tree type,
  				  riscv_aggregate_field *fields,
  				  bool ignore_zero_width_bit_field_p,
  				  bool vls_p = false, unsigned abi_vlen = 0)
  {
    if (!type || TREE_CODE (type) != RECORD_TYPE)
      return -1;
  
    return riscv_flatten_aggregate_field (type, fields, 0, 0,
! 					ignore_zero_width_bit_field_p, vls_p,
! 					abi_vlen);
  }
  
  /* See whether TYPE is a record whose fields should be returned in one or
--- 6086,6110 ----
  riscv_flatten_aggregate_argument (const_tree type,
  				  riscv_aggregate_field *fields,
  				  bool ignore_zero_width_bit_field_p,
+ 				  bool ignore_empty_union_and_zero_len_array_p,
  				  bool vls_p = false, unsigned abi_vlen = 0)
  {
    if (!type || TREE_CODE (type) != RECORD_TYPE)
      return -1;
  
    return riscv_flatten_aggregate_field (type, fields, 0, 0,
! 					ignore_zero_width_bit_field_p,
! 					ignore_empty_union_and_zero_len_array_p,
! 					vls_p, abi_vlen);
! }
! 
! static bool
! riscv_any_non_float_type_field (riscv_aggregate_field *fields, int n)
! {
!   for (int i = 0; i < n; i++)
!     if (!SCALAR_FLOAT_TYPE_P (fields[i].type))
!       return true;
!   return false;
  }
  
  /* See whether TYPE is a record whose fields should be returned in one or
*************** riscv_pass_aggregate_in_fpr_pair_p (cons
*** 6044,6067 ****
  				    riscv_aggregate_field fields[2])
  {
    static int warned = 0;
  
    /* This is the old ABI, which differs for C++ and C.  */
!   int n_old = riscv_flatten_aggregate_argument (type, fields, false);
!   for (int i = 0; i < n_old; i++)
!     if (!SCALAR_FLOAT_TYPE_P (fields[i].type))
!       {
! 	n_old = -1;
! 	break;
!       }
  
    /* This is the new ABI, which is the same for C++ and C.  */
!   int n_new = riscv_flatten_aggregate_argument (type, fields, true);
!   for (int i = 0; i < n_new; i++)
!     if (!SCALAR_FLOAT_TYPE_P (fields[i].type))
!       {
! 	n_new = -1;
! 	break;
!       }
  
    if ((n_old != n_new) && (warned == 0))
      {
--- 6115,6132 ----
  				    riscv_aggregate_field fields[2])
  {
    static int warned = 0;
+   if (!type)
+     return 0;
  
    /* This is the old ABI, which differs for C++ and C.  */
!   int n_old = riscv_flatten_aggregate_argument (type, fields, false, false);
!   if (riscv_any_non_float_type_field (fields, n_old))
!     n_old = -1;
  
    /* This is the new ABI, which is the same for C++ and C.  */
!   int n_new = riscv_flatten_aggregate_argument (type, fields, true, false);
!   if (riscv_any_non_float_type_field (fields, n_new))
!     n_new = -1;
  
    if ((n_old != n_new) && (warned == 0))
      {
*************** riscv_pass_aggregate_in_fpr_pair_p (cons
*** 6070,6076 ****
        warned = 1;
      }
  
!   return n_new > 0 ? n_new : 0;
  }
  
  /* See whether TYPE is a record whose fields should be returned in one or
--- 6135,6192 ----
        warned = 1;
      }
  
!   /* ABI with fixing flatten empty union.  */
!   int n_new2 = riscv_flatten_aggregate_argument (type, fields, true, true);
!   if (riscv_any_non_float_type_field (fields, n_new2))
!     n_new2 = -1;
! 
!   bool num_fpr = riscv_pass_mode_in_fpr_p (TYPE_MODE (type));
! 
!   /* There is a special case for struct with zero length array with struct and a
!      floating point member.
!      e.g:
!      struct S0ae_1f {
!        struct {
!        } e1[0];
!        float f;
!      };
! 
!      This case we will got 1, but legacy ABI will got -1, however legacy ABI
!      will got 1 in later logic, so we should consider this case as compatible.
!   */
!   bool compatible_p = n_new2 == 1 && n_new == -1 && num_fpr == 1;
! 
!   if ((n_new2 != n_new)
!       && !compatible_p && (warned == 0))
!     {
!       warning (OPT_Wpsabi, "ABI for flattened empty union and zero "
! 	       "length array changed in GCC 16");
!       warned = 1;
!     }
! 
!   return n_new2 > 0 ? n_new2 : 0;
! }
! 
! struct riscv_aggregate_field_info_t {
!   unsigned num_fpr;
!   unsigned num_gpr;
! 
!   riscv_aggregate_field_info_t ()
!     : num_fpr (0), num_gpr (0)
!   {}
! };
! 
! static riscv_aggregate_field_info_t
! riscv_parse_aggregate_field_info (riscv_aggregate_field *fields, int n)
! {
!   riscv_aggregate_field_info_t info;
!   for (int i = 0; i < n; i++)
!     {
!       info.num_fpr += SCALAR_FLOAT_TYPE_P (fields[i].type);
!       info.num_gpr += INTEGRAL_TYPE_P (fields[i].type);
!     }
! 
!   return info;
  }
  
  /* See whether TYPE is a record whose fields should be returned in one or
*************** riscv_pass_aggregate_in_fpr_and_gpr_p (c
*** 6084,6118 ****
    static int warned = 0;
  
    /* This is the old ABI, which differs for C++ and C.  */
!   unsigned num_int_old = 0, num_float_old = 0;
!   int n_old = riscv_flatten_aggregate_argument (type, fields, false);
!   for (int i = 0; i < n_old; i++)
!     {
!       num_float_old += SCALAR_FLOAT_TYPE_P (fields[i].type);
!       num_int_old += INTEGRAL_TYPE_P (fields[i].type);
!     }
  
    /* This is the new ABI, which is the same for C++ and C.  */
!   unsigned num_int_new = 0, num_float_new = 0;
!   int n_new = riscv_flatten_aggregate_argument (type, fields, true);
!   for (int i = 0; i < n_new; i++)
!     {
!       num_float_new += SCALAR_FLOAT_TYPE_P (fields[i].type);
!       num_int_new += INTEGRAL_TYPE_P (fields[i].type);
!     }
  
!   if (((num_int_old == 1 && num_float_old == 1
! 	&& (num_int_old != num_int_new || num_float_old != num_float_new))
!        || (num_int_new == 1 && num_float_new == 1
! 	   && (num_int_old != num_int_new || num_float_old != num_float_new)))
!       && (warned == 0))
      {
        warning (OPT_Wpsabi, "ABI for flattened struct with zero-length "
  			   "bit-fields changed in GCC 10");
        warned = 1;
      }
  
!   return num_int_new == 1 && num_float_new == 1;
  }
  
  /* Return the representation of an argument passed or returned in an FPR
--- 6200,6247 ----
    static int warned = 0;
  
    /* This is the old ABI, which differs for C++ and C.  */
!   int n_old = riscv_flatten_aggregate_argument (type, fields, false, false);
!   riscv_aggregate_field_info_t old_info;
!   old_info = riscv_parse_aggregate_field_info (fields, n_old);
  
    /* This is the new ABI, which is the same for C++ and C.  */
!   int n_new = riscv_flatten_aggregate_argument (type, fields, true, false);
!   riscv_aggregate_field_info_t new_info;
!   new_info = riscv_parse_aggregate_field_info (fields, n_new);
  
!   bool values_changed = old_info.num_fpr != new_info.num_fpr
! 			|| old_info.num_gpr != new_info.num_gpr;
!   bool old_is_one_one = old_info.num_fpr == 1 && old_info.num_gpr == 1;
!   bool new_is_one_one = new_info.num_fpr == 1 && new_info.num_gpr == 1;
! 
!   if (values_changed
!       && (old_is_one_one || new_is_one_one)
!       && warned == 0)
      {
        warning (OPT_Wpsabi, "ABI for flattened struct with zero-length "
  			   "bit-fields changed in GCC 10");
        warned = 1;
      }
  
!   /* ABI with fixing flatten empty union.  */
!   int n_new2 = riscv_flatten_aggregate_argument (type, fields, true, true);
!   riscv_aggregate_field_info_t new2_info;
!   new2_info = riscv_parse_aggregate_field_info (fields, n_new2);
! 
!   values_changed = new_info.num_fpr != new2_info.num_fpr
! 		   || new_info.num_gpr != new2_info.num_gpr;
!   bool new2_is_one_one = new2_info.num_fpr == 1 && new2_info.num_gpr == 1;
! 
!   if (values_changed
!       && (new_is_one_one || new2_is_one_one)
!       && warned == 0)
!     {
!       warning (OPT_Wpsabi, "ABI for flattened empty union and zero "
! 	       "length array changed in GCC 16");
!       warned = 1;
!     }
! 
!   return new2_is_one_one;
  }
  
  /* Return the representation of an argument passed or returned in an FPR
*************** riscv_pass_aggregate_in_vr (struct riscv
*** 6466,6472 ****
    riscv_aggregate_field fields[8];
    unsigned int abi_vlen = riscv_get_cc_abi_vlen (cum->variant_cc);
    int i;
!   int n = riscv_flatten_aggregate_argument (type, fields, true,
  					    /* vls_p */ true, abi_vlen);
  
    if (n == -1)
--- 6595,6601 ----
    riscv_aggregate_field fields[8];
    unsigned int abi_vlen = riscv_get_cc_abi_vlen (cum->variant_cc);
    int i;
!   int n = riscv_flatten_aggregate_argument (type, fields, true, true,
  					    /* vls_p */ true, abi_vlen);
  
    if (n == -1)
diff -Nrcpad gcc-16-20251102/gcc/config/riscv/riscv.md gcc-16-20251109/gcc/config/riscv/riscv.md
*** gcc-16-20251102/gcc/config/riscv/riscv.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/riscv/riscv.md	Sun Nov  9 22:32:47 2025
***************
*** 3752,3757 ****
--- 3752,3808 ----
    [(set_attr "type" "slt")
     (set_attr "mode" "<X:MODE>")])
  
+ ;; We can sometimes do better for unsigned comparisons against
+ ;; values where there's a run of 1s in the LSBs.
+ ;;
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+        (gtu:X (match_operand:X 1 "register_operand")
+ 	      (match_operand 2 "const_int_operand")))
+    (clobber (match_operand:X 3 "register_operand"))]
+   "exact_log2 (INTVAL (operands[2]) + 1) >= 0"
+   [(set (match_dup 3) (lshiftrt:X (match_dup 1) (match_dup 2)))
+    (set (match_dup 0) (ne:X (match_dup 3) (const_int 0)))]
+ { operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2]) + 1)); })
+ 
+ (define_split
+   [(set (match_operand:X 0 "register_operand")
+        (leu:X (match_operand:X 1 "register_operand")
+ 	      (match_operand 2 "const_int_operand")))
+    (clobber (match_operand:X 3 "register_operand"))]
+   "exact_log2 (INTVAL (operands[2]) + 1) >= 0"
+   [(set (match_dup 3) (lshiftrt:X (match_dup 1) (match_dup 2)))
+    (set (match_dup 0) (eq:X (match_dup 3) (const_int 0)))]
+ { operands[2] = GEN_INT (exact_log2 (INTVAL (operands[2]) + 1)); })
+ 
+ ;; Alternate forms that are ultimately just sltiu
+ (define_insn ""
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(eq:X (zero_extract:X (match_operand:X 1 "register_operand" "r")
+ 			      (match_operand 2 "const_int_operand")
+ 			      (match_operand 3 "const_int_operand"))
+ 	      (const_int 0)))]
+   "(INTVAL (operands[3]) < 11
+     && INTVAL (operands[2]) + INTVAL (operands[3]) == BITS_PER_WORD)"
+ {
+   operands[2] = GEN_INT (HOST_WIDE_INT_1U << INTVAL (operands[3]));
+   return "sltiu\t%0,%1,%2";
+ }
+   [(set_attr "type" "slt")
+    (set_attr "mode" "<X:MODE>")])
+ 
+ (define_insn ""
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(eq:X (lshiftrt:X (match_operand:X 1 "register_operand" "r")
+ 			  (match_operand 2 "const_int_operand"))
+ 	      (const_int 0)))]
+   "INTVAL (operands[2]) < 11"
+ {
+   operands[2] = GEN_INT (HOST_WIDE_INT_1U << INTVAL (operands[2]));
+   return "sltiu\t%0,%1,%2";
+ }
+   [(set_attr "type" "slt")
+    (set_attr "mode" "<X:MODE>")])
  ;;
  ;;  ....................
  ;;
diff -Nrcpad gcc-16-20251102/gcc/config/riscv/vector.md gcc-16-20251109/gcc/config/riscv/vector.md
*** gcc-16-20251102/gcc/config/riscv/vector.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/riscv/vector.md	Sun Nov  9 22:32:47 2025
***************
*** 9044,9049 ****
--- 9044,9099 ----
      riscv_vector::prepare_ternary_operands (operands);
    })
  
+ (define_insn "*pred_widen_mul_plus_u_vx<mode>_undef"
+   [(set (match_operand:VWEXTI                   0 "register_operand"      "=&vr")
+ 	(if_then_else:VWEXTI
+ 	  (unspec:<VM>
+ 	    [(match_operand:<VM>                1 "vector_mask_operand"   "vmWc1")
+ 	     (match_operand                     6 "vector_length_operand" "  rvl")
+ 	     (match_operand                     7 "const_int_operand"     "    i")
+ 	     (match_operand                     8 "const_int_operand"     "    i")
+ 	     (match_operand                     9 "const_int_operand"     "    i")
+ 	     (reg:SI VL_REGNUM)
+ 	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
+ 	  (plus:VWEXTI
+ 	    (mult:VWEXTI
+ 	      (zero_extend:VWEXTI
+ 		(vec_duplicate:<V_DOUBLE_TRUNC>
+ 		  (match_operand:<VSUBEL>       3 "register_operand"      "   rJ")))
+ 	      (zero_extend:VWEXTI
+ 		(match_operand:<V_DOUBLE_TRUNC> 4 "register_operand"      "   vr")))
+ 	    (match_operand:VWEXTI               5 "register_operand"      "    0"))
+ 	  (match_operand:VWEXTI                 2 "vector_undef_operand")))]
+   "TARGET_VECTOR"
+   "vwmaccu.vx\t%0,%z3,%4%p1"
+   [(set_attr "type" "vimuladd")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_expand "@pred_widen_mul_plus_u_vx<mode>"
+   [(set (match_operand:VWEXTI                   0 "register_operand")
+ 	(if_then_else:VWEXTI
+ 	  (unspec:<VM>
+ 	    [(match_operand:<VM>                1 "vector_mask_operand")
+ 	     (match_operand                     6 "vector_length_operand")
+ 	     (match_operand                     7 "const_int_operand")
+ 	     (match_operand                     8 "const_int_operand")
+ 	     (match_operand                     9 "const_int_operand")
+ 	     (reg:SI VL_REGNUM)
+ 	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
+ 	  (plus:VWEXTI
+ 	    (mult:VWEXTI
+ 	      (zero_extend:VWEXTI
+ 		(vec_duplicate:<V_DOUBLE_TRUNC>
+ 		  (match_operand:<VSUBEL>       2 "register_operand")))
+ 	      (zero_extend:VWEXTI
+ 		(match_operand:<V_DOUBLE_TRUNC> 3 "register_operand")))
+ 	    (match_operand:VWEXTI               4 "register_operand"))
+ 	  (match_operand:VWEXTI                 5 "vector_merge_operand")))]
+   "TARGET_VECTOR"
+   {
+     riscv_vector::prepare_ternary_operands (operands);
+   })
+ 
  (include "autovec.md")
  (include "autovec-opt.md")
  (include "sifive-vector.md")
diff -Nrcpad gcc-16-20251102/gcc/config/xtensa/xtensa.md gcc-16-20251109/gcc/config/xtensa/xtensa.md
*** gcc-16-20251102/gcc/config/xtensa/xtensa.md	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/config/xtensa/xtensa.md	Sun Nov  9 22:32:47 2025
***************
*** 103,115 ****
  (define_code_attr m_float [(float "float") (unsigned_float "ufloat")])
  (define_code_attr s_float [(float "") (unsigned_float "uns")])
  
! ;; This iterator and attribute allow FP-to-integer rounding of two types
  ;; to be generated from one template.
! (define_int_iterator ANY_ROUND [UNSPEC_CEIL UNSPEC_FLOOR UNSPEC_ROUND])
  (define_int_attr m_round [(UNSPEC_CEIL "ceil") (UNSPEC_FLOOR "floor")
  			  (UNSPEC_ROUND "round")])
- (define_int_attr c_round [(UNSPEC_CEIL "1") (UNSPEC_FLOOR "1")
- 			  (UNSPEC_ROUND "flag_unsafe_math_optimizations")])
  
  
  ;; Attributes.
--- 103,114 ----
  (define_code_attr m_float [(float "float") (unsigned_float "ufloat")])
  (define_code_attr s_float [(float "") (unsigned_float "uns")])
  
! ;; This iterator and attribute allow FP-to-integer rounding of three types
  ;; to be generated from one template.
! (define_int_iterator ANY_ROUND [UNSPEC_CEIL UNSPEC_FLOOR
! 				(UNSPEC_ROUND "flag_unsafe_math_optimizations")])
  (define_int_attr m_round [(UNSPEC_CEIL "ceil") (UNSPEC_FLOOR "floor")
  			  (UNSPEC_ROUND "round")])
  
  
  ;; Attributes.
***************
*** 1174,1180 ****
  (define_insn "l<m_round>sfsi2"
    [(set (match_operand:SI 0 "register_operand" "=a")
  	(unspec:SI [(match_operand:SF 1 "register_operand" "f")] ANY_ROUND))]
!   "TARGET_HARD_FLOAT && <c_round>"
    "<m_round>.s\t%0, %1, 0"
    [(set_attr "type"	"fconv")
     (set_attr "mode"	"SF")
--- 1173,1179 ----
  (define_insn "l<m_round>sfsi2"
    [(set (match_operand:SI 0 "register_operand" "=a")
  	(unspec:SI [(match_operand:SF 1 "register_operand" "f")] ANY_ROUND))]
!   "TARGET_HARD_FLOAT"
    "<m_round>.s\t%0, %1, 0"
    [(set_attr "type"	"fconv")
     (set_attr "mode"	"SF")
***************
*** 1184,1190 ****
    [(set (match_operand:SI 0 "register_operand" "=a")
  	(unspec:SI [(plus:SF (match_operand:SF 1 "register_operand" "f")
  			     (match_dup 1))] ANY_ROUND))]
!   "TARGET_HARD_FLOAT && <c_round>"
    "<m_round>.s\t%0, %1, 1"
    [(set_attr "type"	"fconv")
     (set_attr "mode"	"SF")
--- 1183,1189 ----
    [(set (match_operand:SI 0 "register_operand" "=a")
  	(unspec:SI [(plus:SF (match_operand:SF 1 "register_operand" "f")
  			     (match_dup 1))] ANY_ROUND))]
!   "TARGET_HARD_FLOAT"
    "<m_round>.s\t%0, %1, 1"
    [(set_attr "type"	"fconv")
     (set_attr "mode"	"SF")
***************
*** 1194,1200 ****
    [(set (match_operand:SI 0 "register_operand" "=a")
  	(unspec:SI [(mult:SF (match_operand:SF 1 "register_operand" "f")
  			     (match_operand:SF 2 "fix_scaling_operand" ""))] ANY_ROUND))]
!   "TARGET_HARD_FLOAT && <c_round>"
    "<m_round>.s\t%0, %1, %U2"
    [(set_attr "type"	"fconv")
     (set_attr "mode"	"SF")
--- 1193,1199 ----
    [(set (match_operand:SI 0 "register_operand" "=a")
  	(unspec:SI [(mult:SF (match_operand:SF 1 "register_operand" "f")
  			     (match_operand:SF 2 "fix_scaling_operand" ""))] ANY_ROUND))]
!   "TARGET_HARD_FLOAT"
    "<m_round>.s\t%0, %1, %U2"
    [(set_attr "type"	"fconv")
     (set_attr "mode"	"SF")
diff -Nrcpad gcc-16-20251102/gcc/config.gcc gcc-16-20251109/gcc/config.gcc
*** gcc-16-20251102/gcc/config.gcc	Sun Nov  2 22:32:19 2025
--- gcc-16-20251109/gcc/config.gcc	Sun Nov  9 22:32:45 2025
*************** case "${target}" in
*** 5118,5124 ****
  		;;
  
  	loongarch*-*)
! 		supported_defaults="abi arch tune fpu simd multilib-default strict-align-lib tls"
  
  		# Local variables
  		unset \
--- 5118,5124 ----
  		;;
  
  	loongarch*-*)
! 		supported_defaults="abi arch tune fpu simd multilib-default strict-align-lib tls cmodel"
  
  		# Local variables
  		unset \
*************** case "${target}" in
*** 5539,5544 ****
--- 5539,5560 ----
  		# Remove the excessive appending comma.
  		loongarch_multilib_list_c=${loongarch_multilib_list_c%,}
  		loongarch_multilib_list_make=${loongarch_multilib_list_make%,}
+ 
+ 		# Handle --with-cmodel.
+ 		# Make sure --with-cmodel is valid.  If it was not specified,
+ 		# use medium as the default value.
+ 		case "${with_cmodel}" in
+ 		"" | medium)
+ 			tm_defines="${tm_defines} TARGET_DEFAULT_CMODEL=CMODEL_MEDIUM"
+ 			;;
+ 		normal)
+ 			tm_defines="${tm_defines} TARGET_DEFAULT_CMODEL=CMODEL_NORMAL"
+ 			;;
+ 		*)
+ 			echo "invalid option for --with-cmodel: '${with_cmodel}', available values are 'medium' and 'normal'" 1>&2
+ 			exit 1
+ 			;;
+ 		esac
  		;;
  
  	nds32*-*-*)
diff -Nrcpad gcc-16-20251102/gcc/configure gcc-16-20251109/gcc/configure
*** gcc-16-20251102/gcc/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/gcc/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 16498,16512 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 16498,16504 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 16598,16619 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 16590,16620 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 16705,16746 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 16706,16731 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 16832,16856 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 16817,16855 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 21873,21879 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21876 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21872,21878 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21875 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 21979,21985 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21982 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21978,21984 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21981 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/gcc/cp/ChangeLog gcc-16-20251109/gcc/cp/ChangeLog
*** gcc-16-20251102/gcc/cp/ChangeLog	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/cp/ChangeLog	Sun Nov  9 22:32:47 2025
***************
*** 1,3 ****
--- 1,81 ----
+ 2025-11-05  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121574
+ 	* cp-tree.h (instantiating_tu_local_entity): Declare.
+ 	* module.cc (is_tu_local_entity): Extract from depset::hash.
+ 	(is_tu_local_value): Likewise.
+ 	(has_tu_local_tmpl_arg): Likewise.
+ 	(depset::hash::is_tu_local_entity): Remove.
+ 	(depset::hash::has_tu_local_tmpl_arg): Remove.
+ 	(depset::hash::is_tu_local_value): Remove.
+ 	(instantiating_tu_local_entity): New function.
+ 	(depset::hash::add_binding_entity): No longer go through
+ 	depset::hash to check is_tu_local_entity.
+ 	* pt.cc (complain_about_tu_local_entity): Remove.
+ 	(tsubst): Use instantiating_tu_local_entity.
+ 	(tsubst_expr): Likewise.
+ 
+ 2025-11-05  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121574
+ 	* module.cc (depset::disc_bits): Replace 'DB_REFS_TU_LOCAL_BIT'
+ 	and 'DB_EXPOSURE_BIT' with new four flags
+ 	'DB_{REF,EXPOSE}_{GLOBAL,PURVIEW}_BIT'.
+ 	(depset::is_tu_local): Support checking either for only purview
+ 	TU-local entities or any entity described TU-local by standard.
+ 	(depset::refs_tu_local): Likewise.
+ 	(depset::is_exposure): Likewise.
+ 	(depset::hash::make_dependency): A constant initialized to a
+ 	TU-local variable is always considered a purview exposure.
+ 	(is_exposure_of_member_type): Adjust sanity checks to handle if
+ 	we ever relax requirements for TU-local types.
+ 	(depset::hash::add_dependency): Differentiate referencing
+ 	purview or GMF TU-local entities.
+ 	(depset::hash::diagnose_bad_internal_ref): New function.
+ 	(depset::hash::diagnose_template_names_tu_local): New function.
+ 	(depset::hash::finalize_dependencies): Handle new warnings that
+ 	might be needed for GMF TU-local entities.
+ 
+ 2025-11-04  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122253
+ 	* decl2.cc (min_vis_expr_r): Don't mark no-linkage declarations
+ 	as VISIBILITY_ANON.
+ 
+ 2025-11-04  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* parser.cc (enum non_integral_constant): Fix typo
+ 	"an decrement" -> "a decrement" in comment.
+ 	(cp_parser_non_integral_constant_expression): Likewise in error
+ 	message.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* name-lookup.cc (name_lookup::adl_class_fns): Include all
+ 	namespace-scope friends.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* name-lookup.cc (pushdecl): Discard built-in sooner.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* module.cc (trees_in::decl_value): Don't add an instantiation to
+ 	CLASSTYPE_MEMBER_VEC.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* module.cc (module_state::write_namespaces): Handle
+ 	TREE_DEPRECATED.
+ 	(module_state::read_namespaces): Likewise.
+ 
+ 2025-11-02  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122421
+ 	* module.cc (trees_in::read_var_def): Don't handle class-scope
+ 	variables anymore.
+ 	(trees_in::read_class_def): Handle them here instead.
+ 
  2025-11-01  Nathaniel Shead  <nathanieloshead@gmail.com>
  
  	PR c++/122381
diff -Nrcpad gcc-16-20251102/gcc/cp/cp-tree.h gcc-16-20251109/gcc/cp/cp-tree.h
*** gcc-16-20251102/gcc/cp/cp-tree.h	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/cp/cp-tree.h	Sun Nov  9 22:32:47 2025
*************** extern module_state *get_module (tree na
*** 7745,7750 ****
--- 7745,7752 ----
  				 bool partition = false);
  extern bool module_may_redeclare (tree olddecl, tree newdecl = NULL);
  
+ extern bool instantiating_tu_local_entity (tree decl);
+ 
  extern bool module_global_init_needed ();
  extern bool module_determine_import_inits ();
  extern void module_add_import_initializers ();
diff -Nrcpad gcc-16-20251102/gcc/cp/decl2.cc gcc-16-20251109/gcc/cp/decl2.cc
*** gcc-16-20251102/gcc/cp/decl2.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/cp/decl2.cc	Sun Nov  9 22:32:47 2025
*************** min_vis_expr_r (tree *tp, int */*walk_su
*** 2885,2891 ****
  	  break;
  	}
      addressable:
!       if (! TREE_PUBLIC (t))
  	tpvis = VISIBILITY_ANON;
        else
  	tpvis = DECL_VISIBILITY (t);
--- 2885,2896 ----
  	  break;
  	}
      addressable:
!       if (decl_linkage (t) == lk_none)
! 	tpvis = type_visibility (TREE_TYPE (t));
!       /* Decls that have had their visibility constrained will report
! 	 as external linkage, but we still want to transitively constrain
! 	 if we refer to them, so just check TREE_PUBLIC instead.  */
!       else if (!TREE_PUBLIC (t))
  	tpvis = VISIBILITY_ANON;
        else
  	tpvis = DECL_VISIBILITY (t);
diff -Nrcpad gcc-16-20251102/gcc/cp/module.cc gcc-16-20251109/gcc/cp/module.cc
*** gcc-16-20251102/gcc/cp/module.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/cp/module.cc	Sun Nov  9 22:32:47 2025
*************** private:
*** 2365,2374 ****
      DB_KIND_BITS = EK_BITS,
      DB_DEFN_BIT = DB_KIND_BIT + DB_KIND_BITS,
      DB_IS_PENDING_BIT,		/* Is a maybe-pending entity.  */
!     DB_TU_LOCAL_BIT,		/* It is a TU-local entity.  */
!     DB_REFS_TU_LOCAL_BIT,	/* Refers to a TU-local entity (but is not
! 				   necessarily an exposure.)  */
!     DB_EXPOSURE_BIT,		/* Exposes a TU-local entity.  */
      DB_IMPORTED_BIT,		/* An imported entity.  */
      DB_UNREACHED_BIT,		/* A yet-to-be reached entity.  */
      DB_MAYBE_RECURSIVE_BIT,	/* An entity maybe in a recursive cluster.  */
--- 2365,2375 ----
      DB_KIND_BITS = EK_BITS,
      DB_DEFN_BIT = DB_KIND_BIT + DB_KIND_BITS,
      DB_IS_PENDING_BIT,		/* Is a maybe-pending entity.  */
!     DB_TU_LOCAL_BIT,		/* Is a TU-local entity.  */
!     DB_REF_GLOBAL_BIT,		/* Refers to a GMF TU-local entity.  */
!     DB_REF_PURVIEW_BIT,		/* Refers to a purview TU-local entity.  */
!     DB_EXPOSE_GLOBAL_BIT,	/* Exposes a GMF TU-local entity.  */
!     DB_EXPOSE_PURVIEW_BIT,	/* Exposes a purview TU-local entity.  */
      DB_IMPORTED_BIT,		/* An imported entity.  */
      DB_UNREACHED_BIT,		/* A yet-to-be reached entity.  */
      DB_MAYBE_RECURSIVE_BIT,	/* An entity maybe in a recursive cluster.  */
*************** public:
*** 2458,2476 ****
  	    || (get_entity_kind () == EK_DECL
  		&& get_flag_bit<DB_IS_PENDING_BIT> ()));
    }
  public:
!   bool is_tu_local () const
    {
!     return get_flag_bit<DB_TU_LOCAL_BIT> ();
    }
!   bool refs_tu_local () const
    {
!     return get_flag_bit<DB_REFS_TU_LOCAL_BIT> ();
    }
!   bool is_exposure () const
    {
!     return get_flag_bit<DB_EXPOSURE_BIT> ();
    }
    bool is_import () const
    {
      return get_flag_bit<DB_IMPORTED_BIT> ();
--- 2459,2498 ----
  	    || (get_entity_kind () == EK_DECL
  		&& get_flag_bit<DB_IS_PENDING_BIT> ()));
    }
+ 
  public:
!   /* Only consider global module entities as being TU-local
!      when STRICT is set; otherwise, as an extension we support
!      emitting declarations referencing TU-local GMF entities
!      (and only check purview entities), to assist in migration.  */
!   bool is_tu_local (bool strict = false) const
    {
!     /* Non-strict is only intended for migration purposes, so
!        for simplicity's sake we only care about whether this is
!        a non-purview variable or function at namespace scope;
!        these are the most common cases (coming from C), and
!        that way we don't have to care about diagnostics for
!        nested types and so forth.  */
!     tree inner = STRIP_TEMPLATE (get_entity ());
!     return (get_flag_bit<DB_TU_LOCAL_BIT> ()
! 	    && (strict
! 		|| !VAR_OR_FUNCTION_DECL_P (inner)
! 		|| !NAMESPACE_SCOPE_P (inner)
! 		|| (DECL_LANG_SPECIFIC (inner)
! 		    && DECL_MODULE_PURVIEW_P (inner))));
    }
!   bool refs_tu_local (bool strict = false) const
    {
!     return (get_flag_bit<DB_REF_PURVIEW_BIT> ()
! 	    || (strict && get_flag_bit <DB_REF_GLOBAL_BIT> ()));
    }
!   bool is_exposure (bool strict = false) const
    {
!     return (get_flag_bit<DB_EXPOSE_PURVIEW_BIT> ()
! 	    || (strict && get_flag_bit <DB_EXPOSE_GLOBAL_BIT> ()));
    }
+ 
+ public:
    bool is_import () const
    {
      return get_flag_bit<DB_IMPORTED_BIT> ();
*************** public:
*** 2642,2652 ****
      void add_namespace_context (depset *, tree ns);
  
    private:
-     bool has_tu_local_tmpl_arg (tree decl, tree args, bool explain);
-     bool is_tu_local_entity (tree decl, bool explain = false);
-     bool is_tu_local_value (tree decl, tree expr, bool explain = false);
- 
-   private:
      static bool add_binding_entity (tree, WMB_Flags, void *);
  
    public:
--- 2664,2669 ----
*************** public:
*** 2662,2667 ****
--- 2679,2688 ----
      void find_dependencies (module_state *);
      bool finalize_dependencies ();
      vec<depset *> connect ();
+ 
+   private:
+     bool diagnose_bad_internal_ref (depset *dep, bool strict = false);
+     bool diagnose_template_names_tu_local (depset *dep, bool strict = false);
    };
  
  public:
*************** trees_in::decl_value ()
*** 8996,9006 ****
  	  dump (dumper::TREE) && dump ("CDTOR %N is %scloned",
  				       decl, cloned_p ? "" : "not ");
  	  if (cloned_p)
! 	    build_cdtor_clones (decl, flags & 2, flags & 4,
! 				/* Update the member vec, if there is
! 				   one (we're in a different cluster
! 				   to the class defn).  */
! 				CLASSTYPE_MEMBER_VEC (DECL_CONTEXT (decl)));
  	}
      }
  
--- 9017,9030 ----
  	  dump (dumper::TREE) && dump ("CDTOR %N is %scloned",
  				       decl, cloned_p ? "" : "not ");
  	  if (cloned_p)
! 	    {
! 	      /* Update the member vec, if there is one (we're in a different
! 		 cluster to the class defn) and this isn't a primary template
! 		 specialization (as in tsubst_function_decl).  */
! 	      bool up = (CLASSTYPE_MEMBER_VEC (DECL_CONTEXT (decl))
! 			 && !primary_template_specialization_p (decl));
! 	      build_cdtor_clones (decl, flags & 2, flags & 4, up);
! 	    }
  	}
      }
  
*************** depset::hash::find_binding (tree ctx, tr
*** 13905,13915 ****
    return slot ? *slot : NULL;
  }
  
  /* Returns true if DECL is a TU-local entity, as defined by [basic.link].
     If EXPLAIN is true, emit an informative note about why DECL is TU-local.  */
  
! bool
! depset::hash::is_tu_local_entity (tree decl, bool explain/*=false*/)
  {
    gcc_checking_assert (DECL_P (decl));
    location_t loc = DECL_SOURCE_LOCATION (decl);
--- 13929,13943 ----
    return slot ? *slot : NULL;
  }
  
+ static bool is_tu_local_entity (tree decl, bool explain = false);
+ static bool is_tu_local_value (tree decl, tree expr, bool explain = false);
+ static bool has_tu_local_tmpl_arg (tree decl, tree args, bool explain);
+ 
  /* Returns true if DECL is a TU-local entity, as defined by [basic.link].
     If EXPLAIN is true, emit an informative note about why DECL is TU-local.  */
  
! static bool
! is_tu_local_entity (tree decl, bool explain/*=false*/)
  {
    gcc_checking_assert (DECL_P (decl));
    location_t loc = DECL_SOURCE_LOCATION (decl);
*************** depset::hash::is_tu_local_entity (tree d
*** 14075,14082 ****
  /* Helper for is_tu_local_entity.  Returns true if one of the ARGS of
     DECL is TU-local.  Emits an explanation if EXPLAIN is true.  */
  
! bool
! depset::hash::has_tu_local_tmpl_arg (tree decl, tree args, bool explain)
  {
    if (!args || TREE_CODE (args) != TREE_VEC)
      return false;
--- 14103,14110 ----
  /* Helper for is_tu_local_entity.  Returns true if one of the ARGS of
     DECL is TU-local.  Emits an explanation if EXPLAIN is true.  */
  
! static bool
! has_tu_local_tmpl_arg (tree decl, tree args, bool explain)
  {
    if (!args || TREE_CODE (args) != TREE_VEC)
      return false;
*************** depset::hash::has_tu_local_tmpl_arg (tre
*** 14125,14132 ****
  /* Returns true if EXPR (part of the initializer for DECL) is a TU-local value
     or object.  Emits an explanation if EXPLAIN is true.  */
  
! bool
! depset::hash::is_tu_local_value (tree decl, tree expr, bool explain)
  {
    if (!expr)
      return false;
--- 14153,14160 ----
  /* Returns true if EXPR (part of the initializer for DECL) is a TU-local value
     or object.  Emits an explanation if EXPLAIN is true.  */
  
! static bool
! is_tu_local_value (tree decl, tree expr, bool explain/*=false*/)
  {
    if (!expr)
      return false;
*************** depset::hash::is_tu_local_value (tree de
*** 14179,14184 ****
--- 14207,14269 ----
    return false;
  }
  
+ /* Complains if DECL is a TU-local entity imported from a named module.
+    Returns TRUE if instantiation should fail.  */
+ 
+ bool
+ instantiating_tu_local_entity (tree decl)
+ {
+   if (!modules_p ())
+     return false;
+ 
+   if (TREE_CODE (decl) == TU_LOCAL_ENTITY)
+     {
+       auto_diagnostic_group d;
+       error ("instantiation exposes TU-local entity %qD",
+ 	     TU_LOCAL_ENTITY_NAME (decl));
+       inform (TU_LOCAL_ENTITY_LOCATION (decl), "declared here");
+       return true;
+     }
+ 
+   /* Currently, only TU-local variables and functions will be emitted
+      from named modules.  */
+   if (!VAR_OR_FUNCTION_DECL_P (decl))
+     return false;
+ 
+   /* From this point we will only be emitting warnings; if we're not
+      warning about this case then there's no need to check further.  */
+   if (!warn_expose_global_module_tu_local
+       || !warning_enabled_at (DECL_SOURCE_LOCATION (decl),
+ 			      OPT_Wexpose_global_module_tu_local))
+     return false;
+ 
+   if (!is_tu_local_entity (decl))
+     return false;
+ 
+   tree origin = get_originating_module_decl (decl);
+   if (!DECL_LANG_SPECIFIC (origin)
+       || !DECL_MODULE_IMPORT_P (origin))
+     return false;
+ 
+   /* Referencing TU-local entities from a header is generally OK.
+      We don't have an easy way to detect if this declaration came
+      from a header via a separate named module, but we can just
+      ignore that case for warning purposes.  */
+   unsigned index = import_entity_index (origin);
+   module_state *mod = import_entity_module (index);
+   if (mod->is_header ())
+     return false;
+ 
+   auto_diagnostic_group d;
+   warning (OPT_Wexpose_global_module_tu_local,
+ 	   "instantiation exposes TU-local entity %qD", decl);
+   inform (DECL_SOURCE_LOCATION (decl), "declared here");
+ 
+   /* We treat TU-local entities from the GMF as not actually being
+      TU-local as an extension, so allow instantation to proceed.  */
+   return false;
+ }
+ 
  /* DECL is a newly discovered dependency.  Create the depset, if it
     doesn't already exist.  Add it to the worklist if so.
  
*************** depset::hash::make_dependency (tree decl
*** 14332,14339 ****
  		  if (DECL_DECLARED_CONSTEXPR_P (decl)
  		      || DECL_INLINE_VAR_P (decl))
  		    /* A constexpr variable initialized to a TU-local value,
! 		       or an inline value (PR c++/119996), is an exposure.  */
! 		    dep->set_flag_bit<DB_EXPOSURE_BIT> ();
  		}
  	    }
  
--- 14417,14430 ----
  		  if (DECL_DECLARED_CONSTEXPR_P (decl)
  		      || DECL_INLINE_VAR_P (decl))
  		    /* A constexpr variable initialized to a TU-local value,
! 		       or an inline value (PR c++/119996), is an exposure.
! 
! 		       For simplicity, we don't support "non-strict" TU-local
! 		       values: even if the TU-local entity we refer to in the
! 		       initialiser is in the GMF, we still won't consider this
! 		       valid in constant expressions in other TUs, and so
! 		       complain accordingly.  */
! 		    dep->set_flag_bit<DB_EXPOSE_PURVIEW_BIT> ();
  		}
  	    }
  
*************** depset::hash::make_dependency (tree decl
*** 14423,14433 ****
  static bool
  is_exposure_of_member_type (depset *source, depset *ref)
  {
!   gcc_checking_assert (source->refs_tu_local () && ref->is_tu_local ());
    tree source_entity = STRIP_TEMPLATE (source->get_entity ());
    tree ref_entity = STRIP_TEMPLATE (ref->get_entity ());
  
!   if (source_entity
        && ref_entity
        && DECL_IMPLICIT_TYPEDEF_P (source_entity)
        && DECL_IMPLICIT_TYPEDEF_P (ref_entity)
--- 14514,14526 ----
  static bool
  is_exposure_of_member_type (depset *source, depset *ref)
  {
!   gcc_checking_assert (source->refs_tu_local (/*strict=*/true)
! 		       && ref->is_tu_local (/*strict=*/true));
    tree source_entity = STRIP_TEMPLATE (source->get_entity ());
    tree ref_entity = STRIP_TEMPLATE (ref->get_entity ());
  
!   if (!source->is_tu_local (/*strict=*/true)
!       && source_entity
        && ref_entity
        && DECL_IMPLICIT_TYPEDEF_P (source_entity)
        && DECL_IMPLICIT_TYPEDEF_P (ref_entity)
*************** depset::hash::add_dependency (depset *de
*** 14450,14460 ****
    gcc_checking_assert (current && !is_key_order ());
    current->deps.safe_push (dep);
  
!   if (dep->is_tu_local ())
      {
!       current->set_flag_bit<DB_REFS_TU_LOCAL_BIT> ();
        if (!ignore_tu_local && !is_exposure_of_member_type (current, dep))
! 	current->set_flag_bit<DB_EXPOSURE_BIT> ();
      }
  
    if (current->get_entity_kind () == EK_USING
--- 14543,14562 ----
    gcc_checking_assert (current && !is_key_order ());
    current->deps.safe_push (dep);
  
!   if (dep->is_tu_local (/*strict=*/true))
      {
!       if (dep->is_tu_local ())
! 	current->set_flag_bit<DB_REF_PURVIEW_BIT> ();
!       else
! 	current->set_flag_bit<DB_REF_GLOBAL_BIT> ();
! 
        if (!ignore_tu_local && !is_exposure_of_member_type (current, dep))
! 	{
! 	  if (dep->is_tu_local ())
! 	    current->set_flag_bit<DB_EXPOSE_PURVIEW_BIT> ();
! 	  else
! 	    current->set_flag_bit<DB_EXPOSE_GLOBAL_BIT> ();
! 	}
      }
  
    if (current->get_entity_kind () == EK_USING
*************** depset::hash::add_binding_entity (tree d
*** 14578,14584 ****
  	return false;
  
        bool internal_decl = false;
!       if (!header_module_p () && data->hash->is_tu_local_entity (decl))
  	{
  	  /* A TU-local entity.  For ADL we still need to create bindings
  	     for internal-linkage functions attached to a named module.  */
--- 14680,14686 ----
  	return false;
  
        bool internal_decl = false;
!       if (!header_module_p () && is_tu_local_entity (decl))
  	{
  	  /* A TU-local entity.  For ADL we still need to create bindings
  	     for internal-linkage functions attached to a named module.  */
*************** template_has_explicit_inst (tree tmpl)
*** 15339,15344 ****
--- 15441,15568 ----
    return false;
  }
  
+ /* Complain about DEP that exposes a TU-local entity.
+ 
+    If STRICT, DEP only referenced entities from the GMF.  Returns TRUE
+    if we explained anything.  */
+ 
+ bool
+ depset::hash::diagnose_bad_internal_ref (depset *dep, bool strict)
+ {
+   tree decl = dep->get_entity ();
+ 
+   /* Don't need to walk if we're not going to be emitting
+      any diagnostics anyway.  */
+   if (strict && !warning_enabled_at (DECL_SOURCE_LOCATION (decl),
+ 				     OPT_Wexpose_global_module_tu_local))
+     return false;
+ 
+   for (depset *rdep : dep->deps)
+     if (!rdep->is_binding () && rdep->is_tu_local (strict)
+ 	&& !is_exposure_of_member_type (dep, rdep))
+       {
+ 	// FIXME:QOI Better location information?  We're
+ 	// losing, so it doesn't matter about efficiency.
+ 	tree exposed = rdep->get_entity ();
+ 	auto_diagnostic_group d;
+ 	if (strict)
+ 	  {
+ 	    /* Allow suppressing the warning from the point of declaration
+ 	       of the otherwise-exposed decl, for cases we know that
+ 	       exposures will never be 'bad'.  */
+ 	    if (warning_enabled_at (DECL_SOURCE_LOCATION (exposed),
+ 				    OPT_Wexpose_global_module_tu_local)
+ 		&& pedwarn (DECL_SOURCE_LOCATION (decl),
+ 			    OPT_Wexpose_global_module_tu_local,
+ 			    "%qD exposes TU-local entity %qD", decl, exposed))
+ 	      {
+ 		bool informed = is_tu_local_entity (exposed, /*explain=*/true);
+ 		gcc_checking_assert (informed);
+ 		return true;
+ 	      }
+ 	  }
+ 	else
+ 	  {
+ 	    error_at (DECL_SOURCE_LOCATION (decl),
+ 		      "%qD exposes TU-local entity %qD", decl, exposed);
+ 	    bool informed = is_tu_local_entity (exposed, /*explain=*/true);
+ 	    gcc_checking_assert (informed);
+ 	    if (dep->is_tu_local (/*strict=*/true))
+ 	      inform (DECL_SOURCE_LOCATION (decl),
+ 		      "%qD is also TU-local but has been exposed elsewhere",
+ 		      decl);
+ 	    return true;
+ 	  }
+       }
+ 
+   return false;
+ }
+ 
+ /* Warn about a template DEP that references a TU-local entity.
+ 
+    If STRICT, DEP only referenced entities from the GMF.  Returns TRUE
+    if we explained anything.  */
+ 
+ bool
+ depset::hash::diagnose_template_names_tu_local (depset *dep, bool strict)
+ {
+   tree decl = dep->get_entity ();
+ 
+   /* Don't bother walking if we know we won't be emitting anything.  */
+   if (!warning_enabled_at (DECL_SOURCE_LOCATION (decl),
+ 			   OPT_Wtemplate_names_tu_local)
+       /* Only warn strictly if users haven't silenced this warning here.  */
+       || (strict && !warning_enabled_at (DECL_SOURCE_LOCATION (decl),
+ 					 OPT_Wexpose_global_module_tu_local)))
+     return false;
+ 
+   /* Friend decls in a class body are ignored, but this is harmless:
+      it should not impact any consumers.  */
+   if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl)))
+     return false;
+ 
+   /* We should now only be warning about templates.  */
+   gcc_checking_assert
+     (TREE_CODE (decl) == TEMPLATE_DECL
+      && VAR_OR_FUNCTION_DECL_P (DECL_TEMPLATE_RESULT (decl)));
+ 
+   /* Don't warn if we've seen any explicit instantiation definitions,
+      the intent might be for importers to only use those.  */
+   if (template_has_explicit_inst (decl))
+     return false;
+ 
+   for (depset *rdep : dep->deps)
+     if (!rdep->is_binding () && rdep->is_tu_local (strict))
+       {
+ 	tree ref = rdep->get_entity ();
+ 	auto_diagnostic_group d;
+ 	if (strict)
+ 	  {
+ 	    if (warning_enabled_at (DECL_SOURCE_LOCATION (ref),
+ 				    OPT_Wexpose_global_module_tu_local)
+ 		&& warning_at (DECL_SOURCE_LOCATION (decl),
+ 			       OPT_Wtemplate_names_tu_local,
+ 			       "%qD refers to TU-local entity %qD, which may "
+ 			       "cause issues when instantiating in other TUs",
+ 			       decl, ref))
+ 	      {
+ 		is_tu_local_entity (ref, /*explain=*/true);
+ 		return true;
+ 	      }
+ 	  }
+ 	else if (warning_at (DECL_SOURCE_LOCATION (decl),
+ 			     OPT_Wtemplate_names_tu_local,
+ 			     "%qD refers to TU-local entity %qD and cannot "
+ 			     "be instantiated in other TUs", decl, ref))
+ 	  {
+ 	    is_tu_local_entity (ref, /*explain=*/true);
+ 	    return true;
+ 	  }
+       }
+ 
+   return false;
+ }
+ 
  /* Sort the bindings, issue errors about bad internal refs.  */
  
  bool
*************** depset::hash::finalize_dependencies ()
*** 15363,15392 ****
  	  if (CHECKING_P)
  	    for (depset *entity : dep->deps)
  	      gcc_checking_assert (!entity->is_import ());
  	}
-       else if (dep->is_exposure () && !dep->is_tu_local ())
- 	{
- 	  ok = false;
- 	  bool explained = false;
- 	  tree decl = dep->get_entity ();
  
! 	  for (depset *rdep : dep->deps)
! 	    if (!rdep->is_binding ()
! 		&& rdep->is_tu_local ()
! 		&& !is_exposure_of_member_type (dep, rdep))
! 	      {
! 		// FIXME:QOI Better location information?  We're
! 		// losing, so it doesn't matter about efficiency
! 		tree exposed = rdep->get_entity ();
! 		auto_diagnostic_group d;
! 		error_at (DECL_SOURCE_LOCATION (decl),
! 			  "%qD exposes TU-local entity %qD", decl, exposed);
! 		bool informed = is_tu_local_entity (exposed, /*explain=*/true);
! 		gcc_checking_assert (informed);
! 		explained = true;
! 		break;
! 	      }
  
  	  if (!explained
  	      && VAR_P (decl)
  	      && (DECL_DECLARED_CONSTEXPR_P (decl)
--- 15587,15607 ----
  	  if (CHECKING_P)
  	    for (depset *entity : dep->deps)
  	      gcc_checking_assert (!entity->is_import ());
+ 	  continue;
  	}
  
!       /* Otherwise, we'll check for bad internal refs.
! 	 Don't complain about any references from TU-local entities.  */
!       if (dep->is_tu_local ())
! 	continue;
  
+       if (dep->is_exposure ())
+ 	{
+ 	  bool explained = diagnose_bad_internal_ref (dep);
+ 
+ 	  /* A TU-local variable will always be considered an exposure,
+ 	     so we don't have to worry about strict-only handling.  */
+ 	  tree decl = dep->get_entity ();
  	  if (!explained
  	      && VAR_P (decl)
  	      && (DECL_DECLARED_CONSTEXPR_P (decl)
*************** depset::hash::finalize_dependencies ()
*** 15411,15452 ****
  	      explained = true;
  	    }
  
! 	  /* We should have emitted an error above.  */
  	  gcc_checking_assert (explained);
  	}
-       else if (warn_template_names_tu_local
- 	       && dep->refs_tu_local () && !dep->is_tu_local ())
- 	{
- 	  tree decl = dep->get_entity ();
- 
- 	  /* Friend decls in a class body are ignored, but this is harmless:
- 	     it should not impact any consumers.  */
- 	  if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl)))
- 	    continue;
  
! 	  /* We should now only be warning about templates.  */
! 	  gcc_checking_assert
! 	    (TREE_CODE (decl) == TEMPLATE_DECL
! 	     && VAR_OR_FUNCTION_DECL_P (DECL_TEMPLATE_RESULT (decl)));
  
! 	  /* Don't warn if we've seen any explicit instantiation definitions,
! 	     the intent might be for importers to only use those.  */
! 	  if (template_has_explicit_inst (decl))
! 	    continue;
  
! 	  for (depset *rdep : dep->deps)
! 	    if (!rdep->is_binding () && rdep->is_tu_local ())
! 	      {
! 		tree ref = rdep->get_entity ();
! 		auto_diagnostic_group d;
! 		if (warning_at (DECL_SOURCE_LOCATION (decl),
! 				OPT_Wtemplate_names_tu_local,
! 				"%qD refers to TU-local entity %qD and cannot "
! 				"be instantiated in other TUs", decl, ref))
! 		  is_tu_local_entity (ref, /*explain=*/true);
! 		break;
! 	      }
! 	}
      }
  
    return ok;
--- 15626,15659 ----
  	      explained = true;
  	    }
  
! 	  /* We should have emitted an error above, unless the warning was
! 	     silenced.  */
  	  gcc_checking_assert (explained);
+ 	  ok = false;
+ 	  continue;
  	}
  
!       /* In all other cases, we're just warning (rather than erroring).
! 	 We don't want to do too much warning, so let's just bail after
! 	 the first warning we successfully emit.  */
!       if (warn_expose_global_module_tu_local
! 	  && !dep->is_tu_local (/*strict=*/true)
! 	  && dep->is_exposure (/*strict=*/true)
! 	  && diagnose_bad_internal_ref (dep, /*strict=*/true))
! 	continue;
  
!       if (warn_template_names_tu_local
! 	  && dep->refs_tu_local ()
! 	  && diagnose_template_names_tu_local (dep))
! 	continue;
  
!       if (warn_template_names_tu_local
! 	  && warn_expose_global_module_tu_local
! 	  && !dep->is_tu_local (/*strict=*/true)
! 	  && dep->refs_tu_local (/*strict=*/true)
! 	  && !dep->is_exposure (/*strict=*/true)
! 	  && diagnose_template_names_tu_local (dep, /*strict=*/true))
! 	continue;
      }
  
    return ok;
*************** module_state::write_namespaces (elf_out
*** 17246,17258 ****
  	flags |= 4;
        if (DECL_MODULE_EXPORT_P (ns))
  	flags |= 8;
  
        dump () && dump ("Writing namespace:%u %N%s%s%s%s",
  		       b->cluster, ns,
  		       flags & 1 ? ", public" : "",
  		       flags & 2 ? ", inline" : "",
  		       flags & 4 ? ", purview" : "",
! 		       flags & 8 ? ", export" : "");
        sec.u (b->cluster);
        sec.u (to->name (DECL_NAME (ns)));
        write_namespace (sec, b->deps[0]);
--- 17453,17468 ----
  	flags |= 4;
        if (DECL_MODULE_EXPORT_P (ns))
  	flags |= 8;
+       if (TREE_DEPRECATED (ns))
+ 	flags |= 16;
  
        dump () && dump ("Writing namespace:%u %N%s%s%s%s",
  		       b->cluster, ns,
  		       flags & 1 ? ", public" : "",
  		       flags & 2 ? ", inline" : "",
  		       flags & 4 ? ", purview" : "",
! 		       flags & 8 ? ", export" : "",
! 		       flags & 16 ? ", deprecated" : "");
        sec.u (b->cluster);
        sec.u (to->name (DECL_NAME (ns)));
        write_namespace (sec, b->deps[0]);
*************** module_state::read_namespaces (unsigned
*** 17328,17334 ****
  		       flags & 1 ? ", public" : "",
  		       flags & 2 ? ", inline" : "",
  		       flags & 4 ? ", purview" : "",
! 		       flags & 8 ? ", export" : "");
        bool visible_p = ((flags & 8)
  			|| ((flags & 1)
  			    && (flags & 4)
--- 17538,17545 ----
  		       flags & 1 ? ", public" : "",
  		       flags & 2 ? ", inline" : "",
  		       flags & 4 ? ", purview" : "",
! 		       flags & 8 ? ", export" : "",
! 		       flags & 16 ? ", deprecated" : "");
        bool visible_p = ((flags & 8)
  			|| ((flags & 1)
  			    && (flags & 4)
*************** module_state::read_namespaces (unsigned
*** 17349,17354 ****
--- 17560,17568 ----
  	    DECL_MODULE_EXPORT_P (inner) = true;
  	}
  
+       if (flags & 16)
+ 	TREE_DEPRECATED (inner) = true;
+ 
        if (tags)
  	DECL_ATTRIBUTES (inner)
  	  = tree_cons (get_identifier ("abi_tag"), tags, DECL_ATTRIBUTES (inner));
diff -Nrcpad gcc-16-20251102/gcc/cp/name-lookup.cc gcc-16-20251109/gcc/cp/name-lookup.cc
*** gcc-16-20251102/gcc/cp/name-lookup.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/cp/name-lookup.cc	Sun Nov  9 22:32:47 2025
*************** name_lookup::adl_class_fns (tree type)
*** 1372,1382 ****
  	  {
  	    tree fn = TREE_VALUE (friends);
  
! 	    /* Only interested in global functions with potentially hidden
! 	       (i.e. unqualified) declarations.  */
  	    if (!context)
  	      context = decl_namespace_context (type);
! 	    if (CP_DECL_CONTEXT (fn) != context)
  	      continue;
  
  	    dedup (true);
--- 1372,1385 ----
  	  {
  	    tree fn = TREE_VALUE (friends);
  
! 	    /* Before C++20, ADL just makes hidden friends visible, so we
! 	       only include functions in the same namespace.  After C++20,
! 	       include all namespace-scope functions.  */
  	    if (!context)
  	      context = decl_namespace_context (type);
! 	    if (cxx_dialect < cxx20
! 		? CP_DECL_CONTEXT (fn) != context
! 		: !DECL_NAMESPACE_SCOPE_P (fn))
  	      continue;
  
  	    dedup (true);
*************** pushdecl (tree decl, bool hiding)
*** 4063,4068 ****
--- 4066,4076 ----
  	      }
  	}
  
+       /* Skip a hidden builtin we failed to match already.  There can
+ 	 only be one.  */
+       if (old && anticipated_builtin_p (old))
+ 	old = OVL_CHAIN (old);
+ 
        /* Check for redeclaring an import.  */
        if (slot && *slot && TREE_CODE (*slot) == BINDING_VECTOR)
  	if (tree match
*************** pushdecl (tree decl, bool hiding)
*** 4081,4091 ****
  
        /* We are pushing a new decl.  */
  
-       /* Skip a hidden builtin we failed to match already.  There can
- 	 only be one.  */
-       if (old && anticipated_builtin_p (old))
- 	old = OVL_CHAIN (old);
- 
        if (hiding)
  	; /* Hidden bindings don't shadow anything.  */
        else
--- 4089,4094 ----
diff -Nrcpad gcc-16-20251102/gcc/cp/parser.cc gcc-16-20251109/gcc/cp/parser.cc
*** gcc-16-20251102/gcc/cp/parser.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/cp/parser.cc	Sun Nov  9 22:32:47 2025
*************** enum non_integral_constant {
*** 83,89 ****
    NIC_FUNC_CALL,
    /* an increment */
    NIC_INC,
!   /* an decrement */
    NIC_DEC,
    /* an array reference */
    NIC_ARRAY_REF,
--- 83,89 ----
    NIC_FUNC_CALL,
    /* an increment */
    NIC_INC,
!   /* a decrement */
    NIC_DEC,
    /* an array reference */
    NIC_ARRAY_REF,
*************** cp_parser_non_integral_constant_expressi
*** 3782,3788 ****
  		       "cannot appear in a constant-expression");
  		return true;
  	      case NIC_DEC:
! 		error ("an decrement "
  		       "cannot appear in a constant-expression");
  		return true;
  	      case NIC_ARRAY_REF:
--- 3782,3788 ----
  		       "cannot appear in a constant-expression");
  		return true;
  	      case NIC_DEC:
! 		error ("a decrement "
  		       "cannot appear in a constant-expression");
  		return true;
  	      case NIC_ARRAY_REF:
diff -Nrcpad gcc-16-20251102/gcc/cp/pt.cc gcc-16-20251109/gcc/cp/pt.cc
*** gcc-16-20251102/gcc/cp/pt.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/cp/pt.cc	Sun Nov  9 22:32:47 2025
*************** add_pending_template (tree d)
*** 9941,9957 ****
      pop_tinst_level ();
  }
  
- /* Emit a diagnostic about instantiating a reference to TU-local entity E.  */
- 
- static void
- complain_about_tu_local_entity (tree e)
- {
-   auto_diagnostic_group d;
-   error ("instantiation exposes TU-local entity %qD",
- 	 TU_LOCAL_ENTITY_NAME (e));
-   inform (TU_LOCAL_ENTITY_LOCATION (e), "declared here");
- }
- 
  /* Return a TEMPLATE_ID_EXPR corresponding to the indicated FNS and
     ARGLIST.  Valid choices for FNS are given in the cp-tree.def
     documentation for TEMPLATE_ID_EXPR.  */
--- 9941,9946 ----
*************** tsubst (tree t, tree args, tsubst_flags_
*** 16614,16625 ****
      return t;
  
    /* Any instantiation of a template containing a TU-local entity is an
!      exposure, so always issue a hard error irrespective of complain.  */
!   if (TREE_CODE (t) == TU_LOCAL_ENTITY)
!     {
!       complain_about_tu_local_entity (t);
!       return error_mark_node;
!     }
  
    tsubst_flags_t tst_ok_flag = (complain & tf_tst_ok);
    complain &= ~tf_tst_ok;
--- 16603,16611 ----
      return t;
  
    /* Any instantiation of a template containing a TU-local entity is an
!      exposure, so always issue a diagnostic irrespective of complain.  */
!   if (instantiating_tu_local_entity (t))
!     return error_mark_node;
  
    tsubst_flags_t tst_ok_flag = (complain & tf_tst_ok);
    complain &= ~tf_tst_ok;
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 20865,20870 ****
--- 20851,20859 ----
    tsubst_flags_t no_name_lookup_flag = (complain & tf_no_name_lookup);
    complain &= ~tf_no_name_lookup;
  
+   if (instantiating_tu_local_entity (t))
+     RETURN (error_mark_node);
+ 
    if (!no_name_lookup_flag)
      if (tree d = maybe_dependent_member_ref (t, args, complain, in_decl))
        return d;
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 22507,22517 ****
      case OVERLOAD:
        if (modules_p ())
  	for (tree ovl : lkp_range (t))
! 	  if (TREE_CODE (ovl) == TU_LOCAL_ENTITY)
! 	    {
! 	      complain_about_tu_local_entity (ovl);
! 	      RETURN (error_mark_node);
! 	    }
        RETURN (t);
  
      case TEMPLATE_DECL:
--- 22496,22503 ----
      case OVERLOAD:
        if (modules_p ())
  	for (tree ovl : lkp_range (t))
! 	  if (instantiating_tu_local_entity (ovl))
! 	    RETURN (error_mark_node);
        RETURN (t);
  
      case TEMPLATE_DECL:
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 22791,22800 ****
  	RETURN (op);
        }
  
-     case TU_LOCAL_ENTITY:
-       complain_about_tu_local_entity (t);
-       RETURN (error_mark_node);
- 
      default:
        /* Handle Objective-C++ constructs, if appropriate.  */
        if (tree subst = objcp_tsubst_expr (t, args, complain, in_decl))
--- 22777,22782 ----
diff -Nrcpad gcc-16-20251102/gcc/diagnostics/paths.cc gcc-16-20251109/gcc/diagnostics/paths.cc
*** gcc-16-20251102/gcc/diagnostics/paths.cc	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/diagnostics/paths.cc	Sun Nov  9 22:32:47 2025
*************** event::meaning::maybe_get_verb_str (enum
*** 97,102 ****
--- 97,118 ----
        return "branch";
      case verb::danger:
        return "danger";
+ 
+     /* Special control flow operations.
+ 
+        These are not part of SARIF v2.1.0 section 3.38.8, but the
+        spec allows other values; see
+        https://github.com/oasis-tcs/sarif-spec/issues/735  */
+     case verb::throw_:
+       return "throw";
+     case verb::catch_:
+       return "catch";
+     case verb::unwind_:
+       return "unwind";
+     case verb::setjmp_:
+       return "setjmp";
+     case verb::longjmp_:
+       return "longjmp";
      }
  }
  
diff -Nrcpad gcc-16-20251102/gcc/diagnostics/paths.h gcc-16-20251109/gcc/diagnostics/paths.h
*** gcc-16-20251102/gcc/diagnostics/paths.h	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/diagnostics/paths.h	Sun Nov  9 22:32:47 2025
*************** class event
*** 96,102 ****
      return_,
      branch,
  
!     danger
    };
    enum class noun
    {
--- 96,109 ----
      return_,
      branch,
  
!     danger,
! 
!     // Special control flow operations:
!     throw_,
!     catch_,
!     unwind_, // unwinding stack frame(s) during exception-handling
!     setjmp_,
!     longjmp_
    };
    enum class noun
    {
*************** class event
*** 131,136 ****
--- 138,147 ----
        m_property (property::unknown)
      {
      }
+     meaning (enum verb verb)
+     : m_verb (verb), m_noun (noun::unknown), m_property (property::unknown)
+     {
+     }
      meaning (enum verb verb, enum noun noun)
      : m_verb (verb), m_noun (noun), m_property (property::unknown)
      {
diff -Nrcpad gcc-16-20251102/gcc/doc/extend.texi gcc-16-20251109/gcc/doc/extend.texi
*** gcc-16-20251102/gcc/doc/extend.texi	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/doc/extend.texi	Sun Nov  9 22:32:47 2025
*************** extensions, accepted by GCC in C90 mode
*** 31,37 ****
  * Thread-Local::        Per-thread variables.
  * OpenMP::              Multiprocessing extensions.
  * OpenACC::             Extensions for offloading code to accelerator devices.
- * _Countof::            The number of elements of arrays.
  * Inline::              Defining inline functions (as fast as macros).
  * Volatiles::           What constitutes an access to a volatile object.
  * Using Assembly Language with C:: Instructions and extensions for interfacing C with assembler.
--- 31,36 ----
*************** Function Attributes}, @ref{PowerPC Funct
*** 3471,3482 ****
  @ref{ARM Function Attributes}, @ref{AArch64 Function Attributes},
  and @ref{S/390 Function Attributes} for details.
  
  @cindex @code{target_clones} function attribute
  @item target_clones (@var{options})
  The @code{target_clones} attribute is used to specify that a function
  be cloned into multiple versions compiled with different target options
! than specified on the command line.  The supported options and restrictions
! are the same as for @code{target} attribute.
  
  For instance, on an x86, you could compile a function with
  @code{target_clones("sse4.1,avx")}.  GCC creates two function clones,
--- 3470,3510 ----
  @ref{ARM Function Attributes}, @ref{AArch64 Function Attributes},
  and @ref{S/390 Function Attributes} for details.
  
+ On targets supporting @code{target} function multiversioning (x86), when using
+ C++, you can declare multiple functions with the same signatures but different
+ @code{target} attribute values, and the correct version is chosen by the
+ dynamic linker. In the example below, two function versions are produced
+ with differing mangling. Additionally an ifunc resolver is created to
+ select the correct version to populate the @code{func} symbol.
+ 
+ @smallexample
+ int func (void) __attribute__ ((target ("arch=core2"))) @{ return 1; @}
+ int func (void) __attribute__ ((target ("sse3"))) @{ return 2; @}
+ @end smallexample
+ 
+ Declarations annotated with @code{target} cannot be used in combination with
+ declarations annotated with @code{target_clones} in a single multiversioned
+ function definition.
+ 
+ @xref{Function Multiversioning} for more details.
+ 
+ @cindex @code{target_version} function attribute
+ @item target_version (@var{option})
+ On targets with @code{target_version} function multiversioning (AArch64 and
+ RISC-V) in C or C++, you can declare multiple functions with
+ @code{target_version} or @code{target_clones} attributes to define a function
+ version set.
+ 
+ @xref{Function Multiversioning} for more details.
+ 
  @cindex @code{target_clones} function attribute
  @item target_clones (@var{options})
  The @code{target_clones} attribute is used to specify that a function
  be cloned into multiple versions compiled with different target options
! than specified on the command line.
! 
! For the x86 and PowerPC targets, the supported options and restrictions
! are the same as for the @code{target} attribute.
  
  For instance, on an x86, you could compile a function with
  @code{target_clones("sse4.1,avx")}.  GCC creates two function clones,
*************** function clones, one compiled with @opti
*** 3488,3503 ****
  with the default options.  GCC must be configured to use GLIBC 2.23 or
  newer in order to use the @code{target_clones} attribute.
  
! It also creates a resolver function (see
! the @code{ifunc} attribute above) that dynamically selects a clone
! suitable for current architecture.  The resolver is created only if there
! is a usage of a function with @code{target_clones} attribute.
  
! Note that any subsequent call of a function without @code{target_clone}
! from a @code{target_clone} caller will not lead to copying
! (target clone) of the called function.
! If you want to enforce such behavior,
! we recommend declaring the calling function with the @code{flatten} attribute?
  
  @cindex @code{unavailable} function attribute
  @item unavailable
--- 3516,3535 ----
  with the default options.  GCC must be configured to use GLIBC 2.23 or
  newer in order to use the @code{target_clones} attribute.
  
! @code{target_clones} works similarly for targets that support the
! @code{target_version} attribute (AArch64 and RISC-V).  The attribute takes
! multiple arguments, and generates a versioned clone for each.  A function
! annotated with @code{target_clones} is equivalent to the same function
! duplicated for each valid version string in the argument, where each
! version is instead annotated with @code{target_version}.  This means that a
! @code{target_clones} annotated function definition can be used in combination
! with @code{target_version} annotated functions definitions and other
! @code{target_clones} annotated function definitions.
  
! For these targets the supported options and restrictions are the same as for
! the @code{target_version} attribute.
! 
! @xref{Function Multiversioning} for more details.
  
  @cindex @code{unavailable} function attribute
  @item unavailable
*************** threads, such as the POSIX @code{swapcon
*** 3938,3943 ****
--- 3970,3996 ----
  adds a @code{BTI J} instruction when BTI is enabled e.g. via
  @option{-mbranch-protection}.
  
+ @cindex @code{preserve_none} function attribute, AArch64
+ @item preserve_none
+ Use this attribute to change the procedure call standard of the specified
+ function to the preserve-none variant.
+ 
+ The preserve-none ABI variant modifies the AAPCS such that has no callee-saved
+ registers (including SIMD and floating-point registers). That is, with the
+ exception of the stack register, link register (r30), and frame pointer (r29),
+ all registers are caller saved, and can be used as scratch registers by the
+ callee.
+ 
+ Additionally, registers r20--r28, r0--r7, r10--r14, r9 and r15 are used for
+ argument passing, in that order.  For Microsoft Windows targets
+ r15 is not used for argument passing.
+ 
+ The return value registers remain r0 and r1 in both cases.
+ 
+ All other details are the same as for the AAPCS ABI.
+ 
+ This ABI has not been stabilized, and may be subject to change in future
+ versions.
  @end table
  
  The above target attributes can be specified as follows:
*************** library.
*** 10857,10892 ****
  @xref{OpenMP and OpenACC Options}, for additional options useful with
  @option{-fopenacc}.
  
- @node _Countof
- @section Determining the Number of Elements of Arrays
- @cindex _Countof
- @cindex number of elements
- 
- The keyword @code{_Countof} determines
- the number of elements of an array operand.
- Its syntax is similar to @code{sizeof}.
- The operand must be
- a parenthesized complete array type name
- or an expression of such a type.
- For example:
- 
- @smallexample
- int a[n];
- _Countof (a);  // returns n
- _Countof (int [7][3]);  // returns 7
- @end smallexample
- 
- The result of this operator is an integer constant expression,
- unless the array has a variable number of elements.
- The operand is only evaluated
- if the array has a variable number of elements.
- For example:
- 
- @smallexample
- _Countof (int [7][n++]);  // integer constant expression
- _Countof (int [n++][7]);  // run-time value; n++ is evaluated
- @end smallexample
- 
  @node Inline
  @section An Inline Function is As Fast As a Macro
  @cindex inline functions
--- 10910,10915 ----
*************** C and/or C++ standards, while others rem
*** 13308,13313 ****
--- 13331,13337 ----
  * Labels as Values::    Getting pointers to labels, and computed gotos.
  * Nested Functions::    Nested functions in GNU C.
  * Typeof::              @code{typeof}: referring to the type of an expression.
+ * _Countof::            Determining the number of elements of arrays
  * Offsetof::            Special syntax for @code{offsetof}.
  * Alignment::           Determining the alignment of a function, type or variable.
  * Enum Extensions::     Forward declarations and specifying the underlying type.
*************** evaluated only once when using @code{__a
*** 13944,13949 ****
--- 13968,14003 ----
  @code{typeof} is used.
  @end itemize
  
+ @node _Countof
+ @subsection Determining the Number of Elements of Arrays
+ @findex _Countof
+ @findex number of elements
+ 
+ The keyword @code{_Countof} determines
+ the number of elements of an array operand.
+ Its syntax is similar to @code{sizeof}.
+ The operand must be
+ a parenthesized complete array type name
+ or an expression of such a type.
+ For example:
+ 
+ @smallexample
+ int a[n];
+ _Countof (a);  // returns n
+ _Countof (int [7][3]);  // returns 7
+ @end smallexample
+ 
+ The result of this operator is an integer constant expression,
+ unless the array has a variable number of elements.
+ The operand is only evaluated
+ if the array has a variable number of elements.
+ For example:
+ 
+ @smallexample
+ _Countof (int [7][n++]);  // integer constant expression
+ _Countof (int [n++][7]);  // run-time value; n++ is evaluated
+ @end smallexample
+ 
  @node Offsetof
  @subsection Support for @code{offsetof}
  @findex __builtin_offsetof
*************** into the data cache.  The instruction is
*** 19701,19707 ****
  
  These built-in functions are available for LoongArch.
  
! Data Type Description:
  @itemize
  @item @code{imm0_31}, a compile-time constant in range 0 to 31;
  @item @code{imm0_16383}, a compile-time constant in range 0 to 16383;
--- 19755,19770 ----
  
  These built-in functions are available for LoongArch.
  
! @menu
! * Data Types::
! * Directly-mapped Builtin Functions::
! * Directly-mapped Division Builtin Functions::
! * Other Builtin Functions::
! @end menu
! 
! @node Data Types
! @subsubsection Data Types
! 
  @itemize
  @item @code{imm0_31}, a compile-time constant in range 0 to 31;
  @item @code{imm0_16383}, a compile-time constant in range 0 to 16383;
*************** Data Type Description:
*** 19709,19714 ****
--- 19772,19780 ----
  @item @code{imm_n2048_2047}, a compile-time constant in range -2048 to 2047;
  @end itemize
  
+ @node Directly-mapped Builtin Functions
+ @subsubsection Directly-mapped Builtin Functions
+ 
  The intrinsics provided are listed below:
  @smallexample
      unsigned int __builtin_loongarch_movfcsr2gr (imm0_31)
*************** function you need to include @code{larch
*** 19832,19837 ****
--- 19898,19906 ----
      void __break (imm0_32767)
  @end smallexample
  
+ @node Directly-mapped Division Builtin Functions
+ @subsubsection Directly-mapped Division Builtin Functions
+ 
  These intrinsic functions are available by including @code{larchintrin.h} and
  using @option{-mfrecipe}.
  @smallexample
*************** using @option{-mfrecipe}.
*** 19841,19846 ****
--- 19910,19918 ----
      double __frsqrte_d (double);
  @end smallexample
  
+ @node Other Builtin Functions
+ @subsubsection Other Builtin Functions
+ 
  Additional built-in functions are available for LoongArch family
  processors to efficiently use 128-bit floating-point (__float128)
  values.
*************** GCC provides intrinsics to access the LS
*** 19867,19872 ****
--- 19939,19953 ----
  The interface is made available by including @code{<lsxintrin.h>} and using
  @option{-mlsx}.
  
+ @menu
+ * SX Data Types::
+ * Directly-mapped SX Builtin Functions::
+ * Directly-mapped SX Division Builtin Functions::
+ @end menu
+ 
+ @node SX Data Types
+ @subsubsection SX Data Types
+ 
  The following vectors typedefs are included in @code{lsxintrin.h}:
  
  @itemize
*************** input/output values manipulated:
*** 19894,19899 ****
--- 19975,19983 ----
  @item @code{imm_n2048_2047}, an integer literal in range -2048 to 2047.
  @end itemize
  
+ @node Directly-mapped SX Builtin Functions
+ @subsubsection Directly-mapped SX Builtin Functions
+ 
  For convenience, GCC defines functions @code{__lsx_vrepli_@{b/h/w/d@}} and
  @code{__lsx_b[n]z_@{v/b/h/w/d@}}, which are implemented as follows:
  
*************** __m128i __lsx_vxori_b (__m128i, imm0_255
*** 20677,20682 ****
--- 20761,20769 ----
  __m128i __lsx_vxor_v (__m128i, __m128i);
  @end smallexample
  
+ @node Directly-mapped SX Division Builtin Functions
+ @subsubsection Directly-mapped SX Division Builtin Functions
+ 
  These intrinsic functions are available by including @code{lsxintrin.h} and
  using @option{-mfrecipe} and @option{-mlsx}.
  @smallexample
*************** GCC provides intrinsics to access the LA
*** 20693,20698 ****
--- 20780,20795 ----
  instructions. The interface is made available by including @code{<lasxintrin.h>}
  and using @option{-mlasx}.
  
+ @menu
+ * ASX Data Types::
+ * Directly-mapped ASX Builtin Functions::
+ * Directly-mapped ASX Division Builtin Functions::
+ * Directly-mapped SX and ASX Conversion Builtin Functions::
+ @end menu
+ 
+ @node ASX Data Types
+ @subsubsection ASX Data Types
+ 
  The following vectors typedefs are included in @code{lasxintrin.h}:
  
  @itemize
*************** input/output values manipulated:
*** 20721,20726 ****
--- 20818,20826 ----
  @item @code{imm_n2048_2047}, an integer literal in range -2048 to 2047.
  @end itemize
  
+ @node Directly-mapped ASX Builtin Functions
+ @subsubsection Directly-mapped ASX Builtin Functions
+ 
  For convenience, GCC defines functions @code{__lasx_xvrepli_@{b/h/w/d@}} and
  @code{__lasx_b[n]z_@{v/b/h/w/d@}}, which are implemented as follows:
  
*************** __m256i __lasx_xvxori_b (__m256i, imm0_2
*** 21525,21530 ****
--- 21625,21633 ----
  __m256i __lasx_xvxor_v (__m256i, __m256i);
  @end smallexample
  
+ @node Directly-mapped ASX Division Builtin Functions
+ @subsubsection Directly-mapped ASX Division Builtin Functions
+ 
  These intrinsic functions are available by including @code{lasxintrin.h} and
  using @option{-mfrecipe} and @option{-mlasx}.
  @smallexample
*************** __m256d __lasx_xvfrsqrte_d (__m256d);
*** 21534,21539 ****
--- 21637,21849 ----
  __m256 __lasx_xvfrsqrte_s (__m256);
  @end smallexample
  
+ @node Directly-mapped SX and ASX Conversion Builtin Functions
+ @subsubsection Directly-mapped SX and ASX Conversion Builtin Functions
+ 
+ For convenience, the @code{lsxintrin.h} file was imported into @code{
+ lasxintrin.h} and 18 new interface functions for 128 and 256 vector
+ conversions were added, using the @option{-mlasx} option.
+ @smallexample
+ __m256 __lasx_cast_128_s (__m128);
+ __m256d __lasx_cast_128_d (__m128d);
+ __m256i __lasx_cast_128 (__m128i);
+ __m256 __lasx_concat_128_s (__m128, __m128);
+ __m256d __lasx_concat_128_d (__m128d, __m128d);
+ __m256i __lasx_concat_128 (__m128i, __m128i);
+ __m128 __lasx_extract_128_lo_s (__m256);
+ __m128 __lasx_extract_128_hi_s (__m256);
+ __m128d __lasx_extract_128_lo_d (__m256d);
+ __m128d __lasx_extract_128_hi_d (__m256d);
+ __m128i __lasx_extract_128_lo (__m256i);
+ __m128i __lasx_extract_128_hi (__m256i);
+ __m256 __lasx_insert_128_lo_s (__m256, __m128);
+ __m256 __lasx_insert_128_hi_s (__m256, __m128);
+ __m256d __lasx_insert_128_lo_d (__m256d, __m128d);
+ __m256d __lasx_insert_128_hi_d (__m256d, __m128d);
+ __m256i __lasx_insert_128_lo (__m256i, __m128i);
+ __m256i __lasx_insert_128_hi (__m256i, __m128i);
+ @end smallexample
+ 
+ When gcc does not support interfaces for 128 and 256 conversions,
+ use the following code for equivalent substitution.
+ 
+ @smallexample
+ 
+   #ifndef __loongarch_asx_sx_conv
+ 
+   #include <lasxintrin.h>
+   #include <lsxintrin.h>
+   __m256 inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_cast_128_s (__m128 src)
+   @{
+     __m256 dest;
+     asm ("" : "=f"(dest) : "0"(src));
+     return dest;
+   @}
+ 
+   __m256d inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_cast_128_d (__m128d src)
+   @{
+     __m256d dest;
+     asm	("" : "=f"(dest) : "0"(src));
+     return dest;
+   @}
+ 
+   __m256i inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_cast_128 (__m128i src)
+   @{
+     __m256i dest;
+     asm	("" : "=f"(dest) : "0"(src));
+     return dest;
+   @}
+ 
+   __m256 inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_concat_128_s (__m128 src1, __m128 src2)
+   @{
+     __m256 dest;
+     asm	("xvpermi.q %u0,%u2,0x02\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m256d inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_concat_128_d (__m128d src1, __m128d src2)
+   @{
+     __m256d dest;
+     asm	("xvpermi.q %u0,%u2,0x02\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m256i inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_concat_128 (__m128i src1, __m128i src2)
+   @{
+     __m256i dest;
+     asm	("xvpermi.q %u0,%u2,0x02\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m128 inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_extract_128_lo_s (__m256 src)
+   @{
+     __m128 dest;
+     asm	("" : "=f"(dest) : "0"(src));
+     return dest;
+   @}
+ 
+   __m128d inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_extract_128_lo_d (__m256d src)
+   @{
+     __m128d dest;
+     asm	("" : "=f"(dest) : "0"(src));
+     return dest;
+   @}
+ 
+   __m128i inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_extract_128_lo (__m256i src)
+   @{
+     __m128i dest;
+     asm	("" : "=f"(dest) : "0"(src));
+     return dest;
+   @}
+ 
+   __m128 inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_extract_128_hi_s (__m256 src)
+   @{
+     __m128 dest;
+     asm	("xvpermi.d %u0,%u1,0xe\n"
+           : "=f"(dest)
+           : "f"(src));
+     return dest;
+   @}
+ 
+   __m128d inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_extract_128_hi_d (__m256d src)
+   @{
+     __m128d dest;
+     asm	("xvpermi.d %u0,%u1,0xe\n"
+           : "=f"(dest)
+           : "f"(src));
+     return dest;
+   @}
+ 
+   __m128i inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_extract_128_hi (__m256i src)
+   @{
+     __m128i dest;
+     asm	("xvpermi.d %u0,%u1,0xe\n"
+           : "=f"(dest)
+           : "f"(src));
+     return dest;
+   @}
+ 
+   __m256 inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_insert_128_lo_s (__m256 src1, __m128 src2)
+   @{
+     __m256 dest;
+     asm	("xvpermi.q %u0,%u2,0x30\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m256d inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_insert_128_lo_d (__m256d a, __m128d b)
+   @{
+     __m256d dest;
+     asm	("xvpermi.q %u0,%u2,0x30\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m256i inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_insert_128_lo (__m256i src1, __m128i src2)
+   @{
+     __m256i dest;
+     asm	("xvpermi.q %u0,%u2,0x30\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m256 inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_insert_128_hi_s (__m256 src1, __m128 src2)
+   @{
+     __m256 dest;
+     asm	("xvpermi.q %u0,%u2,0x02\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m256d inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_insert_128_hi_d (__m256d src1, __m128d src2)
+   @{
+     __m256d dest;
+     asm	("xvpermi.q %u0,%u2,0x02\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+ 
+   __m256i inline __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+   __lasx_insert_128_hi (__m256i src1, __m128i src2)
+   @{
+     __m256i dest;
+     asm	("xvpermi.q %u0,%u2,0x02\n"
+           : "=f"(dest)
+           : "0"(src1), "f"(src2));
+     return dest;
+   @}
+   #endif
+ 
+ @end smallexample
+ 
  @node MIPS DSP Built-in Functions
  @subsection MIPS DSP Built-in Functions
  
*************** For the effects of the @code{hot} attrib
*** 30682,30692 ****
  @section Function Multiversioning
  @cindex function versions
  
! With the GNU C++ front end, for x86 targets, you may specify multiple
! versions of a function, where each function is specialized for a
! specific target feature.  At runtime, the appropriate version of the
! function is automatically executed depending on the characteristics of
! the execution platform.  Here is an example.
  
  @smallexample
  __attribute__ ((target ("default")))
--- 30992,31070 ----
  @section Function Multiversioning
  @cindex function versions
  
! Function multiversioning is a mechanism that enables compiling multiple
! versions of a function, each specialized for different combinations of
! architecture extensions.  Additionally, the compiler generates a resolver that
! the dynamic linker uses to detect architecture support and choose the
! appropriate version at runtime.
! 
! Function multiversioning relies on the indirect function extension to the ELF
! standard, and therefore Binutils version 2.20.1 or higher and GNU C Library
! version 2.11.1 are required to use this feature.
! 
! There are two versions of function multiversioning supported by GCC.
! 
! For targets supporting the @code{target_version} attribute (AArch64 and RISC-V),
! when compiling for C or C++, a function version set can be defined by a
! combination of function definitions with @code{target_version} and
! @code{target_clones} attributes, across translation units.
! 
! For example:
! 
! @smallexample
! // fmv.h:
! int foo ();
! int foo [[gnu::target_clones("sve", "sve2")]] ();
! int foo [[gnu::target_version("dotprod;priority=1")]] ();
! 
! // fmv1.cc
! #include "fmv.h"
! 
! int foo ()
! @{
!   // The default version of foo.
!   return 0;
! @}
! 
! // fmv2.cc:
! #include "fmv.h"
! 
! int foo [[gnu::target_clones("sve", "sve2")]] ()
! @{
!   // foo versions for sve and sve2
!   return 1;
! @}
! 
! int foo [[gnu::target_version("dotprod")]] ()
! @{
!   // foo version for dotprod extension
!   return 2;
! @}
! 
! // main.cc
! #include "fmv.h"
! 
! int main ()
! @{
!   int (*p)() = &foo;
!   assert ((*p) () == foo ());
!   return 0;
! @}
! @end smallexample
! 
! This example results in 4 versions of the foo function being generated, and
! a resolver which is used by the dynamic linker to choose the correct version.
! 
! For the AArch64 target GCC implements function multiversionsing, with the
! semantics and version strings as specified in the
! @ref{ARM C Language Extensions (ACLE)}.
! 
! For targets that support multiversioning with the @code{target} attribute
! (x86) a multiversioned function can be defined with either multiple function
! definitions with the @code{target} attribute (in C++) within a translation unit,
! or a single definition with the @code{target_clones} attribute.
! 
! Here is an example.
  
  @smallexample
  __attribute__ ((target ("default")))
diff -Nrcpad gcc-16-20251102/gcc/doc/install.texi gcc-16-20251109/gcc/doc/install.texi
*** gcc-16-20251102/gcc/doc/install.texi	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/doc/install.texi	Sun Nov  9 22:32:47 2025
*************** Use little endian by default.  Provide a
*** 1615,1621 ****
  
  @item --with-cmodel=@var{cmodel}
  Specify what code model to use by default.
! Currently only implemented for riscv*-*-*.
  
  @item --enable-threads
  Specify that the target
--- 1615,1621 ----
  
  @item --with-cmodel=@var{cmodel}
  Specify what code model to use by default.
! Currently only implemented for loongarch*-*-* and riscv*-*-*.
  
  @item --enable-threads
  Specify that the target
diff -Nrcpad gcc-16-20251102/gcc/doc/invoke.texi gcc-16-20251109/gcc/doc/invoke.texi
*** gcc-16-20251102/gcc/doc/invoke.texi	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/doc/invoke.texi	Sun Nov  9 22:32:47 2025
*************** in the following sections.
*** 257,263 ****
  -Wdeprecated-copy -Wdeprecated-copy-dtor
  -Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion
  -Weffc++ -Wno-elaborated-enum-base
! -Wno-exceptions -Wextra-semi -Wno-global-module -Wno-inaccessible-base
  -Wno-inherited-variadic-ctor  -Wno-init-list-lifetime
  -Winvalid-constexpr -Winvalid-imported-macros
  -Wno-invalid-offsetof  -Wno-literal-suffix
--- 257,264 ----
  -Wdeprecated-copy -Wdeprecated-copy-dtor
  -Wno-deprecated-enum-enum-conversion -Wno-deprecated-enum-float-conversion
  -Weffc++ -Wno-elaborated-enum-base
! -Wno-exceptions -Wno-expose-global-module-tu-local -Wno-external-tu-local
! -Wextra-semi -Wno-global-module -Wno-inaccessible-base
  -Wno-inherited-variadic-ctor  -Wno-init-list-lifetime
  -Winvalid-constexpr -Winvalid-imported-macros
  -Wno-invalid-offsetof  -Wno-literal-suffix
*************** in the following sections.
*** 272,278 ****
  -Woverloaded-virtual  -Wno-pmf-conversions -Wself-move -Wsign-promo
  -Wsized-deallocation  -Wsuggest-final-methods
  -Wsuggest-final-types  -Wsuggest-override  -Wno-template-body
! -Wno-template-id-cdtor  -Wtemplate-names-tu-local -Wno-external-tu-local
  -Wno-terminate  -Wno-vexing-parse  -Wvirtual-inheritance
  -Wno-virtual-move-assign  -Wvolatile}
  
--- 273,279 ----
  -Woverloaded-virtual  -Wno-pmf-conversions -Wself-move -Wsign-promo
  -Wsized-deallocation  -Wsuggest-final-methods
  -Wsuggest-final-types  -Wsuggest-override  -Wno-template-body
! -Wno-template-id-cdtor  -Wtemplate-names-tu-local
  -Wno-terminate  -Wno-vexing-parse  -Wvirtual-inheritance
  -Wno-virtual-move-assign  -Wvolatile}
  
*************** Objective-C and Objective-C++ Dialects}.
*** 837,844 ****
  -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div
  -mpc-relative-literal-loads
  -msign-return-address=@var{scope}
! -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}
! +@var{b-key}]|@var{bti}|@var{gcs}
  -mharden-sls=@var{opts}
  -march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}
  -moverride=@var{string}  -mverbose-cost-dump
--- 838,844 ----
  -mlow-precision-recip-sqrt  -mlow-precision-sqrt  -mlow-precision-div
  -mpc-relative-literal-loads
  -msign-return-address=@var{scope}
! -mbranch-protection=@var{features}
  -mharden-sls=@var{opts}
  -march=@var{name}  -mcpu=@var{name}  -mtune=@var{name}
  -moverride=@var{string}  -mverbose-cost-dump
*************** Objective-C and Objective-C++ Dialects}.
*** 918,925 ****
  -mfix-cmse-cve-2021-35465
  -mstack-protector-guard=@var{guard} -mstack-protector-guard-offset=@var{offset}
  -mfdpic
! -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}]
! [+@var{bti}]|@var{bti}[+@var{pac-ret}[+@var{leaf}]]}
  
  @emph{AVR Options} (@ref{AVR Options})
  @gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args  -mcvt
--- 918,924 ----
  -mfix-cmse-cve-2021-35465
  -mstack-protector-guard=@var{guard} -mstack-protector-guard-offset=@var{offset}
  -mfdpic
! -mbranch-protection=@var{features}}
  
  @emph{AVR Options} (@ref{AVR Options})
  @gccoptlist{-mmcu=@var{mcu}  -mabsdata  -maccumulate-args  -mcvt
*************** The presence of an explicit instantiatio
*** 4759,4764 ****
--- 4758,4786 ----
  
  This flag is enabled by @option{-Wextra}.
  
+ @opindex Wexpose-global-module-tu-local
+ @opindex Wno-expose-global-module-tu-local
+ @item -Wno-expose-global-module-tu-local
+ An exposure of a translation-unit-local entity from a module interface is
+ invalid, as this may cause ODR violations and manifest in link errors or other
+ unexpected behaviour.  However, many existing libraries declare TU-local
+ entities in their interface, and avoiding exposures of these entities may be
+ difficult in some cases.
+ 
+ As an extension, GCC allows exposures of internal variables and functions that
+ were declared in the global module fragment.  This warning indicates when such
+ an invalid exposure has occurred, and can be silenced using diagnostic pragmas
+ either at the site of the exposure, or at the point of declaration of the
+ internal declaration.
+ 
+ When combined with @option{-Wtemplate-names-tu-local}, GCC will also warn about
+ non-exposure references to TU-local entities in template bodies. Such templates
+ can still be instantiated in other TUs but the above risks regarding exposures
+ of translation-unit-local entities apply.
+ 
+ This warning is enabled by default, and is upgraded to an error by
+ @option{-pedantic-errors}.
+ 
  @opindex Wexternal-tu-local
  @opindex Wno-external-tu-local
  @item -Wno-external-tu-local
*************** default value is @samp{none}. This optio
*** 22527,22545 ****
  -mbranch-protection.
  
  @opindex mbranch-protection
! @item -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}+@var{b-key}]|@var{bti}|@var{gcs}
  Select the branch protection features to use.
  @samp{none} is the default and turns off all types of branch protection.
  @samp{standard} turns on all types of branch protection features.  If a feature
  has additional tuning options, then @samp{standard} sets it to its standard
  level.
! @samp{pac-ret[+@var{leaf}]} turns on return address signing to its standard
  level: signing functions that save the return address to memory (non-leaf
! functions will practically always do this) using the a-key.  The optional
! argument @samp{leaf} can be used to extend the signing to include leaf
! functions.  The optional argument @samp{b-key} can be used to sign the functions
! with the B-key instead of the A-key.
  @samp{bti} turns on branch target identification mechanism.
  @samp{gcs} turns on guarded control stack compatible code generation.
  
  @opindex mharden-sls
--- 22549,22576 ----
  -mbranch-protection.
  
  @opindex mbranch-protection
! @item -mbranch-protection=@var{features}
  Select the branch protection features to use.
+ @var{features} can have one of the following forms:
+ 
  @samp{none} is the default and turns off all types of branch protection.
+ 
  @samp{standard} turns on all types of branch protection features.  If a feature
  has additional tuning options, then @samp{standard} sets it to its standard
  level.
! 
! @samp{pac-ret} turns on return address signing to its standard
  level: signing functions that save the return address to memory (non-leaf
! functions practically always do this) using the A-key.
! 
! @samp{pac-ret+leaf} extends the @samp{pac-ret} signing to include leaf
! functions.
! 
! @samp{pac-ret+b-key} or @samp{pac-ret+leaf+b-key} can be used to
! sign the functions with the B-key instead of the A-key.
! 
  @samp{bti} turns on branch target identification mechanism.
+ 
  @samp{gcs} turns on guarded control stack compatible code generation.
  
  @opindex mharden-sls
*************** build the Linux kernel using the same (@
*** 25004,25027 ****
  toolchain as the one used to build the userland programs.
  
  @opindex mbranch-protection
! @item -mbranch-protection=@var{none}|@var{standard}|@var{pac-ret}[+@var{leaf}][+@var{bti}]|@var{bti}[+@var{pac-ret}[+@var{leaf}]]
  Enable branch protection features (armv8.1-m.main only).
! @samp{none} generate code without branch protection or return address
  signing.
! @samp{standard[+@var{leaf}]} generate code with all branch protection
  features enabled at their standard level.
! @samp{pac-ret[+@var{leaf}]} generate code with return address signing
  set to its standard level, which is to sign all functions that save
  the return address to memory.
! @samp{leaf} When return address signing is enabled, also sign leaf
  functions even if they do not write the return address to memory.
! +@samp{bti} Add landing-pad instructions at the permitted targets of
  indirect branch instructions.
  
! If the @samp{+pacbti} architecture extension is not enabled, then all
  branch protection and return address signing operations are
  constrained to use only the instructions defined in the
! architectural-NOP space. The generated code will remain
  backwards-compatible with earlier versions of the architecture, but
  the additional security can be enabled at run time on processors that
  support the @samp{PACBTI} extension.
--- 25035,25067 ----
  toolchain as the one used to build the userland programs.
  
  @opindex mbranch-protection
! @item -mbranch-protection=@var{features}
! 
  Enable branch protection features (armv8.1-m.main only).
! 
! @var{features} can have one of the following forms:
! 
! @samp{none} generates code without branch protection or return address
  signing.
! 
! @samp{standard} generates code with all branch protection
  features enabled at their standard level.
! 
! @samp{pac-ret} generates code with return address signing
  set to its standard level, which is to sign all functions that save
  the return address to memory.
! 
! @samp{pac-ret+leaf} extends the @samp{pac-ret} signing to include leaf
  functions even if they do not write the return address to memory.
! 
! @samp{bti} adds landing-pad instructions at the permitted targets of
  indirect branch instructions.
  
! If support for the @samp{+pacbti} architecture extension is not enabled
! (e.g. via @option{-march=}), then all
  branch protection and return address signing operations are
  constrained to use only the instructions defined in the
! architectural-NOP space. The generated code remains
  backwards-compatible with earlier versions of the architecture, but
  the additional security can be enabled at run time on processors that
  support the @samp{PACBTI} extension.
*************** be within 2GB addressing space.
*** 28520,28525 ****
--- 28560,28567 ----
  
  @item medium
  The text segment and data segment must be within 2GB addressing space.
+ This is the default code model unless GCC has been configured with
+ @option{--with-cmodel=} specifying a different default code model.
  
  @item large (Not implemented yet)
  
*************** This mode does not limit the size of the
*** 28528,28534 ****
  The @option{-mcmodel=extreme} option is incompatible with @option{-fplt}
  and/or @option{-mexplicit-relocs=none}.
  @end table
- The default code model is @code{normal}.
  
  @item -mexplicit-relocs=@var{style}
  Set when to use assembler relocation operators when dealing with symbolic
--- 28570,28575 ----
diff -Nrcpad gcc-16-20251102/gcc/doc/tree-ssa.texi gcc-16-20251109/gcc/doc/tree-ssa.texi
*** gcc-16-20251102/gcc/doc/tree-ssa.texi	Sun Nov  2 22:32:20 2025
--- gcc-16-20251109/gcc/doc/tree-ssa.texi	Sun Nov  9 22:32:47 2025
*************** under the iterators, so use the @code{FO
*** 383,393 ****
  sanity of the use list by moving all the uses for a statement into
  a controlled position, and then iterating over those uses.  Then the
  optimization can manipulate the stmt when all the uses have been
! processed.  This is a little slower than the FAST version since it adds a
! placeholder element and must sort through the list a bit for each statement.
! This placeholder element must be also be removed if the loop is
! terminated early; a destructor takes care of that when leaving the
! @code{FOR_EACH_IMM_USE_STMT} scope.
  
  There are checks in @code{verify_ssa} which verify that the immediate use list
  is up to date.
--- 383,416 ----
  sanity of the use list by moving all the uses for a statement into
  a controlled position, and then iterating over those uses.  Then the
  optimization can manipulate the stmt when all the uses have been
! processed.  Only the current active @code{imm_use_p} may be altered
! when using an inner @code{FOR_EACH_IMM_USE_ON_STMT} iteration.
! You have to be careful to not inadvertedly modify the immediate
! use list by working on another stmt than the the current @code{stmt} during
! the iteration.  In particular calling @code{update_stmt} is destructive
! on all SSA uses immediate use lists related to the updated stmt.
! This slower than the FAST version since it sorts through the list for each
! statement.
! 
! @code{FOR_EACH_IMM_USE_ON_STMT} iteration may not be nested inside
! another @code{FOR_EACH_IMM_USE_ON_STMT} or @code{FOR_EACH_IMM_USE_FAST}
! iteration of the same immediate use list.
! 
! There is the @code{gather_imm_use_stmts} helper that trades memory for
! removing the need to care about the immediate use list consistency and
! which also avoids duplicate visiting of stmts that can occur with
! @code{FOR_EACH_IMM_USE_FAST} when there are multiple uses of an SSA name
! on a stmt.  This can be used to iterate safely over all use stmts like
! this:
! 
! @smallexample
!   tree ssa_var;
! 
!   for (gimple *use_stmt : gather_imm_use_stmts (ssa_var))
!     @{
!        // do something with use_stmt
!     @}
! @end smallexample
  
  There are checks in @code{verify_ssa} which verify that the immediate use list
  is up to date.
diff -Nrcpad gcc-16-20251102/gcc/fortran/ChangeLog gcc-16-20251109/gcc/fortran/ChangeLog
*** gcc-16-20251102/gcc/fortran/ChangeLog	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/ChangeLog	Sun Nov  9 22:32:47 2025
***************
*** 1,3 ****
--- 1,89 ----
+ 2025-11-08  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/113338
+ 	* decl.cc (gfc_verify_c_interop_param): Allow further types of
+ 	dummy argument without the VALUE attribute as specified in
+ 	F2018 18.3.6 item (5).
+ 
+ 2025-11-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121628
+ 	* trans-array.cc (seen_derived_types): Move to file scope and
+ 	preserve/restore around generate_element_copy_wrapper.
+ 	* trans-intrinsic.cc (conv_intrinsic_atomic_op): Reuse
+ 	gfc_trans_force_lval when forcing addressable CAF temps.
+ 
+ 2025-11-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121628
+ 	* trans-array.cc (get_copy_helper_function_type): New function to
+ 	create function type for element copy helpers.
+ 	(get_copy_helper_pointer_type): New function to create pointer type
+ 	for element copy helpers.
+ 	(generate_element_copy_wrapper): New function to generate runtime
+ 	helper for element-wise deep copying of recursive types.
+ 	(structure_alloc_comps): Detect recursive allocatable array
+ 	components and use runtime helper instead of inline recursion.
+ 	Add includes for cgraph.h and function.h.
+ 	* trans-decl.cc (gfor_fndecl_cfi_deep_copy_array): New declaration
+ 	for runtime deep copy helper.
+ 	(gfc_build_builtin_function_decls): Initialize the runtime helper
+ 	declaration.
+ 	* trans-intrinsic.cc (conv_intrinsic_atomic_op): Enhance handling of
+ 	constant values in coarray atomic operations by detecting and
+ 	materializing address-of-constant expressions.
+ 	* trans.h (gfor_fndecl_cfi_deep_copy_array): Add external declaration.
+ 
+ 2025-11-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/122566
+ 	* decl.cc (gfc_get_pdt_instance): Add non-PDT type exstention.
+ 
+ 2025-11-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/122501
+ 	PR fortran/122524
+ 	* primary.cc (gfc_convert_to_structure_constructor): Correct
+ 	whitespace issue.
+ 	(gfc_match_rvalue): Remove the attempt to match specific procs
+ 	before filling out PDT constructor. Instead, defer this until
+ 	resolution with the condition that there not be a following
+ 	arglist and more than one procedure in the generic interface.
+ 
+ 2025-11-05  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR fortran/122570
+ 	* openmp.cc (resolve_omp_metadirective): Fix 'skip' of
+ 	never matchable metadirective variants.
+ 
+ 2025-11-04  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/122564
+ 	* resolve.cc (resolve_locality_spec): Delete temporary hash_set.
+ 
+ 2025-11-04  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR fortran/122369
+ 	PR fortran/122508
+ 	* gfortran.h (gfc_rebind_label): Declare new function.
+ 	* parse.cc (parse_omp_metadirective_body): Rebind labels to the outer
+ 	region. Maintain a vector of metadirective regions.
+ 	(gfc_parse_file): Initialise it.
+ 	* parse.h (GFC_PARSE_H): Declare it.
+ 	* symbol.cc (gfc_get_st_label): Look for existing labels in outer
+ 	metadirective regions.
+ 	(gfc_rebind_label): Define new function.
+ 	(gfc_define_st_label): Accept duplicate labels in metadirective body.
+ 	(gfc_reference_st_label): Accept shared DO termination labels in
+ 	metadirective body.
+ 
+ 2025-11-03  Steve Kargl  <kargls@comcast.net>
+ 
+ 	PR fortran/122513
+ 	* resolve.cc (check_default_none_expr): Do not allow an
+ 	iterator in a locality spec. Allow a named constant to be
+ 	used within the loop.
+ 
  2025-11-01  Harald Anlauf  <anlauf@gmx.de>
  
  	PR fortran/78640
diff -Nrcpad gcc-16-20251102/gcc/fortran/decl.cc gcc-16-20251109/gcc/fortran/decl.cc
*** gcc-16-20251102/gcc/fortran/decl.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/decl.cc	Sun Nov  9 22:32:47 2025
*************** gfc_verify_c_interop_param (gfc_symbol *
*** 1537,1545 ****
      {
        if (sym->ns->proc_name->attr.is_bind_c == 1)
  	{
  	  is_c_interop = (gfc_verify_c_interop(&(sym->ts)) ? 1 : 0);
  
! 	  if (is_c_interop != 1)
  	    {
  	      /* Make personalized messages to give better feedback.  */
  	      if (sym->ts.type == BT_DERIVED)
--- 1537,1583 ----
      {
        if (sym->ns->proc_name->attr.is_bind_c == 1)
  	{
+ 	  bool f2018_allowed = gfc_option.allow_std & ~GFC_STD_OPT_F08;
+ 	  bool f2018_added = false;
+ 
  	  is_c_interop = (gfc_verify_c_interop(&(sym->ts)) ? 1 : 0);
  
! 	  /* F2018:18.3.6 has the following text:
! 	     "(5) any dummy argument without the VALUE attribute corresponds to
! 	     a formal parameter of the prototype that is of a pointer type, and
! 	     either
! 	     • the dummy argument is interoperable with an entity of the
! 	     referenced type (ISO/IEC 9899:2011, 6.2.5, 7.19, and 7.20.1) of
! 	     the formal parameter (this is equivalent to the F2008 text),
! 	     • the dummy argument is a nonallocatable nonpointer variable of
! 	     type CHARACTER with assumed character length and the formal
! 	     parameter is a pointer to CFI_cdesc_t,
! 	     • the dummy argument is allocatable, assumed-shape, assumed-rank,
! 	     or a pointer without the CONTIGUOUS attribute, and the formal
! 	     parameter is a pointer to CFI_cdesc_t, or
! 	     • the dummy argument is assumed-type and not allocatable,
! 	     assumed-shape, assumed-rank, or a pointer, and the formal
! 	     parameter is a pointer to void,"  */
! 	  if (is_c_interop == 0 && !sym->attr.value && f2018_allowed)
! 	    {
! 	      bool as_ar = (sym->as
! 			    && (sym->as->type == AS_ASSUMED_SHAPE
! 				|| sym->as->type == AS_ASSUMED_RANK));
! 	      bool cond1 = (sym->ts.type == BT_CHARACTER
! 			    && !(sym->ts.u.cl && sym->ts.u.cl->length)
! 			    && !sym->attr.allocatable
! 			    && !sym->attr.pointer);
! 	      bool cond2 = (sym->attr.allocatable
! 			    || as_ar
! 			    || (IS_POINTER (sym) && !sym->attr.contiguous));
! 	      bool cond3 = (sym->ts.type == BT_ASSUMED
! 			    && !sym->attr.allocatable
! 			    && !sym->attr.pointer
! 			    && !as_ar);
! 	      f2018_added = cond1 || cond2 || cond3;
! 	    }
! 
! 	  if (is_c_interop != 1 && !f2018_added)
  	    {
  	      /* Make personalized messages to give better feedback.  */
  	      if (sym->ts.type == BT_DERIVED)
*************** gfc_get_pdt_instance (gfc_actual_arglist
*** 4191,4220 ****
  	 to obtain the instance of the extended type.  */
        if (gfc_current_state () != COMP_DERIVED
  	  && c1 == pdt->components
! 	  && (c1->ts.type == BT_DERIVED || c1->ts.type == BT_CLASS)
! 	  && c1->ts.u.derived && c1->ts.u.derived->attr.pdt_template
  	  && gfc_get_derived_super_type (*sym) == c2->ts.u.derived)
  	{
! 	  gfc_formal_arglist *f;
  
! 	  old_param_spec_list = type_param_spec_list;
  
! 	  /* Obtain a spec list appropriate to the extended type..*/
! 	  actual_param = gfc_copy_actual_arglist (type_param_spec_list);
! 	  type_param_spec_list = actual_param;
! 	  for (f = c1->ts.u.derived->formal; f && f->next; f = f->next)
! 	    actual_param = actual_param->next;
! 	  if (actual_param)
! 	    {
! 	      gfc_free_actual_arglist (actual_param->next);
! 	      actual_param->next = NULL;
! 	    }
  
! 	  /* Now obtain the PDT instance for the extended type.  */
! 	  c2->param_list = type_param_spec_list;
! 	  m = gfc_get_pdt_instance (type_param_spec_list, &c2->ts.u.derived,
! 				    &c2->param_list);
! 	  type_param_spec_list = old_param_spec_list;
  
  	  c2->ts.u.derived->refs++;
  	  gfc_set_sym_referenced (c2->ts.u.derived);
--- 4229,4264 ----
  	 to obtain the instance of the extended type.  */
        if (gfc_current_state () != COMP_DERIVED
  	  && c1 == pdt->components
! 	  && c1->ts.type == BT_DERIVED
! 	  && c1->ts.u.derived
  	  && gfc_get_derived_super_type (*sym) == c2->ts.u.derived)
  	{
! 	  if (c1->ts.u.derived->attr.pdt_template)
! 	    {
! 	      gfc_formal_arglist *f;
  
! 	      old_param_spec_list = type_param_spec_list;
  
! 	      /* Obtain a spec list appropriate to the extended type..*/
! 	      actual_param = gfc_copy_actual_arglist (type_param_spec_list);
! 	      type_param_spec_list = actual_param;
! 	      for (f = c1->ts.u.derived->formal; f && f->next; f = f->next)
! 		actual_param = actual_param->next;
! 	      if (actual_param)
! 		{
! 		  gfc_free_actual_arglist (actual_param->next);
! 		  actual_param->next = NULL;
! 		}
  
! 	      /* Now obtain the PDT instance for the extended type.  */
! 	      c2->param_list = type_param_spec_list;
! 	      m = gfc_get_pdt_instance (type_param_spec_list,
! 					&c2->ts.u.derived,
! 					&c2->param_list);
! 	      type_param_spec_list = old_param_spec_list;
! 	    }
! 	  else
! 	    c2->ts = c1->ts;
  
  	  c2->ts.u.derived->refs++;
  	  gfc_set_sym_referenced (c2->ts.u.derived);
diff -Nrcpad gcc-16-20251102/gcc/fortran/gfortran.h gcc-16-20251109/gcc/fortran/gfortran.h
*** gcc-16-20251102/gcc/fortran/gfortran.h	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/gfortran.h	Sun Nov  9 22:32:47 2025
*************** gfc_st_label *gfc_get_st_label (int);
*** 3760,3765 ****
--- 3760,3766 ----
  void gfc_free_st_label (gfc_st_label *);
  void gfc_define_st_label (gfc_st_label *, gfc_sl_type, locus *);
  bool gfc_reference_st_label (gfc_st_label *, gfc_sl_type);
+ gfc_st_label *gfc_rebind_label (gfc_st_label *, int);
  
  gfc_namespace *gfc_get_namespace (gfc_namespace *, int);
  gfc_symtree *gfc_new_symtree (gfc_symtree **, const char *);
diff -Nrcpad gcc-16-20251102/gcc/fortran/openmp.cc gcc-16-20251109/gcc/fortran/openmp.cc
*** gcc-16-20251102/gcc/fortran/openmp.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/openmp.cc	Sun Nov  9 22:32:47 2025
*************** static void
*** 12320,12325 ****
--- 12320,12326 ----
  resolve_omp_metadirective (gfc_code *code, gfc_namespace *ns)
  {
    gfc_omp_variant *variant = code->ext.omp_variants;
+   gfc_omp_variant *prev_variant = variant;
  
    while (variant)
      {
*************** resolve_omp_metadirective (gfc_code *cod
*** 12333,12347 ****
  	     as the 'otherwise' clause should always match.  */
  	  if (variant == code->ext.omp_variants && !variant->next)
  	    break;
- 	  if (variant == code->ext.omp_variants)
- 	    code->ext.omp_variants = variant->next;
  	  gfc_omp_variant *tmp = variant;
! 	  variant = variant->next;
  	  gfc_free_omp_set_selector_list (tmp->selectors);
  	  free (tmp);
  	}
        else
! 	variant = variant->next;
      }
    /* Replace metadirective by its body if only 'nothing' remains.  */
    if (!code->ext.omp_variants->next && code->ext.omp_variants->stmt == ST_NONE)
--- 12334,12352 ----
  	     as the 'otherwise' clause should always match.  */
  	  if (variant == code->ext.omp_variants && !variant->next)
  	    break;
  	  gfc_omp_variant *tmp = variant;
! 	  if (variant == code->ext.omp_variants)
! 	    variant = prev_variant = code->ext.omp_variants = variant->next;
! 	  else
! 	    variant = prev_variant->next = variant->next;
  	  gfc_free_omp_set_selector_list (tmp->selectors);
  	  free (tmp);
  	}
        else
! 	{
! 	  prev_variant = variant;
! 	  variant = variant->next;
! 	}
      }
    /* Replace metadirective by its body if only 'nothing' remains.  */
    if (!code->ext.omp_variants->next && code->ext.omp_variants->stmt == ST_NONE)
diff -Nrcpad gcc-16-20251102/gcc/fortran/parse.cc gcc-16-20251109/gcc/fortran/parse.cc
*** gcc-16-20251102/gcc/fortran/parse.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/parse.cc	Sun Nov  9 22:32:47 2025
*************** bool gfc_in_omp_metadirective_body;
*** 60,65 ****
--- 60,66 ----
  /* Each metadirective body in the translation unit is given a unique
     number, used to ensure that labels in the body have unique names.  */
  int gfc_omp_metadirective_region_count;
+ vec<int> gfc_omp_metadirective_region_stack;
  
  /* TODO: Re-order functions to kill these forward decls.  */
  static void check_statement_label (gfc_statement);
*************** parse_omp_metadirective_body (gfc_statem
*** 6542,6547 ****
--- 6543,6551 ----
        gfc_in_omp_metadirective_body = true;
  
        gfc_omp_metadirective_region_count++;
+       gfc_omp_metadirective_region_stack.safe_push (
+ 	gfc_omp_metadirective_region_count);
+ 
        switch (variant->stmt)
  	{
  	case_omp_structured_block:
*************** parse_omp_metadirective_body (gfc_statem
*** 6603,6608 ****
--- 6607,6634 ----
  	*variant->code = *gfc_state_stack->head;
        pop_state ();
  
+       gfc_omp_metadirective_region_stack.pop ();
+       int outer_omp_metadirective_region
+ 	= gfc_omp_metadirective_region_stack.last ();
+ 
+       /* Rebind labels in the last statement -- which is the first statement
+ 	 past the end of the metadirective body -- to the outer region.  */
+       if (gfc_statement_label)
+ 	gfc_statement_label = gfc_rebind_label (gfc_statement_label,
+ 						outer_omp_metadirective_region);
+       if ((new_st.op == EXEC_READ || new_st.op == EXEC_WRITE)
+ 	  && new_st.ext.dt->format_label
+ 	  && new_st.ext.dt->format_label != &format_asterisk)
+ 	new_st.ext.dt->format_label
+ 	  = gfc_rebind_label (new_st.ext.dt->format_label,
+ 			      outer_omp_metadirective_region);
+       if (new_st.label1)
+ 	new_st.label1
+ 	  = gfc_rebind_label (new_st.label1, outer_omp_metadirective_region);
+       if (new_st.here)
+ 	new_st.here
+ 	  = gfc_rebind_label (new_st.here, outer_omp_metadirective_region);
+ 
        gfc_commit_symbols ();
        gfc_warning_check ();
        if (variant->next)
*************** gfc_parse_file (void)
*** 7578,7583 ****
--- 7604,7611 ----
    gfc_statement_label = NULL;
  
    gfc_omp_metadirective_region_count = 0;
+   gfc_omp_metadirective_region_stack.truncate (0);
+   gfc_omp_metadirective_region_stack.safe_push (0);
    gfc_in_omp_metadirective_body = false;
    gfc_matching_omp_context_selector = false;
  
diff -Nrcpad gcc-16-20251102/gcc/fortran/parse.h gcc-16-20251109/gcc/fortran/parse.h
*** gcc-16-20251102/gcc/fortran/parse.h	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/parse.h	Sun Nov  9 22:32:47 2025
*************** along with GCC; see the file COPYING3.
*** 22,27 ****
--- 22,29 ----
  #ifndef GFC_PARSE_H
  #define GFC_PARSE_H
  
+ #include "vec.h"
+ 
  /* Enum for what the compiler is currently doing.  */
  enum gfc_compile_state
  {
*************** extern bool gfc_matching_function;
*** 76,81 ****
--- 78,84 ----
  extern bool gfc_matching_omp_context_selector;
  extern bool gfc_in_omp_metadirective_body;
  extern int gfc_omp_metadirective_region_count;
+ extern vec<int> gfc_omp_metadirective_region_stack;
  
  match gfc_match_prefix (gfc_typespec *);
  bool is_oacc (gfc_state_data *);
diff -Nrcpad gcc-16-20251102/gcc/fortran/primary.cc gcc-16-20251109/gcc/fortran/primary.cc
*** gcc-16-20251102/gcc/fortran/primary.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/primary.cc	Sun Nov  9 22:32:47 2025
*************** gfc_convert_to_structure_constructor (gf
*** 3543,3549 ****
  	}
  
        /* Find the current component in the structure definition and check
! 	     its access is not private.  */
        if (comp)
  	this_comp = gfc_find_component (sym, comp->name, false, false, NULL);
        else
--- 3543,3549 ----
  	}
  
        /* Find the current component in the structure definition and check
! 	 its access is not private.  */
        if (comp)
  	this_comp = gfc_find_component (sym, comp->name, false, false, NULL);
        else
*************** gfc_match_rvalue (gfc_expr **result)
*** 3836,3843 ****
    bool implicit_char;
    gfc_ref *ref;
    gfc_symtree *pdt_st;
-   gfc_symbol *found_specific = NULL;
- 
  
    m = gfc_match ("%%loc");
    if (m == MATCH_YES)
--- 3836,3841 ----
*************** gfc_match_rvalue (gfc_expr **result)
*** 4085,4113 ****
  	  break;
  	}
  
-       gfc_gobble_whitespace ();
-       found_specific = NULL;
- 
-       /* Even if 'name' is that of a PDT template, priority has to be given to
- 	 possible specific procedures in the generic interface.  */
-       gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &pdt_st);
-       if (sym->generic && sym->generic->next
- 	  && gfc_peek_ascii_char() != '(')
- 	{
- 	  gfc_actual_arglist *arg = actual_arglist;
- 	  for (; arg && pdt_st; arg = arg->next)
- 	    gfc_resolve_expr (arg->expr);
- 	  found_specific = gfc_search_interface (sym->generic, 0,
- 						 &actual_arglist);
- 	}
- 
        /* Check to see if this is a PDT constructor.  The format of these
  	 constructors is rather unusual:
  		name [(type_params)](component_values)
  	 where, component_values excludes the type_params. With the present
  	 gfortran representation this is rather awkward because the two are not
! 	 distinguished, other than by their attributes.  */
!       if (sym->attr.generic && pdt_st != NULL && found_specific == NULL)
  	{
  	  gfc_symbol *pdt_sym;
  	  gfc_actual_arglist *ctr_arglist = NULL, *tmp;
--- 4083,4103 ----
  	  break;
  	}
  
        /* Check to see if this is a PDT constructor.  The format of these
  	 constructors is rather unusual:
  		name [(type_params)](component_values)
  	 where, component_values excludes the type_params. With the present
  	 gfortran representation this is rather awkward because the two are not
! 	 distinguished, other than by their attributes.
! 
! 	 Even if 'name' is that of a PDT template, priority has to be given to
! 	 specific procedures, other than the constructor, in the generic
! 	 interface.  */
! 
!       gfc_gobble_whitespace ();
!       gfc_find_sym_tree (gfc_dt_upper_string (name), NULL, 1, &pdt_st);
!       if (sym->attr.generic && pdt_st != NULL
! 	  && !(sym->generic->next && gfc_peek_ascii_char() != '('))
  	{
  	  gfc_symbol *pdt_sym;
  	  gfc_actual_arglist *ctr_arglist = NULL, *tmp;
*************** gfc_match_rvalue (gfc_expr **result)
*** 4172,4183 ****
  		  tmp = tmp->next;
  		}
  
! 	      if (found_specific)
! 		gfc_find_sym_tree (found_specific->name,
! 				   NULL, 1, &symtree);
! 	      else
! 		gfc_find_sym_tree (gfc_dt_lower_string (pdt_sym->name),
! 				   NULL, 1, &symtree);
  	      if (!symtree)
  		{
  		  gfc_get_ha_sym_tree (gfc_dt_lower_string (pdt_sym->name) ,
--- 4162,4169 ----
  		  tmp = tmp->next;
  		}
  
! 	      gfc_find_sym_tree (gfc_dt_lower_string (pdt_sym->name),
! 				 NULL, 1, &symtree);
  	      if (!symtree)
  		{
  		  gfc_get_ha_sym_tree (gfc_dt_lower_string (pdt_sym->name) ,
diff -Nrcpad gcc-16-20251102/gcc/fortran/resolve.cc gcc-16-20251109/gcc/fortran/resolve.cc
*** gcc-16-20251102/gcc/fortran/resolve.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/resolve.cc	Sun Nov  9 22:32:47 2025
*************** check_default_none_expr (gfc_expr **e, i
*** 8461,8467 ****
  		break;
  	      ns2 = ns2->parent;
  	    }
! 	  if (ns2 != NULL)
  	    {
  	      gfc_error ("Variable %qs at %L not specified in a locality spec "
  			"of DO CONCURRENT at %L but required due to "
--- 8461,8480 ----
  		break;
  	      ns2 = ns2->parent;
  	    }
! 
! 	  /* A DO CONCURRENT iterator cannot appear in a locality spec.  */
! 	  if (sym->ns->code->ext.concur.forall_iterator)
! 	    {
! 	      gfc_forall_iterator *iter
! 		= sym->ns->code->ext.concur.forall_iterator;
! 	      for (; iter; iter = iter->next)
! 		if (iter->var->symtree
! 		    && strcmp(sym->name, iter->var->symtree->name) == 0)
! 		  return 0;
! 	    }
! 
! 	  /* A named constant is not a variable, so skip test.  */
! 	  if (ns2 != NULL && sym->attr.flavor != FL_PARAMETER)
  	    {
  	      gfc_error ("Variable %qs at %L not specified in a locality spec "
  			"of DO CONCURRENT at %L but required due to "
*************** resolve_locality_spec (gfc_code *code, g
*** 8741,8746 ****
--- 8754,8761 ----
  	  plist = &((*plist)->next);
  	}
      }
+ 
+   delete data.sym_hash;
  }
  
  /* Resolve a list of FORALL iterators.  The FORALL index-name is constrained
diff -Nrcpad gcc-16-20251102/gcc/fortran/symbol.cc gcc-16-20251109/gcc/fortran/symbol.cc
*** gcc-16-20251102/gcc/fortran/symbol.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/symbol.cc	Sun Nov  9 22:32:47 2025
*************** gfc_get_st_label (int labelno)
*** 2753,2760 ****
  {
    gfc_st_label *lp;
    gfc_namespace *ns;
!   int omp_region = (gfc_in_omp_metadirective_body
! 		    ? gfc_omp_metadirective_region_count : 0);
  
    if (gfc_current_state () == COMP_DERIVED)
      ns = gfc_current_block ()->f2k_derived;
--- 2753,2759 ----
  {
    gfc_st_label *lp;
    gfc_namespace *ns;
!   int omp_region = gfc_omp_metadirective_region_stack.last ();
  
    if (gfc_current_state () == COMP_DERIVED)
      ns = gfc_current_block ()->f2k_derived;
*************** gfc_get_st_label (int labelno)
*** 2768,2789 ****
      }
  
    /* First see if the label is already in this namespace.  */
!   lp = ns->st_labels;
!   while (lp)
      {
!       if (lp->omp_region == omp_region)
  	{
! 	  if (lp->value == labelno)
! 	    return lp;
! 	  if (lp->value < labelno)
  	    lp = lp->left;
  	  else
  	    lp = lp->right;
  	}
-       else if (lp->omp_region < omp_region)
- 	lp = lp->left;
-       else
- 	lp = lp->right;
      }
  
    lp = XCNEW (gfc_st_label);
--- 2767,2794 ----
      }
  
    /* First see if the label is already in this namespace.  */
!   gcc_checking_assert (gfc_omp_metadirective_region_stack.length () > 0);
!   for (int omp_region_idx = gfc_omp_metadirective_region_stack.length () - 1;
!        omp_region_idx >= 0; omp_region_idx--)
      {
!       int omp_region2 = gfc_omp_metadirective_region_stack[omp_region_idx];
!       lp = ns->st_labels;
!       while (lp)
  	{
! 	  if (lp->omp_region == omp_region2)
! 	    {
! 	      if (lp->value == labelno)
! 		return lp;
! 	      if (lp->value < labelno)
! 		lp = lp->left;
! 	      else
! 		lp = lp->right;
! 	    }
! 	  else if (lp->omp_region < omp_region2)
  	    lp = lp->left;
  	  else
  	    lp = lp->right;
  	}
      }
  
    lp = XCNEW (gfc_st_label);
*************** gfc_get_st_label (int labelno)
*** 2799,2804 ****
--- 2804,2856 ----
    return lp;
  }
  
+ /* Rebind a statement label to a new OpenMP region. If a label with the same
+    value already exists in the new region, update it and return it. Otherwise,
+    move the label to the new region.  */
+ 
+ gfc_st_label *
+ gfc_rebind_label (gfc_st_label *label, int new_omp_region)
+ {
+   gfc_st_label *lp = label->ns->st_labels;
+   int labelno = label->value;
+ 
+   while (lp)
+     {
+       if (lp->omp_region == new_omp_region)
+ 	{
+ 	  if (lp->value == labelno)
+ 	    {
+ 	      if (lp == label)
+ 		return label;
+ 	      if (lp->defined == ST_LABEL_UNKNOWN
+ 		  && label->defined != ST_LABEL_UNKNOWN)
+ 		lp->defined = label->defined;
+ 	      if (lp->referenced == ST_LABEL_UNKNOWN
+ 		  && label->referenced != ST_LABEL_UNKNOWN)
+ 		lp->referenced = label->referenced;
+ 	      if (lp->format == NULL && label->format != NULL)
+ 		lp->format = label->format;
+ 	      gfc_delete_bbt (&label->ns->st_labels, label, compare_st_labels);
+ 	      return lp;
+ 	    }
+ 	  if (lp->value < labelno)
+ 	    lp = lp->left;
+ 	  else
+ 	    lp = lp->right;
+ 	}
+       else if (lp->omp_region < new_omp_region)
+ 	lp = lp->left;
+       else
+ 	lp = lp->right;
+     }
+ 
+   gfc_delete_bbt (&label->ns->st_labels, label, compare_st_labels);
+   label->left = nullptr;
+   label->right = nullptr;
+   label->omp_region = new_omp_region;
+   gfc_insert_bbt (&label->ns->st_labels, label, compare_st_labels);
+   return label;
+ }
  
  /* Called when a statement with a statement label is about to be
     accepted.  We add the label to the list of the current namespace,
*************** gfc_define_st_label (gfc_st_label *lp, g
*** 2812,2818 ****
  
    labelno = lp->value;
  
!   if (lp->defined != ST_LABEL_UNKNOWN)
      gfc_error ("Duplicate statement label %d at %L and %L", labelno,
  	       &lp->where, label_locus);
    else
--- 2864,2870 ----
  
    labelno = lp->value;
  
!   if (lp->defined != ST_LABEL_UNKNOWN && !gfc_in_omp_metadirective_body)
      gfc_error ("Duplicate statement label %d at %L and %L", labelno,
  	       &lp->where, label_locus);
    else
*************** gfc_reference_st_label (gfc_st_label *lp
*** 2897,2902 ****
--- 2949,2955 ----
      }
  
    if (lp->referenced == ST_LABEL_DO_TARGET && type == ST_LABEL_DO_TARGET
+       && !gfc_in_omp_metadirective_body
        && !gfc_notify_std (GFC_STD_F95_OBS | GFC_STD_F2018_DEL,
  			  "Shared DO termination label %d at %C", labelno))
      return false;
diff -Nrcpad gcc-16-20251102/gcc/fortran/trans-array.cc gcc-16-20251109/gcc/fortran/trans-array.cc
*** gcc-16-20251102/gcc/fortran/trans-array.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/trans-array.cc	Sun Nov  9 22:32:47 2025
*************** along with GCC; see the file COPYING3.
*** 92,97 ****
--- 92,99 ----
  #include "trans-array.h"
  #include "trans-const.h"
  #include "dependency.h"
+ #include "cgraph.h"	/* For cgraph_node::add_new_function.  */
+ #include "function.h"	/* For push_struct_function.  */
  
  static bool gfc_get_array_constructor_size (mpz_t *, gfc_constructor_base);
  
*************** enum {DEALLOCATE_ALLOC_COMP = 1, NULLIFY
*** 10022,10027 ****
--- 10024,10165 ----
        BCAST_ALLOC_COMP};
  
  static gfc_actual_arglist *pdt_param_list;
+ static bool generating_copy_helper;
+ static hash_set<gfc_symbol *> seen_derived_types;
+ 
+ /* Forward declaration of structure_alloc_comps for wrapper generator.  */
+ static tree structure_alloc_comps (gfc_symbol *, tree, tree, int, int, int,
+ 				    gfc_co_subroutines_args *, bool);
+ 
+ /* Generate a wrapper function that performs element-wise deep copy for
+    recursive allocatable array components. This wrapper is passed as a
+    function pointer to the runtime helper _gfortran_cfi_deep_copy_array,
+    allowing recursion to happen at runtime instead of compile time.  */
+ 
+ static tree
+ get_copy_helper_function_type (void)
+ {
+   static tree fn_type = NULL_TREE;
+   if (fn_type == NULL_TREE)
+     fn_type = build_function_type_list (void_type_node,
+ 					pvoid_type_node,
+ 					pvoid_type_node,
+ 					NULL_TREE);
+   return fn_type;
+ }
+ 
+ static tree
+ get_copy_helper_pointer_type (void)
+ {
+   static tree ptr_type = NULL_TREE;
+   if (ptr_type == NULL_TREE)
+     ptr_type = build_pointer_type (get_copy_helper_function_type ());
+   return ptr_type;
+ }
+ 
+ static tree
+ generate_element_copy_wrapper (gfc_symbol *der_type, tree comp_type,
+ 				int purpose, int caf_mode)
+ {
+   tree fndecl, fntype, result_decl;
+   tree dest_parm, src_parm, dest_typed, src_typed;
+   tree der_type_ptr;
+   stmtblock_t block;
+   tree decls;
+   tree body;
+ 
+   fntype = get_copy_helper_function_type ();
+ 
+   fndecl = build_decl (input_location, FUNCTION_DECL,
+ 		       create_tmp_var_name ("copy_element"),
+ 		       fntype);
+ 
+   TREE_STATIC (fndecl) = 1;
+   TREE_USED (fndecl) = 1;
+   DECL_ARTIFICIAL (fndecl) = 1;
+   DECL_IGNORED_P (fndecl) = 0;
+   TREE_PUBLIC (fndecl) = 0;
+   DECL_UNINLINABLE (fndecl) = 1;
+   DECL_EXTERNAL (fndecl) = 0;
+   DECL_CONTEXT (fndecl) = NULL_TREE;
+   DECL_INITIAL (fndecl) = make_node (BLOCK);
+   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
+ 
+   result_decl = build_decl (input_location, RESULT_DECL, NULL_TREE,
+ 			    void_type_node);
+   DECL_ARTIFICIAL (result_decl) = 1;
+   DECL_IGNORED_P (result_decl) = 1;
+   DECL_CONTEXT (result_decl) = fndecl;
+   DECL_RESULT (fndecl) = result_decl;
+ 
+   dest_parm = build_decl (input_location, PARM_DECL,
+ 			  get_identifier ("dest"), pvoid_type_node);
+   src_parm = build_decl (input_location, PARM_DECL,
+ 			 get_identifier ("src"), pvoid_type_node);
+ 
+   DECL_ARTIFICIAL (dest_parm) = 1;
+   DECL_ARTIFICIAL (src_parm) = 1;
+   DECL_ARG_TYPE (dest_parm) = pvoid_type_node;
+   DECL_ARG_TYPE (src_parm) = pvoid_type_node;
+   DECL_CONTEXT (dest_parm) = fndecl;
+   DECL_CONTEXT (src_parm) = fndecl;
+ 
+   DECL_ARGUMENTS (fndecl) = dest_parm;
+   TREE_CHAIN (dest_parm) = src_parm;
+ 
+   push_struct_function (fndecl);
+   cfun->function_end_locus = input_location;
+ 
+   pushlevel ();
+   gfc_init_block (&block);
+ 
+   bool saved_generating = generating_copy_helper;
+   generating_copy_helper = true;
+ 
+   /* When generating a wrapper, we need a fresh type tracking state to
+      avoid inheriting the parent context's seen_derived_types, which would
+      cause infinite recursion when the wrapper tries to handle the same
+      recursive type.  Save elements, clear the set, generate wrapper, then
+      restore elements.  */
+   vec<gfc_symbol *> saved_symbols = vNULL;
+   for (hash_set<gfc_symbol *>::iterator it = seen_derived_types.begin ();
+        it != seen_derived_types.end (); ++it)
+     saved_symbols.safe_push (*it);
+   seen_derived_types.empty ();
+ 
+   der_type_ptr = build_pointer_type (comp_type);
+   dest_typed = fold_convert (der_type_ptr, dest_parm);
+   src_typed = fold_convert (der_type_ptr, src_parm);
+ 
+   dest_typed = build_fold_indirect_ref (dest_typed);
+   src_typed = build_fold_indirect_ref (src_typed);
+ 
+   body = structure_alloc_comps (der_type, src_typed, dest_typed,
+ 				0, purpose, caf_mode, NULL, false);
+   gfc_add_expr_to_block (&block, body);
+ 
+   /* Restore saved symbols.  */
+   seen_derived_types.empty ();
+   for (unsigned i = 0; i < saved_symbols.length (); i++)
+     seen_derived_types.add (saved_symbols[i]);
+   saved_symbols.release ();
+   generating_copy_helper = saved_generating;
+ 
+   body = gfc_finish_block (&block);
+   decls = getdecls ();
+ 
+   poplevel (1, 1);
+ 
+   DECL_SAVED_TREE (fndecl)
+     = fold_build3_loc (DECL_SOURCE_LOCATION (fndecl), BIND_EXPR,
+ 		       void_type_node, decls, body, DECL_INITIAL (fndecl));
+ 
+   pop_cfun ();
+ 
+   cgraph_node::add_new_function (fndecl, false);
+ 
+   return build1 (ADDR_EXPR, get_copy_helper_pointer_type (), fndecl);
+ }
  
  static tree
  structure_alloc_comps (gfc_symbol * der_type, tree decl, tree dest,
*************** structure_alloc_comps (gfc_symbol * der_
*** 10052,10058 ****
    int caf_dereg_mode;
    symbol_attribute *attr;
    bool deallocate_called;
-   static hash_set<gfc_symbol *> seen_derived_types;
  
    gfc_init_block (&fnblock);
  
--- 10190,10195 ----
*************** structure_alloc_comps (gfc_symbol * der_
*** 10186,10191 ****
--- 10323,10329 ----
  	   && seen_derived_types.contains (c->ts.u.derived))
  	  || (c->ts.type == BT_CLASS
  	      && seen_derived_types.contains (CLASS_DATA (c)->ts.u.derived));
+       bool inside_wrapper = generating_copy_helper;
  
        bool is_pdt_type = c->ts.type == BT_DERIVED
  			 && c->ts.u.derived->attr.pdt_type;
*************** structure_alloc_comps (gfc_symbol * der_
*** 10862,10869 ****
  					   false, false, NULL_TREE, NULL_TREE);
  	      gfc_add_expr_to_block (&fnblock, tmp);
  	    }
  	  else if (c->attr.allocatable && !c->attr.proc_pointer
! 		   && (!(cmp_has_alloc_comps && c->as) || c->attr.codimension
  		       || caf_in_coarray (caf_mode)))
  	    {
  	      rank = c->as ? c->as->rank : 0;
--- 11000,11064 ----
  					   false, false, NULL_TREE, NULL_TREE);
  	      gfc_add_expr_to_block (&fnblock, tmp);
  	    }
+       /* Special case: recursive allocatable array components require
+ 	 runtime helpers to avoid compile-time infinite recursion.  Generate
+ 	 a call to _gfortran_cfi_deep_copy_array with an element copy
+ 	 wrapper.  When inside a wrapper, reuse current_function_decl.  */
+       else if (c->attr.allocatable && c->as && cmp_has_alloc_comps && same_type
+ 	       && purpose == COPY_ALLOC_COMP && !c->attr.proc_pointer
+ 	       && !c->attr.codimension && !caf_in_coarray (caf_mode)
+ 	       && c->ts.type == BT_DERIVED && c->ts.u.derived != NULL)
+ 	    {
+ 	      tree copy_wrapper, call, dest_addr, src_addr, elem_type;
+ 	      tree helper_ptr_type;
+ 	      tree alloc_expr;
+ 	      int comp_rank;
+ 
+ 	      /* Get the element type from ctype (already the component
+ 		 type).  For arrays we need the element type, not the array
+ 		 type.  */
+ 	      elem_type = ctype;
+ 	      if (GFC_DESCRIPTOR_TYPE_P (ctype))
+ 		elem_type = gfc_get_element_type (ctype);
+ 	      else if (TREE_CODE (ctype) == ARRAY_TYPE)
+ 		elem_type = TREE_TYPE (ctype);
+ 
+ 	      helper_ptr_type = get_copy_helper_pointer_type ();
+ 
+ 	      comp_rank = c->as ? c->as->rank : 0;
+ 	      alloc_expr = gfc_duplicate_allocatable_nocopy (dcmp, comp, ctype,
+ 							     comp_rank);
+ 	      gfc_add_expr_to_block (&fnblock, alloc_expr);
+ 
+ 	      /* Generate or reuse the element copy helper.  Inside an
+ 		 existing helper we can reuse the current function to
+ 		 prevent recursive generation.  */
+ 	      if (inside_wrapper)
+ 		copy_wrapper
+ 		  = gfc_build_addr_expr (NULL_TREE, current_function_decl);
+ 	      else
+ 		copy_wrapper
+ 		  = generate_element_copy_wrapper (c->ts.u.derived, elem_type,
+ 						   purpose, caf_mode);
+ 	      copy_wrapper = fold_convert (helper_ptr_type, copy_wrapper);
+ 
+ 	      /* Build addresses of descriptors.  */
+ 	      dest_addr = gfc_build_addr_expr (pvoid_type_node, dcmp);
+ 	      src_addr = gfc_build_addr_expr (pvoid_type_node, comp);
+ 
+ 	      /* Build call: _gfortran_cfi_deep_copy_array (&dcmp, &comp,
+ 		 wrapper).  */
+ 	      call = build_call_expr_loc (input_location,
+ 					  gfor_fndecl_cfi_deep_copy_array, 3,
+ 					  dest_addr, src_addr,
+ 					  copy_wrapper);
+ 	      gfc_add_expr_to_block (&fnblock, call);
+ 	    }
  	  else if (c->attr.allocatable && !c->attr.proc_pointer
! 		   && (add_when_allocated != NULL_TREE
! 		       || !cmp_has_alloc_comps
! 		       || !c->as
! 		       || c->attr.codimension
  		       || caf_in_coarray (caf_mode)))
  	    {
  	      rank = c->as ? c->as->rank : 0;
diff -Nrcpad gcc-16-20251102/gcc/fortran/trans-decl.cc gcc-16-20251109/gcc/fortran/trans-decl.cc
*** gcc-16-20251102/gcc/fortran/trans-decl.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/trans-decl.cc	Sun Nov  9 22:32:47 2025
*************** tree gfor_fndecl_zgemm;
*** 248,253 ****
--- 248,256 ----
  /* RANDOM_INIT function.  */
  tree gfor_fndecl_random_init;      /* libgfortran, 1 image only.  */
  
+ /* Deep copy helper for recursive allocatable array components.  */
+ tree gfor_fndecl_cfi_deep_copy_array;
+ 
  static void
  gfc_add_decl_to_parent_function (tree decl)
  {
*************** gfc_build_intrinsic_function_decls (void
*** 3588,3593 ****
--- 3591,3613 ----
      gfc_charlen_type_node, pchar1_type_node, gfc_charlen_type_node,
      gfc_logical4_type_node);
  
+   {
+     tree copy_helper_ptr_type;
+     tree copy_helper_fn_type;
+ 
+     copy_helper_fn_type = build_function_type_list (void_type_node,
+ 						    pvoid_type_node,
+ 						    pvoid_type_node,
+ 						    NULL_TREE);
+     copy_helper_ptr_type = build_pointer_type (copy_helper_fn_type);
+ 
+     gfor_fndecl_cfi_deep_copy_array
+       = gfc_build_library_function_decl_with_spec (
+ 	  get_identifier (PREFIX ("cfi_deep_copy_array")), ". R R . ",
+ 	  void_type_node, 3, pvoid_type_node, pvoid_type_node,
+ 	  copy_helper_ptr_type);
+   }
+ 
    gfor_fndecl_adjustl = gfc_build_library_function_decl_with_spec (
  	get_identifier (PREFIX("adjustl")), ". W . R ",
  	void_type_node, 3, pchar1_type_node, gfc_charlen_type_node,
diff -Nrcpad gcc-16-20251102/gcc/fortran/trans-intrinsic.cc gcc-16-20251109/gcc/fortran/trans-intrinsic.cc
*** gcc-16-20251102/gcc/fortran/trans-intrinsic.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/trans-intrinsic.cc	Sun Nov  9 22:32:47 2025
*************** conv_intrinsic_atomic_op (gfc_code *code
*** 12559,12569 ****
        else
  	image_index = integer_zero_node;
  
        if (!POINTER_TYPE_P (TREE_TYPE (value)))
  	{
! 	  tmp = gfc_create_var (TREE_TYPE (TREE_TYPE (atom)), "value");
! 	  gfc_add_modify (&block, tmp, fold_convert (TREE_TYPE (tmp), value));
!           value = gfc_build_addr_expr (NULL_TREE, tmp);
  	}
  
        gfc_init_se (&argse, NULL);
--- 12559,12581 ----
        else
  	image_index = integer_zero_node;
  
+       /* Ensure VALUE names addressable storage: taking the address of a
+ 	 constant is invalid in C, and scalars need a temporary as well.  */
        if (!POINTER_TYPE_P (TREE_TYPE (value)))
  	{
! 	  tree elem
! 	    = fold_convert (TREE_TYPE (TREE_TYPE (atom)), value);
! 	  elem = gfc_trans_force_lval (&block, elem);
! 	  value = gfc_build_addr_expr (NULL_TREE, elem);
! 	}
!       else if (TREE_CODE (value) == ADDR_EXPR
! 	       && TREE_CONSTANT (TREE_OPERAND (value, 0)))
! 	{
! 	  tree elem
! 	    = fold_convert (TREE_TYPE (TREE_TYPE (atom)),
! 			    build_fold_indirect_ref (value));
! 	  elem = gfc_trans_force_lval (&block, elem);
! 	  value = gfc_build_addr_expr (NULL_TREE, elem);
  	}
  
        gfc_init_se (&argse, NULL);
diff -Nrcpad gcc-16-20251102/gcc/fortran/trans.h gcc-16-20251109/gcc/fortran/trans.h
*** gcc-16-20251102/gcc/fortran/trans.h	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/fortran/trans.h	Sun Nov  9 22:32:47 2025
*************** extern GTY(()) tree gfor_fndecl_ieee_pro
*** 1004,1009 ****
--- 1004,1012 ----
  extern GTY(()) tree gfor_fndecl_random_init;
  extern GTY(()) tree gfor_fndecl_caf_random_init;
  
+ /* Deep copy helper for recursive allocatable array components.  */
+ extern GTY(()) tree gfor_fndecl_cfi_deep_copy_array;
+ 
  /* True if node is an integer constant.  */
  #define INTEGER_CST_P(node) (TREE_CODE(node) == INTEGER_CST)
  
diff -Nrcpad gcc-16-20251102/gcc/gdbhooks.py gcc-16-20251109/gcc/gdbhooks.py
*** gcc-16-20251102/gcc/gdbhooks.py	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/gdbhooks.py	Sun Nov  9 22:32:48 2025
*************** class CfgEdgePrinter:
*** 389,394 ****
--- 389,420 ----
          return result
  
  ######################################################################
+ # Pretty-printers for -fanalyzer (namespace ana)
+ ######################################################################
+ 
+ class AnaSupernodePrinter:
+     def __init__(self, gdbval):
+         self.gdbval = gdbval
+ 
+     def to_string (self):
+         result = '<ana::supernode 0x%x' % intptr(self.gdbval)
+         if intptr(self.gdbval):
+             result += ' (SN %i)' % intptr(self.gdbval['m_index'])
+         result += '>'
+         return result
+ 
+ class AnaExplodedNodePrinter:
+     def __init__(self, gdbval):
+         self.gdbval = gdbval
+ 
+     def to_string (self):
+         result = '<ana::exploded_node 0x%x' % intptr(self.gdbval)
+         if intptr(self.gdbval):
+             result += ' (EN %i)' % intptr(self.gdbval['m_index'])
+         result += '>'
+         return result
+ 
+ ######################################################################
  
  class Rtx:
      def __init__(self, gdbval):
*************** def build_pretty_printer():
*** 625,630 ****
--- 651,663 ----
      pp.add_printer_for_types(['basic_block', 'basic_block_def *'],
                               'basic_block',
                               BasicBlockPrinter)
+     pp.add_printer_for_types(['ana::supernode *', 'const ana::supernode *'],
+                              'ana::supernode',
+                              AnaSupernodePrinter)
+     pp.add_printer_for_types(['ana::exploded_node *',
+                               'dedge<ana::eg_traits>::node_t *'],
+                              'ana::exploded_node',
+                              AnaExplodedNodePrinter)
      pp.add_printer_for_types(['edge', 'edge_def *'],
                               'edge',
                               CfgEdgePrinter)
diff -Nrcpad gcc-16-20251102/gcc/gimple-isel.cc gcc-16-20251109/gcc/gimple-isel.cc
*** gcc-16-20251102/gcc/gimple-isel.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/gimple-isel.cc	Sun Nov  9 22:32:48 2025
*************** gimple_expand_vec_set_extract_expr (stru
*** 102,107 ****
--- 102,117 ----
        tree pos = TREE_OPERAND (ref, 1);
  
        tree view_op0 = TREE_OPERAND (op0, 0);
+ 
+       tree idx = TREE_OPERAND (ref, 1);
+       // if index is a constant, then check the bounds
+       poly_uint64 idx_poly;
+       if (poly_int_tree_p (idx, &idx_poly))
+ 	{
+ 	  poly_uint64 nelts = TYPE_VECTOR_SUBPARTS (TREE_TYPE (view_op0));
+ 	  if (known_gt (idx_poly, nelts))
+ 	    return false;
+ 	}
        machine_mode outermode = TYPE_MODE (TREE_TYPE (view_op0));
        machine_mode extract_mode = TYPE_MODE (TREE_TYPE (ref));
  
diff -Nrcpad gcc-16-20251102/gcc/gimple-iterator.cc gcc-16-20251109/gcc/gimple-iterator.cc
*** gcc-16-20251102/gcc/gimple-iterator.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/gimple-iterator.cc	Sun Nov  9 22:32:48 2025
*************** gsi_set_stmt (gimple_stmt_iterator *gsi,
*** 389,396 ****
  }
  
  
! /* Move all statements in the sequence before I to a new sequence.
!    Return this new sequence.  I is set to the head of the new list.  */
  
  void
  gsi_split_seq_before (gimple_stmt_iterator *i, gimple_seq *pnew_seq)
--- 389,396 ----
  }
  
  
! /* Move all statements in the sequence starting at I to a new sequence.
!    Set *PNEW_SEQ to this sequence.  I is set to the head of the new list.  */
  
  void
  gsi_split_seq_before (gimple_stmt_iterator *i, gimple_seq *pnew_seq)
*************** void
*** 471,488 ****
  gsi_replace_with_seq (gimple_stmt_iterator *gsi, gimple_seq seq,
  		      bool update_eh_info)
  {
-   gimple_stmt_iterator seqi;
-   gimple *last;
    if (gimple_seq_empty_p (seq))
      {
        gsi_remove (gsi, true);
        return;
      }
!   seqi = gsi_last (seq);
!   last = gsi_stmt (seqi);
!   gsi_remove (&seqi, false);
    gsi_insert_seq_before (gsi, seq, GSI_SAME_STMT);
!   gsi_replace (gsi, last, update_eh_info);
  }
  
  
--- 471,486 ----
  gsi_replace_with_seq (gimple_stmt_iterator *gsi, gimple_seq seq,
  		      bool update_eh_info)
  {
    if (gimple_seq_empty_p (seq))
      {
        gsi_remove (gsi, true);
        return;
      }
!   gimple_seq tail;
!   gimple_stmt_iterator lasti = gsi_last (seq);
!   gsi_split_seq_before (&lasti, &tail);
    gsi_insert_seq_before (gsi, seq, GSI_SAME_STMT);
!   gsi_replace (gsi, gsi_stmt (lasti), update_eh_info);
  }
  
  
diff -Nrcpad gcc-16-20251102/gcc/gimple-ssa-isolate-paths.cc gcc-16-20251109/gcc/gimple-ssa-isolate-paths.cc
*** gcc-16-20251102/gcc/gimple-ssa-isolate-paths.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/gimple-ssa-isolate-paths.cc	Sun Nov  9 22:32:48 2025
*************** check_loadstore (gimple *stmt, tree op,
*** 56,62 ****
      {
        TREE_THIS_VOLATILE (op) = 1;
        TREE_SIDE_EFFECTS (op) = 1;
!       update_stmt (stmt);
        return true;
      }
    return false;
--- 56,62 ----
      {
        TREE_THIS_VOLATILE (op) = 1;
        TREE_SIDE_EFFECTS (op) = 1;
!       gimple_set_has_volatile_ops (stmt, true);
        return true;
      }
    return false;
*************** find_implicit_erroneous_behavior (void)
*** 762,767 ****
--- 762,768 ----
  
  	      /* We've got a NULL PHI argument.  Now see if the
   	         PHI's result is dereferenced within BB.  */
+ 	      auto_vec <gimple *, 4> uses_in_bb;
  	      FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
  	        {
  	          /* We only care about uses in BB.  Catching cases in
*************** find_implicit_erroneous_behavior (void)
*** 774,791 ****
  		    ? gimple_location (use_stmt)
  		    : phi_arg_loc;
  
! 		  if (stmt_uses_name_in_undefined_way (use_stmt, lhs, loc)
! 		      && (duplicate || can_duplicate_block_p (bb)))
  		    {
! 		      duplicate = isolate_path (bb, duplicate, e,
! 						use_stmt, lhs, false);
! 
! 		      /* When we remove an incoming edge, we need to
! 			 reprocess the Ith element.  */
! 		      next_i = i;
! 		      cfg_altered = true;
  		    }
  		}
  	    }
  	}
      }
--- 775,797 ----
  		    ? gimple_location (use_stmt)
  		    : phi_arg_loc;
  
! 		  if (stmt_uses_name_in_undefined_way (use_stmt, lhs, loc))
  		    {
! 		      if (!can_duplicate_block_p (bb))
! 			break;
! 		      uses_in_bb.safe_push (use_stmt);
  		    }
  		}
+ 	      for (gimple *use_stmt : uses_in_bb)
+ 		{
+ 		  duplicate = isolate_path (bb, duplicate, e,
+ 					    use_stmt, lhs, false);
+ 
+ 		  /* When we remove an incoming edge, we need to
+ 		     reprocess the Ith element.  */
+ 		  next_i = i;
+ 		  cfg_altered = true;
+ 		}
  	    }
  	}
      }
diff -Nrcpad gcc-16-20251102/gcc/gimple.cc gcc-16-20251109/gcc/gimple.cc
*** gcc-16-20251102/gcc/gimple.cc	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/gimple.cc	Sun Nov  9 22:32:48 2025
*************** gimple_copy (gimple *stmt)
*** 2283,2288 ****
--- 2283,2310 ----
  	}
      }
  
+   switch (gimple_code (stmt))
+     {
+     case GIMPLE_OMP_ATOMIC_LOAD:
+       {
+ 	gomp_atomic_load *g = as_a <gomp_atomic_load *> (copy);
+ 	gimple_omp_atomic_load_set_lhs (g,
+ 	  unshare_expr (gimple_omp_atomic_load_lhs (g)));
+ 	gimple_omp_atomic_load_set_rhs (g,
+ 	  unshare_expr (gimple_omp_atomic_load_rhs (g)));
+ 	break;
+       }
+     case GIMPLE_OMP_ATOMIC_STORE:
+       {
+ 	gomp_atomic_store *g = as_a <gomp_atomic_store *> (copy);
+ 	gimple_omp_atomic_store_set_val (g,
+ 	  unshare_expr (gimple_omp_atomic_store_val (g)));
+ 	break;
+       }
+     default:
+       break;
+     }
+ 
    /* Make copy of operands.  */
    for (i = 0; i < num_ops; i++)
      gimple_set_op (copy, i, unshare_expr (gimple_op (stmt, i)));
diff -Nrcpad gcc-16-20251102/gcc/gimple.h gcc-16-20251109/gcc/gimple.h
*** gcc-16-20251102/gcc/gimple.h	Sun Nov  2 22:32:21 2025
--- gcc-16-20251109/gcc/gimple.h	Sun Nov  9 22:32:48 2025
*************** struct GTY((desc ("gimple_statement_stru
*** 250,257 ****
    /* Nonzero if this statement contains volatile operands.  */
    unsigned has_volatile_ops 	: 1;
  
!   /* Padding to get subcode to 16 bit alignment.  */
!   unsigned pad			: 1;
  
    /* The SUBCODE field can be used for tuple-specific flags for tuples
       that do not require subcodes.  Note that SUBCODE should be at
--- 250,257 ----
    /* Nonzero if this statement contains volatile operands.  */
    unsigned has_volatile_ops 	: 1;
  
!   /* Infrastructure local flag.  Always clear.  */
!   unsigned ilf			: 1;
  
    /* The SUBCODE field can be used for tuple-specific flags for tuples
       that do not require subcodes.  Note that SUBCODE should be at
diff -Nrcpad gcc-16-20251102/gcc/lto/ChangeLog gcc-16-20251109/gcc/lto/ChangeLog
*** gcc-16-20251102/gcc/lto/ChangeLog	Sun Nov  2 22:32:22 2025
--- gcc-16-20251109/gcc/lto/ChangeLog	Sun Nov  9 22:32:48 2025
***************
*** 1,3 ****
--- 1,11 ----
+ 2025-11-04  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR lto/122515
+ 	* lto.h (lto_section_slot): Set type of START to off_t.
+ 	* lto-common.cc (lto_read_section_data): Adjust.
+ 	* lto-object.cc (lto_obj_file_open): Set type of OFFSET to
+ 	int64_t.
+ 
  2025-10-30  Michal Jires  <mjires@suse.cz>
  
  	* lto.cc (stream_out_partitions): Remove asm_nodes_out.
diff -Nrcpad gcc-16-20251102/gcc/lto/lto-common.cc gcc-16-20251109/gcc/lto/lto-common.cc
*** gcc-16-20251102/gcc/lto/lto-common.cc	Sun Nov  2 22:32:22 2025
--- gcc-16-20251109/gcc/lto/lto-common.cc	Sun Nov  9 22:32:48 2025
*************** static size_t page_mask;
*** 2395,2409 ****
  
  static char *
  lto_read_section_data (struct lto_file_decl_data *file_data,
! 		       intptr_t offset, size_t len)
  {
    char *result;
    static int fd = -1;
    static char *fd_name;
  #if LTO_MMAP_IO
!   intptr_t computed_len;
!   intptr_t computed_offset;
!   intptr_t diff;
  #endif
  
    /* Keep a single-entry file-descriptor cache.  The last file we
--- 2395,2409 ----
  
  static char *
  lto_read_section_data (struct lto_file_decl_data *file_data,
! 		       off_t offset, size_t len)
  {
    char *result;
    static int fd = -1;
    static char *fd_name;
  #if LTO_MMAP_IO
!   size_t computed_len;
!   off_t computed_offset;
!   off_t diff;
  #endif
  
    /* Keep a single-entry file-descriptor cache.  The last file we
*************** lto_read_section_data (struct lto_file_d
*** 2436,2444 ****
        page_mask = ~(page_size - 1);
      }
  
!   computed_offset = offset & page_mask;
    diff = offset - computed_offset;
!   computed_len = len + diff;
  
    result = (char *) mmap (NULL, computed_len, PROT_READ, MAP_PRIVATE,
  			  fd, computed_offset);
--- 2436,2450 ----
        page_mask = ~(page_size - 1);
      }
  
!   computed_offset = offset & ((off_t) page_mask);
    diff = offset - computed_offset;
!   if (len > (size_t) (SSIZE_MAX - diff))
!     {
!       fatal_error (input_location, "Cannot map %s: section is too long",
! 		   file_data->file_name);
!       return NULL;
!     }
!   computed_len = (size_t) diff + len;
  
    result = (char *) mmap (NULL, computed_len, PROT_READ, MAP_PRIVATE,
  			  fd, computed_offset);
diff -Nrcpad gcc-16-20251102/gcc/lto/lto-object.cc gcc-16-20251109/gcc/lto/lto-object.cc
*** gcc-16-20251102/gcc/lto/lto-object.cc	Sun Nov  2 22:32:22 2025
--- gcc-16-20251109/gcc/lto/lto-object.cc	Sun Nov  9 22:32:48 2025
*************** lto_file *
*** 69,78 ****
  lto_obj_file_open (const char *filename, bool writable)
  {
    const char *offset_p;
-   long loffset;
    int consumed;
    char *fname;
!   off_t offset;
    struct lto_simple_object *lo;
    const char *errmsg;
    int err;
--- 69,77 ----
  lto_obj_file_open (const char *filename, bool writable)
  {
    const char *offset_p;
    int consumed;
    char *fname;
!   int64_t offset;
    struct lto_simple_object *lo;
    const char *errmsg;
    int err;
*************** lto_obj_file_open (const char *filename,
*** 80,92 ****
    offset_p = strrchr (filename, '@');
    if (offset_p != NULL
        && offset_p != filename
!       && sscanf (offset_p, "@%li%n", &loffset, &consumed) >= 1
        && strlen (offset_p) == (unsigned int) consumed)
      {
        fname = XNEWVEC (char, offset_p - filename + 1);
        memcpy (fname, filename, offset_p - filename);
        fname[offset_p - filename] = '\0';
-       offset = (off_t) loffset;
      }
    else
      {
--- 79,90 ----
    offset_p = strrchr (filename, '@');
    if (offset_p != NULL
        && offset_p != filename
!       && sscanf (offset_p, "@%" PRIi64 "%n", &offset, &consumed) >= 1
        && strlen (offset_p) == (unsigned int) consumed)
      {
        fname = XNEWVEC (char, offset_p - filename + 1);
        memcpy (fname, filename, offset_p - filename);
        fname[offset_p - filename] = '\0';
      }
    else
      {
diff -Nrcpad gcc-16-20251102/gcc/lto/lto.h gcc-16-20251109/gcc/lto/lto.h
*** gcc-16-20251102/gcc/lto/lto.h	Sun Nov  2 22:32:22 2025
--- gcc-16-20251109/gcc/lto/lto.h	Sun Nov  9 22:32:48 2025
*************** extern int lto_link_dump_id, decl_merge_
*** 58,64 ****
  struct lto_section_slot
  {
    const char *name;
!   intptr_t start;
    size_t len;
    struct lto_section_slot *next;
  };
--- 58,64 ----
  struct lto_section_slot
  {
    const char *name;
!   off_t start;
    size_t len;
    struct lto_section_slot *next;
  };
diff -Nrcpad gcc-16-20251102/gcc/lto-wrapper.cc gcc-16-20251109/gcc/lto-wrapper.cc
*** gcc-16-20251102/gcc/lto-wrapper.cc	Sun Nov  2 22:32:22 2025
--- gcc-16-20251109/gcc/lto-wrapper.cc	Sun Nov  9 22:32:48 2025
*************** debug_objcopy (const char *infile, bool
*** 1214,1231 ****
  
    const char *p;
    const char *orig_infile = infile;
!   off_t inoff = 0;
!   long loffset;
    int consumed;
    if ((p = strrchr (infile, '@'))
        && p != infile
!       && sscanf (p, "@%li%n", &loffset, &consumed) >= 1
        && strlen (p) == (unsigned int) consumed)
      {
        char *fname = xstrdup (infile);
        fname[p - infile] = '\0';
        infile = fname;
-       inoff = (off_t) loffset;
      }
    int infd = open (infile, O_RDONLY | O_BINARY);
    if (infd == -1)
--- 1214,1229 ----
  
    const char *p;
    const char *orig_infile = infile;
!   int64_t inoff = 0;
    int consumed;
    if ((p = strrchr (infile, '@'))
        && p != infile
!       && sscanf (p, "@%" PRIi64 "%n", &inoff, &consumed) >= 1
        && strlen (p) == (unsigned int) consumed)
      {
        char *fname = xstrdup (infile);
        fname[p - infile] = '\0';
        infile = fname;
      }
    int infd = open (infile, O_RDONLY | O_BINARY);
    if (infd == -1)
*************** run_gcc (unsigned argc, char *argv[])
*** 1491,1498 ****
      {
        char *p;
        int fd;
!       off_t file_offset = 0;
!       long loffset;
        int consumed;
        char *filename = argv[i];
  
--- 1489,1495 ----
      {
        char *p;
        int fd;
!       int64_t file_offset = 0;
        int consumed;
        char *filename = argv[i];
  
*************** run_gcc (unsigned argc, char *argv[])
*** 1506,1518 ****
  
        if ((p = strrchr (argv[i], '@'))
  	  && p != argv[i]
! 	  && sscanf (p, "@%li%n", &loffset, &consumed) >= 1
  	  && strlen (p) == (unsigned int) consumed)
  	{
  	  filename = XNEWVEC (char, p - argv[i] + 1);
  	  memcpy (filename, argv[i], p - argv[i]);
  	  filename[p - argv[i]] = '\0';
- 	  file_offset = (off_t) loffset;
  	}
        fd = open (filename, O_RDONLY | O_BINARY);
        /* Linker plugin passes -fresolution and -flinker-output options.
--- 1503,1514 ----
  
        if ((p = strrchr (argv[i], '@'))
  	  && p != argv[i]
! 	  && sscanf (p, "@%" PRIi64 "%n", &file_offset, &consumed) >= 1
  	  && strlen (p) == (unsigned int) consumed)
  	{
  	  filename = XNEWVEC (char, p - argv[i] + 1);
  	  memcpy (filename, argv[i], p - argv[i]);
  	  filename[p - argv[i]] = '\0';
  	}
        fd = open (filename, O_RDONLY | O_BINARY);
        /* Linker plugin passes -fresolution and -flinker-output options.
*************** cont1:
*** 1809,1828 ****
        for (i = 0; i < num_offload_files; i++)
  	{
  	  char *p;
- 	  long loffset;
  	  int fd, consumed;
! 	  off_t file_offset = 0;
  	  char *filename = offload_argv[i];
  
  	  if ((p = strrchr (offload_argv[i], '@'))
  	      && p != offload_argv[i]
! 	      && sscanf (p, "@%li%n", &loffset, &consumed) >= 1
  	      && strlen (p) == (unsigned int) consumed)
  	    {
  	      filename = XNEWVEC (char, p - offload_argv[i] + 1);
  	      memcpy (filename, offload_argv[i], p - offload_argv[i]);
  	      filename[p - offload_argv[i]] = '\0';
- 	      file_offset = (off_t) loffset;
  	    }
  	  fd = open (filename, O_RDONLY | O_BINARY);
  	  if (fd == -1)
--- 1805,1822 ----
        for (i = 0; i < num_offload_files; i++)
  	{
  	  char *p;
  	  int fd, consumed;
! 	  int64_t file_offset = 0;
  	  char *filename = offload_argv[i];
  
  	  if ((p = strrchr (offload_argv[i], '@'))
  	      && p != offload_argv[i]
! 	      && sscanf (p, "@%" PRIi64 "%n", &file_offset, &consumed) >= 1
  	      && strlen (p) == (unsigned int) consumed)
  	    {
  	      filename = XNEWVEC (char, p - offload_argv[i] + 1);
  	      memcpy (filename, offload_argv[i], p - offload_argv[i]);
  	      filename[p - offload_argv[i]] = '\0';
  	    }
  	  fd = open (filename, O_RDONLY | O_BINARY);
  	  if (fd == -1)
diff -Nrcpad gcc-16-20251102/gcc/m2/ChangeLog gcc-16-20251109/gcc/m2/ChangeLog
*** gcc-16-20251102/gcc/m2/ChangeLog	Sun Nov  2 22:32:22 2025
--- gcc-16-20251109/gcc/m2/ChangeLog	Sun Nov  9 22:32:48 2025
***************
*** 1,3 ****
--- 1,36 ----
+ 2025-11-02  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/122499
+ 	* gm2-compiler/M2StackSpell.mod (PushName): Add comment.
+ 	(GetSpellHint): Rewrite.
+ 	(GetExportedSpellHint): New procedure function.
+ 	(GetScopeSpellHint): New procedure function.
+ 	* gm2-compiler/P1Build.bnf (IdentScope): Rewrite.
+ 	(PossiblyExportIdent): Ditto.
+ 	* gm2-compiler/P1SymBuild.mod (BuildImportInnerModule): Add
+ 	parameter to AddNameToImportList.
+ 	* gm2-compiler/SymbolTable.def (GetUnknownOnImport): New
+ 	procedure function.
+ 	(GetUnknownDeclScope): Ditto.
+ 	(AddNameToScope): Add tok parameter.
+ 	(AddNameToImportList): Ditto.
+ 	* gm2-compiler/SymbolTable.mod (SymUndefined): New field
+ 	declScope.
+ 	New field onImport.
+ 	(MakeObject): Add tok parameter.
+ 	(FillInUnknownFields): Initialize declScope.
+ 	Initialize onImport.
+ 	(GetUnknownOnImport): New procedure function.
+ 	(GetUnknownDeclScope): Ditto.
+ 	(AddNameToScope): Pass tok to MakeObject.
+ 	(AddNameToImportList): Add tok parameter.
+ 	Pass tok to MakeObject.
+ 	(GetDeclaredSym): Add parameters to FillInUnknownFields.
+ 	(RequestSym): Ditto.
+ 	(FetchUnknownFromModule): Ditto.
+ 	(FetchUnknownFromDefImp): Ditto.
+ 	(FetchUnknownFrom): Ditto.
+ 
  2025-10-30  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/122485
diff -Nrcpad gcc-16-20251102/gcc/match.pd gcc-16-20251109/gcc/match.pd
*** gcc-16-20251102/gcc/match.pd	Sun Nov  2 22:32:22 2025
--- gcc-16-20251109/gcc/match.pd	Sun Nov  9 22:32:48 2025
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3656,3689 ****
  /* Saturation mult for unsigned integer.  */
  (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
   (for mult_op (mult widen_mult)
!   (match (unsigned_integer_sat_mul @0 @1)
!    /* SAT_U_MUL (X, Y) = {
! 	WT x = (WT)a * (WT)b;
! 	T max = -1;
! 	if (x > (WT)(max))
! 	  return max;
! 	else
! 	  return (T)x;
        }
!       while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t.  */
!    (convert (min (mult_op:c@3 (convert@4 @0) (convert@5 @1)) INTEGER_CST@2))
!    (if (types_match (type, @0, @1))
!     (with
!      {
        unsigned prec = TYPE_PRECISION (type);
        unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
-       unsigned cvt4_prec = TYPE_PRECISION (TREE_TYPE (@4));
-       unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5));
- 
        wide_int max = wi::mask (prec, false, widen_prec);
        bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
! 
!       bool widen_mult_p = mult_op == WIDEN_MULT_EXPR && cvt4_prec == cvt5_prec
! 	&& widen_prec == cvt5_prec * 2 && widen_prec > prec;
!       bool mult_p = mult_op == MULT_EXPR && cvt4_prec == cvt5_prec
! 	&& cvt4_prec == widen_prec && widen_prec > prec;
!      }
!      (if (c2_is_max_p && (widen_mult_p || mult_p)))))))
    (match (unsigned_integer_sat_mul @0 @1)
     /* SAT_U_MUL (X, Y) = {
  	T result;
--- 3656,3694 ----
  /* Saturation mult for unsigned integer.  */
  (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
   (for mult_op (mult widen_mult)
!   (match (usmul_widen_mult @0 @1)
!    (mult_op:c (convert@2 @0) (convert @1))
!     (if (types_match (@0, @1) && TYPE_UNSIGNED (TREE_TYPE (@0)))
!      (with
!       {
! 	unsigned prec = TYPE_PRECISION (TREE_TYPE (@0));
! 	unsigned cvt2_prec = TYPE_PRECISION (TREE_TYPE (@2));
! 	bool widen_cvt_p = cvt2_prec > prec;
        }
!       (if (widen_cvt_p))))))
!  (match (usmul_widen_mult @0 @1)
!   (widen_mult:c @0 @1)
!    (if (types_match (@0, @1))))
!  (match (unsigned_integer_sat_mul @0 @1)
!   /* SAT_U_MUL (X, Y) = {
!        WT x = (WT)a * (WT)b;
!        T max = -1;
!        if (x > (WT)(max))
! 	 return max;
!        else
! 	 return (T)x;
!      }
!      while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t.  */
!   (convert (min (usmul_widen_mult@3 @0 @1) INTEGER_CST@2))
!   (if (types_match (type, @0, @1))
!    (with
!     {
        unsigned prec = TYPE_PRECISION (type);
        unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
        wide_int max = wi::mask (prec, false, widen_prec);
        bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
!     }
!     (if (c2_is_max_p)))))
    (match (unsigned_integer_sat_mul @0 @1)
     /* SAT_U_MUL (X, Y) = {
  	T result;
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3721,3786 ****
        bool c2_is_type_precision_p = c2 == prec;
       }
       (if (widen_prec > prec && c2_is_type_precision_p && c4_is_max_p)))))
-   (for mult_op (mult widen_mult)
-    (match (unsigned_integer_sat_mul @0 @1)
-     /* SAT_U_MUL (X, Y) = {
- 	 WT x = (WT)a * (WT)b;
- 	 NT hi = x >> (sizeof(NT) * 8);
-          NT lo = (NT)x;
-          return lo | -!!hi;
-        } while WT is uint128_t, uint64_t, uint32_t, uint16_t,
-          and T is uint64_t, uint32_t, uint16_t, uint8_t.  */
-     (convert1?
-      (bit_ior
-       (convert?
-        (negate
- 	(convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop))))
-       (convert (mult_op:c@3 (convert@4 @0) (convert@5 @1)))))
-     (if (types_match (type, @0, @1))
-      (with
-       {
-        unsigned prec = TYPE_PRECISION (type);
-        unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
-        unsigned cvt4_prec = TYPE_PRECISION (TREE_TYPE (@4));
-        unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5));
- 
-        bool widen_mult_p = mult_op == WIDEN_MULT_EXPR && cvt4_prec == cvt5_prec
- 	 && widen_prec == cvt5_prec * 2;
-        bool mult_p = mult_op == MULT_EXPR && cvt4_prec == cvt5_prec
- 	 && cvt4_prec == widen_prec && widen_prec > prec;
-        bool c2_is_type_precision_p = tree_to_uhwi (@2) == prec;
-       }
-       (if (c2_is_type_precision_p && (mult_p || widen_mult_p)))))))
-  (match (unsigned_integer_sat_mul @0 @1)
-   (convert (min (widen_mult:c@3 @0 @1) INTEGER_CST@2))
-   (if (types_match (type, @0, @1))
-    (with
-     {
-      unsigned prec = TYPE_PRECISION (type);
-      unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
- 
-      wide_int max = wi::mask (prec, false, widen_prec);
-      bool c2_is_max_p = wi::eq_p (wi::to_wide (@2), max);
-      bool widen_mult_p = prec * 2 == widen_prec;
-     }
-     (if (c2_is_max_p && widen_mult_p)))))
    (match (unsigned_integer_sat_mul @0 @1)
     (convert1?
      (bit_ior
       (convert?
        (negate
         (convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop))))
!      (convert (widen_mult:c@3 @0 @1))))
     (if (types_match (type, @0, @1))
      (with
       {
        unsigned prec = TYPE_PRECISION (type);
-       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
- 
        bool c2_is_type_precision_p = tree_to_uhwi (@2) == prec;
-       bool widen_mult_p = prec * 2 == widen_prec;
       }
!      (if (c2_is_type_precision_p && widen_mult_p)))))
  )
  
  /* The boundary condition for case 10: IMM = 1:
--- 3726,3752 ----
        bool c2_is_type_precision_p = c2 == prec;
       }
       (if (widen_prec > prec && c2_is_type_precision_p && c4_is_max_p)))))
    (match (unsigned_integer_sat_mul @0 @1)
+    /* SAT_U_MUL (X, Y) = {
+ 	WT x = (WT)a * (WT)b;
+ 	NT hi = x >> (sizeof(NT) * 8);
+ 	NT lo = (NT)x;
+ 	return lo | -!!hi;
+       } while WT is uint128_t, uint64_t, uint32_t, uint16_t,
+ 	and T is uint64_t, uint32_t, uint16_t, uint8_t.  */
     (convert1?
      (bit_ior
       (convert?
        (negate
         (convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop))))
!      (convert (usmul_widen_mult@3 @0 @1))))
     (if (types_match (type, @0, @1))
      (with
       {
        unsigned prec = TYPE_PRECISION (type);
        bool c2_is_type_precision_p = tree_to_uhwi (@2) == prec;
       }
!      (if (c2_is_type_precision_p)))))
  )
  
  /* The boundary condition for case 10: IMM = 1:
diff -Nrcpad gcc-16-20251102/gcc/range-op-mixed.h gcc-16-20251109/gcc/range-op-mixed.h
*** gcc-16-20251102/gcc/range-op-mixed.h	Sun Nov  2 22:32:23 2025
--- gcc-16-20251109/gcc/range-op-mixed.h	Sun Nov  9 22:32:48 2025
*************** public:
*** 803,837 ****
      { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
  };
  
- class operator_bitwise_xor : public range_operator
- {
- public:
-   using range_operator::op1_range;
-   using range_operator::op2_range;
-   using range_operator::op1_op2_relation_effect;
-   using range_operator::update_bitmask;
-   bool op1_range (irange &r, tree type,
- 		  const irange &lhs, const irange &op2,
- 		  relation_trio rel = TRIO_VARYING) const final override;
-   bool op2_range (irange &r, tree type,
- 		  const irange &lhs, const irange &op1,
- 		  relation_trio rel = TRIO_VARYING) const final override;
-   bool op1_op2_relation_effect (irange &lhs_range,
- 					tree type,
- 					const irange &op1_range,
- 					const irange &op2_range,
- 					relation_kind rel) const final override;
-   void update_bitmask (irange &r, const irange &lh,
- 		       const irange &rh) const final override;
-   // Check compatibility of all operands.
-   bool operand_check_p (tree t1, tree t2, tree t3) const final override
-     { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
- private:
-   void wi_fold (irange &r, tree type, const wide_int &lh_lb,
- 		const wide_int &lh_ub, const wide_int &rh_lb,
- 		const wide_int &rh_ub) const final override;
- };
- 
  class operator_bitwise_and : public range_operator
  {
  public:
--- 803,808 ----
*************** protected:
*** 896,901 ****
--- 867,909 ----
  		const wide_int &rh_ub) const override;
  };
  
+ class operator_bitwise_xor : public range_operator
+ {
+ public:
+   using range_operator::fold_range;
+   using range_operator::op1_range;
+   using range_operator::op2_range;
+   using range_operator::op1_op2_relation_effect;
+   using range_operator::update_bitmask;
+   bool fold_range (irange &r, tree type,
+ 		   const irange &lh, const irange &rh,
+ 		   relation_trio rel = TRIO_VARYING) const final override;
+   bool op1_range (irange &r, tree type,
+ 		  const irange &lhs, const irange &op2,
+ 		  relation_trio rel = TRIO_VARYING) const final override;
+   bool op2_range (irange &r, tree type,
+ 		  const irange &lhs, const irange &op1,
+ 		  relation_trio rel = TRIO_VARYING) const final override;
+   bool op1_op2_relation_effect (irange &lhs_range,
+ 					tree type,
+ 					const irange &op1_range,
+ 					const irange &op2_range,
+ 					relation_kind rel) const final override;
+   void update_bitmask (irange &r, const irange &lh,
+ 		       const irange &rh) const final override;
+   // Check compatibility of all operands.
+   bool operand_check_p (tree t1, tree t2, tree t3) const final override
+     { return range_compatible_p (t1, t2) && range_compatible_p (t1, t3); }
+ private:
+   void wi_fold (irange &r, tree type, const wide_int &lh_lb,
+ 		const wide_int &lh_ub, const wide_int &rh_lb,
+ 		const wide_int &rh_ub) const final override;
+   class operator_bitwise_and m_and;
+   class operator_bitwise_or m_or;
+   class operator_bitwise_not m_not;
+ };
+ 
+ 
  class operator_min : public range_operator
  {
  public:
diff -Nrcpad gcc-16-20251102/gcc/range-op.cc gcc-16-20251109/gcc/range-op.cc
*** gcc-16-20251102/gcc/range-op.cc	Sun Nov  2 22:32:23 2025
--- gcc-16-20251109/gcc/range-op.cc	Sun Nov  9 22:32:48 2025
*************** operator_bitwise_xor::update_bitmask (ir
*** 4046,4051 ****
--- 4046,4128 ----
    update_known_bitmask (r, BIT_XOR_EXPR, lh, rh);
  }
  
+ bool
+ operator_bitwise_xor::fold_range (irange &r, tree type,
+ 				  const irange &lh, const irange &rh,
+ 				  relation_trio rel) const
+ {
+   // Handle X ^ UNDEFINED = UNDEFINED.
+   if (lh.undefined_p () || rh.undefined_p ())
+     {
+       r.set_undefined ();
+       return true;
+     }
+ 
+   // Next, handle X ^ X == [0, 0].
+   if (rel.op1_op2 () == VREL_EQ)
+    {
+      r.set_zero (type);
+      return true;
+    }
+ 
+   // If either operand is VARYING, the result is VARYING.
+   if (lh.varying_p () || rh.varying_p ())
+     {
+       // If the operands are not equal, zero is not possible.
+       if (rel.op1_op2 () != VREL_NE)
+ 	r.set_varying (type);
+       else
+ 	r.set_nonzero (type);
+       return true;
+     }
+ 
+   // Now deal with X ^ 0 == X.
+   if (lh.zero_p ())
+     {
+       r = rh;
+       return true;
+     }
+   if (rh.zero_p ())
+     {
+       r = lh;
+       return true;
+     }
+ 
+   // Start with the legacy range.  This can sometimes pick up values
+   // when there are a lot of subranges and fold_range aggregates them.
+   bool res = range_operator::fold_range (r, type, lh, rh, rel);
+ 
+   // Calculate the XOR identity :   x ^ y = (x | y) & ~(x & y)
+   // AND and OR are already much better optimized.
+   int_range_max tmp1, tmp2, tmp3, new_result;
+   int_range<2> varying;
+   varying.set_varying (type);
+ 
+   if (m_or.fold_range  (tmp1, type, lh, rh, rel)
+       && m_and.fold_range (tmp2, type, lh, rh, rel)
+       && m_not.fold_range (tmp3, type, tmp2, varying, rel)
+       && m_and.fold_range (new_result, type, tmp1, tmp3, rel))
+     {
+       // If the operands are not equal, or the LH does not contain any
+       // element of the RH, zero is not possible.
+       tmp1 = lh;
+       if (rel.op1_op2 () == VREL_NE
+ 	  || (tmp1.intersect (rh) && tmp1.undefined_p ()))
+ 	{
+ 	  tmp1.set_nonzero (type);
+ 	  new_result.intersect (tmp1);
+ 	}
+ 
+       // Combine with the legacy range if there was one.
+       if (res)
+ 	r.intersect (new_result);
+       else
+ 	r = new_result;
+       return true;
+     }
+   return res;
+ }
+ 
  void
  operator_bitwise_xor::wi_fold (irange &r, tree type,
  			       const wide_int &lh_lb,
diff -Nrcpad gcc-16-20251102/gcc/simplify-rtx.cc gcc-16-20251109/gcc/simplify-rtx.cc
*** gcc-16-20251102/gcc/simplify-rtx.cc	Sun Nov  2 22:32:24 2025
--- gcc-16-20251109/gcc/simplify-rtx.cc	Sun Nov  9 22:32:49 2025
*************** simplify_context::simplify_binary_operat
*** 3686,3693 ****
  	  && XEXP (op0, 1) == CONST1_RTX (mode)
  	  && XEXP (op1, 1) == CONST1_RTX (mode)
  	  /* Verify bit positions (for cases with variable bit position). */
! 	  && CONST_INT_P (XEXP (op0, 1))
! 	  && CONST_INT_P (XEXP (op1, 1)))
  	{
  	  unsigned HOST_WIDE_INT bitpos1 = INTVAL (XEXP (XEXP (op0, 0), 1));
  	  unsigned HOST_WIDE_INT bitpos2 = INTVAL (XEXP (XEXP (op1, 0), 1));
--- 3686,3693 ----
  	  && XEXP (op0, 1) == CONST1_RTX (mode)
  	  && XEXP (op1, 1) == CONST1_RTX (mode)
  	  /* Verify bit positions (for cases with variable bit position). */
! 	  && CONST_INT_P (XEXP (XEXP (op0, 0), 1))
! 	  && CONST_INT_P (XEXP (XEXP (op1, 0), 1)))
  	{
  	  unsigned HOST_WIDE_INT bitpos1 = INTVAL (XEXP (XEXP (op0, 0), 1));
  	  unsigned HOST_WIDE_INT bitpos2 = INTVAL (XEXP (XEXP (op1, 0), 1));
*************** simplify_context::simplify_binary_operat
*** 3718,3724 ****
  	  && XEXP (op0, 1) == CONST1_RTX (mode)
  	  && XEXP (op1, 1) == CONST0_RTX (mode)
  	  /* Verify bit position. */
! 	  && CONST_INT_P (XEXP (op0, 1)))
  	{
  	  unsigned HOST_WIDE_INT bitpos1 = INTVAL (XEXP (XEXP (op0, 0), 1));
  	  unsigned HOST_WIDE_INT mask
--- 3718,3724 ----
  	  && XEXP (op0, 1) == CONST1_RTX (mode)
  	  && XEXP (op1, 1) == CONST0_RTX (mode)
  	  /* Verify bit position. */
! 	  && CONST_INT_P (XEXP (XEXP (op0, 0), 1)))
  	{
  	  unsigned HOST_WIDE_INT bitpos1 = INTVAL (XEXP (XEXP (op0, 0), 1));
  	  unsigned HOST_WIDE_INT mask
*************** simplify_context::simplify_binary_operat
*** 4184,4189 ****
--- 4184,4229 ----
  		 not do an AND.  */
  	      if ((nzop0 & ~val1) == 0)
  		return op0;
+ 
+ 	      /* Canonicalize (and (subreg (lshiftrt X shift)) mask) into
+ 		 (and (lshiftrt (subreg X) shift) mask).
+ 
+ 		 Keeps shift and AND in the same mode, improving recognition.
+ 		 Only applied when subreg is a lowpart, shift is valid,
+ 		 and no precision is lost.  */
+ 	      if (SUBREG_P (op0) && subreg_lowpart_p (op0)
+ 		  && GET_CODE (XEXP (op0, 0)) == LSHIFTRT
+ 		  && CONST_INT_P (XEXP (XEXP (op0, 0), 1))
+ 		  && INTVAL (XEXP (XEXP (op0, 0), 1)) >= 0
+ 		  && INTVAL (XEXP (XEXP (op0, 0), 1)) < HOST_BITS_PER_WIDE_INT
+ 		  && ((INTVAL (XEXP (XEXP (op0, 0), 1))
+ 		      + floor_log2 (val1))
+ 		      < GET_MODE_PRECISION (as_a <scalar_int_mode> (mode))))
+ 		{
+ 		  tem = XEXP (XEXP (op0, 0), 0);
+ 		  if (SUBREG_P (tem))
+ 		    {
+ 		      if (subreg_lowpart_p (tem))
+ 			tem = SUBREG_REG (tem);
+ 		      else
+ 			tem = NULL_RTX;
+ 		    }
+ 		  if (tem != NULL_RTX)
+ 		    {
+ 		      offset = subreg_lowpart_offset (mode, GET_MODE (tem));
+ 		      tem = simplify_gen_subreg (mode, tem, GET_MODE (tem),
+ 						 offset);
+ 		      if (tem)
+ 			{
+ 			  unsigned shiftamt = INTVAL (XEXP (XEXP (op0, 0), 1));
+ 			  rtx shiftamtrtx = gen_int_shift_amount (mode,
+ 								  shiftamt);
+ 			  op0 = simplify_gen_binary (LSHIFTRT, mode, tem,
+ 						     shiftamtrtx);
+ 			  return simplify_gen_binary (AND, mode, op0, op1);
+ 			}
+ 		    }
+ 		}
  	    }
  	  nzop1 = nonzero_bits (trueop1, mode);
  	  /* If we are clearing all the nonzero bits, the result is zero.  */
*************** simplify_context::simplify_relational_op
*** 6451,6456 ****
--- 6491,6511 ----
        /* Canonicalize (LEU x 0) as (EQ x 0).  */
        if (code == LEU)
          return simplify_gen_relational (EQ, mode, cmp_mode, op0, op1);
+ 
+       if ((code == NE || code == EQ)
+ 	  /* Verify op0 is IOR */
+ 	  && GET_CODE (op0) == IOR
+ 	  /* only enters if op1 is 0 */
+ 	  /* Verify IOR operand is NE */
+ 	  && GET_CODE (XEXP (op0, 0)) == NE
+ 	  /* Verfiy second NE operand is 0 */
+ 	  && XEXP (XEXP (op0, 0), 1) == CONST0_RTX (mode))
+ 	{
+ 	  rtx t = gen_rtx_IOR (mode, XEXP (XEXP (op0, 0), 0), XEXP (op0, 1));
+ 	  t = gen_rtx_fmt_ee (code, mode, t, CONST0_RTX (mode));
+ 	  return t;
+ 	}
+ 
      }
    else if (op1 == const1_rtx)
      {
diff -Nrcpad gcc-16-20251102/gcc/ssa-iterators.h gcc-16-20251109/gcc/ssa-iterators.h
*** gcc-16-20251102/gcc/ssa-iterators.h	Sun Nov  2 22:32:24 2025
--- gcc-16-20251109/gcc/ssa-iterators.h	Sun Nov  9 22:32:49 2025
*************** along with GCC; see the file COPYING3.
*** 42,51 ****
     Safe iteration via FOR_EACH_IMM_USE_STMT and FOR_EACH_IMM_USE_ON_STMT
     allows insertion, deletion, and modification of SSA operands within
     the current stmt iterated.  The iterator manages this by re-sorting
!    the immediate uses to batch uses on a single stmt after each other
!    and inserts a marker node into the list immediately after the node
!    ending the current batch.  This marker node is uniquely identified by
!    having null stmt *and* a null use pointer.  */
  
  struct imm_use_iterator
  {
--- 42,51 ----
     Safe iteration via FOR_EACH_IMM_USE_STMT and FOR_EACH_IMM_USE_ON_STMT
     allows insertion, deletion, and modification of SSA operands within
     the current stmt iterated.  The iterator manages this by re-sorting
!    the immediate uses to batch uses on a single stmt after each other.
!    If using an inner FOR_EACH_IMM_USE_ON_STMT iteration only the active
!    use may be manipulated.  Safety relies on new immediate uses being
!    inserted at the front of immediate use lists.  */
  
  struct imm_use_iterator
  {
*************** struct imm_use_iterator
*** 53,73 ****
    ssa_use_operand_t *imm_use;
    /* This marks the last use in the list (use node from SSA_NAME)  */
    ssa_use_operand_t *end_p;
!   /* This node is inserted and used to mark the end of the uses for a stmt.  */
!   ssa_use_operand_t iter_node;
    /* This is the next ssa_name to visit.  IMM_USE may get removed before
       the next one is traversed to, so it must be cached early.  */
    ssa_use_operand_t *next_imm_name;
  };
  
  
  /* Use this iterator when simply looking at stmts.  Adding, deleting or
     modifying stmts will cause this iterator to malfunction.  */
  
  #define FOR_EACH_IMM_USE_FAST(DEST, ITER, SSAVAR)		\
    for ((DEST) = first_readonly_imm_use (&(ITER), (SSAVAR));	\
         !end_readonly_imm_use_p (&(ITER));			\
         (void) ((DEST) = next_readonly_imm_use (&(ITER))))
  
  /* Forward declare for use in the class below.  */
  inline void end_imm_use_stmt_traverse (imm_use_iterator *);
--- 53,98 ----
    ssa_use_operand_t *imm_use;
    /* This marks the last use in the list (use node from SSA_NAME)  */
    ssa_use_operand_t *end_p;
!   /* This is the next ssa_name to visit in an outer FOR_EACH_IMM_USE_STMT.
!      Also used for fast imm use iterator checking.  */
!   ssa_use_operand_t *next_stmt_use;
    /* This is the next ssa_name to visit.  IMM_USE may get removed before
       the next one is traversed to, so it must be cached early.  */
    ssa_use_operand_t *next_imm_name;
+   /* This is the SSA name iterated over.  */
+   tree name;
  };
  
  
  /* Use this iterator when simply looking at stmts.  Adding, deleting or
     modifying stmts will cause this iterator to malfunction.  */
  
+ #if ! defined ENABLE_GIMPLE_CHECKING
  #define FOR_EACH_IMM_USE_FAST(DEST, ITER, SSAVAR)		\
    for ((DEST) = first_readonly_imm_use (&(ITER), (SSAVAR));	\
         !end_readonly_imm_use_p (&(ITER));			\
         (void) ((DEST) = next_readonly_imm_use (&(ITER))))
+ #else
+ 
+ /* arrange to automatically call, upon descruction, with a given pointer
+    to imm_use_iterator.  */
+ struct auto_end_imm_use_fast_traverse
+ {
+   imm_use_iterator *imm;
+   auto_end_imm_use_fast_traverse (imm_use_iterator *imm)
+   : imm (imm) {}
+   ~auto_end_imm_use_fast_traverse ()
+   { imm->name->ssa_name.fast_iteration_depth--; }
+ };
+ 
+ #define FOR_EACH_IMM_USE_FAST(DEST, ITER, SSAVAR)		\
+   for (struct auto_end_imm_use_fast_traverse			\
+ 	 auto_end_imm_use_fast_traverse				\
+ 	   ((((DEST) = first_readonly_imm_use (&(ITER), (SSAVAR))), \
+ 	    &(ITER)));						\
+        !end_readonly_imm_use_p (&(ITER));			\
+        (void) ((DEST) = next_readonly_imm_use (&(ITER))))
+ #endif
  
  /* Forward declare for use in the class below.  */
  inline void end_imm_use_stmt_traverse (imm_use_iterator *);
*************** struct auto_end_imm_use_stmt_traverse
*** 114,119 ****
--- 139,149 ----
         (void) ((DEST) = next_imm_use_on_stmt (&(ITER))))
  
  
+ /* Use this to get a vector of all gimple stmts using SSAVAR without
+    duplicates.  It's cheaper than FOR_EACH_IMM_USE_STMT and has no
+    constraints on what you are allowed to do inside an iteration
+    over the vector.  */
+ extern auto_vec<gimple *, 2> gather_imm_use_stmts (tree ssavar);
  
  extern bool single_imm_use_1 (const ssa_use_operand_t *head,
  			      use_operand_p *use_p, gimple **stmt);
*************** delink_imm_use (ssa_use_operand_t *linkn
*** 245,250 ****
--- 275,294 ----
    if (linknode->prev == NULL)
      return;
  
+ #if defined ENABLE_GIMPLE_CHECKING
+   if (linknode->loc.stmt
+       /* update_stmt on constant/removed uses.  */
+       && USE_FROM_PTR (linknode)
+       && TREE_CODE (USE_FROM_PTR (linknode)) == SSA_NAME)
+     {
+       tree var = USE_FROM_PTR (linknode);
+       gcc_assert (var->ssa_name.fast_iteration_depth == 0
+ 		  && (var->ssa_name.active_iterated_stmt == NULL
+ 		      || (var->ssa_name.active_iterated_stmt
+ 			  == linknode->loc.stmt)));
+     }
+ #endif
+ 
    linknode->prev->next = linknode->next;
    linknode->next->prev = linknode->prev;
    linknode->prev = NULL;
*************** end_readonly_imm_use_p (const imm_use_it
*** 343,351 ****
  inline use_operand_p
  first_readonly_imm_use (imm_use_iterator *imm, tree var)
  {
    imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
    imm->imm_use = imm->end_p->next;
!   imm->iter_node.next = imm->imm_use->next;
    if (end_readonly_imm_use_p (imm))
      return NULL_USE_OPERAND_P;
    return imm->imm_use;
--- 387,399 ----
  inline use_operand_p
  first_readonly_imm_use (imm_use_iterator *imm, tree var)
  {
+ #if defined ENABLE_GIMPLE_CHECKING
+   var->ssa_name.fast_iteration_depth++;
+ #endif
    imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
    imm->imm_use = imm->end_p->next;
!   imm->next_stmt_use = imm->imm_use->next;
!   imm->name = var;
    if (end_readonly_imm_use_p (imm))
      return NULL_USE_OPERAND_P;
    return imm->imm_use;
*************** next_readonly_imm_use (imm_use_iterator
*** 363,370 ****
       using the SAFE version of the iterator.  */
    if (flag_checking)
      {
!       gcc_assert (imm->iter_node.next == old->next);
!       imm->iter_node.next = old->next->next;
      }
  
    imm->imm_use = old->next;
--- 411,418 ----
       using the SAFE version of the iterator.  */
    if (flag_checking)
      {
!       gcc_assert (imm->next_stmt_use == old->next);
!       imm->next_stmt_use = old->next->next;
      }
  
    imm->imm_use = old->next;
*************** end_imm_use_stmt_p (const imm_use_iterat
*** 840,848 ****
     placeholder node from the list.  */
  
  inline void
! end_imm_use_stmt_traverse (imm_use_iterator *imm)
  {
!   delink_imm_use (&(imm->iter_node));
  }
  
  /* Immediate use traversal of uses within a stmt require that all the
--- 888,898 ----
     placeholder node from the list.  */
  
  inline void
! end_imm_use_stmt_traverse (imm_use_iterator * ARG_UNUSED (imm))
  {
! #if defined ENABLE_GIMPLE_CHECKING
!   imm->name->ssa_name.active_iterated_stmt = NULL;
! #endif
  }
  
  /* Immediate use traversal of uses within a stmt require that all the
*************** move_use_after_head (use_operand_p use_p
*** 875,884 ****
  
  
  /* This routine will relink all uses with the same stmt as HEAD into the list
!    immediately following HEAD for iterator IMM.  */
  
! inline void
! link_use_stmts_after (use_operand_p head, imm_use_iterator *imm)
  {
    use_operand_p use_p;
    use_operand_p last_p = head;
--- 925,935 ----
  
  
  /* This routine will relink all uses with the same stmt as HEAD into the list
!    immediately following HEAD for iterator IMM and returns the last use on
!    that stmt.  */
  
! inline use_operand_p
! link_use_stmts_after (use_operand_p head, imm_use_iterator *)
  {
    use_operand_p use_p;
    use_operand_p last_p = head;
*************** link_use_stmts_after (use_operand_p head
*** 910,942 ****
  	    last_p = move_use_after_head (use_p, head, last_p);
  	}
      }
!   /* Link iter node in after last_p.  */
!   if (imm->iter_node.prev != NULL)
!     delink_imm_use (&imm->iter_node);
!   link_imm_use_to_list (&(imm->iter_node), last_p);
  }
  
  /* Initialize IMM to traverse over uses of VAR.  Return the first statement.  */
  inline gimple *
  first_imm_use_stmt (imm_use_iterator *imm, tree var)
  {
    imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
    imm->imm_use = imm->end_p->next;
    imm->next_imm_name = NULL_USE_OPERAND_P;
  
!   /* iter_node is used as a marker within the immediate use list to indicate
!      where the end of the current stmt's uses are.  Initialize it to NULL
!      stmt and use, which indicates a marker node.  */
!   imm->iter_node.prev = NULL_USE_OPERAND_P;
!   imm->iter_node.next = NULL_USE_OPERAND_P;
!   imm->iter_node.loc.stmt = NULL;
!   imm->iter_node.use = NULL;
  
    if (end_imm_use_stmt_p (imm))
      return NULL;
  
!   link_use_stmts_after (imm->imm_use, imm);
  
    return USE_STMT (imm->imm_use);
  }
  
--- 961,994 ----
  	    last_p = move_use_after_head (use_p, head, last_p);
  	}
      }
!   return last_p;
  }
  
  /* Initialize IMM to traverse over uses of VAR.  Return the first statement.  */
  inline gimple *
  first_imm_use_stmt (imm_use_iterator *imm, tree var)
  {
+ #if defined ENABLE_GIMPLE_CHECKING
+   gcc_assert (var->ssa_name.active_iterated_stmt == NULL
+ 	      && var->ssa_name.fast_iteration_depth == 0);
+ #endif
    imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
    imm->imm_use = imm->end_p->next;
    imm->next_imm_name = NULL_USE_OPERAND_P;
  
!   /* next_stmt_use is used to point to the immediate use node after
!      the set of uses for the current stmt.  */
!   imm->next_stmt_use = NULL_USE_OPERAND_P;
!   imm->name = var;
  
    if (end_imm_use_stmt_p (imm))
      return NULL;
  
!   imm->next_stmt_use = link_use_stmts_after (imm->imm_use, imm)->next;
  
+ #if defined ENABLE_GIMPLE_CHECKING
+   var->ssa_name.active_iterated_stmt = USE_STMT (imm->imm_use);
+ #endif
    return USE_STMT (imm->imm_use);
  }
  
*************** first_imm_use_stmt (imm_use_iterator *im
*** 945,959 ****
  inline gimple *
  next_imm_use_stmt (imm_use_iterator *imm)
  {
!   imm->imm_use = imm->iter_node.next;
    if (end_imm_use_stmt_p (imm))
!     {
!       if (imm->iter_node.prev != NULL)
! 	delink_imm_use (&imm->iter_node);
!       return NULL;
!     }
  
!   link_use_stmts_after (imm->imm_use, imm);
    return USE_STMT (imm->imm_use);
  }
  
--- 997,1010 ----
  inline gimple *
  next_imm_use_stmt (imm_use_iterator *imm)
  {
!   imm->imm_use = imm->next_stmt_use;
    if (end_imm_use_stmt_p (imm))
!     return NULL;
  
! #if defined ENABLE_GIMPLE_CHECKING
!   imm->name->ssa_name.active_iterated_stmt = USE_STMT (imm->imm_use);
! #endif
!   imm->next_stmt_use = link_use_stmts_after (imm->imm_use, imm)->next;
    return USE_STMT (imm->imm_use);
  }
  
*************** first_imm_use_on_stmt (imm_use_iterator
*** 972,978 ****
  inline bool
  end_imm_use_on_stmt_p (const imm_use_iterator *imm)
  {
!   return (imm->imm_use == &(imm->iter_node));
  }
  
  /* Bump to the next use on the stmt IMM refers to, return NULL if done.  */
--- 1023,1029 ----
  inline bool
  end_imm_use_on_stmt_p (const imm_use_iterator *imm)
  {
!   return (imm->imm_use == imm->next_stmt_use);
  }
  
  /* Bump to the next use on the stmt IMM refers to, return NULL if done.  */
diff -Nrcpad gcc-16-20251102/gcc/symtab.cc gcc-16-20251109/gcc/symtab.cc
*** gcc-16-20251102/gcc/symtab.cc	Sun Nov  2 22:32:24 2025
--- gcc-16-20251109/gcc/symtab.cc	Sun Nov  9 22:32:49 2025
*************** static const char * const toplevel_type_
*** 882,888 ****
   "variable",
  };
  
! static_assert (ARRAY_SIZE(toplevel_type_names)==TOPLEVEL_MAX);
  
  /* Dump the visibility of the symbol.  */
  
--- 882,888 ----
   "variable",
  };
  
! static_assert (ARRAY_SIZE(toplevel_type_names) == TOPLEVEL_MAX, "");
  
  /* Dump the visibility of the symbol.  */
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/ChangeLog gcc-16-20251109/gcc/testsuite/ChangeLog
*** gcc-16-20251102/gcc/testsuite/ChangeLog	Sun Nov  2 22:32:24 2025
--- gcc-16-20251109/gcc/testsuite/ChangeLog	Sun Nov  9 22:32:49 2025
***************
*** 1,3 ****
--- 1,560 ----
+ 2025-11-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/limited_with4.ads: Rename to...
+ 	* gnat.dg/specs/limited_with1.ads: ...this.
+ 	* gnat.dg/specs/limited_with4_pkg.ads: Rename to...
+ 	* gnat.dg/specs/limited_with1_pkg.ads: ...this.
+ 	* gnat.dg/specs/limited_with2-child1.ads: New test.
+ 	* gnat.dg/specs/limited_with2-child2.ads: Likewise.
+ 	* gnat.dg/specs/limited_with2.ads: New helper.
+ 
+ 2025-11-08  Philipp Tomsich  <philipp.tomsich@vrull.eu>
+ 
+ 	* gcc.target/riscv/snez.c: New test.
+ 
+ 2025-11-08  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/113338
+ 	* gfortran.dg/c-interop/pr113338-c.c: New test.
+ 	* gfortran.dg/c-interop/pr113338.f90: New test.
+ 
+ 2025-11-08  Avinash Jayakar  <avinashd@linux.ibm.com>
+ 
+ 	PR tree-optimization/122126
+ 	* gcc.dg/pr122126_vextr.c: New test.
+ 	* gcc.dg/pr122126_vset.c: New test.
+ 
+ 2025-11-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121628
+ 	* gfortran.dg/alloc_comp_deep_copy_7.f90: New test.
+ 
+ 2025-11-08  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122599
+ 	* gcc.dg/torture/pr122599-1.c: New test.
+ 
+ 2025-11-07  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122588
+ 	* gcc.c-torture/compile/pr122588-1.c: New test.
+ 	* gcc.dg/tree-ssa/pr122588-1.c: New test.
+ 
+ 2025-11-07  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR testsuite/122602
+ 	* gcc.dg/vect/complex/complex-operations-run.c: Move to...
+ 	* gcc.dg/vect/complex/vect-complex-operations-run.c: ...here.
+ 
+ 2025-11-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/class_wide6.ads, gnat.dg/class_wide6.adb: New test.
+ 	* gnat.dg/class_wide6_pkg.ads: New helper.
+ 
+ 2025-11-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122577
+ 	* gcc.dg/vect/vect-bool-3.c: New testcase.
+ 
+ 2025-11-07  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/pr121959-1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr121959-2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr121959-3.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr121959-4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr121959-5.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr121959-run-1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr121959.h: New test.
+ 
+ 2025-11-07  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122589
+ 	PR middle-end/122594
+ 	* g++.dg/torture/pr122589.C: New testcase.
+ 
+ 2025-11-07  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/118328
+ 	* gcc.target/aarch64/preserve_none_1.c: New test.
+ 	* gcc.target/aarch64/preserve_none_mingw_1.c: New test.
+ 	* gcc.target/aarch64/preserve_none_2.c: New test.
+ 	* gcc.target/aarch64/preserve_none_3.c: New test.
+ 	* gcc.target/aarch64/preserve_none_4.c: New test.
+ 	* gcc.target/aarch64/preserve_none_5.c: New test.
+ 	* gcc.target/aarch64/preserve_none_6.c: New test.
+ 
+ 2025-11-07  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Add asm check
+ 	for vwmaccu.vx.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h: Add test helper
+ 	macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h: Add test
+ 	data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmaccu-run-1-u64.c: New test.
+ 
+ 2025-11-07  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* gcc.target/loongarch/sign-extend-4.c: New test.
+ 	* gcc.target/loongarch/sign-extend-5.c: New test.
+ 
+ 2025-11-07  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* gcc.target/loongarch/sign-extend-3.c: New test.
+ 
+ 2025-11-07  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* gcc.target/loongarch/sign-extend-6.c: New test.
+ 
+ 2025-11-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121628
+ 	* gfortran.dg/alloc_comp_deep_copy_5.f90: New test for recursive
+ 	allocatable array deep copy.
+ 	* gfortran.dg/alloc_comp_deep_copy_6.f90: New test for multi-level
+ 	recursive allocatable deep copy.
+ 	* gfortran.dg/array_memcpy_2.f90: Fix test with proper allocation.
+ 	Signed-off-by: Christopher Albert <albert@tugraz.at>
+ 
+ 2025-11-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/prefix3.adb: New test.
+ 	* gnat.dg/prefix3_pkg.ads: New helper.
+ 	* gnat.dg/prefix3_pkg.adb: Likewise.
+ 
+ 2025-11-06  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/czero-bext.c: New test.
+ 
+ 2025-11-06  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/renaming19.adb: New test.
+ 	* gnat.dg/renaming19_pkg.ads: New helper.
+ 	* gnat.dg/renaming19_pkg.adb: Likewise.
+ 
+ 2025-11-06  Your Name  <jlaw@ventanamicro.com>
+ 
+ 	PR rtl-optimization/121136
+ 	* gcc.target/riscv/pr121136.c: New test.
+ 	* gcc.dg/cmp-mem-const-1.c: Skip for risc-v.
+ 	* gcc.dg/cmp-mem-const-2.c: Likewise.
+ 
+ 2025-11-06  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/122502
+ 	* gcc.dg/torture/pr122502-2.c: New testcase.
+ 
+ 2025-11-06  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/113632
+ 	* gcc.dg/pr113632.c: New.
+ 
+ 2025-11-06  Christophe Lyon  <christophe.lyon@linaro.org>
+ 
+ 	* lib/target-supports.exp
+ 	(check_effective_target_arm_v8_vfp_ok_nocache): New.
+ 	(check_effective_target_arm_v8_vfp_ok): Call the above helper, and
+ 	use global flags.
+ 	(add_options_for_arm_v8_vfp): Use et_arm_v8_vfp_flags.
+ 	* gcc.target/arm/lceil-vcvt_1.c: Remove -march=armv8-a.
+ 	* gcc.target/arm/lfloor-vcvt_1.c: Likewise.
+ 	* gcc.target/arm/lround-vcvt_1.c: Likewise.
+ 	* gcc.target/arm/vrinta-ce.c: Likewise.
+ 
+ 2025-11-06  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* gcc.target/loongarch/vect-frint-no-inexact.c (dg-options): Add
+ 	-mcmodel=normal.
+ 	* gcc.target/loongarch/vect-frint-scalar-no-inexact.c: Likewise.
+ 	* gcc.target/loongarch/vect-frint-scalar.c: Likewise.
+ 	* gcc.target/loongarch/vect-frint.c: Likewise.
+ 	* gcc.target/loongarch/vect-ftint-no-inexact.c: Likewise.
+ 	* gcc.target/loongarch/vect-ftint.c: Likewise.
+ 
+ 2025-11-05  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121574
+ 	* g++.dg/modules/internal-17_b.C: Check for diagnostics when
+ 	instantiating imported TU-local entities.
+ 
+ 2025-11-05  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/121574
+ 	* g++.dg/modules/internal-17_a.C: New test.
+ 	* g++.dg/modules/internal-17_b.C: New test.
+ 
+ 2025-11-05  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/discr8.ads: New test.
+ 
+ 2025-11-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/122566
+ 	* gfortran.dg/pdt_68.f03: New test.
+ 
+ 2025-11-05  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/122501
+ 	PR fortran/122524
+ 	* gfortran.dg/pdt_66.f03: New test.
+ 	* gfortran.dg/pdt_67.f03: New test.
+ 
+ 2025-11-05  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR fortran/122570
+ 	* gfortran.dg/gomp/pr122570.f: New test.
+ 
+ 2025-11-05  Artemiy Volkov  <artemiy.volkov@arm.com>
+ 
+ 	* gcc.dg/tree-ssa/forwprop-43.c: New test.
+ 	* gcc.target/aarch64/simd/combine_ext.c: New test.
+ 
+ 2025-11-05  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/widen-mul-rtx-cost-signed.c: Update.
+ 
+ 2025-11-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/protected_subtype1.adb: New test.
+ 
+ 2025-11-04  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/generic_inst9.ads: New test.
+ 	* gnat.dg/specs/generic_inst9_pkg1.ads: New helper.
+ 	* gnat.dg/specs/generic_inst9_pkg2.ads: Likewise.
+ 	* gnat.dg/specs/generic_inst9_pkg2-g.ads: Likewise.
+ 
+ 2025-11-04  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/122390
+ 	* gcc.target/i386/pr122390.c: New test.
+ 	* gcc.target/i386/pr122390-1.c: New test.
+ 
+ 2025-11-04  Kees Cook  <kees@kernel.org>
+ 
+ 	* gcc.target/arc/builtin_fls_const.c: New test.  Verify that
+ 	const attribute enables CSE optimization for mathematical ARC
+ 	builtins by checking that duplicate calls are eliminated and
+ 	results are optimized to shift operations.
+ 
+ 2025-11-04  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	PR fortran/122369
+ 	PR fortran/122508
+ 	* gfortran.dg/gomp/pr122369-1.f90: New test.
+ 	* gfortran.dg/gomp/pr122369-2.f90: New test.
+ 	* gfortran.dg/gomp/pr122369-3.f90: New test.
+ 	* gfortran.dg/gomp/pr122369-4.f90: New test.
+ 	* gfortran.dg/gomp/pr122508-1.f90: New test.
+ 	* gfortran.dg/gomp/pr122508-2.f90: New test.
+ 
+ 2025-11-04  Siddhesh Poyarekar  <siddhesh@gotplt.org>
+ 
+ 	PR lto/122515
+ 	* lib/lto.exp (lto-build-archive): New procedure.
+ 	(lto-execute-1): Use it.
+ 	(lto-link-and-maybe-run, lto-get-options-main): Handle ar-link.
+ 	* gcc.dg/lto/pr122515_0.c: New test case.
+ 	* gcc.dg/lto/pr122515_1.c: New file.
+ 	* gcc.dg/lto/pr122515_2.c: Likewise.
+ 	* gcc.dg/lto/pr122515_3.c: Likewise.
+ 	* gcc.dg/lto/pr122515_4.c: Likewise.
+ 	* gcc.dg/lto/pr122515_5.c: Likewise.
+ 	* gcc.dg/lto/pr122515_6.c: Likewise.
+ 	* gcc.dg/lto/pr122515_7.c: Likewise.
+ 	* gcc.dg/lto/pr122515_8.c: Likewise.
+ 	* gcc.dg/lto/pr122515_9.c: Likewise.
+ 
+ 2025-11-04  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122253
+ 	* g++.dg/modules/internal-16.C: New test.
+ 
+ 2025-11-04  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR fortran/122513
+ 	* gfortran.dg/pr122513-2.f90: New test.
+ 
+ 2025-11-04  Kishan Parmar  <kishan@linux.ibm.com>
+ 
+ 	PR rtl-optimization/93738
+ 	* gcc.target/powerpc/rlwimi-2.c: Update expected rldicl count.
+ 
+ 2025-11-04  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/122544
+ 	* g++.dg/analyzer/exception-path-1-sarif.py: New test script.
+ 	* g++.dg/analyzer/exception-path-1.C: Add SARIF output, and use
+ 	the above to check it.
+ 	* g++.dg/analyzer/exception-path-unwind-multiple-2-sarif.py: New
+ 	test script.
+ 	* g++.dg/analyzer/exception-path-unwind-multiple-2.C: Add SARIF
+ 	output, and use the above to check it.
+ 	* gcc.dg/analyzer/setjmp-3-sarif.py: New test script.
+ 	* gcc.dg/analyzer/setjmp-3.c: Add SARIF output, and use
+ 	the above to check it.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/generic_inst15.adb: New test.
+ 	* gnat.dg/generic_inst15_pkg-g.ads: New helper.
+ 	* gnat.dg/generic_inst15_pkg.ads: Likewise.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/abstract1.ads: New test.
+ 
+ 2025-11-03  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/122534
+ 	* gcc.target/i386/pr122534.c: New test.
+ 
+ 2025-11-03  Robin Dapp  <rdapp.gcc@gmail.com>
+ 
+ 	* gcc.target/riscv/rvv/base/pr119115.c: Add -std=gnu99.
+ 
+ 2025-11-03  Steve Kargl  <kargls@comcast.net>
+ 
+ 	PR fortran/122513
+ 	* gfortran.dg/pr122513.f90: New test.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/lookup/koenig16.C: New test.
+ 	* g++.dg/modules/adl-11_a.C: New file.
+ 	* g++.dg/modules/adl-11_b.C: New file.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/modules/builtin-9_a.C: New test.
+ 	* g++.dg/modules/builtin-9_b.C: New test.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/modules/clone-5_a.C: New test.
+ 	* g++.dg/modules/clone-5_b.C: New test.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/modules/namespace-15_a.C: New test.
+ 	* g++.dg/modules/namespace-15_b.C: New test.
+ 
+ 2025-11-03  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* gcc.target/avr/torture/pr92606.c: Use LPM even if LPMx
+ 	is available.
+ 
+ 2025-11-03  Loeka Rogge  <loeka@synopsys.com>
+ 
+ 	* gcc.target/arc/movv2hi-be.c: New test.
+ 
+ 2025-11-03  Kito Cheng  <kito.cheng@sifive.com>
+ 
+ 	* g++.dg/abi/param2.C: Add -Wno-psabi option for RISC-V.
+ 	* g++.target/riscv/abi/empty-struct+union-1.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct+union-2.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct+union-3.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct+union-4.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-1.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-2.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-3.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-4.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-5.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-6.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-7.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-8.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-9.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-10.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-11.cc: New test.
+ 	* g++.target/riscv/abi/empty-struct-12.cc: New test.
+ 	* g++.target/riscv/abi/empty-union-1.cc: New test.
+ 	* g++.target/riscv/abi/empty-union-2.cc: New test.
+ 	* g++.target/riscv/abi/empty-union-3.cc: New test.
+ 	* g++.target/riscv/abi/empty-union-4.cc: New test.
+ 	* g++.target/riscv/riscv.exp: Add abi subdirectory.
+ 	* gcc.dg/compat/pr83487-1_x.c: Add -Wno-psabi option for RISC-V.
+ 	* gcc.dg/compat/pr83487-1_y.c: Likewise.
+ 	* gcc.dg/compat/pr83487-2_x.c: Likewise.
+ 	* gcc.dg/compat/pr83487-2_y.c: Likewise.
+ 	* gcc.dg/torture/pr28814.c: Likewise.
+ 	* gcc.target/riscv/abi/empty-struct+union-1.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct+union-2.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct+union-3.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct+union-4.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-1.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-2.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-3.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-4.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-5.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-6.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-7.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-8.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-9.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-10.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-11.c: New test.
+ 	* gcc.target/riscv/abi/empty-struct-12.c: New test.
+ 	* gcc.target/riscv/abi/empty-union-1.c: New test.
+ 	* gcc.target/riscv/abi/empty-union-2.c: New test.
+ 	* gcc.target/riscv/abi/empty-union-3.c: New test.
+ 	* gcc.target/riscv/abi/empty-union-4.c: New test.
+ 	* gcc.target/riscv/riscv.exp: Add abi subdirectory.
+ 
+ 2025-11-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	PR target/122405
+ 	* g++.target/aarch64/mv-cpu-features.C: Add HWCAP_ATOMICS and
+ 	HWCAP2_RNG defines.
+ 
+ 2025-11-03  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* gcc.target/aarch64/fmv_priority.in: Update for new features.
+ 	* gcc.target/aarch64/fmv_priority1.c: Ditto.
+ 	* gcc.target/aarch64/fmv_priority2.c: Ditto.
+ 
+ 2025-11-03  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/vect19.ads, gnat.dg/vect19.adb: New test.
+ 	* gnat.dg/vect19_pkg.ads, gnat.dg/vect19_pkg.adb: New helper.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/mode-tieable-opt.c: New test.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/mem-and-mask-opt.c: New test.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/vec_pack_unpack_256.c: Adjust to changed
+ 	lasx_xvpermi_q_<LASX:mode> template.
+ 	* gcc.target/loongarch/vector/lasx/lasx-builtin.c: Ditto.
+ 	* gcc.target/loongarch/lasx-xvpermi_q-opt.c: New test.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/and-large-immediate-opt.c: New test.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/extendsidi2-combine.c: New test.
+ 	* gcc.target/loongarch/spill-less.c: New test.
+ 
+ 2025-11-03  Guo Jie  <guojie@loongson.cn>
+ 
+ 	* gcc.target/loongarch/mulh_wu.c: New test.
+ 
+ 2025-11-03  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122475
+ 	* gcc.dg/vect/pr122475.c: New test.
+ 	* gcc.target/aarch64/sve/vect-reduc-bool-19.c: New test.
+ 	* gcc.target/aarch64/sve/vect-reduc-bool-20.c: New test.
+ 
+ 2025-11-03  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* gcc.target/i386/builtin-memmove-1a.c: New test.
+ 	* gcc.target/i386/builtin-memmove-1b.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-1c.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-1d.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-2a.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-2b.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-2c.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-2d.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-3a.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-3b.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-3c.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-4a.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-4b.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-4c.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-5a.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-5b.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-5c.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-6.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-7.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-8.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-9.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-10.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-11a.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-11b.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-11c.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-12.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-13.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-14.c: Likewise.
+ 	* gcc.target/i386/builtin-memmove-15.c: Likewise.
+ 
+ 2025-11-03  Shreya Munnangi  <smunnangi1@ventanamicro.com>
+ 
+ 	PR target/52345
+ 	* gcc.target/riscv/pr52345.c: Add new test cases.
+ 
+ 2025-11-03  chenxiaolong  <chenxiaolong@loongson.cn>
+ 
+ 	* gcc.target/loongarch/vector/lasx/vect-concat-128-256-result.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-concat-128-256.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-extract-256-128-result.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-extract-256-128.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-insert-128-256-result.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-insert-128-256.c: New test.
+ 
+ 2025-11-03  Lulu Cheng  <chenglulu@loongson.cn>
+ 
+ 	* gcc.target/loongarch/imm-load.c: Modify.
+ 
+ 2025-11-02  Gaius Mulley  <gaiusmod2@gmail.com>
+ 
+ 	PR modula2/122499
+ 	* gm2.dg/spell/iso/fail/badimport2.mod: New test.
+ 	* gm2.dg/spell/iso/fail/badimport3.mod: New test.
+ 	* gm2.dg/spell/iso/fail/badimport4.mod: New test.
+ 
+ 2025-11-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc.target/sparc/small-struct-1.c: Run only on Solaris.
+ 
+ 2025-11-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc.target/sparc/cbcond-1.c: Accept reverse branches.
+ 	* gcc.target/sparc/cbcond-2.c: Likewise.
+ 	* gcc.target/sparc/overflow-3.c: Likewise.
+ 	* gcc.target/sparc/overflow-4.c: Likewise.
+ 	* gcc.target/sparc/overflow-5.c: Likewise.
+ 
+ 2025-11-02  Uros Bizjak  <ubizjak@gmail.com>
+ 
+ 	PR target/122518
+ 	* gcc.target/i386/pr122518.c: New test.
+ 
+ 2025-11-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/unknown_discr1.ads: New test.
+ 	* gnat.dg/specs/unknown_discr1_pkg.ads: New helper.
+ 	* gnat.dg/specs/unknown_discr1_pkg-child.ads: Likewise.
+ 	* gnat.dg/specs/unknown_discr1_pkg-g.ads: Likewise.
+ 	* gnat.dg/specs/unknown_discr1_pkg-inst.ads: Likewise.
+ 
+ 2025-11-02  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/use_type4.adb: New test.
+ 
+ 2025-11-02  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* gcc.target/avr/torture/pr84211-fuse-move-1.c: Add -fno-lto.
+ 
+ 2025-11-02  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122421
+ 	* g++.dg/modules/inst-6_a.C: New test.
+ 	* g++.dg/modules/inst-6_b.C: New test.
+ 
  2025-11-01  Shreya Munnangi  <smunnangi1@ventanamicro.com>
  
  	PR target/67731
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/abi/param2.C gcc-16-20251109/gcc/testsuite/g++.dg/abi/param2.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/abi/param2.C	Sun Nov  2 22:32:30 2025
--- gcc-16-20251109/gcc/testsuite/g++.dg/abi/param2.C	Sun Nov  9 22:32:55 2025
***************
*** 1,7 ****
  // PR target/20795
  // Test passing aligned empty aggregate
  // { dg-do compile }
! // { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
  
  struct S { union {} a; } __attribute__((aligned));
  
--- 1,7 ----
  // PR target/20795
  // Test passing aligned empty aggregate
  // { dg-do compile }
! // { dg-options "-Wno-psabi" { target { { { i?86-*-* x86_64-*-* } && ilp32 } || { riscv*-*-* } } } }
  
  struct S { union {} a; } __attribute__((aligned));
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-1-sarif.py gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-1-sarif.py
*** gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-1-sarif.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-1-sarif.py	Sun Nov  9 22:32:55 2025
***************
*** 0 ****
--- 1,22 ----
+ from sarif import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ def test_kinds(sarif):
+     result = get_result_by_index(sarif, 0)
+ 
+     assert result['level'] == 'note'
+ 
+     events = result["codeFlows"][0]["threadFlows"][0]['locations']
+ 
+     # Event "(1)": "throwing exception of type 'value_error' here..." (index == 0)
+     assert events[0]['location']['message']['text'] == "throwing exception of type 'value_error' here..."
+     assert events[0]['kinds'] == ["throw"]
+ 
+     # Event "(2)": "...catching exception of type 'value_error' here" (index == 1)
+     assert events[1]['location']['message']['text'] == "...catching exception of type 'value_error' here"
+     assert events[1]['kinds'] == ["catch"]
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-1.C gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-1.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-1.C	Sun Nov  2 22:32:30 2025
--- gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-1.C	Sun Nov  9 22:32:55 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-additional-options "-fdiagnostics-add-output=sarif" } */
+ 
  /* Verify that we follow the correct paths when we know the typeinfo of
     an exception.  */
  
*************** int test ()
*** 32,34 ****
--- 34,43 ----
    __analyzer_dump_path (); // { dg-bogus "path" }
    return 0;
  }
+ 
+ /* Verify that some JSON was written to a file with the expected name.  */
+ /* { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest exception-path-1.C "exception-path-1-sarif.py" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2-sarif.py gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2-sarif.py
*** gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2-sarif.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2-sarif.py	Sun Nov  9 22:32:55 2025
***************
*** 0 ****
--- 1,23 ----
+ from sarif import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ def test_kinds(sarif):
+     result = get_result_by_index(sarif, 0)
+ 
+     assert result['level'] == 'note'
+ 
+     events = result["codeFlows"][0]["threadFlows"][0]['locations']
+ 
+     assert events[-4]['location']['message']['text'] == "throwing exception of type 'value_error' here..."
+     assert events[-4]['kinds'] == ["throw"]
+ 
+     assert events[-3]['location']['message']['text'] == "unwinding 2 stack frames"
+     assert events[-3]['kinds'] == ["unwind"]
+ 
+     assert events[-2]['location']['message']['text'] == "...catching exception of type 'value_error' here"
+     assert events[-2]['kinds'] == ["catch"]
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2.C gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2.C	Sun Nov  2 22:32:30 2025
--- gcc-16-20251109/gcc/testsuite/g++.dg/analyzer/exception-path-unwind-multiple-2.C	Sun Nov  9 22:32:55 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-additional-options "-fdiagnostics-add-output=sarif" } */
+ 
  /* Verify that we follow the correct paths when we know the typeinfo of
     an exception: interprocedural case where unwind multiple frame,
     failing to match the type.  */
*************** int outer ()
*** 53,55 ****
--- 55,64 ----
    __analyzer_dump_path (); // { dg-bogus "path" }
    return 0;
  }
+ 
+ /* Verify that some JSON was written to a file with the expected name.  */
+ /* { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest exception-path-unwind-multiple-2.C "exception-path-unwind-multiple-2-sarif.py" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/lookup/koenig16.C gcc-16-20251109/gcc/testsuite/g++.dg/lookup/koenig16.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/lookup/koenig16.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/lookup/koenig16.C	Sun Nov  9 22:33:02 2025
***************
*** 0 ****
--- 1,22 ----
+ // Before P1787 (C++20), only hidden friends are included in ADL.
+ // After P1787, all friends are included.
+ 
+ namespace N {
+   namespace NN {
+     struct A;
+   }
+   using NN::A;
+   void fn (A);
+   namespace NN {
+     struct A {
+       friend void N::fn (A);
+     };
+   }
+   void fn (A) { }
+ }
+ 
+ int main()
+ {
+   N::A a;
+   fn(a);			// { dg-error "not declared" "" { target c++17_down } }
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/adl-11_a.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/adl-11_a.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/adl-11_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/adl-11_a.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,21 ----
+ // Before P1787 (C++20), only hidden friends are included in ADL.
+ // After P1787, all friends are included.
+ 
+ // { dg-additional-options "-fmodules -Wno-global-module" }
+ 
+ export module M;
+ 
+ namespace N {
+   namespace NN {
+     export struct A;
+   }
+   export using NN::A;
+ 
+   export void fn (A);
+ 
+   namespace NN {
+     struct A {
+       friend void N::fn (A);
+     };
+   }
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/adl-11_b.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/adl-11_b.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/adl-11_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/adl-11_b.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,12 ----
+ // Before P1787 (C++20), only hidden friends are included in ADL.
+ // After P1787, all friends are included.
+ 
+ // { dg-additional-options -fmodules }
+ 
+ import M;
+ 
+ int main()
+ {
+   N::A a;
+   fn(a);			// { dg-error "not declared" "" { target c++17_down } }
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/builtin-9_a.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/builtin-9_a.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/builtin-9_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/builtin-9_a.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,16 ----
+ // Test that the built-in clog doesn't interfere with redeclaring the import.
+ 
+ // { dg-additional-options "-fmodules -Wno-global-module" }
+ 
+ module;
+ 
+ namespace std {
+   class ostream;
+   extern ostream clog;
+ }
+ 
+ export module M;
+ 
+ namespace std {
+   export using std::clog;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/builtin-9_b.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/builtin-9_b.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/builtin-9_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/builtin-9_b.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,8 ----
+ // { dg-additional-options -fmodules }
+ 
+ import M;
+ 
+ namespace std {
+   class ostream;
+   extern ostream clog;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/clone-5_a.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/clone-5_a.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/clone-5_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/clone-5_a.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,25 ----
+ // Test that a random instantiation of a constructor template doesn't end up in
+ // the overload set for other arguments.
+ 
+ // { dg-do compile { target c++20 } }
+ // { dg-additional-options "-fmodules" }
+ 
+ export module M;
+ 
+ export {
+   inline int i;
+ 
+   template <class T>
+     struct A {
+     A(const T* p, unsigned long len) { ++i; }
+     template <class B, class E>
+     requires (!__is_convertible(E,unsigned long))
+     A(B,E) { ++i; }
+   };
+ 
+   inline void f()
+   {
+     const char *const p = nullptr;
+     A<char> a (p, p);		// instantiate A<const char *, const char *>
+   }
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/clone-5_b.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/clone-5_b.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/clone-5_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/clone-5_b.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,9 ----
+ // { dg-additional-options -fmodules }
+ 
+ import M;
+ 
+ int main()
+ {
+   const char *const p = nullptr;
+   A<char> (p, 0);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/internal-16.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/internal-16.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/internal-16.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/internal-16.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,30 ----
+ // PR c++/122253
+ // { dg-additional-options "-fmodules -Wtemplate-names-tu-local" }
+ 
+ export module M;
+ 
+ template <int> struct ic {};
+ struct S {
+   constexpr operator int() const { return 5; }
+   constexpr int operator&() const { return 8; }
+ };
+ 
+ template <typename T> inline void a(T) {
+   T a;
+   static T b;
+   ic<a>{};
+   ic<b>{};
+   ic<&a>{};
+   ic<&b>{};
+ }
+ 
+ template <typename T> inline auto b(T x) {
+   return [&](auto y) {
+     return [=](auto z) {
+       return ic<(int)x + (int)&y + (int)z>{};
+     };
+   };
+ }
+ 
+ template void a(S);
+ ic<5 + 8 + 5> x = b(S{})(S{})(S{});
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/internal-17_a.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/internal-17_a.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/internal-17_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/internal-17_a.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,64 ----
+ // PR c++/121574
+ // { dg-additional-options "-fmodules -Wno-error=expose-global-module-tu-local -Wtemplate-names-tu-local -Wno-global-module" }
+ // { dg-module-cmi M }
+ 
+ module;
+ 
+ namespace {
+   void foo() {}
+   inline int bar = 123;
+   template <typename> void qux() {}
+   template void qux<int>();
+ 
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wexpose-global-module-tu-local"
+   void foo_ignored() {}
+   inline int bar_ignored = 123;
+   template <typename> void qux_ignored() {}
+   template void qux_ignored<int>();
+ #pragma GCC diagnostic pop
+ };
+ 
+ export module M;
+ 
+ export inline void a() {  // { dg-warning "exposes TU-local" }
+   foo();
+   int x = bar;
+ }
+ 
+ export inline void b() {
+   foo_ignored();
+   int x = bar_ignored;
+ }
+ 
+ export template <typename T>
+ void c() {  // { dg-warning "refers to TU-local" }
+   foo();
+   int x = bar;
+ }
+ 
+ export template <typename T>
+ void d() {
+   foo_ignored();
+   int x = bar_ignored;
+ }
+ 
+ export inline void e() {  // { dg-warning "exposes TU-local" }
+   foo();
+   int result = bar_ignored;
+ }
+ 
+ export template <typename T>
+ void f() {  // { dg-warning "refers to TU-local" }
+   foo_ignored();
+   int result = bar;
+ }
+ 
+ export inline void g() {  // { dg-warning "exposes TU-local" }
+   qux<int>();
+ }
+ 
+ export template <typename>
+ void h() {
+   qux_ignored<int>();
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/internal-17_b.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/internal-17_b.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/internal-17_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/internal-17_b.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,60 ----
+ // PR c++/121576
+ // { dg-additional-options "-fmodules -Wno-error=expose-global-module-tu-local -Wtemplate-names-tu-local -Wno-global-module" }
+ // { dg-module-cmi !X }
+ 
+ module;
+ 
+ static inline int x  // { dg-error "TU-local" }
+ 		     // { dg-message "exposed elsewhere" "" { target *-*-* } .-1 }
+   = []{ return 1; }();  // { dg-message "internal" }
+ 
+ static inline int y = []{ return 2; }();  // { dg-bogus "" }
+ 
+ namespace {
+   struct S {};
+   template <typename> void tmpl();
+ 
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wexpose-global-module-tu-local"
+   struct S_ignored {};
+   template <typename> void tmpl_ignored();
+ #pragma GCC diagnostic pop
+ }
+ 
+ export module X;
+ import M;
+ 
+ void test_usage() {
+   a();
+   b();
+   c<int>();  // { dg-message "required from here" }
+   d<int>();  // { dg-bogus "" }
+   e();
+   f<int>();  // { dg-message "required from here" }
+   g();
+   h<int>();  // { dg-bogus "" }
+ 
+   // { dg-warning "instantiation exposes TU-local entity" "" { target *-*-* } 0 }
+ }
+ 
+ inline void expose() {  // { dg-warning "exposes TU-local" }
+   int result = x;
+ }
+ 
+ // Internal linkage types always hard error
+ inline void expose_struct() {  // { dg-error "exposes TU-local" }
+   S s;
+ }
+ inline void still_expose_struct() {  // { dg-error "exposes TU-local" }
+   S_ignored s;
+ }
+ 
+ // Template instantiations occuring in module purview are not ignored,
+ // as it's too hard to tell if the instantiation will accidentally rely
+ // on something in the purview or not.
+ inline void expose_tmpl() {  // { dg-error "exposes TU-local" }
+   tmpl<int>();
+ }
+ inline void still_expose_tmpl() {  // { dg-error "exposes TU-local" }
+   tmpl_ignored<int>();
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/namespace-15_a.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/namespace-15_a.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/namespace-15_a.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/namespace-15_a.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,9 ----
+ // Test that namespace deprecation is represented in the gcm.
+ 
+ // { dg-additional-options "-fmodules" }
+ 
+ export module M;
+ 
+ export {
+   namespace [[deprecated]] N { }
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/modules/namespace-15_b.C gcc-16-20251109/gcc/testsuite/g++.dg/modules/namespace-15_b.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/modules/namespace-15_b.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/modules/namespace-15_b.C	Sun Nov  9 22:33:03 2025
***************
*** 0 ****
--- 1,5 ----
+ // { dg-additional-options -fmodules }
+ 
+ import M;
+ 
+ using namespace N;		// { dg-warning "deprecated" }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.dg/torture/pr122589.C gcc-16-20251109/gcc/testsuite/g++.dg/torture/pr122589.C
*** gcc-16-20251102/gcc/testsuite/g++.dg/torture/pr122589.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.dg/torture/pr122589.C	Sun Nov  9 22:33:04 2025
***************
*** 0 ****
--- 1,22 ----
+ // { dg-do compile }
+ // { dg-additional-options "-g" }
+ 
+ struct QPointF {
+   QPointF(double xpos, double ypos) : xp(xpos), yp(ypos) {}
+   double xp;
+   double yp;
+ };
+ double xp, yp, w, h;
+ struct QRectF {
+   QRectF(QPointF, int);
+   QPointF center() { return QPointF(xp + w / 2, yp + h / 2); }
+ };
+ void clientArea(QPointF &);
+ int workspace_size;
+ void workspace() {
+   QRectF geom(QPointF(0, 0), workspace_size);
+   xp = 0 - w / 2;
+   yp = -h;
+   QPointF __trans_tmp_2 = geom.center();
+   clientArea(__trans_tmp_2);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/aarch64/mv-cpu-features.C gcc-16-20251109/gcc/testsuite/g++.target/aarch64/mv-cpu-features.C
*** gcc-16-20251102/gcc/testsuite/g++.target/aarch64/mv-cpu-features.C	Sun Nov  2 22:32:57 2025
--- gcc-16-20251109/gcc/testsuite/g++.target/aarch64/mv-cpu-features.C	Sun Nov  9 22:33:07 2025
*************** int impl ()
*** 41,46 ****
--- 41,54 ----
  #define _IFUNC_ARG_HWCAP (1ULL << 62)
  #endif
  
+ #ifndef HWCAP_ATOMICS
+ #define HWCAP_ATOMICS (1 << 8)
+ #endif
+ 
+ #ifndef HWCAP2_RNG
+ #define HWCAP2_RNG (1 << 16)
+ #endif
+ 
  extern "C" void
  __init_cpu_features_resolver (unsigned long hwcap, const ifunc_arg_t *arg);
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-1.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-1.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-1.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-1.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Su2e_1f {
+   union {
+     struct {
+     } e1, e2;
+   } u;
+   float f;
+ };
+ struct Su2e_1f echo_Su2e_1f(int i, float f, struct Su2e_1f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-2.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-2.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-2.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-2.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Su2e_2f {
+   union {
+     struct {
+     } e1, e2;
+   } u;
+   float f;
+   float g;
+ };
+ struct Su2e_2f echo_Su2e_2f(int i, float f, struct Su2e_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+8 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+8 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-3.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-3.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-3.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-3.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smu2e_1f {
+   union {
+     struct {
+     } e1, e2;
+   } u1;
+   struct {
+     float f;
+     union {
+       struct {
+       } e1, e2;
+     } u;
+   } ue;
+   union {
+     struct {
+     } e1, e2;
+   } u2;
+ };
+ struct Smu2e_1f echo_Smu2e_1f(int i, float f, struct Smu2e_1f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-4.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-4.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-4.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct+union-4.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smu2e_2f {
+   union {
+     struct {
+     } e1, e2;
+   } u1;
+   struct {
+     float f;
+     float g;
+     union {
+       struct {
+       } e1, e2;
+     } u;
+   } ue;
+   union {
+     struct {
+     } e1, e2;
+   } u2;
+ };
+ struct Smu2e_2f echo_Smu2e_2f(int i, float f, struct Smu2e_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+8 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+8 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-1.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-1.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-1.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-1.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Se_1f {
+   struct {
+   } e1;
+   float f;
+ };
+ struct Se_1f echo_Se_1f(int i, float f, struct Se_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-10.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-10.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-10.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-10.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S1ae_2f {
+   struct {
+   } e1[1];
+   float f;
+   float g;
+ };
+ struct S1ae_2f echo_S1ae_2f(int i, float f, struct S1ae_2f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(mem.*:DI .*\[.* s\+0 .*\]\)[[:space:]]+\(reg.*:DI \d+ a1\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(mem.*:DI .*\[.* s\+8 .*\]\)[[:space:]]+\(reg.*:DI \d+ a2\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:DI \d+ a0 .*\)[[:space:]]+\(subreg:DI \(reg.*:TI \d+ \[ <retval> \]\) 0\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:DI \d+ a1 .*\)[[:space:]]+\(subreg:DI \(reg.*:TI \d+ \[ <retval> \]\) 8\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-11.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-11.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-11.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-11.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm1ae_1f {
+   struct {
+   } e1[1];
+   struct {
+     float f;
+     struct {
+     } e[1];
+   } fe;
+   struct {
+   } e2[1];
+ };
+ struct Sm1ae_1f echo_Sm1ae_1f(int i, float f, struct Sm1ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(mem.*:DI .*\[.* s\+0 .*\]\)[[:space:]]+\(reg.*:DI \d+ a1\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(mem.*:DI .*\[.* s\+8 .*\]\)[[:space:]]+\(reg.*:DI \d+ a2\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:DI \d+ a0 .*\)[[:space:]]+\(subreg:DI \(reg.*:TI \d+ \[ <retval> \]\) 0\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:DI \d+ a1 .*\)[[:space:]]+\(subreg:DI \(reg.*:TI \d+ \[ <retval> \]\) 8\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-12.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-12.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-12.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-12.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm1ae_2f {
+   struct {
+   } e1[1];
+   struct {
+     float f;
+     float g;
+     struct {
+     } e[1];
+   } fe;
+   struct {
+   } e2[1];
+ };
+ struct Sm1ae_2f echo_Sm1ae_2f(int i, float f, struct Sm1ae_2f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\[.* \.result_ptr\+0 .*\]} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-2.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-2.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-2.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-2.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Se_2f {
+   struct {
+   } e1;
+   float f;
+   float g;
+ };
+ struct Se_2f echo_Se_2f(int i, float f, struct Se_2f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+8 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+8 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-3.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-3.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-3.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-3.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sme_1f {
+   struct {
+   } e1;
+   struct {
+     float f;
+     struct {
+     } e;
+   } fe;
+   struct {
+   } e2;
+ };
+ struct Sme_1f echo_Sme_1f(int i, float f, struct Sme_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-4.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-4.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-4.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-4.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sme_2f {
+   struct {
+   } e1;
+   struct {
+     float f;
+     float g;
+     struct {
+     } e;
+   } fe;
+   struct {
+   } e2;
+ };
+ struct Sme_2f echo_Sme_2f(int i, float f, struct Sme_2f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+8 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+8 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-5.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-5.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-5.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-5.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S0ae_1f {
+   struct {
+   } e1[0];
+   float f;
+ };
+ struct S0ae_1f echo_S0ae_1f(int i, float f, struct S0ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-6.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-6.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-6.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-6.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S0ae_2f {
+   struct {
+   } e1[0];
+   float f;
+   float g;
+ };
+ struct S0ae_2f echo_S0ae_2f(int i, float f, struct S0ae_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-7.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-7.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-7.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-7.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm0ae_1f {
+   struct {
+   } e1[0];
+   struct {
+     float f;
+     struct {
+     } e[0];
+   } fe;
+   struct {
+   } e2[0];
+ };
+ struct Sm0ae_1f echo_Sm0ae_1f(int i, float f, struct Sm0ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-8.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-8.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-8.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-8.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm0ae_2f {
+   struct {
+   } e1[0];
+   struct {
+     float f;
+     float g;
+     struct {
+     } e[0];
+   } fe;
+   struct {
+   } e2[0];
+ };
+ struct Sm0ae_2f echo_Sm0ae_2f(int i, float f, struct Sm0ae_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-9.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-9.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-struct-9.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-struct-9.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S1ae_1f {
+   struct {
+   } e1[1];
+   float f;
+ };
+ struct S1ae_1f echo_S1ae_1f(int i, float f, struct S1ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(mem.*:DI .*\[.* s\+0 .*\]\)[[:space:]]+\(reg.*:DI \d+ a1\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:DI \d+ a0\)[[:space:]]+\(reg.*:DI \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-1.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-1.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-1.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-1.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Seu_1f {
+   union {
+   } e1;
+   float f;
+ };
+ struct Seu_1f echo_Seu_1f(int i, float f, struct Seu_1f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-2.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-2.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-2.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-2.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S2eu_2f {
+   union {
+   } e1;
+   float f;
+   float g;
+ };
+ struct S2eu_2f echo_S2eu_2f(int i, float f, struct S2eu_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+8 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+8 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-3.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-3.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-3.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-3.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smeu_1f {
+   union {
+   } e1;
+   struct {
+     float f;
+     union {
+     } e;
+   } fe;
+   union {
+   } e2;
+ };
+ struct Smeu_1f echo_Smeu_1f(int i, float f, struct Smeu_1f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-4.cc gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-4.cc
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/abi/empty-union-4.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/abi/empty-union-4.cc	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smeu_2f {
+   union {
+   } e1;
+   struct {
+     float f;
+     float g;
+     union {
+     } e;
+   } fe;
+   union {
+   } e2;
+ };
+ struct Smeu_2f echo_Smeu_2f(int i, float f, struct Smeu_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+8 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+8 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/g++.target/riscv/riscv.exp gcc-16-20251109/gcc/testsuite/g++.target/riscv/riscv.exp
*** gcc-16-20251102/gcc/testsuite/g++.target/riscv/riscv.exp	Sun Nov  2 22:32:57 2025
--- gcc-16-20251109/gcc/testsuite/g++.target/riscv/riscv.exp	Sun Nov  9 22:33:08 2025
*************** dg-init
*** 29,34 ****
--- 29,35 ----
  
  # Main loop.
  dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" ""
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/abi/*.cc]] "" ""
  
  # All done.
  dg-finish
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.c-torture/compile/pr122588-1.c gcc-16-20251109/gcc/testsuite/gcc.c-torture/compile/pr122588-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.c-torture/compile/pr122588-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.c-torture/compile/pr122588-1.c	Sun Nov  9 22:33:08 2025
***************
*** 0 ****
--- 1,25 ----
+ /* Disable warnings about __sync_nand_and_fetch. */
+ /* { dg-options "-w" } */
+ /* PR tree-optimization/122588 */
+ 
+ int i;
+ char c;
+ 
+ static inline __attribute__((__always_inline__))
+ void foo0 (int a)
+ {
+ l5:
+   __sync_nand_and_fetch (&i, 0);
+   int x = __builtin_memcmp_eq (&a, 0, 4);
+   if (__builtin_iseqsig (x, 0.))
+     goto l5;
+   if (a)
+     __builtin_unreachable ();
+   c = a;
+ }
+ 
+ int
+ main ()
+ {
+   foo0 (1);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/analyzer/setjmp-3-sarif.py gcc-16-20251109/gcc/testsuite/gcc.dg/analyzer/setjmp-3-sarif.py
*** gcc-16-20251102/gcc/testsuite/gcc.dg/analyzer/setjmp-3-sarif.py	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/analyzer/setjmp-3-sarif.py	Sun Nov  9 22:33:09 2025
***************
*** 0 ****
--- 1,23 ----
+ from sarif import *
+ 
+ import pytest
+ 
+ @pytest.fixture(scope='function', autouse=True)
+ def sarif():
+     return sarif_from_env()
+ 
+ def test_kinds(sarif):
+     result = get_result_by_index(sarif, 0)
+ 
+     assert result['level'] == 'note'
+ 
+     events = result["codeFlows"][0]["threadFlows"][0]['locations']
+ 
+     assert events[1]['location']['message']['text'] == "'setjmp' called here"
+     assert events[1]['kinds'] == ["setjmp"]
+ 
+     assert events[6]['location']['message']['text'] == "rewinding from 'longjmp' in 'inner'..."
+     assert events[6]['kinds'] == ["longjmp"]
+ 
+     assert events[7]['location']['message']['text'].startswith("...to 'setjmp' in 'outer'")
+     assert events[7]['kinds'] == ["longjmp"]
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/analyzer/setjmp-3.c gcc-16-20251109/gcc/testsuite/gcc.dg/analyzer/setjmp-3.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/analyzer/setjmp-3.c	Sun Nov  2 22:33:01 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/analyzer/setjmp-3.c	Sun Nov  9 22:33:09 2025
***************
*** 1,4 ****
--- 1,6 ----
  /* { dg-additional-options "-fdiagnostics-show-line-numbers -fdiagnostics-path-format=inline-events -fdiagnostics-show-caret" } */
+ /* { dg-additional-options "-fdiagnostics-add-output=sarif" } */
+ 
  /* { dg-enable-nn-line-numbers "" } */
  /* { dg-require-effective-target indirect_jumps } */
  
*************** void outer (void)
*** 107,109 ****
--- 109,118 ----
      |      |       (11) here
      |
      { dg-end-multiline-output "" } */
+ 
+ /* Verify that some JSON was written to a file with the expected name.  */
+ /* { dg-final { verify-sarif-file } } */
+ 
+ /* Use a Python script to verify various properties about the generated
+    .sarif file:
+    { dg-final { run-sarif-pytest setjmp-3.c "setjmp-3-sarif.py" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/cmp-mem-const-1.c gcc-16-20251109/gcc/testsuite/gcc.dg/cmp-mem-const-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/cmp-mem-const-1.c	Sun Nov  2 22:33:02 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/cmp-mem-const-1.c	Sun Nov  9 22:33:10 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile { target { lp64 } } } */
  /* { dg-options "-O2 -fdump-rtl-combine-details" } */
  /* { dg-final { scan-rtl-dump "narrow comparison from mode .I to QI" "combine" } } */
+ /* { dg-skip-if "" { riscv*-*-* } } */
  
  typedef __UINT64_TYPE__ uint64_t;
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/cmp-mem-const-2.c gcc-16-20251109/gcc/testsuite/gcc.dg/cmp-mem-const-2.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/cmp-mem-const-2.c	Sun Nov  2 22:33:02 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/cmp-mem-const-2.c	Sun Nov  9 22:33:10 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-do compile { target { lp64 } } } */
  /* { dg-options "-O2 -fdump-rtl-combine-details" } */
  /* { dg-final { scan-rtl-dump "narrow comparison from mode .I to QI" "combine" } } */
+ /* { dg-skip-if "" { riscv*-*-* } } */
  
  typedef __UINT64_TYPE__ uint64_t;
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-1_x.c gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-1_x.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-1_x.c	Sun Nov  2 22:33:02 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-1_x.c	Sun Nov  9 22:33:10 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-options "-fno-common" { target { hppa*-*-hpux* } } } */
+ /* { dg-options "-Wno-psabi" { target { riscv*-*-* } } } */
  #include "pr83487-1.h"
  
  extern
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-1_y.c gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-1_y.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-1_y.c	Sun Nov  2 22:33:02 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-1_y.c	Sun Nov  9 22:33:10 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-options "-fno-common" { target { hppa*-*-hpux* } } } */
+ /* { dg-options "-Wno-psabi" { target { riscv*-*-* } } } */
  #include "pr83487-1.h"
  
  struct A a;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-2_x.c gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-2_x.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-2_x.c	Sun Nov  2 22:33:02 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-2_x.c	Sun Nov  9 22:33:10 2025
***************
*** 1,3 ****
--- 1,4 ----
  /* { dg-options "-fno-common" { target { hppa*-*-hpux* } } } */
+ /* { dg-options "-Wno-psabi" { target { riscv*-*-* } } } */
  #define PR83487_LARGE
  #include "pr83487-1_x.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-2_y.c gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-2_y.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/compat/pr83487-2_y.c	Sun Nov  2 22:33:02 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/compat/pr83487-2_y.c	Sun Nov  9 22:33:10 2025
***************
*** 1,3 ****
--- 1,4 ----
  /* { dg-options "-fno-common" { target { hppa*-*-hpux* } } } */
+ /* { dg-options "-Wno-psabi" { target { riscv*-*-* } } } */
  #define PR83487_LARGE
  #include "pr83487-1_y.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_0.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_0.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_0.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_0.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-lto-do ar-link } */
+ /* { dg-lto-options { { -flto=auto -ffat-lto-objects } } } */
+ 
+ extern int bar_7 (int);
+ 
+ int main (void)
+ {
+   return bar_7 (42);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_1.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_1.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_1.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_1;
+ 
+ A_1 a1_1 = {1};
+ A_1 a2_1 = {2};
+ 
+ int bar_1 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_2.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_2.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_2.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_2;
+ 
+ A_2 a1_2 = {1};
+ A_2 a2_2 = {2};
+ 
+ int bar_2 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_3.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_3.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_3.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_3;
+ 
+ A_3 a1_3 = {1};
+ A_3 a2_3 = {2};
+ 
+ int bar_3 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_4.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_4.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_4.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_4;
+ 
+ A_4 a1_4 = {1};
+ A_4 a2_4 = {2};
+ 
+ int bar_4 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_5.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_5.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_5.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_5;
+ 
+ A_5 a1_5 = {1};
+ A_5 a2_5 = {2};
+ 
+ int bar_5 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_6.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_6.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_6.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_6;
+ 
+ A_6 a1_6 = {1};
+ A_6 a2_6 = {2};
+ 
+ int bar_6 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_7.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_7.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_7.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_7;
+ 
+ A_7 a1_7 = {1};
+ A_7 a2_7 = {2};
+ 
+ int bar_7 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_8.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_8.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_8.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_8;
+ 
+ A_8 a1_8 = {1};
+ A_8 a2_8 = {2};
+ 
+ int bar_8 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_9.c gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_9.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/lto/pr122515_9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/lto/pr122515_9.c	Sun Nov  9 22:33:10 2025
***************
*** 0 ****
--- 1,12 ----
+ typedef struct {
+   int num;
+   int foo[40000000];
+ } A_9;
+ 
+ A_9 a1_9 = {1};
+ A_9 a2_9 = {2};
+ 
+ int bar_9 (int i)
+ {
+   return i++;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/pr113632.c gcc-16-20251109/gcc/testsuite/gcc.dg/pr113632.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/pr113632.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/pr113632.c	Sun Nov  9 22:33:11 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-evrp" } */
+ 
+ void dummy(void);
+ _Bool f(unsigned long a)
+ {
+         _Bool cmp = a > 8192;
+         if (cmp) goto then; else goto e;
+ then:
+         unsigned long t = __builtin_clzl(a); // [0,50]
+         t^=63; // [13,63]
+         if (t < 13 || t >63)
+           dummy ();
+ e:
+   return 0;
+ }
+ 
+ void f2(int x)
+ {
+   if (x <= 0 || x == 2 || x == 4 || x == 6)
+     return;
+   /* x = [1, 1][3, 3][5, 5][7, 2147483647] */
+   /* x ^ 6  should be non-zero.  */
+   if ((x ^ 6) == 0)
+     dummy ();
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "dummy"  "evrp" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/pr122126_vextr.c gcc-16-20251109/gcc/testsuite/gcc.dg/pr122126_vextr.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/pr122126_vextr.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/pr122126_vextr.c	Sun Nov  9 22:33:11 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-additional-options "-mavx2" { target avx2 } } */
+ 
+ #define vect16 __attribute__((vector_size(16)))
+ void ub_set() {
+   volatile vect16 unsigned BS_VAR_0;
+   unsigned a = BS_VAR_0[12];
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/pr122126_vset.c gcc-16-20251109/gcc/testsuite/gcc.dg/pr122126_vset.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/pr122126_vset.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/pr122126_vset.c	Sun Nov  9 22:33:11 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-additional-options "-mavx2" { target avx2 } } */
+ 
+ #define vect16 __attribute__((vector_size(16)))
+ void ub_set() {
+   volatile vect16 unsigned BS_VAR_0;
+   BS_VAR_0[12] = 4;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/pr90838.c gcc-16-20251109/gcc/testsuite/gcc.dg/pr90838.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/pr90838.c	Sun Nov  2 22:33:04 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/pr90838.c	Sun Nov  9 22:33:11 2025
*************** int ctz4 (unsigned long x)
*** 60,72 ****
    return table[(lsb * magic) >> 58];
  }
  
! /* { dg-final { scan-tree-dump-times {= \.CTZ} 4 "forwprop2" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
! /* { dg-final { scan-assembler-times "tzcntq\t" 1 { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
  /* { dg-final { scan-assembler-times "tzcntl\t" 3 { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
! /* { dg-final { scan-assembler-times "andl\t" 2 { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
  /* { dg-final { scan-assembler-not "negq" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
! /* { dg-final { scan-assembler-not "imulq" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
! /* { dg-final { scan-assembler-not "shrq" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
  
  /* { dg-final { scan-tree-dump-times {= \.CTZ} 4 "forwprop2" { target aarch64*-*-* } } } */
  /* { dg-final { scan-assembler-times "clz\t" 4 { target aarch64*-*-* } } } */
--- 60,72 ----
    return table[(lsb * magic) >> 58];
  }
  
! /* { dg-final { scan-tree-dump-times {= \.CTZ} 4 "forwprop2" { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
! /* { dg-final { scan-assembler-times "tzcntq\t" 1 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
  /* { dg-final { scan-assembler-times "tzcntl\t" 3 { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
! /* { dg-final { scan-assembler-times "andl\t" 2 { target { { i?86-*-* x86_64-*-* } && lp64 } } } } */
  /* { dg-final { scan-assembler-not "negq" { target { { i?86-*-* x86_64-*-* } && { ! { ia32 } } } } } } */
! /* { dg-final { scan-assembler-not "imulq" { target { { i?86-*-* x86_64-*-* } && { ! { x32 } } } } } } */
! /* { dg-final { scan-assembler-not "shrq" { target { { i?86-*-* x86_64-*-* } && { ! { x32 } } } } } } */
  
  /* { dg-final { scan-tree-dump-times {= \.CTZ} 4 "forwprop2" { target aarch64*-*-* } } } */
  /* { dg-final { scan-assembler-times "clz\t" 4 { target aarch64*-*-* } } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/torture/pr122502-2.c gcc-16-20251109/gcc/testsuite/gcc.dg/torture/pr122502-2.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/torture/pr122502-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/torture/pr122502-2.c	Sun Nov  9 22:33:11 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ 
+ typedef struct {
+   int mant;
+   int exp;
+ } SoftFloat;
+ SoftFloat __trans_tmp_8, main___trans_tmp_5;
+ static SoftFloat av_normalize_sf(SoftFloat a) {
+   while (a.mant + 536870911 < 1073741823) {
+     a.mant += a.mant;
+     a.exp -= 1;
+   }
+   return a;
+ }
+ void main() {
+   main___trans_tmp_5 = av_normalize_sf((SoftFloat){1, 29 + 1});
+   SoftFloat sf1 = main___trans_tmp_5;
+   for (;;) {
+     int t = main___trans_tmp_5.exp - sf1.exp;
+     if (t < 2)
+       sf1 = __trans_tmp_8;
+   }
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/torture/pr122599-1.c gcc-16-20251109/gcc/testsuite/gcc.dg/torture/pr122599-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/torture/pr122599-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/torture/pr122599-1.c	Sun Nov  9 22:33:11 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* PR tree-optimization/122599 */
+ 
+ void f(int *x, unsigned n) {
+   for (int i = 0; i < 5; i++)
+     while ((int)--n >= 0)
+       x[0] = 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/torture/pr28814.c gcc-16-20251109/gcc/testsuite/gcc.dg/torture/pr28814.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/torture/pr28814.c	Sun Nov  2 22:33:05 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/torture/pr28814.c	Sun Nov  9 22:33:11 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do compile { target { ilp32 || lp64 } } } */
+ /* { dg-options "-Wno-psabi" { target { riscv*-*-* } } } */
  
  struct w49
  {
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/tree-ssa/forwprop-43.c gcc-16-20251109/gcc/testsuite/gcc.dg/tree-ssa/forwprop-43.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/tree-ssa/forwprop-43.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/tree-ssa/forwprop-43.c	Sun Nov  9 22:33:12 2025
***************
*** 0 ****
--- 1,169 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-forwprop1" } */
+ /* { dg-additional-options "-fgimple" } */
+ 
+ #include <stdint.h>
+ 
+ typedef int32_t int32x4_t __attribute__((vector_size(16)));
+ typedef int32_t int32x2_t __attribute__((vector_size(8)));
+ typedef int32_t int32x1_t __attribute__((vector_size(4)));
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo (int32x4_t x)
+ {
+   int32x2_t _1;
+   int32x2_t _2;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x2_t> (x, 64, 64);
+   _2 = __BIT_FIELD_REF <int32x2_t> (x, 64, 0);
+   _6 = _Literal (int32x4_t) { _1, _2 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo2 (int32x4_t x)
+ {
+   int32x1_t _1;
+   int32x1_t _2;
+   int32x1_t _3;
+   int32x1_t _4;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x1_t> (x, 32, 64);
+   _2 = __BIT_FIELD_REF <int32x1_t> (x, 32, 96);
+   _3 = __BIT_FIELD_REF <int32x1_t> (x, 32, 0);
+   _4 = __BIT_FIELD_REF <int32x1_t> (x, 32, 32);
+   _6 = _Literal (int32x4_t) { _1, _2, _3, _4 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo3 (int32x4_t x, int32x4_t y)
+ {
+   int32x2_t _1;
+   int32x2_t _2;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x2_t> (x, 64, 64);
+   _2 = __BIT_FIELD_REF <int32x2_t> (y, 64, 0);
+   _6 = _Literal (int32x4_t) { _1, _2 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo4 (int32x4_t x, int32x4_t y)
+ {
+   int32x1_t _1;
+   int32x1_t _2;
+   int32x1_t _3;
+   int32x1_t _4;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x1_t> (x, 32, 64);
+   _2 = __BIT_FIELD_REF <int32x1_t> (y, 32, 96);
+   _3 = __BIT_FIELD_REF <int32x1_t> (x, 32, 0);
+   _4 = __BIT_FIELD_REF <int32x1_t> (y, 32, 32);
+   _6 = _Literal (int32x4_t) { _1, _2, _3, _4 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo5 (int32x4_t x)
+ {
+   int32x2_t _1;
+   int32x2_t _2;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x2_t> (x, 64, 64);
+   _2 = _Literal (int32x2_t) { 1, 2 };
+   _6 = _Literal (int32x4_t) { _1, _2 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo6 (int32x4_t x, int32_t y)
+ {
+   int32x2_t _1;
+   int32x2_t _2;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x2_t> (x, 64, 64);
+   _2 = _Literal (int32x2_t) { y, y };
+   _6 = _Literal (int32x4_t) { _1, _2 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo7 (int32x4_t x)
+ {
+   int32x2_t _1;
+   int32x2_t _2;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x2_t> (x, 64, 64);
+   _2 = _Literal (int32x2_t) { 1, 2 };
+   _6 = _Literal (int32x4_t) { _2, _1 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo8 (int32x4_t x, int32_t y)
+ {
+   int32x2_t _1;
+   int32x2_t _2;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x2_t> (x, 64, 64);
+   _2 = _Literal (int32x2_t) { y, y };
+   _6 = _Literal (int32x4_t) { _2, _1 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo9 (int32x4_t x)
+ {
+   int32x1_t _1;
+   int32x1_t _2;
+   int32x1_t _3;
+   int32x1_t _4;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x1_t> (x, 32, 96);
+   _2 = __BIT_FIELD_REF <int32x1_t> (x, 32, 64);
+   _3 = _Literal (int32x1_t) { 1 };
+   _4 = _Literal (int32x1_t) { 1 };
+   _6 = _Literal (int32x4_t) { _3, _4, _1, _2 };
+   return _6;
+ }
+ 
+ int32x4_t __GIMPLE (ssa)
+ foo10 (int32x4_t x, int32_t y)
+ {
+   int32x1_t _1;
+   int32x1_t _2;
+   int32x1_t _3;
+   int32x1_t _4;
+   int32x4_t _6;
+ 
+ __BB(2):
+   _1 = __BIT_FIELD_REF <int32x1_t> (x, 32, 96);
+   _2 = __BIT_FIELD_REF <int32x1_t> (x, 32, 64);
+   _3 = _Literal (int32x1_t) { y };
+   _4 = _Literal (int32x1_t) { y };
+   _6 = _Literal (int32x4_t) { _3, _4, _1, _2 };
+ 
+   return _6;
+ }
+ 
+ 
+ /* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 10 "forwprop1" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/tree-ssa/pr122588-1.c gcc-16-20251109/gcc/testsuite/gcc.dg/tree-ssa/pr122588-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/tree-ssa/pr122588-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/tree-ssa/pr122588-1.c	Sun Nov  9 22:33:12 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fgimple" } */
+ /* PR tree-optimization/122588 */
+ 
+ /* The removal of unreachable blocks should not
+    change blocks which have already become true/false.
+    The function below was is an example of that. And
+    forwprop does not go into non-executable blocks
+    so the statement `t = _1;` was still holding the
+    old reference.  */
+ 
+ int t;
+ 
+ __GIMPLE(ssa,startwith("forwprop4")) void g(void)
+ {
+   int _1;
+   __BB(2):
+   _1 = 1;
+   if (_1 != 0)
+     goto __BB3;
+   else
+     goto __BB4;
+ 
+   __BB(3):
+   __builtin_unreachable ();
+ 
+   __BB(4):
+   t = _1;
+   return;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c gcc-16-20251109/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c	Sun Nov  2 22:33:06 2025
--- gcc-16-20251109/gcc/testsuite/gcc.dg/vect/complex/complex-operations-run.c	Thu Jan  1 00:00:00 1970
***************
*** 1,101 ****
- /* { dg-require-effective-target vect_complex_add_double } */
- /* { dg-add-options arm_v8_3a_complex_neon } */
- 
- #include <stdio.h>
- #include <complex.h>
- #include <string.h>
- #include <float.h>
- #include <math.h>
- 
- #define PREF old
- #pragma GCC push_options
- #pragma GCC optimize ("no-tree-vectorize")
- # include "complex-operations.c"
- #pragma GCC pop_options
- #undef PREF
- 
- #define PREF new
- # include "complex-operations.c"
- #undef PREF
- 
- #define TYPE double
- #define TYPE2 double
- #define EP pow(2, -45)
- 
- #define xstr(s) str(s)
- #define str(s) #s
- 
- #define FCMP(A, B) \
-   ((fabs (creal (A) - creal (B)) <= EP) && (fabs (cimag (A) - cimag (B)) <= EP))
- 
- #define CMP(A, B) \
-   (FCMP(A,B) ? "PASS" : "FAIL")
- 
- #define COMPARE(A,B) \
-   memset (&c1, 0, sizeof (c1)); \
-   memset (&c2, 0, sizeof (c2)); \
-   A; B; \
-   if (!FCMP(c1[0],c2[0]) || !FCMP(c1[1], c2[1])) \
-   { \
-     printf ("=> %s vs %s\n", xstr (A), xstr (B)); \
-     printf ("%a\n", creal (c1[0]) - creal (c2[0])); \
-     printf ("%a\n", cimag (c1[1]) - cimag (c2[1])); \
-     printf ("%.2f+%.2fI == %.2f+%.2fI (%s)\n", creal (c1[0]), cimag (c1[0]), creal (c2[0]), cimag (c2[0]), CMP (c1[0], c2[0])); \
-     printf ("%.2f+%.2fI == %.2f+%.2fI (%s)\n", creal (c1[1]), cimag (c1[1]), creal (c2[1]), cimag (c2[1]), CMP (c1[1], c2[1])); \
-     printf ("\n"); \
-     __builtin_abort (); \
-   }
- 
- int main ()
- {
-   TYPE2 complex a[] = { 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I };
-   TYPE  complex b[] = { 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I };
-   TYPE  complex c2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-   TYPE  complex c1[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-   TYPE  diff1, diff2;
- 
-   COMPARE(fma0_old(a, b, c1), fma0_new(a, b, c2));
-   COMPARE(fma90_old(a, b, c1), fma90_new(a, b, c2));
-   COMPARE(fma180_old(a, b, c1), fma180_new(a, b, c2));
-   COMPARE(fma270_old(a, b, c1), fma270_new(a, b, c2));
-   COMPARE(fma0_snd_old(a, b, c1), fma0_snd_new(a, b, c2));
-   COMPARE(fma90_snd_old(a, b, c1), fma90_snd_new(a, b, c2));
-   COMPARE(fma180_snd_old(a, b, c1), fma180_snd_new(a, b, c2));
-   COMPARE(fma270_snd_old(a, b, c1), fma270_snd_new(a, b, c2));
-   COMPARE(fma_conj_first_old(a, b, c1), fma_conj_first_new(a, b, c2));
-   COMPARE(fma_conj_second_old(a, b, c1), fma_conj_second_new(a, b, c2));
-   COMPARE(fma_conj_both_old(a, b, c1), fma_conj_both_new(a, b, c2));
-   COMPARE(fms0_old(a, b, c1), fms0_new(a, b, c2));
-   COMPARE(fms90_old(a, b, c1), fms90_new(a, b, c2));
-   COMPARE(fms180_old(a, b, c1), fms180_new(a, b, c2));
-   COMPARE(fms270_old(a, b, c1), fms270_new(a, b, c2));
-   COMPARE(fms0_snd_old(a, b, c1), fms0_snd_new(a, b, c2));
-   COMPARE(fms90_snd_old(a, b, c1), fms90_snd_new(a, b, c2));
-   COMPARE(fms180_snd_old(a, b, c1), fms180_snd_new(a, b, c2));
-   COMPARE(fms270_snd_old(a, b, c1), fms270_snd_new(a, b, c2));
-   COMPARE(fms_conj_first_old(a, b, c1), fms_conj_first_new(a, b, c2));
-   COMPARE(fms_conj_second_old(a, b, c1), fms_conj_second_new(a, b, c2));
-   COMPARE(fms_conj_both_old(a, b, c1), fms_conj_both_new(a, b, c2));
-   COMPARE(mul0_old(a, b, c1), mul0_new(a, b, c2));
-   COMPARE(mul90_old(a, b, c1), mul90_new(a, b, c2));
-   COMPARE(mul180_old(a, b, c1), mul180_new(a, b, c2));
-   COMPARE(mul270_old(a, b, c1), mul270_new(a, b, c2));
-   COMPARE(mul0_snd_old(a, b, c1), mul0_snd_new(a, b, c2));
-   COMPARE(mul90_snd_old(a, b, c1), mul90_snd_new(a, b, c2));
-   COMPARE(mul180_snd_old(a, b, c1), mul180_snd_new(a, b, c2));
-   COMPARE(mul270_snd_old(a, b, c1), mul270_snd_new(a, b, c2));
-   COMPARE(mul_conj_first_old(a, b, c1), mul_conj_first_new(a, b, c2));
-   COMPARE(mul_conj_second_old(a, b, c1), mul_conj_second_new(a, b, c2));
-   COMPARE(mul_conj_both_old(a, b, c1), mul_conj_both_new(a, b, c2));
-   COMPARE(add0_old(a, b, c1), add0_new(a, b, c2));
-   COMPARE(add90_old(a, b, c1), add90_new(a, b, c2));
-   COMPARE(add180_old(a, b, c1), add180_new(a, b, c2));
-   COMPARE(add270_old(a, b, c1), add270_new(a, b, c2));
-   COMPARE(add0_snd_old(a, b, c1), add0_snd_new(a, b, c2));
-   COMPARE(add90_snd_old(a, b, c1), add90_snd_new(a, b, c2));
-   COMPARE(add180_snd_old(a, b, c1), add180_snd_new(a, b, c2));
-   COMPARE(add270_snd_old(a, b, c1), add270_snd_new(a, b, c2));
-   COMPARE(add_conj_first_old(a, b, c1), add_conj_first_new(a, b, c2));
-   COMPARE(add_conj_second_old(a, b, c1), add_conj_second_new(a, b, c2));
-   COMPARE(add_conj_both_old(a, b, c1), add_conj_both_new(a, b, c2));
- }
--- 0 ----
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/vect/complex/vect-complex-operations-run.c gcc-16-20251109/gcc/testsuite/gcc.dg/vect/complex/vect-complex-operations-run.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/vect/complex/vect-complex-operations-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/vect/complex/vect-complex-operations-run.c	Sun Nov  9 22:33:13 2025
***************
*** 0 ****
--- 1,101 ----
+ /* { dg-require-effective-target vect_complex_add_double } */
+ /* { dg-add-options arm_v8_3a_complex_neon } */
+ 
+ #include <stdio.h>
+ #include <complex.h>
+ #include <string.h>
+ #include <float.h>
+ #include <math.h>
+ 
+ #define PREF old
+ #pragma GCC push_options
+ #pragma GCC optimize ("no-tree-vectorize")
+ # include "complex-operations.c"
+ #pragma GCC pop_options
+ #undef PREF
+ 
+ #define PREF new
+ # include "complex-operations.c"
+ #undef PREF
+ 
+ #define TYPE double
+ #define TYPE2 double
+ #define EP pow(2, -45)
+ 
+ #define xstr(s) str(s)
+ #define str(s) #s
+ 
+ #define FCMP(A, B) \
+   ((fabs (creal (A) - creal (B)) <= EP) && (fabs (cimag (A) - cimag (B)) <= EP))
+ 
+ #define CMP(A, B) \
+   (FCMP(A,B) ? "PASS" : "FAIL")
+ 
+ #define COMPARE(A,B) \
+   memset (&c1, 0, sizeof (c1)); \
+   memset (&c2, 0, sizeof (c2)); \
+   A; B; \
+   if (!FCMP(c1[0],c2[0]) || !FCMP(c1[1], c2[1])) \
+   { \
+     printf ("=> %s vs %s\n", xstr (A), xstr (B)); \
+     printf ("%a\n", creal (c1[0]) - creal (c2[0])); \
+     printf ("%a\n", cimag (c1[1]) - cimag (c2[1])); \
+     printf ("%.2f+%.2fI == %.2f+%.2fI (%s)\n", creal (c1[0]), cimag (c1[0]), creal (c2[0]), cimag (c2[0]), CMP (c1[0], c2[0])); \
+     printf ("%.2f+%.2fI == %.2f+%.2fI (%s)\n", creal (c1[1]), cimag (c1[1]), creal (c2[1]), cimag (c2[1]), CMP (c1[1], c2[1])); \
+     printf ("\n"); \
+     __builtin_abort (); \
+   }
+ 
+ int main ()
+ {
+   TYPE2 complex a[] = { 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I, 1.0 + 3.0 * I, 2.0 + 3.5 * I };
+   TYPE  complex b[] = { 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I, 1.1 + 3.1 * I, 2.1 + 3.6 * I };
+   TYPE  complex c2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+   TYPE  complex c1[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+   TYPE  diff1, diff2;
+ 
+   COMPARE(fma0_old(a, b, c1), fma0_new(a, b, c2));
+   COMPARE(fma90_old(a, b, c1), fma90_new(a, b, c2));
+   COMPARE(fma180_old(a, b, c1), fma180_new(a, b, c2));
+   COMPARE(fma270_old(a, b, c1), fma270_new(a, b, c2));
+   COMPARE(fma0_snd_old(a, b, c1), fma0_snd_new(a, b, c2));
+   COMPARE(fma90_snd_old(a, b, c1), fma90_snd_new(a, b, c2));
+   COMPARE(fma180_snd_old(a, b, c1), fma180_snd_new(a, b, c2));
+   COMPARE(fma270_snd_old(a, b, c1), fma270_snd_new(a, b, c2));
+   COMPARE(fma_conj_first_old(a, b, c1), fma_conj_first_new(a, b, c2));
+   COMPARE(fma_conj_second_old(a, b, c1), fma_conj_second_new(a, b, c2));
+   COMPARE(fma_conj_both_old(a, b, c1), fma_conj_both_new(a, b, c2));
+   COMPARE(fms0_old(a, b, c1), fms0_new(a, b, c2));
+   COMPARE(fms90_old(a, b, c1), fms90_new(a, b, c2));
+   COMPARE(fms180_old(a, b, c1), fms180_new(a, b, c2));
+   COMPARE(fms270_old(a, b, c1), fms270_new(a, b, c2));
+   COMPARE(fms0_snd_old(a, b, c1), fms0_snd_new(a, b, c2));
+   COMPARE(fms90_snd_old(a, b, c1), fms90_snd_new(a, b, c2));
+   COMPARE(fms180_snd_old(a, b, c1), fms180_snd_new(a, b, c2));
+   COMPARE(fms270_snd_old(a, b, c1), fms270_snd_new(a, b, c2));
+   COMPARE(fms_conj_first_old(a, b, c1), fms_conj_first_new(a, b, c2));
+   COMPARE(fms_conj_second_old(a, b, c1), fms_conj_second_new(a, b, c2));
+   COMPARE(fms_conj_both_old(a, b, c1), fms_conj_both_new(a, b, c2));
+   COMPARE(mul0_old(a, b, c1), mul0_new(a, b, c2));
+   COMPARE(mul90_old(a, b, c1), mul90_new(a, b, c2));
+   COMPARE(mul180_old(a, b, c1), mul180_new(a, b, c2));
+   COMPARE(mul270_old(a, b, c1), mul270_new(a, b, c2));
+   COMPARE(mul0_snd_old(a, b, c1), mul0_snd_new(a, b, c2));
+   COMPARE(mul90_snd_old(a, b, c1), mul90_snd_new(a, b, c2));
+   COMPARE(mul180_snd_old(a, b, c1), mul180_snd_new(a, b, c2));
+   COMPARE(mul270_snd_old(a, b, c1), mul270_snd_new(a, b, c2));
+   COMPARE(mul_conj_first_old(a, b, c1), mul_conj_first_new(a, b, c2));
+   COMPARE(mul_conj_second_old(a, b, c1), mul_conj_second_new(a, b, c2));
+   COMPARE(mul_conj_both_old(a, b, c1), mul_conj_both_new(a, b, c2));
+   COMPARE(add0_old(a, b, c1), add0_new(a, b, c2));
+   COMPARE(add90_old(a, b, c1), add90_new(a, b, c2));
+   COMPARE(add180_old(a, b, c1), add180_new(a, b, c2));
+   COMPARE(add270_old(a, b, c1), add270_new(a, b, c2));
+   COMPARE(add0_snd_old(a, b, c1), add0_snd_new(a, b, c2));
+   COMPARE(add90_snd_old(a, b, c1), add90_snd_new(a, b, c2));
+   COMPARE(add180_snd_old(a, b, c1), add180_snd_new(a, b, c2));
+   COMPARE(add270_snd_old(a, b, c1), add270_snd_new(a, b, c2));
+   COMPARE(add_conj_first_old(a, b, c1), add_conj_first_new(a, b, c2));
+   COMPARE(add_conj_second_old(a, b, c1), add_conj_second_new(a, b, c2));
+   COMPARE(add_conj_both_old(a, b, c1), add_conj_both_new(a, b, c2));
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/vect/pr122475.c gcc-16-20251109/gcc/testsuite/gcc.dg/vect/pr122475.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/vect/pr122475.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/vect/pr122475.c	Sun Nov  9 22:33:13 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-additional-options "-march=armv8-a+sve" { target aarch64*-*-* } } */
+ /* Check that we don't ICE.  */
+ int a;
+ int b;
+ int main() {
+   for (char t = 0; t < 14; t += 2)
+     for (int u = 0; u < 242; u += 4) {
+       a = a < 0 ? a : 0;
+       b = b < 0 ? b : 0;
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" { target aarch64*-*-* } } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.dg/vect/vect-bool-3.c gcc-16-20251109/gcc/testsuite/gcc.dg/vect/vect-bool-3.c
*** gcc-16-20251102/gcc/testsuite/gcc.dg/vect/vect-bool-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.dg/vect/vect-bool-3.c	Sun Nov  9 22:33:13 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target vect_int } */
+ /* { dg-require-effective-target vect_unpack } */
+ 
+ int count_true(const bool *values, int len)
+ {
+   int count = 0;
+   for (int i = 0; i < len; i++)
+     count += values[i];
+   return count;
+ }
+ 
+ /* { dg-final { scan-tree-dump "optimized: loop vectorized" "vect" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/fmv_priority.in gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/fmv_priority.in
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/fmv_priority.in	Sun Nov  2 22:33:08 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/fmv_priority.in	Sun Nov  9 22:33:15 2025
*************** int fn [[gnu::target_version("fp16")]] (
*** 30,39 ****
  int fn_fp16(int) asm("fn._Mfp16");
  int fn [[gnu::target_version("fp16fml")]] (int)			{ return 1; }
  int fn_fp16fml(int) asm("fn._Mfp16fml");
! /* TODO: These FMV features are not yet supported in GCC. */
! // int fn [[gnu::target_version("dit")]] (int)			{ return 1; }
! // int fn [[gnu::target_version("dpb")]] (int)			{ return 1; }
! // int fn [[gnu::target_version("dpb2")]] (int)			{ return 1; }
  int fn [[gnu::target_version("jscvt")]] (int)			{ return 1; }
  int fn_jscvt(int) asm("fn._Mjscvt");
  int fn [[gnu::target_version("fcma")]] (int)			{ return 1; }
--- 30,41 ----
  int fn_fp16(int) asm("fn._Mfp16");
  int fn [[gnu::target_version("fp16fml")]] (int)			{ return 1; }
  int fn_fp16fml(int) asm("fn._Mfp16fml");
! int fn [[gnu::target_version("dit")]] (int)			{ return 1; }
! int fn_dit(int) asm("fn._Mdit");
! int fn [[gnu::target_version("dpb")]] (int)			{ return 1; }
! int fn_dpb(int) asm("fn._Mdpb");
! int fn [[gnu::target_version("dpb2")]] (int)			{ return 1; }
! int fn_dpb2(int) asm("fn._Mdpb2");
  int fn [[gnu::target_version("jscvt")]] (int)			{ return 1; }
  int fn_jscvt(int) asm("fn._Mjscvt");
  int fn [[gnu::target_version("fcma")]] (int)			{ return 1; }
*************** int fn [[gnu::target_version("sve2-sm4")
*** 68,82 ****
  int fn_sve2_sm4(int) asm("fn._Msve2_sm4");
  int fn [[gnu::target_version("sve2+sme")]] (int)		{ return 1; }
  int fn_sve2_sme(int) asm("fn._Msve2Msme");
! /* TODO: This FMV features is not yet supported in GCC. */
! // int fn [[gnu::target_version("memtag")]] (int)		{ return 1; }
  int fn [[gnu::target_version("sb")]] (int)			{ return 1; }
  int fn_sb(int) asm("fn._Msb");
! /* TODO: This FMV feature is not yet supported in GCC. */
! // int fn [[gnu::target_version("ssbs")]] (int)			{ return 1; }
! // int fn_ssbs(int) asm("fn._Mssbs");
! /* TODO: This FMV feature is not yet supported in GCC. */
! // int fn [[gnu::target_version("bti")]] (int)			{ return 1; }
  int fn [[gnu::target_version("wfxt")]] (int)			{ return 1; }
  int fn_wfxt(int) asm("fn._Mwfxt");
  int fn [[gnu::target_version("sve2+sme-f64f64")]] (int)		{ return 1; }
--- 70,83 ----
  int fn_sve2_sm4(int) asm("fn._Msve2_sm4");
  int fn [[gnu::target_version("sve2+sme")]] (int)		{ return 1; }
  int fn_sve2_sme(int) asm("fn._Msve2Msme");
! int fn [[gnu::target_version("memtag")]] (int)		{ return 1; }
! int fn_memtag(int) asm("fn._Mmemtag");
  int fn [[gnu::target_version("sb")]] (int)			{ return 1; }
  int fn_sb(int) asm("fn._Msb");
! int fn [[gnu::target_version("ssbs")]] (int)			{ return 1; }
! int fn_ssbs(int) asm("fn._Mssbs");
! int fn [[gnu::target_version("bti")]] (int)			{ return 1; }
! int fn_bti(int) asm("fn._Mbti");
  int fn [[gnu::target_version("wfxt")]] (int)			{ return 1; }
  int fn_wfxt(int) asm("fn._Mwfxt");
  int fn [[gnu::target_version("sve2+sme-f64f64")]] (int)		{ return 1; }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c	Sun Nov  2 22:33:08 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/fmv_priority1.c	Sun Nov  9 22:33:15 2025
*************** int main () {
*** 81,94 ****
    if(resolver() != &fn_fp16fml) return 1;
  
    setCPUFeature (FEAT_DIT);
!   // if(resolver() != &fn_dit) return 1;
!   // 
    setCPUFeature (FEAT_DPB);
!   // if(resolver() != &fn_dpb) return 1;
!   // 
    setCPUFeature (FEAT_DPB2);
!   // if(resolver() != &fn_dpb2) return 1;
!   // 
    setCPUFeature (FEAT_JSCVT);
    if (resolver () != &fn_jscvt) return 1;
  
--- 81,94 ----
    if(resolver() != &fn_fp16fml) return 1;
  
    setCPUFeature (FEAT_DIT);
!   if(resolver() != &fn_dit) return 1;
! 
    setCPUFeature (FEAT_DPB);
!   if(resolver() != &fn_dpb) return 1;
! 
    setCPUFeature (FEAT_DPB2);
!   if(resolver() != &fn_dpb2) return 1;
! 
    setCPUFeature (FEAT_JSCVT);
    if (resolver () != &fn_jscvt) return 1;
  
*************** int main () {
*** 102,109 ****
    if (resolver () != &fn_rcpc2) return 1;
  
    setCPUFeature (FEAT_RCPC3);
!   // if(resolver() != &fn_rcpc3) return 1;
!   // 
    setCPUFeature (FEAT_FRINTTS);
    if (resolver () != &fn_frintts) return 1;
  
--- 102,109 ----
    if (resolver () != &fn_rcpc2) return 1;
  
    setCPUFeature (FEAT_RCPC3);
!   if(resolver() != &fn_rcpc3) return 1;
! 
    setCPUFeature (FEAT_FRINTTS);
    if (resolver () != &fn_frintts) return 1;
  
*************** int main () {
*** 141,156 ****
    if (resolver () != &fn_sve2_sme) return 1;
  
    setCPUFeature(FEAT_MEMTAG2);
!   // if(resolver() != &fn_memtag) return 1;
  
    setCPUFeature (FEAT_SB);
    if (resolver () != &fn_sb) return 1;
  
    setCPUFeature(FEAT_SSBS2);
!   // if(resolver() != &fn_ssbs) return 1;
   
    setCPUFeature(FEAT_BTI);
!   // if(resolver() != &fn_bti) return 1;
  
    setCPUFeature (FEAT_WFXT);
    if (resolver () != &fn_wfxt) return 1;
--- 141,156 ----
    if (resolver () != &fn_sve2_sme) return 1;
  
    setCPUFeature(FEAT_MEMTAG2);
!   if(resolver() != &fn_memtag) return 1;
  
    setCPUFeature (FEAT_SB);
    if (resolver () != &fn_sb) return 1;
  
    setCPUFeature(FEAT_SSBS2);
!   if(resolver() != &fn_ssbs) return 1;
   
    setCPUFeature(FEAT_BTI);
!   if(resolver() != &fn_bti) return 1;
  
    setCPUFeature (FEAT_WFXT);
    if (resolver () != &fn_wfxt) return 1;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c	Sun Nov  2 22:33:08 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/fmv_priority2.c	Sun Nov  9 22:33:15 2025
***************
*** 14,20 ****
  /* { dg-final { scan-ipa-dump-times "fn\._Msm4/\[0-9\]+\\nfn\._MrdmaMrdm/\[0-9\]+\\nfn\._Mcrc/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mcrc/\[0-9\]+\\nfn\._Msha2/\[0-9\]+\\nfn\._Msha3/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msha3/\[0-9\]+\\nfn\._Maes/\[0-9\]+\\nfn\._Mfp16/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Mfp16/\[0-9\]+\\nfn\._Mfp16fml/\[0-9\]+\\nfn\._Mjscvt/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mjscvt/\[0-9\]+\\nfn\._Mfcma/\[0-9\]+\\nfn\._Mrcpc/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mrcpc/\[0-9\]+\\nfn\._Mrcpc2/\[0-9\]+\\nfn\._Mrcpc3/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mrcpc3/\[0-9\]+\\nfn\._Mfrintts/\[0-9\]+\\nfn\._Mi8mm/\[0-9\]+\\n" 1 "targetclone1" } } */
--- 14,22 ----
  /* { dg-final { scan-ipa-dump-times "fn\._Msm4/\[0-9\]+\\nfn\._MrdmaMrdm/\[0-9\]+\\nfn\._Mcrc/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mcrc/\[0-9\]+\\nfn\._Msha2/\[0-9\]+\\nfn\._Msha3/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msha3/\[0-9\]+\\nfn\._Maes/\[0-9\]+\\nfn\._Mfp16/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Mfp16/\[0-9\]+\\nfn\._Mfp16fml/\[0-9\]+\\nfn\._Mdit/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Mdit/\[0-9\]+\\nfn\._Mdpb/\[0-9\]+\\nfn\._Mdpb2/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Mdpb2/\[0-9\]+\\nfn\._Mjscvt/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mjscvt/\[0-9\]+\\nfn\._Mfcma/\[0-9\]+\\nfn\._Mrcpc/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mrcpc/\[0-9\]+\\nfn\._Mrcpc2/\[0-9\]+\\nfn\._Mrcpc3/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mrcpc3/\[0-9\]+\\nfn\._Mfrintts/\[0-9\]+\\nfn\._Mi8mm/\[0-9\]+\\n" 1 "targetclone1" } } */
***************
*** 23,29 ****
  /* { dg-final { scan-ipa-dump-times "fn\._Mf64mm/\[0-9\]+\\nfn\._Msve2/\[0-9\]+\\nfn\._Msve2_aes/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msve2_aes/\[0-9\]+\\nfn\._Msve2_bitperm/\[0-9\]+\\nfn\._Msve2_sha3/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msve2_sha3/\[0-9\]+\\nfn\._Msve2_sm4/\[0-9\]+\\nfn\._Msve2Msme/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Msve2Msme/\[0-9\]+\\nfn\._Msb/\[0-9\]+\\nfn\._Mwfxt/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mwfxt/\[0-9\]+\\nfn\._Msve2Msme_f64f64/\[0-9\]+\\nfn\._Msve2Msme_i16i64/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msve2Msme_i16i64/\[0-9\]+\\nfn\._Msve2Msme2/\[0-9\]+\\nfn\._Mmops/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mmops/\[0-9\]+\\nfn\._Mcssc/\[0-9\]+\\n" 1 "targetclone1" } } */
--- 25,33 ----
  /* { dg-final { scan-ipa-dump-times "fn\._Mf64mm/\[0-9\]+\\nfn\._Msve2/\[0-9\]+\\nfn\._Msve2_aes/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msve2_aes/\[0-9\]+\\nfn\._Msve2_bitperm/\[0-9\]+\\nfn\._Msve2_sha3/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msve2_sha3/\[0-9\]+\\nfn\._Msve2_sm4/\[0-9\]+\\nfn\._Msve2Msme/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Msve2Msme/\[0-9\]+\\nfn\._Mmemtag/\[0-9\]+\\nfn\._Msb/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Msb/\[0-9\]+\\nfn\._Mssbs/\[0-9\]+\\nfn\._Mbti/\[0-9\]+\\n" 1 "targetclone1" } } */
! /* { dg-final { scan-ipa-dump-times "fn\._Mbti/\[0-9\]+\\nfn\._Mwfxt/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mwfxt/\[0-9\]+\\nfn\._Msve2Msme_f64f64/\[0-9\]+\\nfn\._Msve2Msme_i16i64/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Msve2Msme_i16i64/\[0-9\]+\\nfn\._Msve2Msme2/\[0-9\]+\\nfn\._Mmops/\[0-9\]+\\n" 1 "targetclone1" } } */
  /* { dg-final { scan-ipa-dump-times "fn\._Mmops/\[0-9\]+\\nfn\._Mcssc/\[0-9\]+\\n" 1 "targetclone1" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_1.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_1.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,143 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ /* { dg-skip-if "" { *-*-mingw* } } */
+ 
+ void normal_callee();
+ void preserve_none_callee() [[gnu::preserve_none]];
+ 
+ #pragma GCC target "+sve"
+ 
+ /*
+ ** preserve_none_caller1:
+ ** ?#APP
+ **	nop
+ ** ?#NO_APP
+ **	ret
+ */
+ void preserve_none_caller1() [[gnu::preserve_none]]
+ {
+   asm volatile ("nop" ::: "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7",
+ 		"x8", "x9", "x10", "x11", "x12", "x13", "x14", "x15",
+ 		"x16", "x17", "x18", "x19", "x20", "x21", "x22", "x23",
+ 		"x24", "x25", "x26", "x27", "x28",
+ 
+ 		"z0", "z1", "z2", "z3", "z4", "z5", "z6", "z7",
+ 		"z8", "z9", "z10", "z11", "z12", "z13", "z14", "z15",
+ 		"z16", "z17", "z18", "z19", "z20", "z21", "z22", "z23",
+ 		"z24", "z25", "z26", "z27", "z28", "z29", "z30", "z31",
+ 
+ 		"p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
+ 		"p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15");
+ }
+ 
+ /*
+ ** preserve_none_caller2:
+ **	stp	x29, x30, \[sp, #?-16\]!
+ **	mov	x29, sp
+ **	bl	normal_callee
+ **	mov	w0, w20
+ **	ldp	x29, x30, \[sp\], #?16
+ **	ret
+ */
+ int preserve_none_caller2(int x) [[gnu::preserve_none]]
+ {
+   normal_callee();
+   return x;
+ }
+ 
+ /*
+ ** preserve_none_caller3:
+ **	stp	x29, x30, \[sp, #?-32\]!
+ **	mov	x29, sp
+ **	str	w20, \[sp, #?[0-9]+\]
+ **	bl	preserve_none_callee
+ **	ldr	w0, \[sp, #?[0-9]+\]
+ **	ldp	x29, x30, \[sp\], #?32
+ **	ret
+ */
+ int preserve_none_caller3(int x) [[gnu::preserve_none]]
+ {
+   preserve_none_callee();
+   return x;
+ }
+ 
+ /*
+ ** preserve_none_caller4:
+ **	b	preserve_none_callee
+ */
+ void preserve_none_caller4() [[gnu::preserve_none]]
+ {
+   preserve_none_callee();
+ }
+ 
+ /*
+ ** preserve_none_caller5:
+ **	b	preserve_none_callee
+ */
+ void preserve_none_caller5(__SVBool_t x) [[gnu::preserve_none]]
+ {
+   preserve_none_callee();
+ }
+ 
+ /*
+ ** normal_caller1:
+ **	stp	x29, x30, \[sp, #?-160\]!
+ **	mov	x29, sp
+ **	stp	x19, x20, \[sp, #?16\]
+ **	stp	x21, x22, \[sp, #?32\]
+ **	stp	x23, x24, \[sp, #?48\]
+ **	stp	x25, x26, \[sp, #?64\]
+ **	stp	x27, x28, \[sp, #?80\]
+ **	stp	d8, d9, \[sp, #?96\]
+ **	stp	d10, d11, \[sp, #?112\]
+ **	stp	d12, d13, \[sp, #?128\]
+ **	stp	d14, d15, \[sp, #?144\]
+ **	bl	preserve_none_callee
+ **	ldp	d8, d9, \[sp, #?96\]
+ **	ldp	d10, d11, \[sp, #?112\]
+ **	ldp	d12, d13, \[sp, #?128\]
+ **	ldp	d14, d15, \[sp, #?144\]
+ **	ldp	x19, x20, \[sp, #?16\]
+ **	ldp	x21, x22, \[sp, #?32\]
+ **	ldp	x23, x24, \[sp, #?48\]
+ **	ldp	x25, x26, \[sp, #?64\]
+ **	ldp	x27, x28, \[sp, #?80\]
+ **	ldp	x29, x30, \[sp\], #?160
+ **	ret
+ */
+ void normal_caller1()
+ {
+   preserve_none_callee();
+ }
+ 
+ /*
+ ** normal_caller2:
+ **	stp	x29, x30, \[sp, #?-160\]!
+ **	mov	x29, sp
+ **	stp	x19, x20, \[sp, #?16\]
+ **	stp	x21, x22, \[sp, #?32\]
+ **	stp	x23, x24, \[sp, #?48\]
+ **	stp	x25, x26, \[sp, #?64\]
+ **	stp	x27, x28, \[sp, #?80\]
+ **	stp	d8, d9, \[sp, #?96\]
+ **	stp	d10, d11, \[sp, #?112\]
+ **	stp	d12, d13, \[sp, #?128\]
+ **	stp	d14, d15, \[sp, #?144\]
+ **	blr	x0
+ **	ldp	d8, d9, \[sp, #?96\]
+ **	ldp	d10, d11, \[sp, #?112\]
+ **	ldp	d12, d13, \[sp, #?128\]
+ **	ldp	d14, d15, \[sp, #?144\]
+ **	ldp	x19, x20, \[sp, #?16\]
+ **	ldp	x21, x22, \[sp, #?32\]
+ **	ldp	x23, x24, \[sp, #?48\]
+ **	ldp	x25, x26, \[sp, #?64\]
+ **	ldp	x27, x28, \[sp, #?80\]
+ **	ldp	x29, x30, \[sp\], #?160
+ **	ret
+ */
+ void normal_caller2(void (*callee)() [[gnu::preserve_none]])
+ {
+   callee();
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_2.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_2.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_2.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-options "" } */
+ 
+ void multi1() [[gnu::aarch64_vector_pcs, gnu::preserve_none]]; /* { dg-warning {ignoring attribute 'preserve_none' because it conflicts} } */
+ void multi2() [[gnu::preserve_none, gnu::aarch64_vector_pcs]]; /* { dg-warning {ignoring attribute 'aarch64_vector_pcs' because it conflicts} } */
+ 
+ void normal_callee();
+ void preserve_none_callee() [[gnu::preserve_none]];
+ void vector_callee() [[gnu::aarch64_vector_pcs]];
+ void sve_callee(__SVBool_t);
+ void sve_preserve_none_callee(__SVBool_t) [[gnu::preserve_none]];
+ 
+ void (*normal_ptr)();
+ void (*preserve_none_ptr)() [[gnu::preserve_none]];
+ void (*vector_ptr)() [[gnu::aarch64_vector_pcs]];
+ void (*sve_ptr)(__SVBool_t);
+ void (*sve_preserve_none_ptr)(__SVBool_t) [[gnu::preserve_none]];
+ 
+ void f()
+ {
+   normal_ptr = normal_callee;
+   normal_ptr = preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+   normal_ptr = vector_callee; /* { dg-error {incompatible pointer type} } */
+   normal_ptr = sve_callee; /* { dg-error {incompatible pointer type} } */
+   normal_ptr = sve_preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+ 
+   preserve_none_ptr = normal_callee; /* { dg-error {incompatible pointer type} } */
+   preserve_none_ptr = preserve_none_callee;
+   preserve_none_ptr = vector_callee; /* { dg-error {incompatible pointer type} } */
+   preserve_none_ptr = sve_callee; /* { dg-error {incompatible pointer type} } */
+   preserve_none_ptr = sve_preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+ 
+   vector_ptr = normal_callee; /* { dg-error {incompatible pointer type} } */
+   vector_ptr = preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+   vector_ptr = vector_callee;
+   vector_ptr = sve_callee; /* { dg-error {incompatible pointer type} } */
+   vector_ptr = sve_preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+ 
+   sve_ptr = normal_callee; /* { dg-error {incompatible pointer type} } */
+   sve_ptr = preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+   sve_ptr = vector_callee; /* { dg-error {incompatible pointer type} } */
+   sve_ptr = sve_callee;
+   sve_ptr = sve_preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+ 
+   sve_preserve_none_ptr = normal_callee; /* { dg-error {incompatible pointer type} } */
+   sve_preserve_none_ptr = preserve_none_callee; /* { dg-error {incompatible pointer type} } */
+   sve_preserve_none_ptr = vector_callee; /* { dg-error {incompatible pointer type} } */
+   sve_preserve_none_ptr = sve_callee; /* { dg-error {incompatible pointer type} } */
+   sve_preserve_none_ptr = sve_preserve_none_callee;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_3.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_3.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_3.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,114 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -std=gnu23" } */
+ 
+ int no_arg_stack_use_callee
+   [[gnu::preserve_none, gnu::noinline,
+     gnu::noipa]] (int a0, int a1, int a2, int a3, int a4, int a5, int a6,
+ 		  int a7, int a8, int a9, int a10, int a11, int a12, int a13,
+ 		  int a14, int a15, int a16, int a17, int a18, int a19, int a20,
+ 		  int a21, int a22, int a23)
+ {
+   /* Clobber all the registers to check they are correctly marked live at the
+      start.  */
+   asm volatile("mov x0, #0;"
+ 	       "mov x1, #0;"
+ 	       "mov x2, #0;"
+ 	       "mov x3, #0;"
+ 	       "mov x4, #0;"
+ 	       "mov x5, #0;"
+ 	       "mov x6, #0;"
+ 	       "mov x7, #0;"
+ 	       "mov x8, #0;"
+ 	       "mov x9, #0;"
+ 	       "mov x10, #0;"
+ 	       "mov x11, #0;"
+ 	       "mov x12, #0;"
+ 	       "mov x13, #0;"
+ 	       "mov x14, #0;"
+ 	       "mov x15, #0;"
+ 	       "mov x16, #0;"
+ 	       "mov x17, #0;"
+ 	       "mov x18, #0;"
+ 	       "mov x19, #0;"
+ 	       "mov x20, #0;"
+ 	       "mov x21, #0;"
+ 	       "mov x22, #0;"
+ 	       "mov x23, #0;"
+ 	       "mov x24, #0;"
+ 	       "mov x25, #0;"
+ 	       "mov x26, #0;"
+ 	       "mov x27, #0;"
+ 	       "mov x28, #0;" ::
+ 		 : "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9",
+ 		   "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17",
+ 		   "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25",
+ 		   "x26", "x27", "x28");
+ 
+   return a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13
+ 	 + a14 + a15 + a16 + a17 + a18 + a19 + a20 + a21 + a22 + a23;
+ }
+ 
+ int arg_stack_use_callee
+   [[gnu::preserve_none, gnu::noinline,
+     gnu::noipa]] (int a0, int a1, int a2, int a3, int a4, int a5, int a6,
+ 		  int a7, int a8, int a9, int a10, int a11, int a12, int a13,
+ 		  int a14, int a15, int a16, int a17, int a18, int a19, int a20,
+ 		  int a21, int a22, int a23, int a24)
+ {
+   /* Clobber all the registers to check they are correctly marked live at the
+      start.  */
+   asm volatile("mov x0, #0;"
+ 	       "mov x1, #0;"
+ 	       "mov x2, #0;"
+ 	       "mov x3, #0;"
+ 	       "mov x4, #0;"
+ 	       "mov x5, #0;"
+ 	       "mov x6, #0;"
+ 	       "mov x7, #0;"
+ 	       "mov x8, #0;"
+ 	       "mov x9, #0;"
+ 	       "mov x10, #0;"
+ 	       "mov x11, #0;"
+ 	       "mov x12, #0;"
+ 	       "mov x13, #0;"
+ 	       "mov x14, #0;"
+ 	       "mov x15, #0;"
+ 	       "mov x16, #0;"
+ 	       "mov x17, #0;"
+ 	       "mov x18, #0;"
+ 	       "mov x19, #0;"
+ 	       "mov x20, #0;"
+ 	       "mov x21, #0;"
+ 	       "mov x22, #0;"
+ 	       "mov x23, #0;"
+ 	       "mov x24, #0;"
+ 	       "mov x25, #0;"
+ 	       "mov x26, #0;"
+ 	       "mov x27, #0;"
+ 	       "mov x28, #0;" ::
+ 		 : "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9",
+ 		   "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17",
+ 		   "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25",
+ 		   "x26", "x27", "x28");
+ 
+   return a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13
+ 	 + a14 + a15 + a16 + a17 + a18 + a19 + a20 + a21 + a22 + a23 + a24;
+ }
+ 
+ int
+ main ()
+ {
+   int res = no_arg_stack_use_callee (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 				     13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23);
+ 
+   if (res != 23 * 24 / 2)
+     return 1;
+ 
+   res = arg_stack_use_callee (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 			      15, 16, 17, 18, 19, 20, 21, 22, 23, 24);
+ 
+   if (res != 24 * 25 / 2)
+     return 1;
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_4.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_4.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_4.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,99 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ /* { dg-skip-if "" { *-*-mingw* } } */
+ 
+ int no_arg_stack_use_callee
+   [[gnu::preserve_none, gnu::noinline,
+     gnu::noipa]] (int a0, int a1, int a2, int a3, int a4, int a5, int a6,
+ 		  int a7, int a8, int a9, int a10, int a11, int a12, int a13,
+ 		  int a14, int a15, int a16, int a17, int a18, int a19, int a20,
+ 		  int a21, int a22, int a24);
+ 
+ /* Check the pcs argument order is correct. Should be x20-28, x0-7, x10-14, x9,
+  * x15 and that the return arg is x0 */
+ 
+ /*
+ ** no_arg_stack_use_caller:
+ ** ...
+ **	mov	w15, 23
+ **	mov	w9, 22
+ **	mov	w14, 21
+ **	mov	w13, 20
+ **	mov	w12, 19
+ **	mov	w11, 18
+ **	mov	w10, 17
+ **	mov	w7, 16
+ **	mov	w6, 15
+ **	mov	w5, 14
+ **	mov	w4, 13
+ **	mov	w3, 12
+ **	mov	w2, 11
+ **	mov	w1, 10
+ **	mov	w0, 9
+ **	mov	w28, 8
+ **	mov	w27, 7
+ **	mov	w26, 6
+ **	mov	w25, 5
+ **	mov	w24, 4
+ **	mov	w23, 3
+ **	mov	w22, 2
+ **	mov	w21, 1
+ **	mov	w20, 0
+ **	bl	no_arg_stack_use_callee
+ **	add	w0, w0, 1
+ ** ...
+ */
+ int no_arg_stack_use_caller [[gnu::preserve_none]] ()
+ {
+   return no_arg_stack_use_callee (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 				  14, 15, 16, 17, 18, 19, 20, 21, 22, 23)
+ 	 + 1;
+ }
+ 
+ int arg_stack_use_callee
+   [[gnu::preserve_none, gnu::noinline,
+     gnu::noipa]] (int a0, int a1, int a2, int a3, int a4, int a5, int a6,
+ 		  int a7, int a8, int a9, int a10, int a11, int a12, int a13,
+ 		  int a14, int a15, int a16, int a17, int a18, int a19, int a20,
+ 		  int a21, int a22, int a23, int a24);
+ 
+ /*
+ ** arg_stack_use_caller:
+ ** ...
+ **	mov	w0, 24
+ **	mov	w15, 23
+ **	mov	w9, 22
+ **	mov	w14, 21
+ **	mov	w13, 20
+ **	mov	w12, 19
+ **	mov	w11, 18
+ **	mov	w10, 17
+ **	mov	w7, 16
+ **	mov	w6, 15
+ **	mov	w5, 14
+ **	mov	w4, 13
+ **	mov	w3, 12
+ **	mov	w2, 11
+ **	mov	w1, 10
+ **	mov	w28, 8
+ **	mov	w27, 7
+ **	mov	w26, 6
+ **	mov	w25, 5
+ **	mov	w24, 4
+ **	mov	w23, 3
+ **	mov	w22, 2
+ **	mov	w21, 1
+ **	mov	w20, 0
+ **	str	w0, \[sp\]
+ **	mov	w0, 9
+ **	bl	arg_stack_use_callee
+ **	add	w0, w0, 1
+ ** ...
+ */
+ int arg_stack_use_caller [[gnu::preserve_none]] ()
+ {
+   return arg_stack_use_callee (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 			       15, 16, 17, 18, 19, 20, 21, 22, 23, 24)
+ 	 + 1;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_5.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ /* { dg-skip-if "" { *-*-mingw* } } */
+ 
+ #include <stdarg.h>
+ int foo [[gnu::preserve_none]] (...);
+ 
+ /* Check the pcs argument order is correct. Should be x20-28, x0-7, x10-14, x9, x15 and that the return arg is x0 */
+ 
+ /*
+ ** bar:
+ ** ...
+ **	mov	w15, 23
+ **	mov	w9, 22
+ **	mov	w14, 21
+ **	mov	w13, 20
+ **	mov	w12, 19
+ **	mov	w11, 18
+ **	mov	w10, 17
+ **	mov	w7, 16
+ **	mov	w6, 15
+ **	mov	w5, 14
+ **	mov	w4, 13
+ **	mov	w3, 12
+ **	mov	w2, 11
+ **	mov	w1, 10
+ **	mov	w0, 9
+ **	mov	w28, 8
+ **	mov	w27, 7
+ **	mov	w26, 6
+ **	mov	w25, 5
+ **	mov	w24, 4
+ **	mov	w23, 3
+ **	mov	w22, 2
+ **	mov	w21, 1
+ **	mov	w20, 0
+ **	bl	foo
+ **	add	w0, w0, 1
+ ** ...
+ */
+ int bar [[gnu::preserve_none]] ()
+ {
+   return foo (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 	      19, 20, 21, 22, 23)
+ 	 + 1;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_6.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_6.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_6.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,76 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -std=gnu23" } */
+ 
+ #include <stdarg.h>
+ #include <stdio.h>
+ 
+ int preserve_none_va_func
+   [[gnu::preserve_none, gnu::noinline, gnu::noclone]] (int count, ...)
+ {
+   asm volatile("mov x0, #0;"
+ 	       "mov x1, #0;"
+ 	       "mov x2, #0;"
+ 	       "mov x3, #0;"
+ 	       "mov x4, #0;"
+ 	       "mov x5, #0;"
+ 	       "mov x6, #0;"
+ 	       "mov x7, #0;"
+ 	       "mov x8, #0;"
+ 	       "mov x9, #0;"
+ 	       "mov x10, #0;"
+ 	       "mov x11, #0;"
+ 	       "mov x12, #0;"
+ 	       "mov x13, #0;"
+ 	       "mov x14, #0;"
+ 	       "mov x15, #0;"
+ 	       "mov x16, #0;"
+ 	       "mov x17, #0;"
+ 	       "mov x18, #0;"
+ 	       "mov x19, #0;"
+ 	       "mov x20, #0;"
+ 	       "mov x21, #0;"
+ 	       "mov x22, #0;"
+ 	       "mov x23, #0;"
+ 	       "mov x24, #0;"
+ 	       "mov x25, #0;"
+ 	       "mov x26, #0;"
+ 	       "mov x27, #0;"
+ 	       "mov x28, #0;" ::
+ 		 : "x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9",
+ 		   "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17",
+ 		   "x18", "x19", "x20", "x21", "x22", "x23", "x24", "x25",
+ 		   "x26", "x27", "x28");
+ 
+   int sum = 0;
+ 
+   va_list args;
+ 
+   va_start (args, count);
+   for (int i = 0; i < count; i++)
+     sum += va_arg (args, int);
+   va_end (args);
+ 
+   return sum;
+ }
+ 
+ int
+ main ()
+ {
+   int res = preserve_none_va_func (23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 				   13, 14, 15, 16, 17, 18, 19, 20, 21, 22);
+   if (res != 23 * 22 / 2)
+     return 1;
+ 
+   res = preserve_none_va_func (24, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 			       14, 15, 16, 17, 18, 19, 20, 21, 22, 23);
+ 
+   if (res != 24 * 23 / 2)
+     return 1;
+ 
+   res = preserve_none_va_func (25, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 			       14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24);
+   if (res != 25 * 24 / 2)
+     return 1;
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_mingw_1.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_mingw_1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/preserve_none_mingw_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/preserve_none_mingw_1.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,93 ----
+ /* { dg-do compile { target aarch64*-*-mingw* } } */
+ /* { dg-options "-O2 -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ int no_arg_stack_use_callee [[gnu::preserve_none, gnu::noinline, gnu::noipa]]
+ 			(int a0, int a1, int a2, int a3, int a4, int a5, int a6,
+ 			 int a7, int a8, int a9, int a10, int a11, int a12,
+ 			 int a13, int a14, int a15, int a16, int a17, int a18,
+ 			 int a19, int a20, int a21, int a22);
+ 
+ /* Check the pcs argument order is correct. Should be x20-28, x0-7, x10-14, x9, and that the return arg is x0 */
+ 
+ /*
+ ** no_arg_stack_use_caller:
+ ** ...
+ **	mov	w9, 22
+ **	mov	w14, 21
+ **	mov	w13, 20
+ **	mov	w12, 19
+ **	mov	w11, 18
+ **	mov	w10, 17
+ **	mov	w7, 16
+ **	mov	w6, 15
+ **	mov	w5, 14
+ **	mov	w4, 13
+ **	mov	w3, 12
+ **	mov	w2, 11
+ **	mov	w1, 10
+ **	mov	w0, 9
+ **	mov	w28, 8
+ **	mov	w27, 7
+ **	mov	w26, 6
+ **	mov	w25, 5
+ **	mov	w24, 4
+ **	mov	w23, 3
+ **	mov	w22, 2
+ **	mov	w21, 1
+ **	mov	w20, 0
+ **	bl	no_arg_stack_use_callee
+ **	add	w0, w0, 1
+ ** ...
+ */
+ int no_arg_stack_use_caller [[gnu::preserve_none]] ()
+ {
+   return no_arg_stack_use_callee (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 				  14, 15, 16, 17, 18, 19, 20, 21, 22)
+ 	 + 1;
+ }
+ 
+ int arg_stack_use_callee [[gnu::preserve_none, gnu::noinline, gnu::noipa]]
+ 			(int a0, int a1, int a2, int a3, int a4, int a5, int a6,
+ 			 int a7, int a8, int a9, int a10, int a11, int a12,
+ 			 int a13, int a14, int a15, int a16, int a17, int a18,
+ 			 int a19, int a20, int a21, int a22, int a23);
+ 
+ /*
+ ** arg_stack_use_caller:
+ ** ...
+ **	mov	w0, 23
+ **	mov	w9, 22
+ **	mov	w14, 21
+ **	mov	w13, 20
+ **	mov	w12, 19
+ **	mov	w11, 18
+ **	mov	w10, 17
+ **	mov	w7, 16
+ **	mov	w6, 15
+ **	mov	w5, 14
+ **	mov	w4, 13
+ **	mov	w3, 12
+ **	mov	w2, 11
+ **	mov	w1, 10
+ **	mov	w28, 8
+ **	mov	w27, 7
+ **	mov	w26, 6
+ **	mov	w25, 5
+ **	mov	w24, 4
+ **	mov	w23, 3
+ **	mov	w22, 2
+ **	mov	w21, 1
+ **	mov	w20, 0
+ **	str	w0, \[sp\]
+ **	mov	w0, 9
+ **	bl	arg_stack_use_callee
+ **	add	w0, w0, 1
+ ** ...
+ */
+ int arg_stack_use_caller [[gnu::preserve_none]] ()
+ {
+   return arg_stack_use_callee (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 			       15, 16, 17, 18, 19, 20, 21, 22, 23)
+ 	 + 1;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/simd/combine_ext.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/simd/combine_ext.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/simd/combine_ext.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/simd/combine_ext.c	Sun Nov  9 22:33:16 2025
***************
*** 0 ****
--- 1,46 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fdump-tree-optimized" } */
+ 
+ #include <arm_neon.h>
+ 
+ #ifndef TEST_COMBINE_HIGH_LOW_1
+ #define TEST_COMBINE_HIGH_LOW_1(TYPE, SUFF)				\
+   TYPE rev_##TYPE##_1 (TYPE x)						\
+   {									\
+     return vcombine_##SUFF (vget_high_##SUFF (x), vget_low_##SUFF (x)); \
+   }
+ #endif
+ 
+ #ifndef TEST_COMBINE_HIGH_LOW_2
+ #define TEST_COMBINE_HIGH_LOW_2(TYPE, SUFF)				\
+   TYPE rev_##TYPE##_2 (TYPE x, TYPE y)					\
+   {									\
+     return vcombine_##SUFF (vget_high_##SUFF (x), vget_low_##SUFF (y)); \
+   }
+ #endif
+ 
+ TEST_COMBINE_HIGH_LOW_1 (int8x16_t, s8)
+ TEST_COMBINE_HIGH_LOW_1 (int16x8_t, s16)
+ TEST_COMBINE_HIGH_LOW_1 (int32x4_t, s32)
+ TEST_COMBINE_HIGH_LOW_1 (int64x2_t, s64)
+ TEST_COMBINE_HIGH_LOW_1 (uint8x16_t, u8)
+ TEST_COMBINE_HIGH_LOW_1 (uint16x8_t, u16)
+ TEST_COMBINE_HIGH_LOW_1 (uint32x4_t, u32)
+ TEST_COMBINE_HIGH_LOW_1 (uint64x2_t, u64)
+ TEST_COMBINE_HIGH_LOW_1 (float16x8_t, f16)
+ TEST_COMBINE_HIGH_LOW_1 (float32x4_t, f32)
+ 
+ TEST_COMBINE_HIGH_LOW_2 (int8x16_t, s8)
+ TEST_COMBINE_HIGH_LOW_2 (int16x8_t, s16)
+ TEST_COMBINE_HIGH_LOW_2 (int32x4_t, s32)
+ TEST_COMBINE_HIGH_LOW_2 (int64x2_t, s64)
+ TEST_COMBINE_HIGH_LOW_2 (uint8x16_t, u8)
+ TEST_COMBINE_HIGH_LOW_2 (uint16x8_t, u16)
+ TEST_COMBINE_HIGH_LOW_2 (uint32x4_t, u32)
+ TEST_COMBINE_HIGH_LOW_2 (uint64x2_t, u64)
+ TEST_COMBINE_HIGH_LOW_2 (float16x8_t, f16)
+ TEST_COMBINE_HIGH_LOW_2 (float32x4_t, f32)
+ 
+ /* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR" 20 "optimized" } } */
+ /* { dg-final { scan-assembler-times {ext\tv0.16b, v0.16b, v0.16b, #8} 10 } } */
+ /* { dg-final { scan-assembler-times {ext\tv0.16b, v0.16b, v1.16b, #8} 10 } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-19.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-19.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-19.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-19.c	Sun Nov  9 22:33:17 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-mautovec-preference=sve-only -fdump-tree-vect-details -O3 --param vect-epilogues-nomask=0" } */
+ 
+ int p[128];
+ 
+ bool __attribute__((noipa))
+ fand (int n, bool r1, bool r2)
+ {
+   bool r = true;
+   for (int i = 0; i < (n/2); i+=2)
+     {
+       r &= (p[i] != 0) & r1;
+       r &= (p[i+1] != 0) & r2;
+     }
+   return r;
+ }
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 1 "vect" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-20.c gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-20.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-20.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/aarch64/sve/vect-reduc-bool-20.c	Sun Nov  9 22:33:17 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-mautovec-preference=sve-only -fdump-tree-vect-details -O3 --param vect-epilogues-nomask=0" } */
+ 
+ #include <stdbool.h>
+ #include <stdint.h>
+ 
+ void vec_slp_cmp (char* restrict a, char* restrict b, int n) {
+     bool x0 = b[0] != 0;
+     bool x1 = b[1] != 0;
+     bool x2 = b[2] != 0;
+     bool x3 = b[3] != 0;
+     for (int i = 0; i < n; ++i) {
+         x0 &= (a[i * 4] != 0);
+         x1 &= (a[i * 4 + 1] != 0);
+         x2 &= (a[i * 4 + 2] != 0);
+         x3 &= (a[i * 4 + 3] != 0);
+     }
+     b[0] = x0;
+     b[1] = x1;
+     b[2] = x2;
+     b[3] = x3;
+ }
+ 
+ void vec_slp_cmp1 (char* restrict a, char* restrict b, int n) {
+     bool x0 = b[0] != 0;
+     for (int i = 0; i < n; ++i) {
+         x0 &= (a[i] != 0);
+     }
+     b[0] = x0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" { target aarch64*-*-* } } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/arc/builtin_fls_const.c gcc-16-20251109/gcc/testsuite/gcc.target/arc/builtin_fls_const.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/arc/builtin_fls_const.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/arc/builtin_fls_const.c	Sun Nov  9 22:33:20 2025
***************
*** 0 ****
--- 1,35 ----
+ /* Test that const attribute enables CSE optimization for ARC builtins.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ int test_fls_cse(int x)
+ {
+   /* Two calls to the same const builtin with same argument should
+      be optimized to a single call plus a multiply-by-2 operation.  */
+   int a = __builtin_arc_fls(x);
+   int b = __builtin_arc_fls(x);
+   return a + b;
+ }
+ 
+ int test_ffs_cse(int x)
+ {
+   /* Same pattern for __builtin_arc_ffs.  */
+   int a = __builtin_arc_ffs(x);
+   int b = __builtin_arc_ffs(x);
+   return a + b;
+ }
+ 
+ int test_norm_cse(int x)
+ {
+   /* Same pattern for __builtin_arc_norm.  */
+   int a = __builtin_arc_norm(x);
+   int b = __builtin_arc_norm(x);
+   return a + b;
+ }
+ 
+ /* { dg-final { scan-assembler-times "fls\\s+" 1 } } */
+ /* { dg-final { scan-assembler-times "ffs\\s+" 1 } } */
+ /* { dg-final { scan-assembler-times "norm\\s+" 1 } } */
+ 
+ /* Verify that the result is multiplied by 2 using left shift.  */
+ /* { dg-final { scan-assembler "asl_s\\s+.*,.*,1" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/arc/movv2hi-be.c gcc-16-20251109/gcc/testsuite/gcc.target/arc/movv2hi-be.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/arc/movv2hi-be.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/arc/movv2hi-be.c	Sun Nov  9 22:33:20 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ typedef short v2hi __attribute__((vector_size(4)));
+ 
+ __attribute__((noinline)) void foo3(short a)
+ {
+     if (a != 520)
+     {
+         __builtin_abort();
+     }
+ }
+ 
+ __attribute__((noinline)) void foo2(v2hi v)
+ {
+     foo3(v[0]);
+ }
+ 
+ __attribute__((noinline)) void foo(v2hi *v)
+ {
+     foo2(*v);
+ }
+ 
+ int main (void)
+ {
+     v2hi v;
+     v[0] = 520;
+     v[1] = -1;
+     foo(&v);
+     foo2(v);
+     return 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/arm/lceil-vcvt_1.c gcc-16-20251109/gcc/testsuite/gcc.target/arm/lceil-vcvt_1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/arm/lceil-vcvt_1.c	Sun Nov  2 22:33:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/arm/lceil-vcvt_1.c	Sun Nov  9 22:33:22 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2 -march=armv8-a" } */
  /* { dg-add-options arm_v8_vfp } */
  
  int
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2" } */
  /* { dg-add-options arm_v8_vfp } */
  
  int
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/arm/lfloor-vcvt_1.c gcc-16-20251109/gcc/testsuite/gcc.target/arm/lfloor-vcvt_1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/arm/lfloor-vcvt_1.c	Sun Nov  2 22:33:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/arm/lfloor-vcvt_1.c	Sun Nov  9 22:33:22 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2 -march=armv8-a" } */
  /* { dg-add-options arm_v8_vfp } */
  
  int
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2" } */
  /* { dg-add-options arm_v8_vfp } */
  
  int
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/arm/lround-vcvt_1.c gcc-16-20251109/gcc/testsuite/gcc.target/arm/lround-vcvt_1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/arm/lround-vcvt_1.c	Sun Nov  2 22:33:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/arm/lround-vcvt_1.c	Sun Nov  9 22:33:22 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2 -march=armv8-a -ffast-math" } */
  /* { dg-add-options arm_v8_vfp } */
  
  int
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2 -ffast-math" } */
  /* { dg-add-options arm_v8_vfp } */
  
  int
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/arm/vrinta-ce.c gcc-16-20251109/gcc/testsuite/gcc.target/arm/vrinta-ce.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/arm/vrinta-ce.c	Sun Nov  2 22:33:13 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/arm/vrinta-ce.c	Sun Nov  9 22:33:23 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2 -marm -march=armv8-a" } */
  /* { dg-add-options arm_v8_vfp } */
  
  double foo (double a)
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-skip-if "-mpure-code supports M-profile only" { *-*-* } { "-mpure-code" } } */
  /* { dg-require-effective-target arm_v8_vfp_ok } */
! /* { dg-options "-O2 -marm" } */
  /* { dg-add-options arm_v8_vfp } */
  
  double foo (double a)
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/avr/torture/pr92606.c gcc-16-20251109/gcc/testsuite/gcc.target/avr/torture/pr92606.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/avr/torture/pr92606.c	Sun Nov  2 22:33:13 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/avr/torture/pr92606.c	Sun Nov  9 22:33:23 2025
*************** typedef uint32_t T;
*** 14,23 ****
          {                                                               \
              uint16_t __addr16 = (uint16_t)(X);                          \
              uint32_t __result;                                          \
!             __asm__ __volatile__ ("lpm %A0, Z+" "\n\t"                  \
!                                   "lpm %B0, Z+" "\n\t"                  \
!                                   "lpm %C0, Z+" "\n\t"                  \
!                                   "lpm %D0, Z" "\n\t"                   \
                                    : "=r" (__result), "+z" (__addr16));  \
              __result;                                                   \
          }))
--- 14,23 ----
          {                                                               \
              uint16_t __addr16 = (uint16_t)(X);                          \
              uint32_t __result;                                          \
!             __asm__ __volatile__ ("lpm $ mov %A0,r0 $ adiw %1,1" "\n\t" \
!                                   "lpm $ mov %B0,r0 $ adiw %1,1" "\n\t" \
!                                   "lpm $ mov %C0,r0 $ adiw %1,1" "\n\t" \
!                                   "lpm $ mov %D0,r0"                    \
                                    : "=r" (__result), "+z" (__addr16));  \
              __result;                                                   \
          }))
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-10.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-10.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-10.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-10.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,105 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$63, %rdx
+ **	ja	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$128, %rdx
+ **	jbe	.L13
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L6
+ **	je	.L1
+ **	movdqu	-16\(%rax,%rdx\), %xmm7
+ **	movdqu	-32\(%rax,%rdx\), %xmm6
+ **	movdqu	-48\(%rax,%rdx\), %xmm5
+ **	movdqu	-64\(%rax,%rdx\), %xmm4
+ **.L7:
+ **	movdqu	\(%rax\), %xmm3
+ **	subq	\$64, %rsi
+ **	addq	\$64, %rcx
+ **	addq	\$64, %rax
+ **	movdqu	-48\(%rax\), %xmm2
+ **	movdqu	-32\(%rax\), %xmm1
+ **	movdqu	-16\(%rax\), %xmm0
+ **	movups	%xmm3, -64\(%rcx\)
+ **	movups	%xmm2, -48\(%rcx\)
+ **	movups	%xmm1, -32\(%rcx\)
+ **	movups	%xmm0, -16\(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L7
+ **	movups	%xmm7, -16\(%rdi,%rdx\)
+ **	movups	%xmm6, -32\(%rdi,%rdx\)
+ **	movups	%xmm5, -48\(%rdi,%rdx\)
+ **	movups	%xmm4, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	movdqu	32\(%rsi\), %xmm5
+ **	movdqu	48\(%rsi\), %xmm4
+ **	movdqu	-16\(%rsi,%rdx\), %xmm3
+ **	movdqu	-32\(%rsi,%rdx\), %xmm2
+ **	movdqu	-48\(%rsi,%rdx\), %xmm1
+ **	movdqu	-64\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **	movups	%xmm3, -16\(%rdi,%rdx\)
+ **	movups	%xmm2, -32\(%rdi,%rdx\)
+ **	movups	%xmm1, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movdqu	\(%rax\), %xmm3
+ **	movdqu	16\(%rax\), %xmm2
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	movdqu	32\(%rax\), %xmm1
+ **	movdqu	48\(%rax\), %xmm0
+ **	addq	%rdx, %rax
+ **.L8:
+ **	movdqu	-16\(%rax\), %xmm7
+ **	movdqu	-32\(%rax\), %xmm6
+ **	subq	\$64, %rsi
+ **	subq	\$64, %rcx
+ **	movdqu	-48\(%rax\), %xmm5
+ **	movdqu	-64\(%rax\), %xmm4
+ **	subq	\$64, %rax
+ **	movups	%xmm7, 48\(%rcx\)
+ **	movups	%xmm6, 32\(%rcx\)
+ **	movups	%xmm5, 16\(%rcx\)
+ **	movups	%xmm4, \(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L8
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n >= 64)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-11a.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-11a.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-11a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-11a.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,79 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_xmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movq	%rdi, %rax
+ **	movl	\$512, %edx
+ **	cmpq	%rdi, %rsi
+ **	jb	.L5
+ **	je	.L1
+ **	movdqu	496\(%rsi\), %xmm7
+ **	movdqu	480\(%rsi\), %xmm6
+ **	movdqu	464\(%rsi\), %xmm5
+ **	movdqu	448\(%rsi\), %xmm4
+ **.L6:
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	subl	\$64, %edx
+ **	addq	\$64, %rax
+ **	movdqu	32\(%rsi\), %xmm1
+ **	movdqu	48\(%rsi\), %xmm0
+ **	addq	\$64, %rsi
+ **	movups	%xmm3, -64\(%rax\)
+ **	movups	%xmm2, -48\(%rax\)
+ **	movups	%xmm1, -32\(%rax\)
+ **	movups	%xmm0, -16\(%rax\)
+ **	cmpl	\$64, %edx
+ **	ja	.L6
+ **	movups	%xmm7, 496\(%rdi\)
+ **	movups	%xmm6, 480\(%rdi\)
+ **	movups	%xmm5, 464\(%rdi\)
+ **	movups	%xmm4, 448\(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	leaq	512\(%rdi\), %rax
+ **	addq	\$512, %rsi
+ **	movdqu	-480\(%rsi\), %xmm5
+ **	movdqu	-464\(%rsi\), %xmm4
+ **.L7:
+ **	movdqu	-16\(%rsi\), %xmm3
+ **	subl	\$64, %edx
+ **	subq	\$64, %rax
+ **	subq	\$64, %rsi
+ **	movdqu	32\(%rsi\), %xmm2
+ **	movdqu	16\(%rsi\), %xmm1
+ **	movdqu	\(%rsi\), %xmm0
+ **	movups	%xmm3, 48\(%rax\)
+ **	movups	%xmm2, 32\(%rax\)
+ **	movups	%xmm1, 16\(%rax\)
+ **	movups	%xmm0, \(%rax\)
+ **	cmpl	\$64, %edx
+ **	ja	.L7
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **.L1:
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #ifndef gcc_memmove
+ #define gcc_memmove gcc_memmove_xmm
+ #endif
+ 
+ void
+ gcc_memmove (void *a, void *b)
+ {
+   __builtin_memmove (a, b, 512);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-11b.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-11b.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-11b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-11b.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,74 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx512f -march=x86-64-v3 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_ymm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movq	%rdi, %rax
+ **	movl	\$512, %edx
+ **	cmpq	%rdi, %rsi
+ **	jb	.L5
+ **	je	.L10
+ **	vmovdqu	480\(%rsi\), %ymm7
+ **	vmovdqu	448\(%rsi\), %ymm6
+ **	vmovdqu	416\(%rsi\), %ymm5
+ **	vmovdqu	384\(%rsi\), %ymm4
+ **.L6:
+ **	vmovdqu	\(%rsi\), %ymm3
+ **	vmovdqu	32\(%rsi\), %ymm2
+ **	addl	\$-128, %edx
+ **	subq	\$-128, %rax
+ **	vmovdqu	64\(%rsi\), %ymm1
+ **	vmovdqu	96\(%rsi\), %ymm0
+ **	subq	\$-128, %rsi
+ **	vmovdqu	%ymm3, -128\(%rax\)
+ **	vmovdqu	%ymm2, -96\(%rax\)
+ **	vmovdqu	%ymm1, -64\(%rax\)
+ **	vmovdqu	%ymm0, -32\(%rax\)
+ **	cmpl	\$128, %edx
+ **	ja	.L6
+ **	vmovdqu	%ymm7, 480\(%rdi\)
+ **	vmovdqu	%ymm6, 448\(%rdi\)
+ **	vmovdqu	%ymm5, 416\(%rdi\)
+ **	vmovdqu	%ymm4, 384\(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	vmovdqu	\(%rsi\), %ymm7
+ **	vmovdqu	32\(%rsi\), %ymm6
+ **	leaq	512\(%rdi\), %rax
+ **	addq	\$512, %rsi
+ **	vmovdqu	-448\(%rsi\), %ymm5
+ **	vmovdqu	-416\(%rsi\), %ymm4
+ **.L7:
+ **	vmovdqu	-32\(%rsi\), %ymm3
+ **	addl	\$-128, %edx
+ **	addq	\$-128, %rax
+ **	addq	\$-128, %rsi
+ **	vmovdqu	64\(%rsi\), %ymm2
+ **	vmovdqu	32\(%rsi\), %ymm1
+ **	vmovdqu	\(%rsi\), %ymm0
+ **	vmovdqu	%ymm3, 96\(%rax\)
+ **	vmovdqu	%ymm2, 64\(%rax\)
+ **	vmovdqu	%ymm1, 32\(%rax\)
+ **	vmovdqu	%ymm0, \(%rax\)
+ **	cmpl	\$128, %edx
+ **	ja	.L7
+ **	vmovdqu	%ymm7, \(%rdi\)
+ **	vmovdqu	%ymm6, 32\(%rdi\)
+ **	vmovdqu	%ymm5, 64\(%rdi\)
+ **	vmovdqu	%ymm4, 96\(%rdi\)
+ **	vzeroupper
+ **.L10:
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_ymm
+ #include "builtin-memmove-11a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-11c.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-11c.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-11c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-11c.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mmove-max=512 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_zmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	vmovdqu64	\(%(e|r)si\), %zmm7
+ **	vmovdqu64	64\(%(e|r)si\), %zmm6
+ **	vmovdqu64	128\(%(e|r)si\), %zmm5
+ **	vmovdqu64	192\(%(e|r)si\), %zmm4
+ **	vmovdqu64	256\(%(e|r)si\), %zmm3
+ **	vmovdqu64	320\(%(e|r)si\), %zmm2
+ **	vmovdqu64	384\(%(e|r)si\), %zmm1
+ **	vmovdqu64	448\(%(e|r)si\), %zmm0
+ **	vmovdqu64	%zmm7, \(%(e|r)di\)
+ **	vmovdqu64	%zmm6, 64\(%(e|r)di\)
+ **	vmovdqu64	%zmm5, 128\(%(e|r)di\)
+ **	vmovdqu64	%zmm4, 192\(%(e|r)di\)
+ **	vmovdqu64	%zmm3, 256\(%(e|r)di\)
+ **	vmovdqu64	%zmm2, 320\(%(e|r)di\)
+ **	vmovdqu64	%zmm1, 384\(%(e|r)di\)
+ **	vmovdqu64	%zmm0, 448\(%(e|r)di\)
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_zmm
+ #include "builtin-memmove-11a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-12.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-12.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-12.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-12.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,41 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movdqu	a\+20\(%rip\), %xmm5
+ **	movdqu	a\+36\(%rip\), %xmm4
+ **	movdqu	a\+52\(%rip\), %xmm3
+ **	movdqu	a\+68\(%rip\), %xmm2
+ **	movdqu	a\+84\(%rip\), %xmm1
+ **	movdqu	a\+100\(%rip\), %xmm0
+ **	movups	%xmm5, a\+24\(%rip\)
+ **	movq	a\+116\(%rip\), %rax
+ **	movdqu	a\+4\(%rip\), %xmm6
+ **	movups	%xmm4, a\+40\(%rip\)
+ **	movl	%edi, a\+4\(%rip\)
+ **	movq	%rax, a\+120\(%rip\)
+ **	movups	%xmm6, a\+8\(%rip\)
+ **	movups	%xmm3, a\+56\(%rip\)
+ **	movups	%xmm2, a\+72\(%rip\)
+ **	movups	%xmm1, a\+88\(%rip\)
+ **	movups	%xmm0, a\+104\(%rip\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define N 32
+ 
+ int a[N];
+ 
+ void
+ foo (int x)
+ {
+   __builtin_memmove (a + 2, a + 1, sizeof a - 2 * sizeof *a);
+   a[1] = x;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-13.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-13.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-13.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-13.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movl	a\+3\(%rip\), %eax
+ **	movl	%eax, a\(%rip\)
+ **	movzbl	a\+7\(%rip\), %eax
+ **	movb	%al, a\+4\(%rip\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ char a[8] = "12345678";
+ 
+ void
+ foo (void)
+ {
+   __builtin_memmove (a, a + 3, sizeof a - 3);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-14.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-14.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-14.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-14.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$64, %rdx
+ **	jbe	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	cmpl	\$16, %edx
+ **	jnb	.L13
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	cmpl	\$32, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	addq	%rdx, %rsi
+ **	movdqu	-16\(%rsi\), %xmm1
+ **	movdqu	-32\(%rsi\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n <= 64)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-15.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-15.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-15.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-15.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,114 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$66, %rdx
+ **	jbe	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	cmpl	\$16, %edx
+ **	jnb	.L13
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	cmpl	\$32, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	cmpl	\$64, %edx
+ **	jnb	.L14
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	addq	%rdx, %rsi
+ **	movdqu	-16\(%rsi\), %xmm1
+ **	movdqu	-32\(%rsi\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	movdqu	32\(%rsi\), %xmm5
+ **	movdqu	48\(%rsi\), %xmm4
+ **	addq	%rdx, %rsi
+ **	movdqu	-16\(%rsi\), %xmm3
+ **	movdqu	-32\(%rsi\), %xmm2
+ **	movdqu	-48\(%rsi\), %xmm1
+ **	movdqu	-64\(%rsi\), %xmm0
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **	movups	%xmm3, -16\(%rdi,%rdx\)
+ **	movups	%xmm2, -32\(%rdi,%rdx\)
+ **	movups	%xmm1, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n <= 66)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1a.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1a.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1a.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,123 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **memmove7:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movl	\(%(?:r|e)si\), %edx
+ **	movl	3\(%(?:r|e)si\), %eax
+ **	movl	%edx, \(%(?:r|e)di\)
+ **	movl	%eax, 3\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove13:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movq	\(%(?:r|e)si\), %rdx
+ **	movq	5\(%(?:r|e)si\), %rax
+ **	movq	%rdx, \(%(?:r|e)di\)
+ **	movq	%rax, 5\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove31:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movdqu	\(%(?:r|e)si\), %xmm1
+ **	movdqu	15\(%(?:r|e)si\), %xmm0
+ **	movups	%xmm1, \(%(?:r|e)di\)
+ **	movups	%xmm0, 15\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove39:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movdqu	\(%(?:r|e)si\), %xmm1
+ **	movdqu	16\(%(?:r|e)si\), %xmm0
+ **	movq	31\(%(?:r|e)si\), %rax
+ **	movups	%xmm0, 16\(%(?:r|e)di\)
+ **	movups	%xmm1, \(%(?:r|e)di\)
+ **	movq	%rax, 31\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove61:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movdqu	\(%(?:r|e)si\), %xmm3
+ **	movdqu	16\(%(?:r|e)si\), %xmm2
+ **	movdqu	32\(%(?:r|e)si\), %xmm1
+ **	movdqu	45\(%(?:r|e)si\), %xmm0
+ **	movups	%xmm3, \(%(?:r|e)di\)
+ **	movups	%xmm1, 32\(%(?:r|e)di\)
+ **	movups	%xmm2, 16\(%(?:r|e)di\)
+ **	movups	%xmm0, 45\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove69:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movdqu	\(%(?:r|e)si\), %xmm3
+ **	movdqu	16\(%(?:r|e)si\), %xmm2
+ **	movdqu	32\(%(?:r|e)si\), %xmm1
+ **	movdqu	48\(%(?:r|e)si\), %xmm0
+ **	movq	61\(%(?:r|e)si\), %rax
+ **	movups	%xmm3, \(%(?:r|e)di\)
+ **	movups	%xmm0, 48\(%(?:r|e)di\)
+ **	movups	%xmm2, 16\(%(?:r|e)di\)
+ **	movq	%rax, 61\(%(?:r|e)di\)
+ **	movups	%xmm1, 32\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove93:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movdqu	\(%(?:r|e)si\), %xmm5
+ **	movdqu	16\(%(?:r|e)si\), %xmm4
+ **	movdqu	32\(%(?:r|e)si\), %xmm3
+ **	movdqu	48\(%(?:r|e)si\), %xmm2
+ **	movdqu	64\(%(?:r|e)si\), %xmm1
+ **	movdqu	77\(%(?:r|e)si\), %xmm0
+ **	movups	%xmm5, \(%(?:r|e)di\)
+ **	movups	%xmm4, 16\(%(?:r|e)di\)
+ **	movups	%xmm1, 64\(%(?:r|e)di\)
+ **	movups	%xmm3, 32\(%(?:r|e)di\)
+ **	movups	%xmm2, 48\(%(?:r|e)di\)
+ **	movups	%xmm0, 77\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ #define TEST(n) \
+   void \
+   memmove##n (void *a, void *b) \
+   { \
+     __builtin_memmove (a, b, n); \
+   }
+ 
+ TEST (7)
+ TEST (13)
+ TEST (31)
+ TEST (39)
+ TEST (61)
+ TEST (69)
+ TEST (93)
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1b.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1b.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1b.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,98 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx512f -march=x86-64-v3 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **memmove7:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movl	\(%(?:r|e)si\), %edx
+ **	movl	3\(%(?:r|e)si\), %eax
+ **	movl	%edx, \(%(?:r|e)di\)
+ **	movl	%eax, 3\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove13:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movq	\(%(?:r|e)si\), %rdx
+ **	movq	5\(%(?:r|e)si\), %rax
+ **	movq	%rdx, \(%(?:r|e)di\)
+ **	movq	%rax, 5\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove31:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	\(%(?:r|e)si\), %xmm1
+ **	vmovdqu	15\(%(?:r|e)si\), %xmm0
+ **	vmovdqu	%xmm1, \(%(?:r|e)di\)
+ **	vmovdqu	%xmm0, 15\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove39:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	\(%(?:r|e)si\), %ymm0
+ **	movq	31\(%(?:r|e)si\), %rax
+ **	vmovdqu	%ymm0, \(%(?:r|e)di\)
+ **	movq	%rax, 31\(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove61:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	\(%(?:r|e)si\), %ymm1
+ **	vmovdqu	29\(%(?:r|e)si\), %ymm0
+ **	vmovdqu	%ymm1, \(%(?:r|e)di\)
+ **	vmovdqu	%ymm0, 29\(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove69:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	32\(%(?:r|e)si\), %ymm0
+ **	movq	61\(%(?:r|e)si\), %rax
+ **	vmovdqu	\(%(?:r|e)si\), %ymm1
+ **	vmovdqu	%ymm0, 32\(%(?:r|e)di\)
+ **	movq	%rax, 61\(%(?:r|e)di\)
+ **	vmovdqu	%ymm1, \(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove93:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	\(%(?:r|e)si\), %ymm2
+ **	vmovdqu	32\(%(?:r|e)si\), %ymm1
+ **	vmovdqu	61\(%(?:r|e)si\), %ymm0
+ **	vmovdqu	%ymm1, 32\(%(?:r|e)di\)
+ **	vmovdqu	%ymm2, \(%(?:r|e)di\)
+ **	vmovdqu	%ymm0, 61\(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-memmove-1a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1c.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1c.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1c.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,94 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mmove-max=512 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { ! ia32 } } {^\t?\.} } } */
+ 
+ /*
+ **memmove7:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movl	\(%(?:r|e)si\), %edx
+ **	movl	3\(%(?:r|e)si\), %eax
+ **	movl	%edx, \(%(?:r|e)di\)
+ **	movl	%eax, 3\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove13:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movq	\(%(?:r|e)si\), %rdx
+ **	movq	5\(%(?:r|e)si\), %rax
+ **	movq	%rdx, \(%(?:r|e)di\)
+ **	movq	%rax, 5\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove31:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	\(%(?:r|e)si\), %xmm1
+ **	vmovdqu	15\(%(?:r|e)si\), %xmm0
+ **	vmovdqu	%xmm1, \(%(?:r|e)di\)
+ **	vmovdqu	%xmm0, 15\(%(?:r|e)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove39:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	\(%(?:r|e)si\), %ymm0
+ **	movq	31\(%(?:r|e)si\), %rax
+ **	vmovdqu	%ymm0, \(%(?:r|e)di\)
+ **	movq	%rax, 31\(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove61:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu	\(%(?:r|e)si\), %ymm1
+ **	vmovdqu	29\(%(?:r|e)si\), %ymm0
+ **	vmovdqu	%ymm1, \(%(?:r|e)di\)
+ **	vmovdqu	%ymm0, 29\(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove69:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu64	\(%(?:r|e)si\), %zmm0
+ **	movq	61\(%(?:r|e)si\), %rax
+ **	vmovdqu64	%zmm0, \(%(?:r|e)di\)
+ **	movq	%rax, 61\(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove93:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	vmovdqu64	\(%(?:r|e)si\), %zmm1
+ **	vmovdqu	61\(%(?:r|e)si\), %ymm0
+ **	vmovdqu64	%zmm1, \(%(?:r|e)di\)
+ **	vmovdqu	%ymm0, 61\(%(?:r|e)di\)
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-memmove-1a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1d.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1d.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-1d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-1d.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,226 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mgeneral-regs-only -march=x86-64 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **memmove7:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movl	\(%rsi\), %edx
+ **	movl	3\(%rsi\), %eax
+ **	movl	%edx, \(%rdi\)
+ **	movl	%eax, 3\(%rdi\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove13:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movq	\(%rsi\), %rdx
+ **	movq	5\(%rsi\), %rax
+ **	movq	%rdx, \(%rdi\)
+ **	movq	%rax, 5\(%rdi\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove31:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movq	\(%(e|r)si\), %r8
+ **	movq	8\(%(e|r)si\), %rcx
+ **	movq	16\(%(e|r)si\), %rdx
+ **	movq	23\(%(e|r)si\), %rax
+ **	movq	%r8, \(%(e|r)di\)
+ **	movq	%rdx, 16\(%(e|r)di\)
+ **	movq	%rcx, 8\(%(e|r)di\)
+ **	movq	%rax, 23\(%(e|r)di\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove39:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movq	\(%rsi\), %r9
+ **	movq	8\(%rsi\), %r8
+ **	movq	16\(%rsi\), %rcx
+ **	movq	24\(%rsi\), %rdx
+ **	movq	31\(%rsi\), %rax
+ **	movq	%r9, \(%rdi\)
+ **	movq	%rdx, 24\(%rdi\)
+ **	movq	%r8, 8\(%rdi\)
+ **	movq	%rcx, 16\(%rdi\)
+ **	movq	%rax, 31\(%rdi\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove61:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	movq	8\(%rsi\), %r11
+ **	movq	16\(%rsi\), %r10
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 3, -16
+ **	movq	24\(%rsi\), %r9
+ **	movq	\(%rsi\), %rbx
+ **	movq	32\(%rsi\), %r8
+ **	movq	40\(%rsi\), %rcx
+ **	movq	48\(%rsi\), %rdx
+ **	movq	53\(%rsi\), %rax
+ **	movq	%rbx, \(%rdi\)
+ **	movq	%r11, 8\(%rdi\)
+ **	popq	%rbx
+ **	.cfi_def_cfa_offset 8
+ **	movq	%rdx, 48\(%rdi\)
+ **	movq	%r10, 16\(%rdi\)
+ **	movq	%r9, 24\(%rdi\)
+ **	movq	%r8, 32\(%rdi\)
+ **	movq	%rcx, 40\(%rdi\)
+ **	movq	%rax, 53\(%rdi\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove69:
+ **.LFB5:
+ **	.cfi_startproc
+ **	movq	16\(%rsi\), %r11
+ **	movq	24\(%rsi\), %r10
+ **	pushq	%rbp
+ **	.cfi_def_cfa_offset 16
+ **	.cfi_offset 6, -16
+ **	movq	32\(%rsi\), %r9
+ **	movq	\(%rsi\), %rbp
+ **	pushq	%rbx
+ **	.cfi_def_cfa_offset 24
+ **	.cfi_offset 3, -24
+ **	movq	40\(%rsi\), %r8
+ **	movq	8\(%rsi\), %rbx
+ **	movq	48\(%rsi\), %rcx
+ **	movq	56\(%rsi\), %rdx
+ **	movq	61\(%rsi\), %rax
+ **	movq	%rbp, \(%rdi\)
+ **	movq	%rbx, 8\(%rdi\)
+ **	popq	%rbx
+ **	.cfi_def_cfa_offset 16
+ **	movq	%rdx, 56\(%rdi\)
+ **	popq	%rbp
+ **	.cfi_def_cfa_offset 8
+ **	movq	%r11, 16\(%rdi\)
+ **	movq	%r10, 24\(%rdi\)
+ **	movq	%r9, 32\(%rdi\)
+ **	movq	%r8, 40\(%rdi\)
+ **	movq	%rcx, 48\(%rdi\)
+ **	movq	%rax, 61\(%rdi\)
+ **	ret
+ **...
+ */
+ 
+ /*
+ **memmove93:
+ **.LFB[0-9]+:
+ **	.cfi_startproc
+ **	sub(l|q)	\$24, %(e|r)sp
+ **	.cfi_def_cfa_offset 32
+ **	mov(l|q)	%(e|r)si, %(e|r)ax
+ **	movl	\$93, %ecx
+ **	cmp(l|q)	%(e|r)di, %(e|r)si
+ **	jb	.L14
+ **	je	.L10
+ **	movq	%rbx, \(%(e|r)sp\)
+ **	mov(l|q)	%(e|r)di, %(e|r)dx
+ **	movq	%r14, 8\(%(e|r)sp\)
+ **	movq	%r15, 16\(%(e|r)sp\)
+ **	.cfi_offset 3, -32
+ **	.cfi_offset 14, -24
+ **	.cfi_offset 15, -16
+ **	movq	85\(%(e|r)si\), %r14
+ **	movq	77\(%(e|r)si\), %r15
+ **	movq	69\(%(e|r)si\), %r10
+ **	movq	61\(%(e|r)si\), %r11
+ **.L15:
+ **	movq	8\(%(e|r)ax\), %r9
+ **	movq	16\(%(e|r)ax\), %r8
+ **	subl	\$32, %ecx
+ **	add(l|q)	\$32, %(e|r)dx
+ **	movq	24\(%(e|r)ax\), %rsi
+ **	movq	\(%(e|r)ax\), %rbx
+ **	add(l|q)	\$32, %(e|r)ax
+ **	movq	%r9, -24\(%(e|r)dx\)
+ **	movq	%rbx, -32\(%(e|r)dx\)
+ **	movq	%r8, -16\(%(e|r)dx\)
+ **	movq	%rsi, -8\(%(e|r)dx\)
+ **	cmpl	\$32, %ecx
+ **	ja	.L15
+ **	movq	%r10, 69\(%(e|r)di\)
+ **	movq	\(%(e|r)sp\), %rbx
+ **	.cfi_restore 3
+ **	movq	%r11, 61\(%(e|r)di\)
+ **	movq	%r14, 85\(%(e|r)di\)
+ **	movq	8\(%(e|r)sp\), %r14
+ **	.cfi_restore 14
+ **	movq	%r15, 77\(%(e|r)di\)
+ **	movq	16\(%(e|r)sp\), %r15
+ **	.cfi_restore 15
+ **.L10:
+ **	add(l|q)	\$24, %(e|r)sp
+ **	.cfi_remember_state
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	.cfi_restore_state
+ **	movq	%rbx, \(%(e|r)sp\)
+ **	lea(l|q)	93\(%(e|r)di\), %(e|r)dx
+ **	add(l|q)	\$93, %(e|r)ax
+ **	movq	%r14, 8\(%(e|r)sp\)
+ **	movq	%r15, 16\(%(e|r)sp\)
+ **	.cfi_offset 3, -32
+ **	.cfi_offset 14, -24
+ **	.cfi_offset 15, -16
+ **	movq	\(%(e|r)si\), %r14
+ **	movq	8\(%(e|r)si\), %r15
+ **	movq	16\(%(e|r)si\), %r10
+ **	movq	24\(%(e|r)si\), %r11
+ **.L16:
+ **	movq	-16\(%(e|r)ax\), %r9
+ **	movq	-24\(%(e|r)ax\), %r8
+ **	subl	\$32, %ecx
+ **	sub(l|q)	\$32, %(e|r)dx
+ **	movq	-32\(%(e|r)ax\), %rsi
+ **	movq	-8\(%(e|r)ax\), %rbx
+ **	sub(l|q)	\$32, %(e|r)ax
+ **	movq	%r9, 16\(%(e|r)dx\)
+ **	movq	%rbx, 24\(%(e|r)dx\)
+ **	movq	%r8, 8\(%(e|r)dx\)
+ **	movq	%rsi, \(%(e|r)dx\)
+ **	cmpl	\$32, %ecx
+ **	ja	.L16
+ **	movq	%r14, \(%(e|r)di\)
+ **	movq	\(%(e|r)sp\), %rbx
+ **	.cfi_restore 3
+ **	movq	%r15, 8\(%(e|r)di\)
+ **	movq	8\(%(e|r)sp\), %r14
+ **	.cfi_restore 14
+ **	movq	%r10, 16\(%(e|r)di\)
+ **	movq	16\(%(e|r)sp\), %r15
+ **	.cfi_restore 15
+ **	movq	%r11, 24\(%(e|r)di\)
+ **	add(l|q)	\$24, %(e|r)sp
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-memmove-1a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2a.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2a.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2a.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,165 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_xmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movq	%rdi, %rax
+ **	movq	%rsi, %rcx
+ **	cmpq	\$16, %rdx
+ **	jb	.L3
+ **	cmpq	\$32, %rdx
+ **	jbe	.L17
+ **	cmpq	\$128, %rdx
+ **	jbe	.L18
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rcx
+ **	jb	.L11
+ **	je	.L2
+ **	movdqu	-16\(%rcx,%rdx\), %xmm7
+ **	movdqu	-32\(%rcx,%rdx\), %xmm6
+ **	movdqu	-48\(%rcx,%rdx\), %xmm5
+ **	movdqu	-64\(%rcx,%rdx\), %xmm4
+ **.L12:
+ **	movdqu	\(%rcx\), %xmm3
+ **	subq	\$64, %rsi
+ **	addq	\$64, %rdi
+ **	addq	\$64, %rcx
+ **	movdqu	-48\(%rcx\), %xmm2
+ **	movdqu	-32\(%rcx\), %xmm1
+ **	movdqu	-16\(%rcx\), %xmm0
+ **	movups	%xmm3, -64\(%rdi\)
+ **	movups	%xmm2, -48\(%rdi\)
+ **	movups	%xmm1, -32\(%rdi\)
+ **	movups	%xmm0, -16\(%rdi\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L12
+ **	movups	%xmm7, -16\(%rax,%rdx\)
+ **	movups	%xmm6, -32\(%rax,%rdx\)
+ **	movups	%xmm5, -48\(%rax,%rdx\)
+ **	movups	%xmm4, -64\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L3:
+ **	cmpq	\$8, %rdx
+ **	jb	.L19
+ **	movq	\(%rsi\), %rdi
+ **	movq	-8\(%rsi,%rdx\), %rcx
+ **	movq	%rdi, \(%rax\)
+ **	movq	%rcx, -8\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L19:
+ **	cmpq	\$4, %rdx
+ **	jnb	.L6
+ **	cmpq	\$1, %rdx
+ **	ja	.L7
+ **	jb	.L2
+ **	movzbl	\(%rsi\), %edx
+ **	movb	%dl, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L17:
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L18:
+ **	cmpq	\$64, %rdx
+ **	jb	.L10
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	movdqu	32\(%rsi\), %xmm5
+ **	movdqu	48\(%rsi\), %xmm4
+ **	movdqu	-16\(%rsi,%rdx\), %xmm3
+ **	movdqu	-32\(%rsi,%rdx\), %xmm2
+ **	movdqu	-48\(%rsi,%rdx\), %xmm1
+ **	movdqu	-64\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **	movups	%xmm3, -16\(%rdi,%rdx\)
+ **	movups	%xmm2, -32\(%rdi,%rdx\)
+ **	movups	%xmm1, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	\(%rsi\), %edi
+ **	movl	-4\(%rsi,%rdx\), %ecx
+ **	movl	%edi, \(%rax\)
+ **	movl	%ecx, -4\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movdqu	\(%rcx\), %xmm7
+ **	movdqu	16\(%rcx\), %xmm6
+ **	leaq	\(%rdi,%rdx\), %rdi
+ **	movdqu	32\(%rcx\), %xmm5
+ **	movdqu	48\(%rcx\), %xmm4
+ **	addq	%rdx, %rcx
+ **.L13:
+ **	movdqu	-16\(%rcx\), %xmm3
+ **	movdqu	-32\(%rcx\), %xmm2
+ **	subq	\$64, %rsi
+ **	subq	\$64, %rdi
+ **	movdqu	-48\(%rcx\), %xmm1
+ **	movdqu	-64\(%rcx\), %xmm0
+ **	subq	\$64, %rcx
+ **	movups	%xmm3, 48\(%rdi\)
+ **	movups	%xmm2, 32\(%rdi\)
+ **	movups	%xmm1, 16\(%rdi\)
+ **	movups	%xmm0, \(%rdi\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L13
+ **	movups	%xmm7, \(%rax\)
+ **	movups	%xmm6, 16\(%rax\)
+ **	movups	%xmm5, 32\(%rax\)
+ **	movups	%xmm4, 48\(%rax\)
+ **.L2:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	movdqu	-16\(%rsi,%rdx\), %xmm1
+ **	movdqu	-32\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movzwl	\(%rsi\), %edi
+ **	movzwl	-2\(%rsi,%rdx\), %ecx
+ **	movw	%di, \(%rax\)
+ **	movw	%cx, -2\(%rax,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #ifndef gcc_memmove
+ #define gcc_memmove gcc_memmove_xmm
+ #endif
+ 
+ void *
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   return __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2b.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2b.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2b.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,173 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx512f -march=x86-64-v3 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_ymm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movq	%rdi, %rax
+ **	movq	%rsi, %rcx
+ **	cmpq	\$32, %rdx
+ **	jb	.L3
+ **	cmpq	\$64, %rdx
+ **	jbe	.L18
+ **	cmpq	\$256, %rdx
+ **	jbe	.L19
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rcx
+ **	jb	.L12
+ **	je	.L2
+ **	vmovdqu	-32\(%rcx,%rdx\), %ymm7
+ **	vmovdqu	-64\(%rcx,%rdx\), %ymm6
+ **	vmovdqu	-96\(%rcx,%rdx\), %ymm5
+ **	vmovdqu	-128\(%rcx,%rdx\), %ymm4
+ **.L13:
+ **	vmovdqu	\(%rcx\), %ymm3
+ **	addq	\$-128, %rsi
+ **	subq	\$-128, %rdi
+ **	subq	\$-128, %rcx
+ **	vmovdqu	-96\(%rcx\), %ymm2
+ **	vmovdqu	-64\(%rcx\), %ymm1
+ **	vmovdqu	-32\(%rcx\), %ymm0
+ **	vmovdqu	%ymm3, -128\(%rdi\)
+ **	vmovdqu	%ymm2, -96\(%rdi\)
+ **	vmovdqu	%ymm1, -64\(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L13
+ **	vmovdqu	%ymm7, -32\(%rax,%rdx\)
+ **	vmovdqu	%ymm6, -64\(%rax,%rdx\)
+ **	vmovdqu	%ymm5, -96\(%rax,%rdx\)
+ **	vmovdqu	%ymm4, -128\(%rax,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L3:
+ **	cmpq	\$16, %rdx
+ **	jb	.L20
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L20:
+ **	cmpq	\$8, %rdx
+ **	jnb	.L6
+ **	cmpq	\$4, %rdx
+ **	jnb	.L7
+ **	cmpq	\$1, %rdx
+ **	ja	.L8
+ **	jb	.L2
+ **	movzbl	\(%rsi\), %edx
+ **	movb	%dl, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L18:
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L19:
+ **	cmpq	\$128, %rdx
+ **	jb	.L11
+ **	vmovdqu	\(%rsi\), %ymm7
+ **	vmovdqu	32\(%rsi\), %ymm6
+ **	vmovdqu	64\(%rsi\), %ymm5
+ **	vmovdqu	96\(%rsi\), %ymm4
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm3
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm2
+ **	vmovdqu	-96\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-128\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm7, \(%rdi\)
+ **	vmovdqu	%ymm6, 32\(%rdi\)
+ **	vmovdqu	%ymm5, 64\(%rdi\)
+ **	vmovdqu	%ymm4, 96\(%rdi\)
+ **	vmovdqu	%ymm3, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm2, -64\(%rdi,%rdx\)
+ **	vmovdqu	%ymm1, -96\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movq	\(%rsi\), %rdi
+ **	movq	-8\(%rsi,%rdx\), %rcx
+ **	movq	%rdi, \(%rax\)
+ **	movq	%rcx, -8\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	vmovdqu	\(%rcx\), %ymm7
+ **	vmovdqu	32\(%rcx\), %ymm6
+ **	leaq	\(%rdi,%rdx\), %rdi
+ **	vmovdqu	64\(%rcx\), %ymm5
+ **	vmovdqu	96\(%rcx\), %ymm4
+ **	addq	%rdx, %rcx
+ **.L14:
+ **	vmovdqu	-32\(%rcx\), %ymm3
+ **	vmovdqu	-64\(%rcx\), %ymm2
+ **	addq	\$-128, %rsi
+ **	addq	\$-128, %rdi
+ **	vmovdqu	-96\(%rcx\), %ymm1
+ **	vmovdqu	-128\(%rcx\), %ymm0
+ **	addq	\$-128, %rcx
+ **	vmovdqu	%ymm3, 96\(%rdi\)
+ **	vmovdqu	%ymm2, 64\(%rdi\)
+ **	vmovdqu	%ymm1, 32\(%rdi\)
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L14
+ **	vmovdqu	%ymm7, \(%rax\)
+ **	vmovdqu	%ymm6, 32\(%rax\)
+ **	vmovdqu	%ymm5, 64\(%rax\)
+ **	vmovdqu	%ymm4, 96\(%rax\)
+ **	vzeroupper
+ **.L2:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	vmovdqu	\(%rsi\), %ymm3
+ **	vmovdqu	32\(%rsi\), %ymm2
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	\(%rsi\), %edi
+ **	movl	-4\(%rsi,%rdx\), %ecx
+ **	movl	%edi, \(%rax\)
+ **	movl	%ecx, -4\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movzwl	\(%rsi\), %edi
+ **	movzwl	-2\(%rsi,%rdx\), %ecx
+ **	movw	%di, \(%rax\)
+ **	movw	%cx, -2\(%rax,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_ymm
+ #include "builtin-memmove-2a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2c.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2c.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2c.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,184 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mmove-max=512 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_zmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movq	%rdi, %rax
+ **	movq	%rsi, %rcx
+ **	cmpq	\$64, %rdx
+ **	jb	.L3
+ **	cmpq	\$128, %rdx
+ **	jbe	.L19
+ **	cmpq	\$512, %rdx
+ **	jbe	.L20
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rcx
+ **	jb	.L13
+ **	je	.L2
+ **	vmovdqu64	-64\(%rcx,%rdx\), %zmm7
+ **	vmovdqu64	-128\(%rcx,%rdx\), %zmm6
+ **	vmovdqu64	-192\(%rcx,%rdx\), %zmm5
+ **	vmovdqu64	-256\(%rcx,%rdx\), %zmm4
+ **.L14:
+ **	vmovdqu64	\(%rcx\), %zmm3
+ **	vmovdqu64	64\(%rcx\), %zmm2
+ **	subq	\$256, %rsi
+ **	addq	\$256, %rdi
+ **	vmovdqu64	128\(%rcx\), %zmm1
+ **	addq	\$256, %rcx
+ **	vmovdqu64	-64\(%rcx\), %zmm0
+ **	vmovdqu64	%zmm3, -256\(%rdi\)
+ **	vmovdqu64	%zmm2, -192\(%rdi\)
+ **	vmovdqu64	%zmm1, -128\(%rdi\)
+ **	vmovdqu64	%zmm0, -64\(%rdi\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L14
+ **	vmovdqu64	%zmm7, -64\(%rax,%rdx\)
+ **	vmovdqu64	%zmm6, -128\(%rax,%rdx\)
+ **	vmovdqu64	%zmm5, -192\(%rax,%rdx\)
+ **	vmovdqu64	%zmm4, -256\(%rax,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L3:
+ **	cmpq	\$32, %rdx
+ **	jb	.L21
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L21:
+ **	cmpq	\$16, %rdx
+ **	jnb	.L6
+ **	cmpq	\$8, %rdx
+ **	jnb	.L7
+ **	cmpq	\$4, %rdx
+ **	jnb	.L8
+ **	cmpq	\$1, %rdx
+ **	ja	.L9
+ **	jb	.L2
+ **	movzbl	\(%rsi\), %edx
+ **	movb	%dl, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L19:
+ **	vmovdqu64	\(%rsi\), %zmm1
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm1, \(%rdi\)
+ **	vmovdqu64	%zmm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L20:
+ **	cmpq	\$256, %rdx
+ **	jb	.L12
+ **	vmovdqu64	\(%rsi\), %zmm7
+ **	vmovdqu64	64\(%rsi\), %zmm6
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm3
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm2
+ **	vmovdqu64	128\(%rsi\), %zmm5
+ **	vmovdqu64	192\(%rsi\), %zmm4
+ **	vmovdqu64	-192\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-256\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm7, \(%rdi\)
+ **	vmovdqu64	%zmm6, 64\(%rdi\)
+ **	vmovdqu64	%zmm5, 128\(%rdi\)
+ **	vmovdqu64	%zmm4, 192\(%rdi\)
+ **	vmovdqu64	%zmm3, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm2, -128\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm1, -192\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -256\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	vmovdqu64	\(%rcx\), %zmm7
+ **	leaq	\(%rdi,%rdx\), %rdi
+ **	vmovdqu64	64\(%rcx\), %zmm6
+ **	vmovdqu64	128\(%rcx\), %zmm5
+ **	vmovdqu64	192\(%rcx\), %zmm4
+ **	addq	%rdx, %rcx
+ **.L15:
+ **	vmovdqu64	-64\(%rcx\), %zmm3
+ **	vmovdqu64	-128\(%rcx\), %zmm2
+ **	subq	\$256, %rsi
+ **	subq	\$256, %rdi
+ **	vmovdqu64	-192\(%rcx\), %zmm1
+ **	subq	\$256, %rcx
+ **	vmovdqu64	\(%rcx\), %zmm0
+ **	vmovdqu64	%zmm3, 192\(%rdi\)
+ **	vmovdqu64	%zmm2, 128\(%rdi\)
+ **	vmovdqu64	%zmm1, 64\(%rdi\)
+ **	vmovdqu64	%zmm0, \(%rdi\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L15
+ **	vmovdqu64	%zmm7, \(%rax\)
+ **	vmovdqu64	%zmm6, 64\(%rax\)
+ **	vmovdqu64	%zmm5, 128\(%rax\)
+ **	vmovdqu64	%zmm4, 192\(%rax\)
+ **	vzeroupper
+ **.L2:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	vmovdqu64	\(%rsi\), %zmm3
+ **	vmovdqu64	64\(%rsi\), %zmm2
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm3, \(%rdi\)
+ **	vmovdqu64	%zmm2, 64\(%rdi\)
+ **	vmovdqu64	%zmm1, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movq	\(%rsi\), %rdi
+ **	movq	-8\(%rsi,%rdx\), %rcx
+ **	movq	%rdi, \(%rax\)
+ **	movq	%rcx, -8\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	\(%rsi\), %edi
+ **	movl	-4\(%rsi,%rdx\), %ecx
+ **	movl	%edi, \(%rax\)
+ **	movl	%ecx, -4\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movzwl	\(%rsi\), %edi
+ **	movzwl	-2\(%rsi,%rdx\), %ecx
+ **	movw	%di, \(%rax\)
+ **	movw	%cx, -2\(%rax,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_zmm
+ #include "builtin-memmove-2a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2d.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2d.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-2d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-2d.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,195 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mgeneral-regs-only -march=x86-64 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_gpr:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movq	%rdi, %rax
+ **	cmpq	\$8, %rdx
+ **	jb	.L3
+ **	cmpq	\$16, %rdx
+ **	jbe	.L19
+ **	subq	\$32, %rsp
+ **	.cfi_def_cfa_offset 40
+ **	cmpq	\$64, %rdx
+ **	jbe	.L20
+ **	movq	%rsi, %rcx
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rcx
+ **	jb	.L10
+ **	je	.L2
+ **	movq	%rbx, \(%rsp\)
+ **	movq	%rbp, 8\(%rsp\)
+ **	movq	%r14, 16\(%rsp\)
+ **	movq	%r15, 24\(%rsp\)
+ **	.cfi_offset 3, -40
+ **	.cfi_offset 6, -32
+ **	.cfi_offset 14, -24
+ **	.cfi_offset 15, -16
+ **	movq	-8\(%rcx,%rdx\), %r15
+ **	movq	-16\(%rcx,%rdx\), %r14
+ **	movq	-24\(%rcx,%rdx\), %rbp
+ **	movq	-32\(%rcx,%rdx\), %r11
+ **.L11:
+ **	movq	8\(%rcx\), %r10
+ **	movq	16\(%rcx\), %r9
+ **	subq	\$32, %rsi
+ **	addq	\$32, %rdi
+ **	movq	24\(%rcx\), %r8
+ **	movq	\(%rcx\), %rbx
+ **	addq	\$32, %rcx
+ **	movq	%r10, -24\(%rdi\)
+ **	movq	%rbx, -32\(%rdi\)
+ **	movq	%r9, -16\(%rdi\)
+ **	movq	%r8, -8\(%rdi\)
+ **	cmpq	\$32, %rsi
+ **	ja	.L11
+ **	movq	%r15, -8\(%rax,%rdx\)
+ **	movq	%r14, -16\(%rax,%rdx\)
+ **	movq	%rbp, -24\(%rax,%rdx\)
+ **	movq	%r11, -32\(%rax,%rdx\)
+ **	movq	\(%rsp\), %rbx
+ **	.cfi_restore 3
+ **	movq	8\(%rsp\), %rbp
+ **	.cfi_restore 6
+ **	movq	16\(%rsp\), %r14
+ **	.cfi_restore 14
+ **	movq	24\(%rsp\), %r15
+ **	.cfi_restore 15
+ **	jmp	.L2
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L3:
+ **	.cfi_def_cfa_offset 8
+ **	cmpq	\$4, %rdx
+ **	jb	.L21
+ **	movl	\(%rsi\), %edi
+ **	movl	-4\(%rsi,%rdx\), %ecx
+ **	movl	%edi, \(%rax\)
+ **	movl	%ecx, -4\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L21:
+ **	cmpq	\$1, %rdx
+ **	ja	.L6
+ **	jb	.L16
+ **	movzbl	\(%rsi\), %edx
+ **	movb	%dl, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L19:
+ **	movq	\(%rsi\), %rdi
+ **	movq	-8\(%rsi,%rdx\), %rcx
+ **	movq	%rdi, \(%rax\)
+ **	movq	%rcx, -8\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L20:
+ **	.cfi_def_cfa_offset 40
+ **	cmpq	\$32, %rdx
+ **	jb	.L9
+ **	movq	%rbx, \(%rsp\)
+ **	movq	%r14, 16\(%rsp\)
+ **	.cfi_offset 3, -40
+ **	.cfi_offset 14, -24
+ **	movq	\(%rsi\), %rbx
+ **	movq	8\(%rsi\), %r14
+ **	movq	16\(%rsi\), %r11
+ **	movq	24\(%rsi\), %r10
+ **	movq	-8\(%rsi,%rdx\), %r9
+ **	movq	-16\(%rsi,%rdx\), %r8
+ **	movq	-24\(%rsi,%rdx\), %rdi
+ **	movq	-32\(%rsi,%rdx\), %rcx
+ **	movq	%rbx, \(%rax\)
+ **	movq	%r14, 8\(%rax\)
+ **	movq	%r11, 16\(%rax\)
+ **	movq	%r10, 24\(%rax\)
+ **	movq	%r9, -8\(%rax,%rdx\)
+ **	movq	%r8, -16\(%rax,%rdx\)
+ **	movq	%rdi, -24\(%rax,%rdx\)
+ **	movq	%rcx, -32\(%rax,%rdx\)
+ **	movq	\(%rsp\), %rbx
+ **	.cfi_restore 3
+ **	movq	16\(%rsp\), %r14
+ **	.cfi_restore 14
+ **.L2:
+ **	addq	\$32, %rsp
+ **	.cfi_def_cfa_offset 8
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movzwl	\(%rsi\), %edi
+ **	movzwl	-2\(%rsi,%rdx\), %ecx
+ **	movw	%di, \(%rax\)
+ **	movw	%cx, -2\(%rax,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	.cfi_def_cfa_offset 40
+ **	movq	\(%rsi\), %r9
+ **	movq	8\(%rsi\), %r8
+ **	movq	-8\(%rsi,%rdx\), %rdi
+ **	movq	-16\(%rsi,%rdx\), %rcx
+ **	movq	%r9, \(%rax\)
+ **	movq	%r8, 8\(%rax\)
+ **	movq	%rdi, -8\(%rax,%rdx\)
+ **	movq	%rcx, -16\(%rax,%rdx\)
+ **	jmp	.L2
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movq	%rbx, \(%rsp\)
+ **	leaq	\(%rdi,%rdx\), %rdi
+ **	movq	%r14, 16\(%rsp\)
+ **	movq	%r15, 24\(%rsp\)
+ **	.cfi_offset 3, -40
+ **	.cfi_offset 14, -24
+ **	.cfi_offset 15, -16
+ **	movq	\(%rcx\), %r14
+ **	movq	8\(%rcx\), %r15
+ **	movq	16\(%rcx\), %r10
+ **	movq	24\(%rcx\), %r11
+ **	addq	%rdx, %rcx
+ **.L12:
+ **	movq	-16\(%rcx\), %r9
+ **	movq	-24\(%rcx\), %r8
+ **	subq	\$32, %rsi
+ **	subq	\$32, %rdi
+ **	movq	-32\(%rcx\), %rdx
+ **	movq	-8\(%rcx\), %rbx
+ **	subq	\$32, %rcx
+ **	movq	%r9, 16\(%rdi\)
+ **	movq	%rbx, 24\(%rdi\)
+ **	movq	%r8, 8\(%rdi\)
+ **	movq	%rdx, \(%rdi\)
+ **	cmpq	\$32, %rsi
+ **	ja	.L12
+ **	movq	%r14, \(%rax\)
+ **	movq	\(%rsp\), %rbx
+ **	.cfi_restore 3
+ **	movq	%r15, 8\(%rax\)
+ **	movq	16\(%rsp\), %r14
+ **	.cfi_restore 14
+ **	movq	%r10, 16\(%rax\)
+ **	movq	24\(%rsp\), %r15
+ **	.cfi_restore 15
+ **	movq	%r11, 24\(%rax\)
+ **	jmp	.L2
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_gpr
+ #include "builtin-memmove-2a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-3a.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-3a.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-3a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-3a.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,133 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_xmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$16, %rdx
+ **	ja	.L13
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$32, %rdx
+ **	jbe	.L14
+ **	cmpq	\$128, %rdx
+ **	ja	.L5
+ **	cmpq	\$64, %rdx
+ **	jnb	.L15
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	movdqu	-16\(%rsi,%rdx\), %xmm1
+ **	movdqu	-32\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L7
+ **	je	.L1
+ **	movdqu	-16\(%rax,%rdx\), %xmm7
+ **	movdqu	-32\(%rax,%rdx\), %xmm6
+ **	movdqu	-48\(%rax,%rdx\), %xmm5
+ **	movdqu	-64\(%rax,%rdx\), %xmm4
+ **.L8:
+ **	movdqu	\(%rax\), %xmm3
+ **	subq	\$64, %rsi
+ **	addq	\$64, %rcx
+ **	addq	\$64, %rax
+ **	movdqu	-48\(%rax\), %xmm2
+ **	movdqu	-32\(%rax\), %xmm1
+ **	movdqu	-16\(%rax\), %xmm0
+ **	movups	%xmm3, -64\(%rcx\)
+ **	movups	%xmm2, -48\(%rcx\)
+ **	movups	%xmm1, -32\(%rcx\)
+ **	movups	%xmm0, -16\(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L8
+ **	movups	%xmm7, -16\(%rdi,%rdx\)
+ **	movups	%xmm6, -32\(%rdi,%rdx\)
+ **	movups	%xmm5, -48\(%rdi,%rdx\)
+ **	movups	%xmm4, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movdqu	\(%rax\), %xmm3
+ **	movdqu	16\(%rax\), %xmm2
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	movdqu	32\(%rax\), %xmm1
+ **	movdqu	48\(%rax\), %xmm0
+ **	addq	%rdx, %rax
+ **.L9:
+ **	movdqu	-16\(%rax\), %xmm7
+ **	movdqu	-32\(%rax\), %xmm6
+ **	subq	\$64, %rsi
+ **	subq	\$64, %rcx
+ **	movdqu	-48\(%rax\), %xmm5
+ **	movdqu	-64\(%rax\), %xmm4
+ **	subq	\$64, %rax
+ **	movups	%xmm7, 48\(%rcx\)
+ **	movups	%xmm6, 32\(%rcx\)
+ **	movups	%xmm5, 16\(%rcx\)
+ **	movups	%xmm4, \(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L9
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	movdqu	32\(%rsi\), %xmm5
+ **	movdqu	48\(%rsi\), %xmm4
+ **	movdqu	-16\(%rsi,%rdx\), %xmm3
+ **	movdqu	-32\(%rsi,%rdx\), %xmm2
+ **	movdqu	-48\(%rsi,%rdx\), %xmm1
+ **	movdqu	-64\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **	movups	%xmm3, -16\(%rdi,%rdx\)
+ **	movups	%xmm2, -32\(%rdi,%rdx\)
+ **	movups	%xmm1, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #ifndef gcc_memmove
+ #define gcc_memmove gcc_memmove_xmm
+ #endif
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n > 16)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-3b.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-3b.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-3b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-3b.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,140 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx512f -march=x86-64-v3 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_ymm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$16, %rdx
+ **	ja	.L16
+ **.L14:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$32, %rdx
+ **	jb	.L6
+ **	cmpq	\$64, %rdx
+ **	ja	.L5
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	cmpq	\$256, %rdx
+ **	jbe	.L17
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L9
+ **	je	.L14
+ **	vmovdqu	-32\(%rax,%rdx\), %ymm7
+ **	vmovdqu	-64\(%rax,%rdx\), %ymm6
+ **	vmovdqu	-96\(%rax,%rdx\), %ymm5
+ **	vmovdqu	-128\(%rax,%rdx\), %ymm4
+ **.L10:
+ **	vmovdqu	\(%rax\), %ymm3
+ **	addq	\$-128, %rsi
+ **	subq	\$-128, %rcx
+ **	subq	\$-128, %rax
+ **	vmovdqu	-96\(%rax\), %ymm2
+ **	vmovdqu	-64\(%rax\), %ymm1
+ **	vmovdqu	-32\(%rax\), %ymm0
+ **	vmovdqu	%ymm3, -128\(%rcx\)
+ **	vmovdqu	%ymm2, -96\(%rcx\)
+ **	vmovdqu	%ymm1, -64\(%rcx\)
+ **	vmovdqu	%ymm0, -32\(%rcx\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L10
+ **	vmovdqu	%ymm7, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm6, -64\(%rdi,%rdx\)
+ **	vmovdqu	%ymm5, -96\(%rdi,%rdx\)
+ **	vmovdqu	%ymm4, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L17:
+ **	cmpq	\$128, %rdx
+ **	jb	.L8
+ **	vmovdqu	\(%rsi\), %ymm7
+ **	vmovdqu	32\(%rsi\), %ymm6
+ **	vmovdqu	64\(%rsi\), %ymm5
+ **	vmovdqu	96\(%rsi\), %ymm4
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm3
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm2
+ **	vmovdqu	-96\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-128\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm7, \(%rdi\)
+ **	vmovdqu	%ymm6, 32\(%rdi\)
+ **	vmovdqu	%ymm5, 64\(%rdi\)
+ **	vmovdqu	%ymm4, 96\(%rdi\)
+ **	vmovdqu	%ymm3, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm2, -64\(%rdi,%rdx\)
+ **	vmovdqu	%ymm1, -96\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	vmovdqu	\(%rsi\), %ymm3
+ **	vmovdqu	32\(%rsi\), %ymm2
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	vmovdqu	\(%rax\), %ymm3
+ **	vmovdqu	32\(%rax\), %ymm2
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	vmovdqu	64\(%rax\), %ymm1
+ **	vmovdqu	96\(%rax\), %ymm0
+ **	addq	%rdx, %rax
+ **.L11:
+ **	vmovdqu	-32\(%rax\), %ymm7
+ **	vmovdqu	-64\(%rax\), %ymm6
+ **	addq	\$-128, %rsi
+ **	addq	\$-128, %rcx
+ **	vmovdqu	-96\(%rax\), %ymm5
+ **	vmovdqu	-128\(%rax\), %ymm4
+ **	addq	\$-128, %rax
+ **	vmovdqu	%ymm7, 96\(%rcx\)
+ **	vmovdqu	%ymm6, 64\(%rcx\)
+ **	vmovdqu	%ymm5, 32\(%rcx\)
+ **	vmovdqu	%ymm4, \(%rcx\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L11
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, 64\(%rdi\)
+ **	vmovdqu	%ymm0, 96\(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_ymm
+ #include "builtin-memmove-3a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-3c.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-3c.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-3c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-3c.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,151 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mmove-max=512 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_zmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$16, %rdx
+ **	ja	.L18
+ **.L16:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L18:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$64, %rdx
+ **	jnb	.L19
+ **	cmpq	\$32, %rdx
+ **	jb	.L15
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L19:
+ **	cmpq	\$128, %rdx
+ **	ja	.L5
+ **	vmovdqu64	\(%rsi\), %zmm1
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm1, \(%rdi\)
+ **	vmovdqu64	%zmm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	cmpq	\$512, %rdx
+ **	jbe	.L20
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L10
+ **	je	.L16
+ **	vmovdqu64	-64\(%rax,%rdx\), %zmm7
+ **	vmovdqu64	-128\(%rax,%rdx\), %zmm6
+ **	vmovdqu64	-192\(%rax,%rdx\), %zmm5
+ **	vmovdqu64	-256\(%rax,%rdx\), %zmm4
+ **.L11:
+ **	vmovdqu64	\(%rax\), %zmm3
+ **	addq	\$256, %rax
+ **	vmovdqu64	-192\(%rax\), %zmm2
+ **	subq	\$256, %rsi
+ **	vmovdqu64	-128\(%rax\), %zmm1
+ **	vmovdqu64	-64\(%rax\), %zmm0
+ **	addq	\$256, %rcx
+ **	vmovdqu64	%zmm3, -256\(%rcx\)
+ **	vmovdqu64	%zmm2, -192\(%rcx\)
+ **	vmovdqu64	%zmm1, -128\(%rcx\)
+ **	vmovdqu64	%zmm0, -64\(%rcx\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L11
+ **	vmovdqu64	%zmm7, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm6, -128\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm5, -192\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm4, -256\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L20:
+ **	cmpq	\$256, %rdx
+ **	jb	.L9
+ **	vmovdqu64	\(%rsi\), %zmm7
+ **	vmovdqu64	64\(%rsi\), %zmm6
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm3
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm2
+ **	vmovdqu64	128\(%rsi\), %zmm5
+ **	vmovdqu64	192\(%rsi\), %zmm4
+ **	vmovdqu64	-192\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-256\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm7, \(%rdi\)
+ **	vmovdqu64	%zmm6, 64\(%rdi\)
+ **	vmovdqu64	%zmm5, 128\(%rdi\)
+ **	vmovdqu64	%zmm4, 192\(%rdi\)
+ **	vmovdqu64	%zmm3, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm2, -128\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm1, -192\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -256\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	vmovdqu64	\(%rsi\), %zmm3
+ **	vmovdqu64	64\(%rsi\), %zmm2
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm3, \(%rdi\)
+ **	vmovdqu64	%zmm2, 64\(%rdi\)
+ **	vmovdqu64	%zmm1, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	vmovdqu64	\(%rax\), %zmm3
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	vmovdqu64	64\(%rax\), %zmm2
+ **	vmovdqu64	128\(%rax\), %zmm1
+ **	vmovdqu64	192\(%rax\), %zmm0
+ **	addq	%rdx, %rax
+ **.L12:
+ **	vmovdqu64	-64\(%rax\), %zmm7
+ **	subq	\$256, %rax
+ **	vmovdqu64	128\(%rax\), %zmm6
+ **	subq	\$256, %rsi
+ **	vmovdqu64	64\(%rax\), %zmm5
+ **	vmovdqu64	\(%rax\), %zmm4
+ **	subq	\$256, %rcx
+ **	vmovdqu64	%zmm7, 192\(%rcx\)
+ **	vmovdqu64	%zmm6, 128\(%rcx\)
+ **	vmovdqu64	%zmm5, 64\(%rcx\)
+ **	vmovdqu64	%zmm4, \(%rcx\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L12
+ **	vmovdqu64	%zmm3, \(%rdi\)
+ **	vmovdqu64	%zmm2, 64\(%rdi\)
+ **	vmovdqu64	%zmm1, 128\(%rdi\)
+ **	vmovdqu64	%zmm0, 192\(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_zmm
+ #include "builtin-memmove-3a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-4a.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-4a.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-4a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-4a.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,123 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_xmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$32, %rdx
+ **	ja	.L13
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$128, %rdx
+ **	jbe	.L14
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L7
+ **	je	.L1
+ **	movdqu	-16\(%rax,%rdx\), %xmm7
+ **	movdqu	-32\(%rax,%rdx\), %xmm6
+ **	movdqu	-48\(%rax,%rdx\), %xmm5
+ **	movdqu	-64\(%rax,%rdx\), %xmm4
+ **.L8:
+ **	movdqu	\(%rax\), %xmm3
+ **	subq	\$64, %rsi
+ **	addq	\$64, %rcx
+ **	addq	\$64, %rax
+ **	movdqu	-48\(%rax\), %xmm2
+ **	movdqu	-32\(%rax\), %xmm1
+ **	movdqu	-16\(%rax\), %xmm0
+ **	movups	%xmm3, -64\(%rcx\)
+ **	movups	%xmm2, -48\(%rcx\)
+ **	movups	%xmm1, -32\(%rcx\)
+ **	movups	%xmm0, -16\(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L8
+ **	movups	%xmm7, -16\(%rdi,%rdx\)
+ **	movups	%xmm6, -32\(%rdi,%rdx\)
+ **	movups	%xmm5, -48\(%rdi,%rdx\)
+ **	movups	%xmm4, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	cmpq	\$64, %rdx
+ **	jb	.L6
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	movdqu	32\(%rsi\), %xmm5
+ **	movdqu	48\(%rsi\), %xmm4
+ **	movdqu	-16\(%rsi,%rdx\), %xmm3
+ **	movdqu	-32\(%rsi,%rdx\), %xmm2
+ **	movdqu	-48\(%rsi,%rdx\), %xmm1
+ **	movdqu	-64\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **	movups	%xmm3, -16\(%rdi,%rdx\)
+ **	movups	%xmm2, -32\(%rdi,%rdx\)
+ **	movups	%xmm1, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	movdqu	-16\(%rsi,%rdx\), %xmm1
+ **	movdqu	-32\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movdqu	\(%rax\), %xmm3
+ **	movdqu	16\(%rax\), %xmm2
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	movdqu	32\(%rax\), %xmm1
+ **	movdqu	48\(%rax\), %xmm0
+ **	addq	%rdx, %rax
+ **.L9:
+ **	movdqu	-16\(%rax\), %xmm7
+ **	movdqu	-32\(%rax\), %xmm6
+ **	subq	\$64, %rsi
+ **	subq	\$64, %rcx
+ **	movdqu	-48\(%rax\), %xmm5
+ **	movdqu	-64\(%rax\), %xmm4
+ **	subq	\$64, %rax
+ **	movups	%xmm7, 48\(%rcx\)
+ **	movups	%xmm6, 32\(%rcx\)
+ **	movups	%xmm5, 16\(%rcx\)
+ **	movups	%xmm4, \(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L9
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #ifndef gcc_memmove
+ #define gcc_memmove gcc_memmove_xmm
+ #endif
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n > 32)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-4b.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-4b.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-4b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-4b.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,130 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx512f -march=x86-64-v3 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_ymm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$32, %rdx
+ **	ja	.L14
+ **.L12:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$64, %rdx
+ **	jbe	.L15
+ **	cmpq	\$256, %rdx
+ **	ja	.L5
+ **	cmpq	\$128, %rdx
+ **	jnb	.L16
+ **	vmovdqu	\(%rsi\), %ymm3
+ **	vmovdqu	32\(%rsi\), %ymm2
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L7
+ **	je	.L12
+ **	vmovdqu	-32\(%rax,%rdx\), %ymm7
+ **	vmovdqu	-64\(%rax,%rdx\), %ymm6
+ **	vmovdqu	-96\(%rax,%rdx\), %ymm5
+ **	vmovdqu	-128\(%rax,%rdx\), %ymm4
+ **.L8:
+ **	vmovdqu	\(%rax\), %ymm3
+ **	addq	\$-128, %rsi
+ **	subq	\$-128, %rcx
+ **	subq	\$-128, %rax
+ **	vmovdqu	-96\(%rax\), %ymm2
+ **	vmovdqu	-64\(%rax\), %ymm1
+ **	vmovdqu	-32\(%rax\), %ymm0
+ **	vmovdqu	%ymm3, -128\(%rcx\)
+ **	vmovdqu	%ymm2, -96\(%rcx\)
+ **	vmovdqu	%ymm1, -64\(%rcx\)
+ **	vmovdqu	%ymm0, -32\(%rcx\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L8
+ **	vmovdqu	%ymm7, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm6, -64\(%rdi,%rdx\)
+ **	vmovdqu	%ymm5, -96\(%rdi,%rdx\)
+ **	vmovdqu	%ymm4, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	vmovdqu	\(%rax\), %ymm3
+ **	vmovdqu	32\(%rax\), %ymm2
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	vmovdqu	64\(%rax\), %ymm1
+ **	vmovdqu	96\(%rax\), %ymm0
+ **	addq	%rdx, %rax
+ **.L9:
+ **	vmovdqu	-32\(%rax\), %ymm7
+ **	vmovdqu	-64\(%rax\), %ymm6
+ **	addq	\$-128, %rsi
+ **	addq	\$-128, %rcx
+ **	vmovdqu	-96\(%rax\), %ymm5
+ **	vmovdqu	-128\(%rax\), %ymm4
+ **	addq	\$-128, %rax
+ **	vmovdqu	%ymm7, 96\(%rcx\)
+ **	vmovdqu	%ymm6, 64\(%rcx\)
+ **	vmovdqu	%ymm5, 32\(%rcx\)
+ **	vmovdqu	%ymm4, \(%rcx\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L9
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, 64\(%rdi\)
+ **	vmovdqu	%ymm0, 96\(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	vmovdqu	\(%rsi\), %ymm7
+ **	vmovdqu	32\(%rsi\), %ymm6
+ **	vmovdqu	64\(%rsi\), %ymm5
+ **	vmovdqu	96\(%rsi\), %ymm4
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm3
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm2
+ **	vmovdqu	-96\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-128\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm7, \(%rdi\)
+ **	vmovdqu	%ymm6, 32\(%rdi\)
+ **	vmovdqu	%ymm5, 64\(%rdi\)
+ **	vmovdqu	%ymm4, 96\(%rdi\)
+ **	vmovdqu	%ymm3, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm2, -64\(%rdi,%rdx\)
+ **	vmovdqu	%ymm1, -96\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_ymm
+ #include "builtin-memmove-4a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-4c.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-4c.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-4c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-4c.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,141 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mmove-max=512 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_zmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$32, %rdx
+ **	ja	.L16
+ **.L14:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$64, %rdx
+ **	jb	.L6
+ **	cmpq	\$128, %rdx
+ **	ja	.L5
+ **	vmovdqu64	\(%rsi\), %zmm1
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm1, \(%rdi\)
+ **	vmovdqu64	%zmm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	cmpq	\$512, %rdx
+ **	jbe	.L17
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L9
+ **	je	.L14
+ **	vmovdqu64	-64\(%rax,%rdx\), %zmm7
+ **	vmovdqu64	-128\(%rax,%rdx\), %zmm6
+ **	vmovdqu64	-192\(%rax,%rdx\), %zmm5
+ **	vmovdqu64	-256\(%rax,%rdx\), %zmm4
+ **.L10:
+ **	vmovdqu64	\(%rax\), %zmm3
+ **	addq	\$256, %rax
+ **	vmovdqu64	-192\(%rax\), %zmm2
+ **	subq	\$256, %rsi
+ **	vmovdqu64	-128\(%rax\), %zmm1
+ **	vmovdqu64	-64\(%rax\), %zmm0
+ **	addq	\$256, %rcx
+ **	vmovdqu64	%zmm3, -256\(%rcx\)
+ **	vmovdqu64	%zmm2, -192\(%rcx\)
+ **	vmovdqu64	%zmm1, -128\(%rcx\)
+ **	vmovdqu64	%zmm0, -64\(%rcx\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L10
+ **	vmovdqu64	%zmm7, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm6, -128\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm5, -192\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm4, -256\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L17:
+ **	cmpq	\$256, %rdx
+ **	jb	.L8
+ **	vmovdqu64	\(%rsi\), %zmm7
+ **	vmovdqu64	64\(%rsi\), %zmm6
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm3
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm2
+ **	vmovdqu64	128\(%rsi\), %zmm5
+ **	vmovdqu64	192\(%rsi\), %zmm4
+ **	vmovdqu64	-192\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-256\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm7, \(%rdi\)
+ **	vmovdqu64	%zmm6, 64\(%rdi\)
+ **	vmovdqu64	%zmm5, 128\(%rdi\)
+ **	vmovdqu64	%zmm4, 192\(%rdi\)
+ **	vmovdqu64	%zmm3, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm2, -128\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm1, -192\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -256\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	vmovdqu64	\(%rsi\), %zmm3
+ **	vmovdqu64	64\(%rsi\), %zmm2
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm3, \(%rdi\)
+ **	vmovdqu64	%zmm2, 64\(%rdi\)
+ **	vmovdqu64	%zmm1, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	vmovdqu64	\(%rax\), %zmm3
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	vmovdqu64	64\(%rax\), %zmm2
+ **	vmovdqu64	128\(%rax\), %zmm1
+ **	vmovdqu64	192\(%rax\), %zmm0
+ **	addq	%rdx, %rax
+ **.L11:
+ **	vmovdqu64	-64\(%rax\), %zmm7
+ **	subq	\$256, %rax
+ **	vmovdqu64	128\(%rax\), %zmm6
+ **	subq	\$256, %rsi
+ **	vmovdqu64	64\(%rax\), %zmm5
+ **	vmovdqu64	\(%rax\), %zmm4
+ **	subq	\$256, %rcx
+ **	vmovdqu64	%zmm7, 192\(%rcx\)
+ **	vmovdqu64	%zmm6, 128\(%rcx\)
+ **	vmovdqu64	%zmm5, 64\(%rcx\)
+ **	vmovdqu64	%zmm4, \(%rcx\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L11
+ **	vmovdqu64	%zmm3, \(%rdi\)
+ **	vmovdqu64	%zmm2, 64\(%rdi\)
+ **	vmovdqu64	%zmm1, 128\(%rdi\)
+ **	vmovdqu64	%zmm0, 192\(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_zmm
+ #include "builtin-memmove-4a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-5a.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-5a.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-5a.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-5a.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,109 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_xmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$67, %rdx
+ **	ja	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$128, %rdx
+ **	jbe	.L13
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L6
+ **	je	.L1
+ **	movdqu	-16\(%rax,%rdx\), %xmm7
+ **	movdqu	-32\(%rax,%rdx\), %xmm6
+ **	movdqu	-48\(%rax,%rdx\), %xmm5
+ **	movdqu	-64\(%rax,%rdx\), %xmm4
+ **.L7:
+ **	movdqu	\(%rax\), %xmm3
+ **	subq	\$64, %rsi
+ **	addq	\$64, %rcx
+ **	addq	\$64, %rax
+ **	movdqu	-48\(%rax\), %xmm2
+ **	movdqu	-32\(%rax\), %xmm1
+ **	movdqu	-16\(%rax\), %xmm0
+ **	movups	%xmm3, -64\(%rcx\)
+ **	movups	%xmm2, -48\(%rcx\)
+ **	movups	%xmm1, -32\(%rcx\)
+ **	movups	%xmm0, -16\(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L7
+ **	movups	%xmm7, -16\(%rdi,%rdx\)
+ **	movups	%xmm6, -32\(%rdi,%rdx\)
+ **	movups	%xmm5, -48\(%rdi,%rdx\)
+ **	movups	%xmm4, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	movdqu	32\(%rsi\), %xmm5
+ **	movdqu	48\(%rsi\), %xmm4
+ **	movdqu	-16\(%rsi,%rdx\), %xmm3
+ **	movdqu	-32\(%rsi,%rdx\), %xmm2
+ **	movdqu	-48\(%rsi,%rdx\), %xmm1
+ **	movdqu	-64\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **	movups	%xmm3, -16\(%rdi,%rdx\)
+ **	movups	%xmm2, -32\(%rdi,%rdx\)
+ **	movups	%xmm1, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movdqu	\(%rax\), %xmm3
+ **	movdqu	16\(%rax\), %xmm2
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	movdqu	32\(%rax\), %xmm1
+ **	movdqu	48\(%rax\), %xmm0
+ **	addq	%rdx, %rax
+ **.L8:
+ **	movdqu	-16\(%rax\), %xmm7
+ **	movdqu	-32\(%rax\), %xmm6
+ **	subq	\$64, %rsi
+ **	subq	\$64, %rcx
+ **	movdqu	-48\(%rax\), %xmm5
+ **	movdqu	-64\(%rax\), %xmm4
+ **	subq	\$64, %rax
+ **	movups	%xmm7, 48\(%rcx\)
+ **	movups	%xmm6, 32\(%rcx\)
+ **	movups	%xmm5, 16\(%rcx\)
+ **	movups	%xmm4, \(%rcx\)
+ **	cmpq	\$64, %rsi
+ **	ja	.L8
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #ifndef gcc_memmove
+ #define gcc_memmove gcc_memmove_xmm
+ #endif
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n > 67)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-5b.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-5b.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-5b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-5b.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,120 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx512f -march=x86-64-v3 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_ymm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$67, %rdx
+ **	ja	.L14
+ **.L12:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$256, %rdx
+ **	jbe	.L15
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L7
+ **	je	.L12
+ **	vmovdqu	-32\(%rax,%rdx\), %ymm7
+ **	vmovdqu	-64\(%rax,%rdx\), %ymm6
+ **	vmovdqu	-96\(%rax,%rdx\), %ymm5
+ **	vmovdqu	-128\(%rax,%rdx\), %ymm4
+ **.L8:
+ **	vmovdqu	\(%rax\), %ymm3
+ **	addq	\$-128, %rsi
+ **	subq	\$-128, %rcx
+ **	subq	\$-128, %rax
+ **	vmovdqu	-96\(%rax\), %ymm2
+ **	vmovdqu	-64\(%rax\), %ymm1
+ **	vmovdqu	-32\(%rax\), %ymm0
+ **	vmovdqu	%ymm3, -128\(%rcx\)
+ **	vmovdqu	%ymm2, -96\(%rcx\)
+ **	vmovdqu	%ymm1, -64\(%rcx\)
+ **	vmovdqu	%ymm0, -32\(%rcx\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L8
+ **	vmovdqu	%ymm7, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm6, -64\(%rdi,%rdx\)
+ **	vmovdqu	%ymm5, -96\(%rdi,%rdx\)
+ **	vmovdqu	%ymm4, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	cmpq	\$128, %rdx
+ **	jb	.L6
+ **	vmovdqu	\(%rsi\), %ymm7
+ **	vmovdqu	32\(%rsi\), %ymm6
+ **	vmovdqu	64\(%rsi\), %ymm5
+ **	vmovdqu	96\(%rsi\), %ymm4
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm3
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm2
+ **	vmovdqu	-96\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-128\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm7, \(%rdi\)
+ **	vmovdqu	%ymm6, 32\(%rdi\)
+ **	vmovdqu	%ymm5, 64\(%rdi\)
+ **	vmovdqu	%ymm4, 96\(%rdi\)
+ **	vmovdqu	%ymm3, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm2, -64\(%rdi,%rdx\)
+ **	vmovdqu	%ymm1, -96\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	vmovdqu	\(%rsi\), %ymm3
+ **	vmovdqu	32\(%rsi\), %ymm2
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm1
+ **	vmovdqu	-64\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	vmovdqu	\(%rax\), %ymm3
+ **	vmovdqu	32\(%rax\), %ymm2
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	vmovdqu	64\(%rax\), %ymm1
+ **	vmovdqu	96\(%rax\), %ymm0
+ **	addq	%rdx, %rax
+ **.L9:
+ **	vmovdqu	-32\(%rax\), %ymm7
+ **	vmovdqu	-64\(%rax\), %ymm6
+ **	addq	\$-128, %rsi
+ **	addq	\$-128, %rcx
+ **	vmovdqu	-96\(%rax\), %ymm5
+ **	vmovdqu	-128\(%rax\), %ymm4
+ **	addq	\$-128, %rax
+ **	vmovdqu	%ymm7, 96\(%rcx\)
+ **	vmovdqu	%ymm6, 64\(%rcx\)
+ **	vmovdqu	%ymm5, 32\(%rcx\)
+ **	vmovdqu	%ymm4, \(%rcx\)
+ **	cmpq	\$128, %rsi
+ **	ja	.L9
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, 64\(%rdi\)
+ **	vmovdqu	%ymm0, 96\(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **.LFE0:
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_ymm
+ #include "builtin-memmove-5a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-5c.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-5c.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-5c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-5c.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,130 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -mmove-max=512 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove_zmm:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$67, %rdx
+ **	ja	.L14
+ **.L12:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movq	%rdi, %rcx
+ **	movq	%rsi, %rax
+ **	cmpq	\$128, %rdx
+ **	jbe	.L15
+ **	cmpq	\$512, %rdx
+ **	ja	.L5
+ **	cmpq	\$256, %rdx
+ **	jnb	.L16
+ **	vmovdqu64	\(%rsi\), %zmm3
+ **	vmovdqu64	64\(%rsi\), %zmm2
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm3, \(%rdi\)
+ **	vmovdqu64	%zmm2, 64\(%rdi\)
+ **	vmovdqu64	%zmm1, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -128\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	vmovdqu64	\(%rsi\), %zmm1
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm1, \(%rdi\)
+ **	vmovdqu64	%zmm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movq	%rdx, %rsi
+ **	cmpq	%rdi, %rax
+ **	jb	.L7
+ **	je	.L12
+ **	vmovdqu64	-64\(%rax,%rdx\), %zmm7
+ **	vmovdqu64	-128\(%rax,%rdx\), %zmm6
+ **	vmovdqu64	-192\(%rax,%rdx\), %zmm5
+ **	vmovdqu64	-256\(%rax,%rdx\), %zmm4
+ **.L8:
+ **	vmovdqu64	\(%rax\), %zmm3
+ **	addq	\$256, %rax
+ **	vmovdqu64	-192\(%rax\), %zmm2
+ **	subq	\$256, %rsi
+ **	vmovdqu64	-128\(%rax\), %zmm1
+ **	vmovdqu64	-64\(%rax\), %zmm0
+ **	addq	\$256, %rcx
+ **	vmovdqu64	%zmm3, -256\(%rcx\)
+ **	vmovdqu64	%zmm2, -192\(%rcx\)
+ **	vmovdqu64	%zmm1, -128\(%rcx\)
+ **	vmovdqu64	%zmm0, -64\(%rcx\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L8
+ **	vmovdqu64	%zmm7, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm6, -128\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm5, -192\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm4, -256\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	vmovdqu64	\(%rax\), %zmm3
+ **	leaq	\(%rdi,%rdx\), %rcx
+ **	vmovdqu64	64\(%rax\), %zmm2
+ **	vmovdqu64	128\(%rax\), %zmm1
+ **	vmovdqu64	192\(%rax\), %zmm0
+ **	addq	%rdx, %rax
+ **.L9:
+ **	vmovdqu64	-64\(%rax\), %zmm7
+ **	subq	\$256, %rax
+ **	vmovdqu64	128\(%rax\), %zmm6
+ **	subq	\$256, %rsi
+ **	vmovdqu64	64\(%rax\), %zmm5
+ **	vmovdqu64	\(%rax\), %zmm4
+ **	subq	\$256, %rcx
+ **	vmovdqu64	%zmm7, 192\(%rcx\)
+ **	vmovdqu64	%zmm6, 128\(%rcx\)
+ **	vmovdqu64	%zmm5, 64\(%rcx\)
+ **	vmovdqu64	%zmm4, \(%rcx\)
+ **	cmpq	\$256, %rsi
+ **	ja	.L9
+ **	vmovdqu64	%zmm3, \(%rdi\)
+ **	vmovdqu64	%zmm2, 64\(%rdi\)
+ **	vmovdqu64	%zmm1, 128\(%rdi\)
+ **	vmovdqu64	%zmm0, 192\(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	vmovdqu64	\(%rsi\), %zmm7
+ **	vmovdqu64	64\(%rsi\), %zmm6
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm3
+ **	vmovdqu64	-128\(%rsi,%rdx\), %zmm2
+ **	vmovdqu64	128\(%rsi\), %zmm5
+ **	vmovdqu64	192\(%rsi\), %zmm4
+ **	vmovdqu64	-192\(%rsi,%rdx\), %zmm1
+ **	vmovdqu64	-256\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm7, \(%rdi\)
+ **	vmovdqu64	%zmm6, 64\(%rdi\)
+ **	vmovdqu64	%zmm5, 128\(%rdi\)
+ **	vmovdqu64	%zmm4, 192\(%rdi\)
+ **	vmovdqu64	%zmm3, -64\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm2, -128\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm1, -192\(%rdi,%rdx\)
+ **	vmovdqu64	%zmm0, -256\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #define gcc_memmove gcc_memmove_zmm
+ #include "builtin-memmove-5a.c"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-6.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-6.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-6.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,52 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$7, %rdx
+ **	jbe	.L8
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	cmpl	\$4, %edx
+ **	jnb	.L9
+ **	cmpl	\$1, %edx
+ **	ja	.L5
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 8)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-7.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-7.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-7.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$3, %rdx
+ **	jbe	.L7
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	cmpl	\$2, %edx
+ **	jnb	.L8
+ **	cmpl	\$1, %edx
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 4)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-8.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-8.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-8.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$33, %rdx
+ **	jbe	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	cmpl	\$16, %edx
+ **	jnb	.L13
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	cmpl	\$32, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	addq	%rdx, %rsi
+ **	movdqu	-16\(%rsi\), %xmm1
+ **	movdqu	-32\(%rsi\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 34)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-9.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-9.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/builtin-memmove-9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/builtin-memmove-9.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,63 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-avx -msse2 -mtune=generic -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memmove:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$15, %rdx
+ **	jbe	.L9
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	cmpl	\$8, %edx
+ **	jnb	.L10
+ **	cmpl	\$4, %edx
+ **	jnb	.L5
+ **	cmpl	\$1, %edx
+ **	ja	.L6
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memmove (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 16)
+     __builtin_memmove (a, b, n);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/pr122390-1.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/pr122390-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/pr122390-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/pr122390-1.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,26 ----
+ /* PR target/122390 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ int f (int);
+ int g (int);
+ 
+ int f1 (unsigned a, unsigned b)
+ {
+   unsigned t = a < b;
+   int tt = a + b + t;
+   if (tt < 0)
+     return f(tt);
+   return g(tt);
+ }
+ 
+ int f2 (unsigned a, unsigned b)
+ {
+   unsigned t = a < b;
+   int tt = a - b - t;
+   if (tt < 0)
+     return f(tt);
+   return g(tt);
+ }
+ 
+ /* { dg-final { scan-assembler-not "test" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/pr122390.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/pr122390.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/pr122390.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/pr122390.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,44 ----
+ /* PR target/122390 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ int f (int);
+ int g (int);
+ 
+ int f1 (unsigned a, unsigned b)
+ {
+   unsigned t = a < b;
+   int tt = a + t;
+   if (tt == 0)
+     return f(tt);
+   return g(tt);
+ }
+ 
+ int f2 (unsigned a, unsigned b)
+ {
+   unsigned t = a <= b;
+   int tt = a + t;
+   if (tt < 0)
+     return f(tt);
+   return g(tt);
+ }
+ 
+ int f3 (unsigned a, unsigned b)
+ {
+   unsigned t = a > b;
+   int tt = a - t;
+   if (tt == 0)
+     return f(tt);
+   return g(tt);
+ }
+ 
+ int f4 (unsigned a, unsigned b)
+ {
+   unsigned t = a >= b;
+   int tt = a - t;
+   if (tt < 0)
+     return f(tt);
+   return g(tt);
+ }
+ 
+ /* { dg-final { scan-assembler-not "test" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/pr122534.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/pr122534.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/pr122534.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/pr122534.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,15 ----
+ /* PR target/122534 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+ int test (unsigned long p[6], int index)
+ {
+   __SIZE_TYPE__ i;
+ 
+   for (i = 0; i < 6; i++)
+     if (p[i] & (1UL << index))
+       return i;
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-not "and" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/i386/shrink_wrap_1.c gcc-16-20251109/gcc/testsuite/gcc.target/i386/shrink_wrap_1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/i386/shrink_wrap_1.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/i386/shrink_wrap_1.c	Sun Nov  9 22:33:26 2025
***************
*** 1,4 ****
! /* { dg-do compile { target { ! ia32 } } } */
  /* { dg-options "-O2 -mmemset-strategy=rep_8byte:-1:align -fdump-rtl-pro_and_epilogue -fno-stack-protector" } */
  
  enum machine_mode
--- 1,4 ----
! /* { dg-do compile { target lp64 } } */
  /* { dg-options "-O2 -mmemset-strategy=rep_8byte:-1:align -fdump-rtl-pro_and_epilogue -fno-stack-protector" } */
  
  enum machine_mode
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3" } */
+ /* { dg-final { scan-assembler-not "\tlu12i.w" } } */
+ /* { dg-final { scan-assembler-not "\tori" } } */
+ /* { dg-final { scan-assembler-not "\tlu52i.d" } } */
+ /* { dg-final { scan-assembler-not "\tand" } } */
+ /* { dg-final { scan-assembler "\tbstrpick.d" } } */
+ /* { dg-final { scan-assembler "\tbstrins.d" } } */
+ 
+ long
+ test (long a)
+ {
+   return a & 0x3fffffffefffffff;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3 -fno-strict-aliasing" } */
+ 
+ int
+ test (double a)
+ {
+   int z;
+ 
+   *((double *)&z) = a;
+   return z;
+ }
+ 
+ /* { dg-final { scan-assembler-not "slli\\.w" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/imm-load.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/imm-load.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/imm-load.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/imm-load.c	Sun Nov  9 22:33:26 2025
*************** test (void)
*** 7,11 ****
  {
    return 0x1234567890abcdef;
  }
! /* { dg-final { scan-rtl-dump-times "scanning new insn with uid" 6 "split1" } } */
  
--- 7,11 ----
  {
    return 0x1234567890abcdef;
  }
! /* { dg-final { scan-rtl-dump-times "scanning new insn with uid" 4 "split1" } } */
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,44 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx -ftree-vectorize" } */
+ 
+ #include <lasxintrin.h>
+ 
+ #define TEST_FUNC(imm)                                                        \
+   __m256i                                                                     \
+   test_##imm (__m256i op0, __m256i op1)                                       \
+   {                                                                           \
+     return __lasx_xvpermi_q (op0, op1, imm);                                  \
+   }
+ 
+ TEST_FUNC (0x00)
+ /* { dg-final { scan-assembler-not "test_0x00:.*\txvld.*xvld.*-test_0x00"} } */
+ /* { dg-final { scan-assembler-times "test_0x00:.*\txvpermi\\.d.*-test_0x00" 1 } } */
+ 
+ TEST_FUNC (0x01)
+ /* { dg-final { scan-assembler-not "test_0x01:.*\txvld.*xvld.*-test_0x01"} } */
+ /* { dg-final { scan-assembler-times "test_0x01:.*\txvpermi\\.d.*-test_0x01" 1 } } */
+ 
+ TEST_FUNC (0x10)
+ /* { dg-final { scan-assembler-not "test_0x10:.*\txvld.*xvld.*-test_0x10"} } */
+ /* { dg-final { scan-assembler-not "test_0x10:.*\txvpermi.*-test_0x10"} } */
+ 
+ TEST_FUNC (0x11)
+ /* { dg-final { scan-assembler-not "test_0x11:.*\txvld.*xvld.*-test_0x11"} } */
+ /* { dg-final { scan-assembler-times "test_0x11:.*\txvpermi\\.d.*-test_0x11" 1 } } */
+ 
+ TEST_FUNC (0x22)
+ /* { dg-final { scan-assembler-not "test_0x22:.*\txvld.*xvld.*-test_0x22"} } */
+ /* { dg-final { scan-assembler-times "test_0x22:.*\txvpermi\\.d.*-test_0x22" 1 } } */
+ 
+ TEST_FUNC (0x23)
+ /* { dg-final { scan-assembler-not "test_0x23:.*\txvld.*xvld.*-test_0x23"} } */
+ /* { dg-final { scan-assembler-times "test_0x23:.*\txvpermi\\.d.*-test_0x23" 1 } } */
+ 
+ TEST_FUNC (0x32)
+ /* { dg-final { scan-assembler-not "test_0x32:.*\txvld.*xvld.*-test_0x32"} } */
+ /* { dg-final { scan-assembler-not "test_0x32:.*\txvpermi.*-test_0x32"} } */
+ 
+ TEST_FUNC (0x33)
+ /* { dg-final { scan-assembler-not "test_0x33:.*\txvld.*xvld.*-test_0x33"} } */
+ /* { dg-final { scan-assembler-times "test_0x33:.*\txvpermi\\.d.*-test_0x33" 1 } } */
+ 
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3" } */
+ /* { dg-final { scan-assembler-not "bstrpick" } } */
+ /* { dg-final { scan-assembler "ld\\.wu" } } */
+ 
+ struct st
+ {
+   char const *name;
+ };
+ struct fst
+ {
+   struct st *groups;
+ };
+ 
+ struct fst *pfunc (int);
+ 
+ const char *
+ test (int pc, unsigned group)
+ {
+   struct fst *pci = pfunc (pc);
+ 
+   return pci->groups[group].name;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3 -mno-lsx" } */
+ /* { dg-final { scan-assembler-not "stptr\.d" } } */
+ /* { dg-final { scan-assembler-not "fld\.d" } } */
+ /* { dg-final { scan-assembler-not "fst\.d" } } */
+ /* { dg-final { scan-assembler-not "ldptr\.d" } } */
+ /* { dg-final { scan-assembler "movgr2fr\.d" } } */
+ /* { dg-final { scan-assembler "movfr2gr\.d" } } */
+ 
+ typedef double vec __attribute__ ((vector_size(16)));
+ 
+ vec
+ foo (vec x, double a)
+ {
+   x[0] -= a;
+   return x;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/mulh_wu.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/mulh_wu.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/mulh_wu.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/mulh_wu.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "\tmulh.wu" } } */
+ /* { dg-final { scan-assembler-not "\tlu32i.d" } } */
+ 
+ unsigned int
+ test (unsigned int *a)
+ {
+   return *a / 60;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler "sltui" } } */
+ 
+ union any {
+   int any_i32;
+ };
+ 
+ extern char *opname;
+ extern void test1 (int, char *);
+ extern int iterms;
+ 
+ void
+ test (union any cv)
+ {
+   int i, on;
+   int ix = cv.any_i32;
+   for (i = 1; i < iterms; i++)
+     {
+       on = (ix == 0 || ix == 1) ? 0 : 1;
+       if (*opname == '!')
+ 	{
+ 	  on = !on;
+ 	  ++opname;
+ 	}
+       test1 (on, opname);
+     }
+ }
+ 
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler-not "slli.w\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,0" } } */
+ 
+ extern int items;
+ extern int gv_fetchmeth (int);
+ int
+ Perl_gv_fetchmeth (int level)
+ {
+   int gv;
+   while (items--)
+     gv = gv_fetchmeth ((level >= 0) ? level + 1 : level - 1);
+ 
+   return gv;
+ }
+ 
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler-not "slli.w" } } */
+ 
+ typedef struct xpvav XPVAV;
+ struct xpvav
+ {
+   long int xav_fill;
+   long int xav_max;
+ };
+ typedef struct av AV;
+ struct av
+ {
+   XPVAV *sv_any;
+   unsigned int sv_refcnt;
+   unsigned int sv_flags;
+ };
+ void Perl_av_extend (AV *ar, int key);
+ void
+ Perl_av_unshift (AV *av, int num)
+ {
+   int i;
+   int slide;
+ 
+   if (num)
+     {
+       i = ((XPVAV *)(av)->sv_any)->xav_fill;
+ 
+       slide = i > 0 ? i : 0;
+       num += slide;
+       Perl_av_extend (av, i + num);
+ 
+       ((XPVAV *)(av)->sv_any)->xav_max -= slide;
+     }
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler-times "addi.w\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,1\t" 1 } } */
+ 
+ extern unsigned short d;
+ int
+ test (int a, unsigned short b)
+ {
+   if (a > 0)
+     {
+       d = 1;
+       if (b > d)
+        return 10;
+     }
+ 
+   return 50;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/spill-less.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/spill-less.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/spill-less.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/spill-less.c	Sun Nov  9 22:33:26 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3 -fno-strict-aliasing" } */
+ 
+ double
+ convert (long long in)
+ {
+   double f;
+   *((long long *)&f) = in;
+   return f;
+ }
+ 
+ /* { dg-final { scan-assembler-not "st\\.d" } } */
+ /* { dg-final { scan-assembler-not "fld\\.d" } } */
+ /* { dg-final { scan-assembler "movgr2fr\\.d" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c	Sun Nov  9 22:33:26 2025
*************** test_vec_unpacks_float_hi_lo_v8si (void)
*** 55,61 ****
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8si:.*\tvext2xv\\.d\\.w.*-test_vec_unpacks_hi_lo_v8si" } } */
! /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8si:.*\txvpermi\\.q.*-test_vec_unpacks_hi_lo_v8si" } } */
  void
  test_vec_unpacks_hi_lo_v8si (void)
  {
--- 55,62 ----
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8si:.*\tvext2xv\\.d\\.w.*-test_vec_unpacks_hi_lo_v8si" } } */
! /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8si:.*\txvpermi\\.d.*-test_vec_unpacks_hi_lo_v8si" } } */
! /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v8si:.*\txvpermi\\.q.*-test_vec_unpacks_hi_lo_v8si" } } */
  void
  test_vec_unpacks_hi_lo_v8si (void)
  {
*************** test_vec_unpacks_hi_lo_v8si (void)
*** 64,70 ****
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v16hi:.*\tvext2xv\\.w\\.h.*-test_vec_unpacks_hi_lo_v16hi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v16hi:.*\txvpermi\\.q.*-test_vec_unpacks_hi_lo_v16hi" } } */
  void
  test_vec_unpacks_hi_lo_v16hi (void)
  {
--- 65,72 ----
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v16hi:.*\tvext2xv\\.w\\.h.*-test_vec_unpacks_hi_lo_v16hi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v16hi:.*\txvpermi\\.d.*-test_vec_unpacks_hi_lo_v16hi" } } */
! /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v16hi:.*\txvpermi\\.q.*-test_vec_unpacks_hi_lo_v16hi" } } */
  void
  test_vec_unpacks_hi_lo_v16hi (void)
  {
*************** test_vec_unpacks_hi_lo_v16hi (void)
*** 73,79 ****
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v32qi:.*\tvext2xv\\.h\\.b.*-test_vec_unpacks_hi_lo_v32qi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v32qi:.*\txvpermi\\.q.*-test_vec_unpacks_hi_lo_v32qi" } } */
  void
  test_vec_unpacks_hi_lo_v32qi (void)
  {
--- 75,82 ----
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v32qi:.*\tvext2xv\\.h\\.b.*-test_vec_unpacks_hi_lo_v32qi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v32qi:.*\txvpermi\\.d.*-test_vec_unpacks_hi_lo_v32qi" } } */
! /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v32qi:.*\txvpermi\\.q.*-test_vec_unpacks_hi_lo_v32qi" } } */
  void
  test_vec_unpacks_hi_lo_v32qi (void)
  {
*************** test_vec_unpacks_hi_lo_v8sf (void)
*** 91,97 ****
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v8si:.*\tvext2xv\\.du\\.wu.*-test_vec_unpacku_hi_lo_v8si" } } */
! /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v8si:.*\txvpermi\\.q.*-test_vec_unpacku_hi_lo_v8si" } } */
  void
  test_vec_unpacku_hi_lo_v8si (void)
  {
--- 94,101 ----
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v8si:.*\tvext2xv\\.du\\.wu.*-test_vec_unpacku_hi_lo_v8si" } } */
! /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v8si:.*\txvpermi\\.d.*-test_vec_unpacku_hi_lo_v8si" } } */
! /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v8si:.*\txvpermi\\.q.*-test_vec_unpacku_hi_lo_v8si" } } */
  void
  test_vec_unpacku_hi_lo_v8si (void)
  {
*************** test_vec_unpacku_hi_lo_v8si (void)
*** 100,106 ****
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v16hi:.*\tvext2xv\\.wu\\.hu.*-test_vec_unpacku_hi_lo_v16hi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v16hi:.*\txvpermi\\.q.*-test_vec_unpacku_hi_lo_v16hi" } } */
  void
  test_vec_unpacku_hi_lo_v16hi (void)
  {
--- 104,111 ----
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v16hi:.*\tvext2xv\\.wu\\.hu.*-test_vec_unpacku_hi_lo_v16hi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v16hi:.*\txvpermi\\.d.*-test_vec_unpacku_hi_lo_v16hi" } } */
! /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v16hi:.*\txvpermi\\.q.*-test_vec_unpacku_hi_lo_v16hi" } } */
  void
  test_vec_unpacku_hi_lo_v16hi (void)
  {
*************** test_vec_unpacku_hi_lo_v16hi (void)
*** 109,115 ****
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v32qi:.*\tvext2xv\\.hu\\.bu.*-test_vec_unpacku_hi_lo_v32qi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v32qi:.*\txvpermi\\.q.*-test_vec_unpacku_hi_lo_v32qi" } } */
  void
  test_vec_unpacku_hi_lo_v32qi (void)
  {
--- 114,121 ----
  }
  
  /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v32qi:.*\tvext2xv\\.hu\\.bu.*-test_vec_unpacku_hi_lo_v32qi" } } */
! /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v32qi:.*\txvpermi\\.d.*-test_vec_unpacku_hi_lo_v32qi" } } */
! /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v32qi:.*\txvpermi\\.q.*-test_vec_unpacku_hi_lo_v32qi" } } */
  void
  test_vec_unpacku_hi_lo_v32qi (void)
  {
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c	Sun Nov  9 22:33:26 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -fno-fp-int-builtin-inexact -mlasx" } */
  
  #include "vect-frint.c"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -fno-fp-int-builtin-inexact -mlasx -mcmodel=normal" } */
  
  #include "vect-frint.c"
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c	Sun Nov  9 22:33:26 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mlsx -fno-fp-int-builtin-inexact" } */
  
  #include "vect-frint-scalar.c"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mlsx -fno-fp-int-builtin-inexact -mcmodel=normal" } */
  
  #include "vect-frint-scalar.c"
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c	Sun Nov  9 22:33:26 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mlsx -ffp-int-builtin-inexact" } */
  
  #define test(func, suffix) \
  __typeof__ (1.##suffix) \
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mlsx -ffp-int-builtin-inexact -mcmodel=normal" } */
  
  #define test(func, suffix) \
  __typeof__ (1.##suffix) \
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-frint.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-frint.c	Sun Nov  9 22:33:26 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -ffp-int-builtin-inexact -mlasx" } */
  
  float out_x[8];
  double out_y[4];
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -ffp-int-builtin-inexact -mlasx -mcmodel=normal" } */
  
  float out_x[8];
  double out_y[4];
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c	Sun Nov  9 22:33:26 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -fno-fp-int-builtin-inexact -mlasx" } */
  
  #include "vect-ftint.c"
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -fno-fp-int-builtin-inexact -mlasx -mcmodel=normal" } */
  
  #include "vect-ftint.c"
  
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-ftint.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-ftint.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vect-ftint.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vect-ftint.c	Sun Nov  9 22:33:26 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -ffp-int-builtin-inexact -mlasx" } */
  
  int out_x[8];
  long out_y[4];
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno -ffp-int-builtin-inexact -mlasx -mcmodel=normal" } */
  
  int out_x[8];
  long out_y[4];
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c	Sun Nov  2 22:33:20 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c	Sun Nov  9 22:33:26 2025
*************** __lasx_vext2xv_du_bu (v32i8 _1)
*** 3301,3307 ****
  v32i8
  __lasx_xvpermi_q (v32i8 _1, v32i8 _2)
  {
!   return __builtin_lasx_xvpermi_q (_1, _2, 1);
  }
  v4i64
  __lasx_xvpermi_d (v4i64 _1)
--- 3301,3307 ----
  v32i8
  __lasx_xvpermi_q (v32i8 _1, v32i8 _2)
  {
!   return __builtin_lasx_xvpermi_q (_1, _2, 0x20);
  }
  v4i64
  __lasx_xvpermi_d (v4i64 _1)
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256-result.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256-result.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256-result.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256-result.c	Sun Nov  9 22:33:27 2025
***************
*** 0 ****
--- 1,68 ----
+ /* { dg-options "-mabi=lp64d -O2 -mlasx -w -fno-strict-aliasing" } */
+ 
+ #include "../simd_correctness_check.h"
+ #include <lasxintrin.h>
+ 
+ int
+ main ()
+ {
+   __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+   __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+   __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+ 
+   __m256i __m256i_op0, __m256i_op1, __m256i_op2, __m256i_out, __m256i_result;
+   __m256 __m256_op0, __m256_op1, __m256_op2, __m256_out, __m256_result;
+   __m256d __m256d_op0, __m256d_op1, __m256d_op2, __m256d_out, __m256d_result;
+ 
+   //__m128_op0={1,2,3,4},__m128_op1={5,6,7,8};
+   *((int *)&__m128_op0[3]) = 0x40800000;
+   *((int *)&__m128_op0[2]) = 0x40400000;
+   *((int *)&__m128_op0[1]) = 0x40000000;
+   *((int *)&__m128_op0[0]) = 0x3f800000;
+   *((int *)&__m128_op1[3]) = 0x41000000;
+   *((int *)&__m128_op1[2]) = 0x40e00000;
+   *((int *)&__m128_op1[1]) = 0x40c00000;
+   *((int *)&__m128_op1[0]) = 0x40a00000;
+   *((int *)&__m256_result[7]) = 0x41000000;
+   *((int *)&__m256_result[6]) = 0x40e00000;
+   *((int *)&__m256_result[5]) = 0x40c00000;
+   *((int *)&__m256_result[4]) = 0x40a00000;
+   *((int *)&__m256_result[3]) = 0x40800000;
+   *((int *)&__m256_result[2]) = 0x40400000;
+   *((int *)&__m256_result[1]) = 0x40000000;
+   *((int *)&__m256_result[0]) = 0x3f800000;
+   __m256_out = __lasx_concat_128_s (__m128_op0, __m128_op1);
+   ASSERTEQ_32 (__LINE__, __m256_result, __m256_out);
+   __m256_out = __lasx_cast_128_s (__m128_op0);
+   ASSERTEQ_32 (__LINE__, __m256_out, __m128_op0);
+ 
+   //__m128i_op0={1,2},__m128i_op1={3,4};
+   *((unsigned long *)&__m128i_op0[1]) = 0x2;
+   *((unsigned long *)&__m128i_op0[0]) = 0x1;
+   *((unsigned long *)&__m128i_op1[1]) = 0x4;
+   *((unsigned long *)&__m128i_op1[0]) = 0x3;
+   *((unsigned long *)&__m256i_result[3]) = 0x4;
+   *((unsigned long *)&__m256i_result[2]) = 0x3;
+   *((unsigned long *)&__m256i_result[1]) = 0x2;
+   *((unsigned long *)&__m256i_result[0]) = 0x1;
+   __m256i_out = __lasx_concat_128 (__m128i_op0, __m128i_op1);
+   ASSERTEQ_64 (__LINE__, __m256i_result, __m256i_out);
+   __m256i_out = __lasx_cast_128 (__m128i_op0);
+   ASSERTEQ_64 (__LINE__, __m256i_out, __m128i_op0);
+ 
+   //__m128d_op0={1,2},__m128i_op1={3,4};
+   *((unsigned long *)&__m128d_op0[1]) = 0x4000000000000000;
+   *((unsigned long *)&__m128d_op0[0]) = 0x3ff0000000000000;
+   *((unsigned long *)&__m128d_op1[1]) = 0x4010000000000000;
+   *((unsigned long *)&__m128d_op1[0]) = 0x4008000000000000;
+   *((unsigned long *)&__m256d_result[3]) = 0x4010000000000000;
+   *((unsigned long *)&__m256d_result[2]) = 0x4008000000000000;
+   *((unsigned long *)&__m256d_result[1]) = 0x4000000000000000;
+   *((unsigned long *)&__m256d_result[0]) = 0x3ff0000000000000;
+   __m256d_out = __lasx_concat_128_d (__m128d_op0, __m128d_op1);
+   ASSERTEQ_64 (__LINE__, __m256d_result, __m256d_out);
+   __m256d_out = __lasx_cast_128_d (__m128d_op0);
+   ASSERTEQ_64 (__LINE__, __m256d_out, __m128d_op0);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-concat-128-256.c	Sun Nov  9 22:33:27 2025
***************
*** 0 ****
--- 1,92 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-mabi=lp64d -O2 -mlasx" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <lasxintrin.h>
+ 
+ /*
+ **foo1:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,1
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r8,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x02
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256
+ foo1 (__m128 x, __m128 y)
+ {
+   return __builtin_lasx_concat_128_s (x, y);
+ }
+ 
+ /*
+ **foo2:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,1
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r8,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x02
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256d
+ foo2 (__m128d x, __m128d y)
+ {
+   return __builtin_lasx_concat_128_d (x, y);
+ }
+ 
+ /*
+ **foo3:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,1
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r8,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x02
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256i
+ foo3 (__m128i x, __m128i y)
+ {
+   return __builtin_lasx_concat_128 (x, y);
+ }
+ 
+ /*
+ **foo4:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,1
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256
+ foo4 (__m128 x)
+ {
+   return __builtin_lasx_cast_128_s (x);
+ }
+ 
+ /*
+ **foo5:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,1
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256d
+ foo5 (__m128d x)
+ {
+   return __builtin_lasx_cast_128_d (x);
+ }
+ 
+ /*
+ **foo6:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,1
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256i
+ foo6 (__m128i x)
+ {
+   return __builtin_lasx_cast_128 (x);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128-result.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128-result.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128-result.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128-result.c	Sun Nov  9 22:33:27 2025
***************
*** 0 ****
--- 1,69 ----
+ /* { dg-options "-mabi=lp64d -O2 -mlasx -w -fno-strict-aliasing" } */
+ 
+ #include "../simd_correctness_check.h"
+ #include <lasxintrin.h>
+ 
+ extern void abort (void);
+ int
+ main ()
+ {
+   __m128i __m128i_result0, __m128i_result1, __m128i_out, __m128i_result;
+   __m128 __m128_result0, __m128_result1, __m128_out, __m128_result;
+   __m128d __m128d_result0, __m128d_result1, __m128d_out, __m128d_result;
+ 
+   __m256i __m256i_op0, __m256i_op1, __m256i_op2, __m256i_out, __m256i_result;
+   __m256 __m256_op0, __m256_op1, __m256_op2, __m256_out, __m256_result;
+   __m256d __m256d_op0, __m256d_op1, __m256d_op2, __m256d_out, __m256d_result;
+ 
+   //__m256_op0 = {1,2,3,4,5,6,7,8};
+   *((int *)&__m256_op0[7]) = 0x41000000;
+   *((int *)&__m256_op0[6]) = 0x40e00000;
+   *((int *)&__m256_op0[5]) = 0x40c00000;
+   *((int *)&__m256_op0[4]) = 0x40a00000;
+   *((int *)&__m256_op0[3]) = 0x40800000;
+   *((int *)&__m256_op0[2]) = 0x40400000;
+   *((int *)&__m256_op0[1]) = 0x40000000;
+   *((int *)&__m256_op0[0]) = 0x3f800000;
+   *((int *)&__m128_result1[3]) = 0x41000000;
+   *((int *)&__m128_result1[2]) = 0x40e00000;
+   *((int *)&__m128_result1[1]) = 0x40c00000;
+   *((int *)&__m128_result1[0]) = 0x40a00000;
+   *((int *)&__m128_result0[3]) = 0x40800000;
+   *((int *)&__m128_result0[2]) = 0x40400000;
+   *((int *)&__m128_result0[1]) = 0x40000000;
+   *((int *)&__m128_result0[0]) = 0x3f800000;
+   __m128_out = __lasx_extract_128_lo_s (__m256_op0);
+   ASSERTEQ_32 (__LINE__, __m128_result0, __m128_out);
+   __m128_out = __lasx_extract_128_hi_s (__m256_op0);
+   ASSERTEQ_32 (__LINE__, __m128_result1, __m128_out);
+ 
+   //__m256i_op0 = {1,2,3,4};
+   *((unsigned long *)&__m256i_op0[3]) = 0x4;
+   *((unsigned long *)&__m256i_op0[2]) = 0x3;
+   *((unsigned long *)&__m256i_op0[1]) = 0x2;
+   *((unsigned long *)&__m256i_op0[0]) = 0x1;
+   *((unsigned long *)&__m128i_result0[1]) = 0x2;
+   *((unsigned long *)&__m128i_result0[0]) = 0x1;
+   *((unsigned long *)&__m128i_result1[1]) = 0x4;
+   *((unsigned long *)&__m128i_result1[0]) = 0x3;
+   __m128i_out = __lasx_extract_128_lo (__m256i_op0);
+   ASSERTEQ_64 (__LINE__, __m128i_result0, __m128i_out);
+   __m128i_out = __lasx_extract_128_hi (__m256i_op0);
+   ASSERTEQ_64 (__LINE__, __m128i_result1, __m128i_out);
+ 
+   //__m256d_op0 = {1,2,3,4};
+   *((unsigned long *)&__m256d_op0[3]) = 0x4010000000000000;
+   *((unsigned long *)&__m256d_op0[2]) = 0x4008000000000000;
+   *((unsigned long *)&__m256d_op0[1]) = 0x4000000000000000;
+   *((unsigned long *)&__m256d_op0[0]) = 0x3ff0000000000000;
+   *((unsigned long *)&__m128d_result0[1]) = 0x4000000000000000;
+   *((unsigned long *)&__m128d_result0[0]) = 0x3ff0000000000000;
+   *((unsigned long *)&__m128d_result1[1]) = 0x4010000000000000;
+   *((unsigned long *)&__m128d_result1[0]) = 0x4008000000000000;
+   __m128d_out = __lasx_extract_128_lo_d (__m256d_op0);
+   ASSERTEQ_64 (__LINE__, __m128d_result0, __m128d_out);
+   __m128d_out = __lasx_extract_128_hi_d (__m256d_op0);
+   ASSERTEQ_64 (__LINE__, __m128d_result1, __m128d_out);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract-256-128.c	Sun Nov  9 22:33:27 2025
***************
*** 0 ****
--- 1,86 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-mabi=lp64d -O2 -mlasx" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <lasxintrin.h>
+ 
+ /*
+ **foo1_lo:
+ **	vld	(\$vr[0-9]+),\$r4,0
+ **	vpickve2gr.du	\$r4,(\$vr[0-9]+),0
+ **	vpickve2gr.du	\$r5,(\$vr[0-9]+),1
+ **	jr	\$r1
+ */
+ __m128
+ foo1_lo (__m256 x)
+ {
+   return __lasx_extract_128_lo_s (x);
+ }
+ 
+ /*
+ **foo1_hi:
+ **	xvld	(\$xr[0-9]+),\$r4,0
+ **	xvpermi.d	(\$xr[0-9]+),(\$xr[0-9]+),0xe
+ **	vpickve2gr.du	\$r4,(\$vr[0-9]+),0
+ **	vpickve2gr.du	\$r5,(\$vr[0-9]+),1
+ **	jr	\$r1
+ */
+ __m128
+ foo1_hi (__m256 x)
+ {
+   return __lasx_extract_128_hi_s (x);
+ }
+ 
+ /*
+ **foo2_lo:
+ **	vld	(\$vr[0-9]+),\$r4,0
+ **	vpickve2gr.du	\$r4,(\$vr[0-9]+),0
+ **	vpickve2gr.du	\$r5,(\$vr[0-9]+),1
+ **	jr	\$r1
+ */
+ __m128d
+ foo2_lo (__m256d x)
+ {
+   return __lasx_extract_128_lo_d (x);
+ }
+ 
+ /*
+ **foo2_hi:
+ **	xvld	(\$xr[0-9]+),\$r4,0
+ **	xvpermi.d	(\$xr[0-9]+),(\$xr[0-9]+),0xe
+ **	vpickve2gr.du	\$r4,(\$vr[0-9]+),0
+ **	vpickve2gr.du	\$r5,(\$vr[0-9]+),1
+ **	jr	\$r1
+ */    
+ __m128d
+ foo2_hi (__m256d x)
+ {
+   return __lasx_extract_128_hi_d (x);
+ }
+ 
+ /*
+ **foo3_lo:
+ **	vld	(\$vr[0-9]+),\$r4,0
+ **	vpickve2gr.du	\$r4,(\$vr[0-9]+),0
+ **	vpickve2gr.du	\$r5,(\$vr[0-9]+),1
+ **	jr	\$r1
+ */
+ __m128i
+ foo3_lo (__m256i x)
+ {
+   return __lasx_extract_128_lo (x);
+ }
+ 
+ /*
+ **foo3_hi:
+ **	xvld	(\$xr[0-9]+),\$r4,0
+ **	xvpermi.d	(\$xr[0-9]+),(\$xr[0-9]+),0xe
+ **	vpickve2gr.du	\$r4,(\$vr[0-9]+),0
+ **	vpickve2gr.du	\$r5,(\$vr[0-9]+),1
+ **	jr	\$r1
+ */
+ __m128i
+ foo3_hi (__m256i x)
+ {
+   return __lasx_extract_128_hi (x);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256-result.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256-result.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256-result.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256-result.c	Sun Nov  9 22:33:27 2025
***************
*** 0 ****
--- 1,97 ----
+ /* { dg-options "-mabi=lp64d -O2 -mlasx -w -fno-strict-aliasing" } */
+ 
+ #include "../simd_correctness_check.h"
+ #include <lasxintrin.h>
+ 
+ extern void abort (void);
+ int
+ main ()
+ {
+   __m128i __m128i_op0, __m128i_op1, __m128i_out;
+   __m128 __m128_op0, __m128_op1, __m128_out;
+   __m128d __m128d_op0, __m128d_op1, __m128d_out;
+ 
+   __m256i __m256i_op0, __m256i_result0, __m256i_result1, __m256i_out;
+   __m256 __m256_op0, __m256_result0, __m256_result1, __m256_out;
+   __m256d __m256d_op0, __m256d_result0, __m256d_result1, __m256d_out;
+ 
+   //__m256_op0 = {1,2,3,4,5,6,7,8}, __m128_op0 ={9,9,9,9};
+   *((int *)&__m256_op0[7]) = 0x41000000;
+   *((int *)&__m256_op0[6]) = 0x40e00000;
+   *((int *)&__m256_op0[5]) = 0x40c00000;
+   *((int *)&__m256_op0[4]) = 0x40a00000;
+   *((int *)&__m256_op0[3]) = 0x40800000;
+   *((int *)&__m256_op0[2]) = 0x40400000;
+   *((int *)&__m256_op0[1]) = 0x40000000;
+   *((int *)&__m256_op0[0]) = 0x3f800000;
+   *((int *)&__m128_op0[3]) = 0x41100000;
+   *((int *)&__m128_op0[2]) = 0x41100000;
+   *((int *)&__m128_op0[1]) = 0x41100000;
+   *((int *)&__m128_op0[0]) = 0x41100000;
+   *((int *)&__m256_result0[7]) = 0x41000000;
+   *((int *)&__m256_result0[6]) = 0x40e00000;
+   *((int *)&__m256_result0[5]) = 0x40c00000;
+   *((int *)&__m256_result0[4]) = 0x40a00000;
+   *((int *)&__m256_result0[3]) = 0x41100000;
+   *((int *)&__m256_result0[2]) = 0x41100000;
+   *((int *)&__m256_result0[1]) = 0x41100000;
+   *((int *)&__m256_result0[0]) = 0x41100000;
+   *((int *)&__m256_result1[7]) = 0x41100000;
+   *((int *)&__m256_result1[6]) = 0x41100000;
+   *((int *)&__m256_result1[5]) = 0x41100000;
+   *((int *)&__m256_result1[4]) = 0x41100000;
+   *((int *)&__m256_result1[3]) = 0x40800000;
+   *((int *)&__m256_result1[2]) = 0x40400000;
+   *((int *)&__m256_result1[1]) = 0x40000000;
+   *((int *)&__m256_result1[0]) = 0x3f800000;
+   __m256_out = __lasx_insert_128_lo_s (__m256_op0, __m128_op0);
+   ASSERTEQ_32 (__LINE__, __m256_result0, __m256_out);
+   __m256_out = __lasx_insert_128_hi_s (__m256_op0, __m128_op0);
+   ASSERTEQ_32 (__LINE__, __m256_result1, __m256_out);
+ 
+   //__m256i_op0 ={1,2,3,4},__m128i_op0={5,6},__m128i_op1={7,8};
+   *((unsigned long *)&__m256i_op0[3]) = 0x4;
+   *((unsigned long *)&__m256i_op0[2]) = 0x3;
+   *((unsigned long *)&__m256i_op0[1]) = 0x2;
+   *((unsigned long *)&__m256i_op0[0]) = 0x1;
+   *((unsigned long *)&__m128i_op0[1]) = 0x6;
+   *((unsigned long *)&__m128i_op0[0]) = 0x5;
+   *((unsigned long *)&__m128i_op1[1]) = 0x8;
+   *((unsigned long *)&__m128i_op1[0]) = 0x7;
+   *((unsigned long *)&__m256i_result0[3]) = 0x4;
+   *((unsigned long *)&__m256i_result0[2]) = 0x3;
+   *((unsigned long *)&__m256i_result0[1]) = 0x6;
+   *((unsigned long *)&__m256i_result0[0]) = 0x5;
+   *((unsigned long *)&__m256i_result1[3]) = 0x8;
+   *((unsigned long *)&__m256i_result1[2]) = 0x7;
+   *((unsigned long *)&__m256i_result1[1]) = 0x2;
+   *((unsigned long *)&__m256i_result1[0]) = 0x1;
+   __m256i_out = __lasx_insert_128_lo (__m256i_op0, __m128i_op0);
+   ASSERTEQ_64 (__LINE__, __m256i_result0, __m256i_out);
+   __m256i_out = __lasx_insert_128_hi (__m256i_op0, __m128i_op1);
+   ASSERTEQ_64 (__LINE__, __m256i_result1, __m256i_out);
+ 
+   //__m256d_op0 ={1,2,3,4},__m128d_op0={5,6},__m128d_op1={7,8};
+   *((unsigned long *)&__m256d_op0[3]) = 0x4010000000000000;
+   *((unsigned long *)&__m256d_op0[2]) = 0x4008000000000000;
+   *((unsigned long *)&__m256d_op0[1]) = 0x4000000000000000;
+   *((unsigned long *)&__m256d_op0[0]) = 0x3ff0000000000000;
+   *((unsigned long *)&__m128d_op0[1]) = 0x4018000000000000;
+   *((unsigned long *)&__m128d_op0[0]) = 0x4014000000000000;
+   *((unsigned long *)&__m128d_op1[1]) = 0x4020000000000000;
+   *((unsigned long *)&__m128d_op1[0]) = 0x401c000000000000;
+   *((unsigned long *)&__m256d_result0[3]) = 0x4010000000000000;
+   *((unsigned long *)&__m256d_result0[2]) = 0x4008000000000000;
+   *((unsigned long *)&__m256d_result0[1]) = 0x4018000000000000;
+   *((unsigned long *)&__m256d_result0[0]) = 0x4014000000000000;
+   *((unsigned long *)&__m256d_result1[3]) = 0x4020000000000000;
+   *((unsigned long *)&__m256d_result1[2]) = 0x401c000000000000;
+   *((unsigned long *)&__m256d_result1[1]) = 0x4000000000000000;
+   *((unsigned long *)&__m256d_result1[0]) = 0x3ff0000000000000;
+   __m256d_out = __lasx_insert_128_lo_d (__m256d_op0, __m128d_op0);
+   ASSERTEQ_64 (__LINE__, __m256d_result0, __m256d_out);
+   __m256d_out = __lasx_insert_128_hi_d (__m256d_op0, __m128d_op1);
+   ASSERTEQ_64 (__LINE__, __m256d_result1, __m256d_out);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-insert-128-256.c	Sun Nov  9 22:33:27 2025
***************
*** 0 ****
--- 1,95 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-mabi=lp64d -O2 -mlasx" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #include <lasxintrin.h>
+ 
+ /*
+ **foo1:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,0
+ **	xvld	(\$xr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x30
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256
+ foo1 (__m256 x, __m128 y)
+ {
+   return __builtin_lasx_insert_128_lo_s (x, y);
+ }
+ 
+ /*
+ **foo2:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,0
+ **	xvld	(\$xr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x02
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256
+ foo2 (__m256 x, __m128 y)
+ {
+   return __builtin_lasx_insert_128_hi_s (x, y);
+ }
+ 
+ /*
+ **foo3:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,0
+ **	xvld	(\$xr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x30
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256d
+ foo3 (__m256d x, __m128d y)
+ {
+   return __builtin_lasx_insert_128_lo_d (x, y);
+ }
+ 
+ /*
+ **foo4:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,0
+ **	xvld	(\$xr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x02
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256d
+ foo4 (__m256d x, __m128d y)
+ {
+   return __builtin_lasx_insert_128_hi_d (x, y);
+ }
+ 
+ /*
+ **foo5:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,0
+ **	xvld	(\$xr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x30
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256i
+ foo5 (__m256i x, __m128i y)
+ {
+   return __builtin_lasx_insert_128_lo (x, y);
+ }
+ 
+ /*
+ **foo6:
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r6,0
+ **	xvld	(\$xr[0-9]+),\$r5,0
+ **	vinsgr2vr.d	(\$vr[0-9]+),\$r7,1
+ **	xvpermi.q	(\$xr[0-9]+),(\$xr[0-9]+),0x02
+ **	xvst	(\$xr[0-9]+),\$r4,0
+ **	jr	\$r1
+ */
+ __m256i
+ foo6 (__m256i x, __m128i y)
+ {
+   return __builtin_lasx_insert_128_hi (x, y);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c	Sun Nov  2 22:33:21 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c	Sun Nov  9 22:33:27 2025
*************** test (int a)
*** 9,13 ****
    return a / 3;
  }
  
- /* { dg-final { scan-assembler {\tmulw.d.w\t} } } */
  /* { dg-final { scan-assembler-not {\tdiv.w\t} } } */
--- 9,12 ----
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c gcc-16-20251109/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c	Sun Nov  2 22:34:07 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/powerpc/rlwimi-2.c	Sun Nov  9 22:33:28 2025
***************
*** 6,12 ****
  /* { dg-final { scan-assembler-times {(?n)^\s+blr} 6750 } } */
  /* { dg-final { scan-assembler-times {(?n)^\s+mr} 643 { target ilp32 } } } */
  /* { dg-final { scan-assembler-times {(?n)^\s+mr} 11 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 7790 { target lp64 } } } */
  
  /* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1692 { target ilp32 } } } */
  /* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1666 { target lp64 } } } */
--- 6,12 ----
  /* { dg-final { scan-assembler-times {(?n)^\s+blr} 6750 } } */
  /* { dg-final { scan-assembler-times {(?n)^\s+mr} 643 { target ilp32 } } } */
  /* { dg-final { scan-assembler-times {(?n)^\s+mr} 11 { target lp64 } } } */
! /* { dg-final { scan-assembler-times {(?n)^\s+rldicl} 6754 { target lp64 } } } */
  
  /* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1692 { target ilp32 } } } */
  /* { dg-final { scan-assembler-times {(?n)^\s+rlwimi} 1666 { target lp64 } } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-1.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-1.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Su2e_1f {
+   union {
+     struct {
+     } e1, e2;
+   } u;
+   float f;
+ };
+ struct Su2e_1f echo_Su2e_1f(int i, float f, struct Su2e_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-2.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-2.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-2.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Su2e_2f {
+   union {
+     struct {
+     } e1, e2;
+   } u;
+   float f;
+   float g;
+ };
+ struct Su2e_2f echo_Su2e_2f(int i, float f, struct Su2e_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-3.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-3.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-3.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smu2e_1f {
+   union {
+     struct {
+     } e1, e2;
+   } u1;
+   struct {
+     float f;
+     union {
+       struct {
+       } e1, e2;
+     } u;
+   } ue;
+   union {
+     struct {
+     } e1, e2;
+   } u2;
+ };
+ struct Smu2e_1f echo_Smu2e_1f(int i, float f, struct Smu2e_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-4.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-4.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct+union-4.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smu2e_2f {
+   union {
+     struct {
+     } e1, e2;
+   } u1;
+   struct {
+     float f;
+     float g;
+     union {
+       struct {
+       } e1, e2;
+     } u;
+   } ue;
+   union {
+     struct {
+     } e1, e2;
+   } u2;
+ };
+ struct Smu2e_2f echo_Smu2e_2f(int i, float f, struct Smu2e_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-1.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-1.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Se_1f {
+   struct {
+   } e1;
+   float f;
+ };
+ struct Se_1f echo_Se_1f(int i, float f, struct Se_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-10.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-10.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-10.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-10.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S1ae_2f {
+   struct {
+   } e1[1];
+   float f;
+   float g;
+ };
+ struct S1ae_2f echo_S1ae_2f(int i, float f, struct S1ae_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-11.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-11.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-11.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-11.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm1ae_1f {
+   struct {
+   } e1[1];
+   struct {
+     float f;
+     struct {
+     } e[1];
+   } fe;
+   struct {
+   } e2[1];
+ };
+ struct Sm1ae_1f echo_Sm1ae_1f(int i, float f, struct Sm1ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-12.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-12.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-12.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-12.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm1ae_2f {
+   struct {
+   } e1[1];
+   struct {
+     float f;
+     float g;
+     struct {
+     } e[1];
+   } fe;
+   struct {
+   } e2[1];
+ };
+ struct Sm1ae_2f echo_Sm1ae_2f(int i, float f, struct Sm1ae_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-2.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-2.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-2.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Se_2f {
+   struct {
+   } e1;
+   float f;
+   float g;
+ };
+ struct Se_2f echo_Se_2f(int i, float f, struct Se_2f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-3.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-3.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-3.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sme_1f {
+   struct {
+   } e1;
+   struct {
+     float f;
+     struct {
+     } e;
+   } fe;
+   struct {
+   } e2;
+ };
+ struct Sme_1f echo_Sme_1f(int i, float f, struct Sme_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-4.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-4.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-4.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sme_2f {
+   struct {
+   } e1;
+   struct {
+     float f;
+     float g;
+     struct {
+     } e;
+   } fe;
+   struct {
+   } e2;
+ };
+ struct Sme_2f echo_Sme_2f(int i, float f, struct Sme_2f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-5.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-5.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-5.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S0ae_1f {
+   struct {
+   } e1[0];
+   float f;
+ };
+ struct S0ae_1f echo_S0ae_1f(int i, float f, struct S0ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-6.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-6.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-6.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S0ae_2f {
+   struct {
+   } e1[0];
+   float f;
+   float g;
+ };
+ struct S0ae_2f echo_S0ae_2f(int i, float f, struct S0ae_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-7.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-7.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-7.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm0ae_1f {
+   struct {
+   } e1[0];
+   struct {
+     float f;
+     struct {
+     } e[0];
+   } fe;
+   struct {
+   } e2[0];
+ };
+ struct Sm0ae_1f echo_Sm0ae_1f(int i, float f, struct Sm0ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-8.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-8.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-8.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Sm0ae_2f {
+   struct {
+   } e1[0];
+   struct {
+     float f;
+     float g;
+     struct {
+     } e[0];
+   } fe;
+   struct {
+   } e2[0];
+ };
+ struct Sm0ae_2f echo_Sm0ae_2f(int i, float f, struct Sm0ae_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-9.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-9.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-struct-9.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-struct-9.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S1ae_1f {
+   struct {
+   } e1[1];
+   float f;
+ };
+ struct S1ae_1f echo_S1ae_1f(int i, float f, struct S1ae_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-1.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-1.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Seu_1f {
+   union {
+   } e1;
+   float f;
+ };
+ struct Seu_1f echo_Seu_1f(int i, float f, struct Seu_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-2.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-2.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-2.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct S2eu_2f {
+   union {
+   } e1;
+   float f;
+   float g;
+ };
+ struct S2eu_2f echo_S2eu_2f(int i, float f, struct S2eu_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-3.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-3.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-3.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smeu_1f {
+   union {
+   } e1;
+   struct {
+     float f;
+     union {
+     } e;
+   } fe;
+   union {
+   } e2;
+ };
+ struct Smeu_1f echo_Smeu_1f(int i, float f, struct Smeu_1f s) {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-4.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-4.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/abi/empty-union-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/abi/empty-union-4.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64g -mabi=lp64d -fdump-rtl-expand" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" } } */
+ 
+ struct Smeu_2f {
+   union {
+   } e1;
+   struct {
+     float f;
+     float g;
+     union {
+     } e;
+   } fe;
+   union {
+   } e2;
+ };
+ struct Smeu_2f echo_Smeu_2f(int i, float f, struct Smeu_2f s) /* { dg-warning "ABI for flattened empty union and zero length array changed in GCC 16" } */ {
+   return s;
+ }
+ 
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa1 \[ s \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ .*\)[[:space:]]+\(reg.*:SF \d+ fa2 \[ s\+4 \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa0\)[[:space:]]+\(reg.*:SF \d+ \[ <retval> \]\)\)} "expand" } } */
+ /* { dg-final { scan-rtl-dump {\(set \(reg.*:SF \d+ fa1\)[[:space:]]+\(reg.*:SF \d+ \[ <retval>\+4 \]\)\)} "expand" } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/czero-bext.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/czero-bext.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/czero-bext.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/czero-bext.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64gbc_zicond -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-O2 -march=rv32gbc_zicond -mabi=ilp32" { target { rv32 } } } */
+ 
+ bool isValidAncestorType(int type) {
+     if (type == 0 || type == 6 || type == 4) {
+             return true;
+     }
+     return false;
+ }
+ 
+ 
+ 
+ /* { dg-final { scan-assembler "czero.nez\t" } } */
+ /* { dg-final { scan-assembler "sgtu\t" } } */
+ /* { dg-final { scan-assembler-not "bgtu\t" } } */
+ 
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/pr121136.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/pr121136.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/pr121136.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/pr121136.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,103 ----
+ /* { dg-do compile } */
+ /* { dg-options "-std=gnu23 -O2 -march=rv64gc -mabi=lp64d" { target rv64} } */
+ /* { dg-options "-std=gnu23 -O2 -march=rv32gc -mabi=ilp32" { target rv32} } */
+ 
+ /* We need to adjust the constant so this works for rv32 and rv64.  */
+ #if __riscv_xlen == 32
+ #define ONE 1U
+ #define TYPE unsigned int
+ #define CTZ __builtin_ctz
+ #else
+ #define ONE 1UL
+ #define TYPE unsigned long
+ #define CTZ __builtin_ctzl
+ #endif
+ 
+ #define F1(C) _Bool func1_##C(TYPE x) { return x <= C; }
+ #define F2(C) _Bool func2_##C(TYPE x) { return ((x >> CTZ (C+ONE)) == 0); }
+ #define F3(C) _Bool func3_##C(TYPE x) { return ((x / (C+ONE)) == 0); }
+ 
+ #define F(C) F1(C) F2(C) F3(C)
+ 
+ F (0x1U)
+ F (0x3U)
+ F (0x7U)
+ F (0xfU)
+ F (0x1fU)
+ F (0x3fU)
+ F (0x7fU)
+ F (0xffU)
+ F (0x1ffU)
+ F (0x3ffU)
+ F (0x7ffU)
+ F (0xfffU)
+ F (0x1fffU)
+ F (0x3fffU)
+ F (0x7fffU)
+ F (0xffffU)
+ F (0x1ffffU)
+ F (0x3ffffU)
+ F (0x7ffffU)
+ F (0xfffffU)
+ F (0x1fffffU)
+ F (0x3fffffU)
+ F (0x7fffffU)
+ F (0xffffffU)
+ F (0x1ffffffU)
+ F (0x3ffffffU)
+ F (0x7ffffffU)
+ F (0xfffffffU)
+ F (0x1fffffffU)
+ F (0x3fffffffU)
+ F (0x7fffffffU)
+ #if __riscv_xlen == 64
+ F (0xffffffffUL)
+ F (0x1ffffffffUL)
+ F (0x3ffffffffUL)
+ F (0x7ffffffffUL)
+ F (0xfffffffffUL)
+ F (0x1fffffffffUL)
+ F (0x3fffffffffUL)
+ F (0x7fffffffffUL)
+ F (0xffffffffffUL)
+ F (0x1ffffffffffUL)
+ F (0x3ffffffffffUL)
+ F (0x7ffffffffffUL)
+ F (0xfffffffffffUL)
+ F (0x1fffffffffffUL)
+ F (0x3fffffffffffUL)
+ F (0x7fffffffffffUL)
+ F (0xffffffffffffUL)
+ F (0x1ffffffffffffUL)
+ F (0x3ffffffffffffUL)
+ F (0x7ffffffffffffUL)
+ F (0xfffffffffffffUL)
+ F (0x1fffffffffffffUL)
+ F (0x3fffffffffffffUL)
+ F (0x7fffffffffffffUL)
+ F (0xffffffffffffffUL)
+ F (0x1ffffffffffffffUL)
+ F (0x3ffffffffffffffUL)
+ F (0x7ffffffffffffffUL)
+ F (0xfffffffffffffffUL)
+ F (0x1fffffffffffffffUL)
+ F (0x3fffffffffffffffUL)
+ F (0x7fffffffffffffffUL)
+ #endif
+ 
+ /* These represent current state.  They are not optimal as some of the cases
+    where we shift are better implemented by loading 2^n constant and using
+    sltu as the lui has no incoming data dependencies.  */
+ /* { dg-final { scan-assembler-times "\tsltiu" 30 { target { rv64 } } } } */
+ /* { dg-final { scan-assembler-times "\tnot" 3 { target { rv64 } } } } */
+ /* { dg-final { scan-assembler-times "\tsrli" 121 { target { rv64 } } } } */
+ /* { dg-final { scan-assembler-times "\tsltu" 38 { target { rv64 } } } } */
+ /* { dg-final { scan-assembler-times "\tseqz" 118 { target { rv64 } } } } */
+ /* { dg-final { scan-assembler-times "\tli" 38 { target { rv64 } } } } */
+ 
+ /* { dg-final { scan-assembler-times "\tsltiu" 30 { target { rv32 } } } } */
+ /* { dg-final { scan-assembler-times "\tnot" 3 { target { rv32 } } } } */
+ /* { dg-final { scan-assembler-times "\tsrli" 25 { target { rv32 } } } } */
+ /* { dg-final { scan-assembler-times "\tsltu" 38 { target { rv32 } } } } */
+ /* { dg-final { scan-assembler-times "\tseqz" 22 { target { rv32 } } } } */
+ /* { dg-final { scan-assembler-times "\tli" 38 { target { rv32 } } } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/pr52345.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/pr52345.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/pr52345.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/pr52345.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64gcbv_zicond -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-O2 -march=rv32gcbv_zicond -mabi=ilp32" { target { rv32 } } } */
+ 
+ int f(int a, int b)
+ {
+   int c = a != 0;
+   int d = (c!=0|b!=0);
+   return d;
+ }
+ 
+ int h (int a, int b)
+ {
+   int c = (a!=0|b);
+   int d = c==0;
+   return d;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\tor} 2 } } */
+ /* { dg-final { scan-assembler-times {\tsnez} 1 } } */
+ /* { dg-final { scan-assembler-times {\tseqz} 1 } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/riscv.exp gcc-16-20251109/gcc/testsuite/gcc.target/riscv/riscv.exp
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/riscv.exp	Sun Nov  2 22:34:08 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/riscv.exp	Sun Nov  9 22:33:29 2025
*************** gcc-dg-runtest [lsort [glob -nocomplain
*** 42,47 ****
--- 42,49 ----
  	"" $DEFAULT_CFLAGS
  gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/xandes/*.\[cS\]]] \
  	"" $DEFAULT_CFLAGS
+ gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/abi/*.\[cS\]]] \
+ 	"" $DEFAULT_CFLAGS
  
  # Saturation alu
  foreach opt {
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-1.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-1.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvbb -mabi=lp64d -O3" } */
+ 
+ #include "pr121959.h"
+ 
+ DEF_VWSLL_FUNC_0(int32_t, uint8_t, 16)
+ 
+ /* { dg-final { scan-assembler-times {vwsll.vi} 1 } } */
+ /* { dg-final { scan-assembler-not {vsll.vi} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-2.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-2.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-2.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+ 
+ #include "pr121959.h"
+ 
+ DEF_VWSLL_FUNC_0(int32_t, uint8_t, 16)
+ 
+ /* { dg-final { scan-assembler-times {vsll.vi} 1 } } */
+ /* { dg-final { scan-assembler-not {vwsll.vi} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-3.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-3.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-3.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvbb -mabi=lp64d -O3" } */
+ 
+ #include "pr121959.h"
+ 
+ DEF_VWSLL_FUNC_0(int32_t, uint8_t, 17)
+ 
+ /* { dg-final { scan-assembler-times {vwsll.vi} 1 } } */
+ /* { dg-final { scan-assembler-not {vsll.vi} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-4.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-4.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-4.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv -mabi=lp64d -O3" } */
+ 
+ #include "pr121959.h"
+ 
+ DEF_VWSLL_FUNC_0(int32_t, uint8_t, 17)
+ 
+ /* { dg-final { scan-assembler-times {vsll.vi} 1 } } */
+ /* { dg-final { scan-assembler-not {vwsll.vi} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-5.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-5.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-5.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gcv_zvbb -mabi=lp64d -O3" } */
+ 
+ #include "pr121959.h"
+ 
+ DEF_VWSLL_FUNC_0(int32_t, uint8_t, 15)
+ 
+ /* { dg-final { scan-assembler-times {vsll.vi} 1 } } */
+ /* { dg-final { scan-assembler-not {vwsll.vi} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-run-1.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-run-1.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-run-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959-run-1.c	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,65 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target "riscv_zvbb_ok" } */
+ /* { dg-add-options "riscv_v" } */
+ /* { dg-add-options "riscv_zvbb" } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "pr121959.h"
+ 
+ #define WT int32_t
+ #define NT uint8_t
+ #define IMM 16
+ #define N 16
+ 
+ DEF_VWSLL_FUNC_0_WRAP(WT, NT, IMM)
+ 
+ NT g_data[][2][N] = {
+   {
+     /* a */
+     {
+         2,   2,   2,   1,
+       255, 255, 255, 255,
+       128, 128, 128, 128,
+       127, 127, 127, 127,
+     },
+     /* b */
+     {
+       1, 1, 1, 1,
+       0, 0, 0, 0,
+       2, 2, 2, 2,
+       7, 7, 7, 7,
+     },
+   },
+ };
+ 
+ WT g_expect[][N] = {
+   /* 0 */
+   {
+        65536,    65536,    65536,    65536,
+     16711680, 16711680, 16711680, 16711680,
+      8257536,  8257536,  8257536,  8257536,
+      7864320,  7864320,  7864320,  7864320,
+   },
+ };
+ 
+ int
+ main ()
+ {
+   unsigned i, k;
+   WT out[N];
+ 
+   for (i = 0; i < sizeof (g_data) / sizeof (g_data[0]); i++)
+     {
+       NT *a = g_data[i][0];
+       NT *b = g_data[i][1];
+       WT *expect = g_expect[i];
+ 
+       RUN_VWSLL_FUNC_0_WRAP (WT, NT, IMM, out, a, b, N);
+ 
+       for (k = 0; k < N; k++)
+ 	if (out[k] != expect[k])
+ 	  __builtin_abort ();
+     }
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959.h gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959.h
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr121959.h	Sun Nov  9 22:33:29 2025
***************
*** 0 ****
--- 1,24 ----
+ #ifndef HAVE_DEFINED_PR121959_H
+ #define HAVE_DEFINED_PR121959_H
+ 
+ #include <stdint.h>
+ 
+ #define DEF_VWSLL_FUNC_0(WT, NT, IMM)                   \
+ void                                                    \
+ test_from_##NT##_to_##WT##_##IMM##_0(WT * restrict res, \
+ 				     NT * restrict a,   \
+ 				     NT * restrict b,   \
+ 				     int n)             \
+ {                                                       \
+   for (int i = 0; i < n; i++)                           \
+     {                                                   \
+       res[i] = (a[i] - b[i]) << IMM;                    \
+     }                                                   \
+ }
+ #define DEF_VWSLL_FUNC_0_WRAP(WT, NT, IMM) DEF_VWSLL_FUNC_0(WT, NT, IMM)
+ #define RUN_VWSLL_FUNC_0(WT, NT, IMM, res, a, b, n) \
+   test_from_##NT##_to_##WT##_##IMM##_0(res, a, b, n)
+ #define RUN_VWSLL_FUNC_0_WRAP(WT, NT, IMM, res, a, b, n) \
+   RUN_VWSLL_FUNC_0(WT, NT, IMM, res, a, b, n)
+ 
+ #endif
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 2 } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 2 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 2 } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 37,39 ****
--- 38,41 ----
  /* { dg-final { scan-assembler-times {vwmulu.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vwaddu.wx} 1 } } */
  /* { dg-final { scan-assembler-times {vwsubu.wx} 1 } } */
+ /* { dg-final { scan-assembler-times {vwmaccu.vx} 1 } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c	Sun Nov  9 22:33:30 2025
***************
*** 11,16 ****
--- 11,17 ----
  TEST_BINARY_VX_UNSIGNED_0(T)
  TEST_TERNARY_VX_UNSIGNED_0(T)
  TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
+ TEST_WIDEN_TERNARY_VX_UNSIGNED(T, NT)
  
  /* { dg-final { scan-assembler-not {vadd.vx} } } */
  /* { dg-final { scan-assembler-not {vsub.vx} } } */
*************** TEST_WIDEN_BINARY_VX_UNSIGNED(T, NT)
*** 34,36 ****
--- 35,38 ----
  /* { dg-final { scan-assembler-not {vwmulu.vx} } } */
  /* { dg-final { scan-assembler-not {vwaddu.wx} } } */
  /* { dg-final { scan-assembler-not {vwsubu.wx} } } */
+ /* { dg-final { scan-assembler-not {vwmaccu.vx} } } */
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmaccu-run-1-u64.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmaccu-run-1-u64.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmaccu-run-1-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vwmaccu-run-1-u64.c	Sun Nov  9 22:33:30 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_widen.h"
+ #include "vx_widen_data.h"
+ 
+ #define WT        uint64_t
+ #define NT        uint32_t
+ #define NAME      wmacc
+ #define TEST_DATA DEF_BINARY_WIDEN_STRUCT_0_VAR_WRAP(WT, NT, NAME)
+ #define DATA_TYPE DEF_BINARY_WIDEN_STRUCT_0_TYPE_WRAP(WT, NT, NAME)
+ 
+ DEF_VX_WIDEN_TERNARY_CASE_0_WRAP(WT, NT, +, *, NAME)
+ 
+ #define TEST_RUN(WT, NT, NAME, vd, vs2, rs1, N) \
+   RUN_VX_WIDEN_TERNARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, N)
+ 
+ #include "vx_widen_vx_run.h"
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen.h	Sun Nov  9 22:33:30 2025
*************** test_vx_widen_binary_##NAME##_##WT##_##N
*** 45,50 ****
--- 45,68 ----
  #define RUN_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \
    RUN_VX_WIDEN_BINARY_CASE_1(WT, NT, NAME, vd, vs2, rs1, n)
  
+ #define DEF_VX_WIDEN_TERNARY_CASE_0(WT, NT, OP1, OP2, NAME)             \
+ void                                                                    \
+ test_vx_widen_ternary_##NAME##_##WT##_##NT##_case_0 (WT * restrict vd,  \
+ 						    NT * restrict vs2,  \
+ 						    NT rs1,             \
+ 						    unsigned n)         \
+ {                                                                       \
+   for (unsigned i = 0; i < n; i++)                                      \
+     vd[i] = vd[i] OP1 (WT)vs2[i] OP2 (WT)rs1;                           \
+ }
+ 
+ #define DEF_VX_WIDEN_TERNARY_CASE_0_WRAP(WT, NT, OP1, OP2, NAME) \
+   DEF_VX_WIDEN_TERNARY_CASE_0(WT, NT, OP1, OP2, NAME)
+ #define RUN_VX_WIDEN_TERNARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n) \
+   test_vx_widen_ternary_##NAME##_##WT##_##NT##_case_0(vd, vs2, rs1, n)
+ #define RUN_VX_WIDEN_TERNARY_CASE_0_WRAP(WT, NT, NAME, vd, vs2, rs1, n) \
+   RUN_VX_WIDEN_TERNARY_CASE_0(WT, NT, NAME, vd, vs2, rs1, n)
+ 
  #define TEST_WIDEN_BINARY_VX_UNSIGNED(WT, NT)     \
    DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, +, add) \
    DEF_VX_WIDEN_BINARY_CASE_0_WRAP(WT, NT, -, sub) \
*************** test_vx_widen_binary_##NAME##_##WT##_##N
*** 52,55 ****
--- 70,76 ----
    DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, +, add) \
    DEF_VX_WIDEN_BINARY_CASE_1_WRAP(WT, NT, -, sub) \
  
+ #define TEST_WIDEN_TERNARY_VX_UNSIGNED(WT, NT)     \
+   DEF_VX_WIDEN_TERNARY_CASE_0_WRAP(WT, NT, +, *, wmadd)
+ 
  #endif
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h	Sun Nov  2 22:34:12 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_widen_data.h	Sun Nov  9 22:33:30 2025
***************
*** 59,64 ****
--- 59,65 ----
  DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, add)
  DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, sub)
  DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, mul)
+ DEF_BINARY_WIDEN_STRUCT_0_WRAP(uint64_t, uint32_t, wmacc)
  
  #define DEF_BINARY_WIDEN_STRUCT_1(WT, NT, NAME)            \
    DEF_BINARY_WIDEN_STRUCT_1_TYPE_WRAP(WT, NT, NAME)        \
*************** DEF_BINARY_WIDEN_STRUCT_1_DECL_WRAP(uint
*** 268,272 ****
--- 269,326 ----
      },
    },
  };
+ 
+ DEF_BINARY_WIDEN_STRUCT_0_DECL_WRAP(uint64_t, uint32_t, wmacc)[] = {
+   {
+     /* vs2 NT */
+     {
+                3,          3,          3,          3,
+                7,          7,          7,          7,
+                9,          9,          9,          9,
+                5,          5,          5,          5,
+     },
+     /* rs1 NT */
+     1,
+     /* expect WT */
+     {
+                4,          4,          4,          4,
+                9,          9,          9,          9,
+               17,         17,         17,         17,
+                5,          5,          5,          5,
+     },
+     /* vd WT */
+     {
+                1,          1,          1,          1,
+                2,          2,          2,          2,
+                8,          8,          8,          8,
+                0,          0,          0,          0,
+     },
+   },
+   {
+     /* vs2 NT */
+     {
+       4294967295ull, 4294967295ull, 4294967295ull, 4294967295ull,
+       4294967294ull, 4294967294ull, 4294967294ull, 4294967294ull,
+       4294967293ull, 4294967293ull, 4294967293ull, 4294967293ull,
+       4294967292ull, 4294967292ull, 4294967292ull, 4294967292ull,
+     },
+     /* rs1 NT */
+     2,
+     /* expect WT */
+     {
+       8589934591ull, 8589934591ull, 8589934591ull, 8589934591ull,
+       8589934590ull, 8589934590ull, 8589934590ull, 8589934590ull,
+       8589934589ull, 8589934589ull, 8589934589ull, 8589934589ull,
+       8589934584ull, 8589934584ull, 8589934584ull, 8589934584ull,
+     },
+     /* vd WT */
+     {
+                1,          1,          1,          1,
+                2,          2,          2,          2,
+                3,          3,          3,          3,
+                0,          0,          0,          0,
+     },
+   },
+ };
  
  #endif
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c	Sun Nov  2 22:34:13 2025
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/rvv/base/pr119115.c	Sun Nov  9 22:33:30 2025
***************
*** 1,7 ****
  /* { dg-do run } */
  /* { dg-require-effective-target rv64 } */
  /* { dg-require-effective-target rvv_zvl256b_ok } */
! /* { dg-additional-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3 -fsigned-char -fwrapv -mrvv-vector-bits=zvl" } */
  
  short a[4][14][14];
  void
--- 1,7 ----
  /* { dg-do run } */
  /* { dg-require-effective-target rv64 } */
  /* { dg-require-effective-target rvv_zvl256b_ok } */
! /* { dg-additional-options "-march=rv64gcv_zvl256b -mabi=lp64d -O3 -fsigned-char -fwrapv -mrvv-vector-bits=zvl -std=gnu99" } */
  
  short a[4][14][14];
  void
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gcc.target/riscv/snez.c gcc-16-20251109/gcc/testsuite/gcc.target/riscv/snez.c
*** gcc-16-20251102/gcc/testsuite/gcc.target/riscv/snez.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gcc.target/riscv/snez.c	Sun Nov  9 22:33:31 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64" } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-O1" } } */
+ 
+ int f (long long a)
+ {
+   return (a != 2) << 1;
+ }
+ 
+ /* { dg-final { scan-assembler-times "slli\t" 1 } } */
+ /* { dg-final { scan-assembler-not "srli\t" } } */
+ /* { dg-final { scan-assembler-times "snez\t" 1 } } */
+ /* { dg-final { scan-assembler-not "sext.w\t" } } */
+ 
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_5.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_5.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_5.f90	Sun Nov  9 22:33:36 2025
***************
*** 0 ****
--- 1,63 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-Wa,--noexecstack" { target { ! *-*-darwin* } } }
+ ! { dg-additional-options "-Wl,-z,noexecstack" { target { ! *-*-darwin* } } }
+ !
+ ! PR fortran/121628
+ ! Test deep copy of recursive allocatable array components with multi-level
+ ! nesting and repeated circular assignments. This test ensures:
+ ! 1. Deep copy works correctly for grandchildren (multi-level recursion)
+ ! 2. Repeated circular assignments don't cause memory corruption/double-free
+ ! 3. No trampolines are generated (verified by noexecstack flags)
+ !
+ ! Contributed by Christopher Albert  <albert@tugraz.at>
+ !            and Harald Anlauf  <anlauf@gcc.gnu.org>
+ !
+ program alloc_comp_deep_copy_5
+   implicit none
+ 
+   type :: nested_t
+      character(len=10)             :: name
+      type(nested_t),   allocatable :: children(:)
+   end type nested_t
+ 
+   type(nested_t) :: a, b
+ 
+   ! Build a tree with grandchildren
+   b%name = "root"
+   allocate (b%children(2))
+   b%children(1)%name = "child1"
+   b%children(2)%name = "child2"
+   allocate (b%children(1)%children(1))
+   b%children(1)%children(1)%name = "grandchild"
+ 
+   ! Test 1: Initial assignment
+   a = b
+   if (.not. allocated(a%children)) stop 1
+   if (.not. allocated(a%children(1)%children)) stop 2
+   if (a%children(1)%children(1)%name /= "grandchild") stop 3
+ 
+   ! Verify deep copy by modifying a
+   a%children(1)%children(1)%name = "modified"
+   if (b%children(1)%children(1)%name /= "grandchild") stop 4
+   if (a%children(1)%children(1)%name /= "modified") stop 5
+ 
+   ! Test 2: Circular assignment b=a (should not corrupt memory)
+   b = a
+   if (.not. allocated(a%children)) stop 6
+   if (.not. allocated(a%children(1)%children)) stop 7
+   if (.not. allocated(b%children)) stop 8
+   if (.not. allocated(b%children(1)%children)) stop 9
+ 
+   ! Test 3: Circular assignment a=b (stress test)
+   a = b
+   if (.not. allocated(a%children)) stop 10
+   if (.not. allocated(a%children(1)%children)) stop 11
+ 
+   ! Test 4: Another circular assignment (triggered double-free in buggy code)
+   b = a
+   if (.not. allocated(b%children)) stop 12
+   if (.not. allocated(b%children(1)%children)) stop 13
+ 
+   ! Verify final state
+   if (b%children(1)%children(1)%name /= "modified") stop 14
+ end program alloc_comp_deep_copy_5
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_6.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_6.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_6.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_6.f90	Sun Nov  9 22:33:36 2025
***************
*** 0 ****
--- 1,75 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-Wa,--noexecstack" { target { ! *-*-darwin* } } }
+ ! { dg-additional-options "-Wl,-z,noexecstack" { target { ! *-*-darwin* } } }
+ !
+ ! PR fortran/121628
+ ! Test deep copy of recursive allocatable components with both data arrays
+ ! and recursive children. This is a comprehensive test combining:
+ ! 1. Allocatable data arrays (values)
+ ! 2. Recursive allocatable arrays (children)
+ ! 3. Multi-level tree structure
+ ! 4. Complete data integrity verification after deep copy
+ ! 5. No trampolines (noexecstack flags)
+ !
+ ! Contributed by Christopher Albert  <albert@tugraz.at>
+ !
+ program alloc_comp_deep_copy_6
+   use, intrinsic :: iso_fortran_env, only: dp => real64
+   implicit none
+ 
+   type :: nested_t
+     real(dp), allocatable :: values(:)
+     type(nested_t), allocatable :: children(:)
+   end type nested_t
+ 
+   type(nested_t) :: a, b
+ 
+   ! Build nested structure with both values and children
+   allocate (b%values(3))
+   b%values = [1.0_dp, 2.0_dp, 3.0_dp]
+ 
+   allocate (b%children(2))
+   allocate (b%children(1)%values(2))
+   b%children(1)%values = [4.0_dp, 5.0_dp]
+ 
+   allocate (b%children(2)%values(1))
+   b%children(2)%values = [6.0_dp]
+ 
+   ! Deeper nesting
+   allocate (b%children(1)%children(1))
+   allocate (b%children(1)%children(1)%values(2))
+   b%children(1)%children(1)%values = [7.0_dp, 8.0_dp]
+ 
+   ! Deep copy
+   a = b
+ 
+   ! Verify allocation status
+   if (.not. allocated(a%values)) stop 1
+   if (.not. allocated(a%children)) stop 2
+   if (.not. allocated(a%children(1)%values)) stop 3
+   if (.not. allocated(a%children(2)%values)) stop 4
+   if (.not. allocated(a%children(1)%children)) stop 5
+   if (.not. allocated(a%children(1)%children(1)%values)) stop 6
+ 
+   ! Verify data integrity
+   if (any(a%values /= [1.0_dp, 2.0_dp, 3.0_dp])) stop 7
+   if (any(a%children(1)%values /= [4.0_dp, 5.0_dp])) stop 8
+   if (any(a%children(2)%values /= [6.0_dp])) stop 9
+   if (any(a%children(1)%children(1)%values /= [7.0_dp, 8.0_dp])) stop 10
+ 
+   ! Verify deep copy: modify a and ensure b is unchanged
+   a%values(1) = -1.0_dp
+   a%children(1)%values(1) = -2.0_dp
+   a%children(2)%values(1) = -3.0_dp
+   a%children(1)%children(1)%values(1) = -4.0_dp
+ 
+   if (any(b%values /= [1.0_dp, 2.0_dp, 3.0_dp])) stop 11
+   if (any(b%children(1)%values /= [4.0_dp, 5.0_dp])) stop 12
+   if (any(b%children(2)%values /= [6.0_dp])) stop 13
+   if (any(b%children(1)%children(1)%values /= [7.0_dp, 8.0_dp])) stop 14
+ 
+   if (any(a%values /= [-1.0_dp, 2.0_dp, 3.0_dp])) stop 15
+   if (any(a%children(1)%values /= [-2.0_dp, 5.0_dp])) stop 16
+   if (any(a%children(2)%values /= [-3.0_dp])) stop 17
+   if (any(a%children(1)%children(1)%values /= [-4.0_dp, 8.0_dp])) stop 18
+ end program alloc_comp_deep_copy_6
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_7.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_7.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_7.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/alloc_comp_deep_copy_7.f90	Sun Nov  9 22:33:36 2025
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do compile }
+ !
+ ! PR fortran/121628
+ ! Test that derived types with multiple recursive allocatable array
+ ! components compile without ICE. This was broken by the initial deep-copy
+ ! patch which caused infinite compile-time recursion due to seen_derived_types
+ ! persisting across wrapper generation.
+ !
+ ! The fix saves and restores seen_derived_types when generating element
+ ! copy wrappers to prevent inheriting parent context state.
+ !
+ 
+ program alloc_comp_deep_copy_7
+   implicit none
+ 
+   type :: nested_t
+      type(nested_t), allocatable :: children(:)
+      type(nested_t), allocatable :: relatives(:)
+   end type nested_t
+ 
+   type(nested_t) :: a
+ 
+ end program alloc_comp_deep_copy_7
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/array_memcpy_2.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/array_memcpy_2.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/array_memcpy_2.f90	Sun Nov  2 22:34:15 2025
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/array_memcpy_2.f90	Sun Nov  9 22:33:36 2025
***************
*** 1,9 ****
  ! This checks that the "z = y" assignment is not considered copyable, as the
  ! array is of a derived type containing allocatable components.  Hence, we
! ! we should expand the scalarized loop, which contains *two* memcpy calls.
  ! { dg-do compile }
  ! { dg-options "-O2 -fdump-tree-original" }
! 
    type :: a
      integer, allocatable :: i(:)
    end type a
--- 1,12 ----
  ! This checks that the "z = y" assignment is not considered copyable, as the
  ! array is of a derived type containing allocatable components.  Hence, we
! ! we should expand the scalarized loop, which contains *two* memcpy calls
! ! for the assignment itself, plus one for initialization.
  ! { dg-do compile }
  ! { dg-options "-O2 -fdump-tree-original" }
! !
! ! PR 121628
! !
    type :: a
      integer, allocatable :: i(:)
    end type a
***************
*** 13,19 ****
    end type b
  
    type(b) :: y(2), z(2)
  
    z = y
  end
! ! { dg-final { scan-tree-dump-times "memcpy" 2 "original" } }
--- 16,29 ----
    end type b
  
    type(b) :: y(2), z(2)
+   integer :: j
+ 
+   do j = 1, 2
+     allocate(y(j)%at(1))
+     allocate(y(j)%at(1)%i(1))
+     y(j)%at(1)%i(1) = j
+   end do
  
    z = y
  end
! ! { dg-final { scan-tree-dump-times "__builtin_memcpy" 4 "original" } }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/c-interop/pr113338-c.c gcc-16-20251109/gcc/testsuite/gfortran.dg/c-interop/pr113338-c.c
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/c-interop/pr113338-c.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/c-interop/pr113338-c.c	Sun Nov  9 22:33:36 2025
***************
*** 0 ****
--- 1,10 ----
+ /* PR fortran/113338.  */
+ 
+ #include <ISO_Fortran_binding.h>
+ 
+ extern void f_proc(CFI_cdesc_t* x);
+ 
+ extern void c_proc(CFI_cdesc_t* x)
+ {
+     f_proc(x);
+ }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/c-interop/pr113338.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/c-interop/pr113338.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/c-interop/pr113338.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/c-interop/pr113338.f90	Sun Nov  9 22:33:36 2025
***************
*** 0 ****
--- 1,80 ----
+ ! { dg-do run }
+ ! { dg-additional-sources pr113338-c.c }
+ ! { dg-additional-options "-Wno-error -O2 -std=f2018" }
+ ! { dg-warning "command-line option '-std=f2018' is valid for Fortran but not for C" "" { target *-*-* } 0 }
+ !
+ ! PR fortran/113338 - F2018 extensions to interoperability of procedures
+ 
+ program example
+   use iso_c_binding
+   implicit none
+ 
+   type :: t
+      integer :: i
+   end type
+ 
+   interface
+      subroutine c_proc(x) bind(c)
+        import t
+        type(t), pointer, intent(in) :: x
+      end subroutine c_proc
+   end interface
+ 
+   type(t), target :: x
+ 
+   x%i = 42
+   call c_proc(x)
+ end program
+ 
+ ! pointer
+ subroutine f_proc(x) bind(c)
+   type :: t
+      integer :: i
+   end type t
+   type(t), pointer, intent(in) :: x
+   if (.not. associated (x)) stop 1
+ ! print *, x%i
+   if (x%i /= 42) stop 2
+ end subroutine f_proc
+ 
+ !-----------------------------------------------------------------------
+ ! Further cases some of which are also tested elsewhere in the testsuite
+ !-----------------------------------------------------------------------
+ 
+ ! character: length 1 or assumed character length -> *CFI_cdesc_t
+ subroutine f_char(c, s) bind(c)
+   character    :: c(:)
+   character(*) :: s(:)
+ end subroutine f_char
+ 
+ ! allocatable: scalar, assumed-shape, assumed-rank -> *CFI_cdesc_t
+ subroutine f_a(x, y, z) bind(c)
+   type :: t
+      integer :: i
+   end type t
+   type(t), allocatable :: x
+   type(t), allocatable :: y(:)
+   type(t), allocatable :: z(..)
+ end subroutine f_a
+ 
+ ! pointer: scalar, assumed-shape, assumed-rank -> *CFI_cdesc_t
+ subroutine f_p(x, y, z) bind(c)
+   type :: t
+      integer :: i
+   end type t
+   type(t), pointer :: x
+   type(t), pointer :: y(:)
+   type(t), pointer :: z(..)
+ end subroutine f_p
+ 
+ ! assumed-type: assumed shape, assumed rank -> *CFI_cdesc_t
+ subroutine f_at_cfi(z, w) bind(c)
+   type(*) :: z(:)
+   type(*) :: w(..)
+ end subroutine f_at_cfi
+ 
+ ! assumed-type: scalar, assumed-size -> *void
+ subroutine f_at_void(x, y) bind(c)
+   type(*) :: x
+   type(*) :: y(*)
+ end subroutine f_at_void
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-1.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-1.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-1.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-1.f90	Sun Nov  9 22:33:38 2025
***************
*** 0 ****
--- 1,13 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wunused-label" }
+ 
+ ! Check that a format label referenced in the first statement past a
+ ! metadirective body is bound to the outer region.
+ 
+ !$omp  metadirective when(user={condition(.true.)}: target teams  &
+ !$omp&        distribute parallel do)
+       DO JCHECK = 1, MNMIN
+       END DO
+       WRITE(6,366) PCHECK, UCHECK, VCHECK
+  366  FORMAT(/, ' Vcheck = ',E12.4,/)
+       END PROGRAM
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-2.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-2.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-2.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-2.f90	Sun Nov  9 22:33:38 2025
***************
*** 0 ****
--- 1,37 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wunused-label" }
+ 
+ ! Check that a statement label that ends a loop in the first statement past a
+ ! metadirective body is bound to the outer region.
+ 
+ implicit none
+ integer :: i, j
+ logical :: cond1, cond2
+ integer :: A(0:10,0:5), B(0:10,0:5)
+ 
+ cond1 = .true.
+ cond2 = .true.
+ 
+ !$omp metadirective when(user={condition(cond1)} : parallel do collapse(2))
+       do 50 j = 0, 5
+ !$omp  metadirective when(user={condition(.false.)} : simd)
+         do 51 i = 0, 10
+           A(i,j) = i*10 + j
+    51   continue
+    50 continue
+ 
+    do 55 i = 0, 5
+    55 continue
+ 
+ !$omp begin metadirective when(user={condition(cond2)} : parallel do collapse(2))
+       do 60 j = 0, 5
+ !$omp  metadirective when(user={condition(.false.)} : simd)
+         do 61 i = 0, 10
+           B(i,j) = i*10 + j
+    61   continue
+    60 continue
+ !$omp end metadirective
+ 
+       do 70 j = 0, 5
+       70 continue
+ end
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-3.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-3.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-3.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-3.f90	Sun Nov  9 22:33:38 2025
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wunused-label" }
+ 
+ ! Check that a statement label defined in the first statement past a
+ ! metadirective body is bound to the outer region.
+ 
+ 
+ integer :: cnt, x
+ 
+ cnt = 0
+ !$omp begin metadirective when(user={condition(cnt > 0)} : parallel)
+   x = 5
+ !$omp end metadirective
+ 1234 format("Hello")
+ write(*,1234)
+ 
+ !$omp begin metadirective when(user={condition(x > 0)} : parallel)
+   x = 5
+ !$omp end metadirective
+ 4567 print *, 'hello', cnt
+ cnt = cnt + 1
+ if (cnt < 2) goto 4567
+ end
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-4.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-4.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122369-4.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122369-4.f90	Sun Nov  9 22:33:38 2025
***************
*** 0 ****
--- 1,16 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wunused-label" }
+ 
+ ! Check that a format label defined in the first statement after a nested
+ ! metadirective body can be referenced correctly.
+ 
+ integer :: cnt, x
+ cnt = 0
+ !$omp begin metadirective when(user={condition(cnt > 0)} : parallel)
+   !$omp begin metadirective when(user={condition(cnt > 0)} : parallel)
+     x = 5
+   !$omp end metadirective
+   1234 format("Hello")
+   write(*,1234)
+ !$omp end metadirective
+ end
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122508-1.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122508-1.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122508-1.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122508-1.f90	Sun Nov  9 22:33:38 2025
***************
*** 0 ****
--- 1,17 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wunused-label" }
+ 
+ ! Check that a format label defined outside a metadirective body can be
+ ! referenced correctly inside the metadirective body.
+ 
+ implicit none
+ integer :: cnt
+ 1345 format("The count is ", g0)
+ 
+ cnt = 0
+ write(*,1345) cnt
+ 
+ !$omp begin metadirective when(user={condition(cnt > 0)} : parallel)
+   write(*,1345) cnt
+ !$omp end metadirective
+ end
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122508-2.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122508-2.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122508-2.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122508-2.f90	Sun Nov  9 22:33:38 2025
***************
*** 0 ****
--- 1,22 ----
+ ! { dg-do compile }
+ 
+ ! Check that redefining labels across metadirective regions triggers a
+ ! diagnostic.
+ 
+ implicit none
+ integer :: cnt
+ 1345 format("The count is ", g0)
+ 
+ cnt = 0
+ write(*,1345) cnt
+ 
+ !$omp begin metadirective when(user={condition(cnt > 0)} : parallel)
+   6789 format("The count is ", g0)
+   !$omp begin metadirective when(user={condition(cnt > 0)} : parallel)
+     1345 print *, 'nested'  ! { dg-error "Label 1345 at .1. already referenced as a format label" }
+     6789 print *, 'world'
+   !$omp end metadirective
+   write(*,1345) cnt    ! { dg-error "Label 1345 at .1. previously used as branch target" }
+   write(*,6789) cnt    ! { dg-error "Label 6789 at .1. previously used as branch target" }
+ !$omp end metadirective
+ end
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122570.f gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122570.f
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/gomp/pr122570.f	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/gomp/pr122570.f	Sun Nov  9 22:33:38 2025
***************
*** 0 ****
--- 1,29 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-Wall" }
+ 
+ ! PR fortran/122570
+ 
+       SUBROUTINE INITAL
+       implicit none (type, external)
+       integer :: j, n
+       n = 5
+ !$omp  metadirective                                                            &
+ !$omp&    when(user={condition(.true.)}: target teams                           &
+ !$omp&        distribute parallel do)                                           &
+ !$omp&    when(user={condition(.false.)}: target teams                          &
+ !$omp&        distribute parallel do) 
+       DO J=1,N
+       END DO
+       END SUBROUTINE
+ 
+       SUBROUTINE CALC3
+        implicit none (type, external)
+        integer :: i, m
+        m = 99
+ !$omp  metadirective 
+ !$omp& when(user={condition(.false.)}:
+ !$omp&      simd)               
+       DO 301 I=1,M
+   301 CONTINUE
+   300 CONTINUE ! { dg-warning "Label 300 at .1. defined but not used \\\[-Wunused-label\\\]" }
+       END SUBROUTINE
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/pdt_66.f03 gcc-16-20251109/gcc/testsuite/gfortran.dg/pdt_66.f03
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/pdt_66.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/pdt_66.f03	Sun Nov  9 22:33:39 2025
***************
*** 0 ****
--- 1,54 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdump-tree-original" }
+ !
+ ! Check the fix for PR122501.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module tensor_m
+   implicit none
+ 
+   type tensor_t(k)
+     integer, kind :: k = kind(1.)
+     real(k), allocatable, private :: values_(:)
+   contains
+     procedure default_real_values
+   end type
+ 
+   interface tensor_t
+     type(tensor_t) module function construct_default_real(values)
+       implicit none
+       real values(:)
+     end function
+   end interface
+ 
+   interface
+     module function default_real_values(self) result(tensor_values)
+       implicit none
+       class(tensor_t) self
+       real, allocatable :: tensor_values(:)
+     end function
+   end interface
+ end module 
+ 
+   use tensor_m
+   implicit none
+ contains
+   function copy(tensor)
+     type(tensor_t) tensor, copy, norm_copy
+     associate(tensor_values => tensor%default_real_values())
+ 
+ ! This gave: "Component ‘values_’ at (1) is a PRIVATE component of ‘tensor_t’"
+       copy = tensor_t(tensor_values)
+ 
+     end associate
+ 
+ ! Make sure that the fix really works :-)
+     associate(f => tensor%default_real_values())
+       associate(tensor_values => tensor%default_real_values())
+         norm_copy = tensor_t(tensor_values/maxval(f))
+       end associate
+     end associate
+   end function
+ end
+ ! { dg-final { scan-tree-dump-times "default_real_values" 3 "original" } }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/pdt_67.f03 gcc-16-20251109/gcc/testsuite/gfortran.dg/pdt_67.f03
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/pdt_67.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/pdt_67.f03	Sun Nov  9 22:33:39 2025
***************
*** 0 ****
--- 1,36 ----
+ ! { dg-do compile }
+ !
+ ! Check the fix for PR122524.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module tensor_map_m
+   implicit none
+ 
+   type tensor_t(k)
+     integer, kind :: k = kind(1.)
+     real(k), allocatable :: values_(:)
+   end type
+ 
+   interface tensor_t
+     module function tensor(values)
+       implicit none
+       double precision values(:)
+       type(tensor_t(kind(0D0))) tensor
+     end function
+   end interface
+ 
+   type tensor_map_t(k)
+     integer, kind :: k = kind(1.)
+     real(k) slope_
+   end type
+ 
+ contains
+   function unnormalized_tensor(self, tensor)
+     type(tensor_map_t(kind(0D0))) self
+     type(tensor_t(kind(0D0))) tensor, unnormalized_tensor
+     associate(unnormalized_values => tensor%values_*self%slope_)
+       unnormalized_tensor = tensor_t(unnormalized_values)   ! Caused an ICE.
+     end associate
+   end function
+ end module
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/pdt_68.f03 gcc-16-20251109/gcc/testsuite/gfortran.dg/pdt_68.f03
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/pdt_68.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/pdt_68.f03	Sun Nov  9 22:33:39 2025
***************
*** 0 ****
--- 1,34 ----
+ ! { dg-do compile }
+ ! { dg-options "-fdump-tree-original" }
+ !
+ ! Check the fix for PR122566.
+ !
+ ! Contributed by Damian Rouson  <damian@archaeologic.codes>
+ !
+ module double_precision_file_m
+   implicit none
+ 
+   type file_t
+     integer :: i
+   end type
+ 
+   type, extends(file_t) :: double_precision_file_t
+   end type
+ 
+   type, extends(double_precision_file_t) :: training_configuration_t(m)
+     integer, kind :: m = kind(1.)
+   end type
+ 
+ contains
+   pure module function training_configuration()
+     type(training_configuration_t) training_configuration
+     training_configuration%file_t = file_t(42) ! Needed parent type to be introduced explicitly
+   end function
+ end module
+ 
+   use double_precision_file_m
+   type(training_configuration_t) :: x
+   x = training_configuration ()
+   if (x%i /= 42) stop 1
+ end
+ ! { dg-final { scan-tree-dump-times "double_precision_file_t.file_t" 2 "original" } }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/pr122513-2.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/pr122513-2.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/pr122513-2.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/pr122513-2.f90	Sun Nov  9 22:33:39 2025
***************
*** 0 ****
--- 1,18 ----
+ ! { dg-do compile }
+ 
+ ! PR fortran/122513
+ 
+ ! The error is not really new but seems to be untested
+ ! before. The example is from the mentioned PR.
+ 
+ program test
+   implicit none
+   integer :: i
+   do concurrent (i=1:2) default (none) local(i) ! { dg-error "Index variable 'i' at .1. cannot be specified in a locality-spec" }
+      block
+        integer, dimension(2,3), parameter :: &
+             ii = reshape((/ 1,2,3,4,5,6 /), (/2, 3/))
+        print*,ii(i,:)
+      end block
+   end do
+ end program test
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gfortran.dg/pr122513.f90 gcc-16-20251109/gcc/testsuite/gfortran.dg/pr122513.f90
*** gcc-16-20251102/gcc/testsuite/gfortran.dg/pr122513.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gfortran.dg/pr122513.f90	Sun Nov  9 22:33:39 2025
***************
*** 0 ****
--- 1,13 ----
+ ! { dg-do compile }
+ ! PR122513 do concurrent default (none) fails on parameter arrays
+ program test
+   implicit none
+   integer :: i
+   do concurrent (i=1:2) default (none)
+      block
+        integer, dimension(2,3), parameter :: &
+             ii = reshape((/ 1,2,3,4,5,6 /), (/2, 3/))
+        print*,ii(i,:)
+      end block
+   end do
+ end program test
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/class_wide6.adb gcc-16-20251109/gcc/testsuite/gnat.dg/class_wide6.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/class_wide6.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/class_wide6.adb	Sun Nov  9 22:33:43 2025
***************
*** 0 ****
--- 1,9 ----
+ package body Class_Wide6 is
+ 
+    function Parse (Parser: Script_Info_Parser) return Script_Info'Class is
+    begin
+       pragma Warnings(Off);
+       return Parse (Parser);
+    end;
+ 
+ end Class_Wide6;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/class_wide6.ads gcc-16-20251109/gcc/testsuite/gnat.dg/class_wide6.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/class_wide6.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/class_wide6.ads	Sun Nov  9 22:33:43 2025
***************
*** 0 ****
--- 1,19 ----
+ --  { dg-do compile }
+ 
+ with Class_Wide6_Pkg;
+ 
+ package Class_Wide6 is
+ 
+    type Script_Kind_Enum is (Transformer, Validator);
+ 
+    type Script_Info (Script_Kind : Script_Kind_Enum) is tagged null record;
+ 
+    package Base_Script_Info_Node is new Class_Wide6_Pkg (Script_Info'Class);
+ 
+    type Script_Info_Parser is new Base_Script_Info_Node.Base_Node_Parser with
+       null record;
+ 
+    overriding function Parse (Parser: Script_Info_Parser)
+                               return Script_Info'Class;
+ 
+ end Class_Wide6;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/class_wide6_pkg.ads gcc-16-20251109/gcc/testsuite/gnat.dg/class_wide6_pkg.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/class_wide6_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/class_wide6_pkg.ads	Sun Nov  9 22:33:43 2025
***************
*** 0 ****
--- 1,9 ----
+ generic
+    type Data_Type (<>) is private;
+ package Class_Wide6_Pkg is
+ 
+    type Base_Node_Parser is abstract tagged limited null record;
+ 
+    function Parse (Parser: Base_Node_Parser) return Data_Type is abstract;
+ 
+ end Class_Wide6_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/generic_inst15.adb gcc-16-20251109/gcc/testsuite/gnat.dg/generic_inst15.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/generic_inst15.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/generic_inst15.adb	Sun Nov  9 22:33:44 2025
***************
*** 0 ****
--- 1,27 ----
+ --  { dg-do compile }
+ 
+ with Ada.Command_Line; use Ada.Command_Line;
+ with Ada.Directories; use Ada.Directories;
+ with Ada.Text_IO; use Ada.Text_IO;
+ 
+ with Generic_Inst15_Pkg;
+ with Generic_Inst15_Pkg.G;
+ 
+ procedure Generic_Inst15 is
+ 
+   procedure Print_Word
+      (Word     : in out Generic_Inst15_Pkg.Word_Type;
+       Continue :    out Boolean)
+   is
+   begin
+      Ada.Text_IO.Put_Line(Generic_Inst15_Pkg.Get_Word(Word));
+      Continue := True;
+   end;
+ 
+   package Word_Lister is new Generic_Inst15_Pkg.G
+      (Order   => Generic_Inst15_Pkg.Word_Order'Val (Positive'Value (Argument(1))),
+       Process => Print_Word);
+ 
+ begin
+    null;
+ end;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/generic_inst15_pkg-g.ads gcc-16-20251109/gcc/testsuite/gnat.dg/generic_inst15_pkg-g.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/generic_inst15_pkg-g.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/generic_inst15_pkg-g.ads	Sun Nov  9 22:33:44 2025
***************
*** 0 ****
--- 1,8 ----
+ generic
+    Order : Word_Order;
+    with procedure Process
+      (Word     : in out Word_Type;
+       Continue :    out Boolean);
+ package Generic_Inst15_Pkg.G is
+    procedure Translate (Code : in Book_Code_Type) is null;
+ end Generic_Inst15_Pkg.G;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/generic_inst15_pkg.ads gcc-16-20251109/gcc/testsuite/gnat.dg/generic_inst15_pkg.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/generic_inst15_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/generic_inst15_pkg.ads	Sun Nov  9 22:33:44 2025
***************
*** 0 ****
--- 1,37 ----
+ private with Ada.Containers.Indefinite_Vectors;
+ private with Ada.Strings.Unbounded;
+ 
+ package Generic_Inst15_Pkg is
+    type Word_Order is
+      (wo_Alpha,
+       wo_Position,
+       wo_Frequency_Alpha,
+       wo_Frequency_Position);
+ 
+    subtype Book_Code_Type is String (1 .. 24);
+ 
+    type Word_Type is private;
+    type Word_Status is (ws_Single, ws_Multi, ws_Not_All, ws_Unknown);
+    type Translation_Index is new Natural range 1 .. 10;
+ 
+    function Get_Word (Self : in Word_Type) return String;
+ 
+    type Book_Type is private;
+ 
+ private
+ 
+    package Translation_List is new Ada.Containers.Indefinite_Vectors (
+       Index_Type   => Translation_Index,
+       Element_Type => String,
+       "="          => "=");
+ 
+    type Word_Type is record
+       Is_All : Boolean := False;
+       Translations : Translation_List.Vector;
+    end record;
+ 
+    type Book_Type is record
+       Line  : Positive := 1;
+       Index : Positive := 1;
+    end record;
+ end Generic_Inst15_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/prefix3.adb gcc-16-20251109/gcc/testsuite/gnat.dg/prefix3.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/prefix3.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/prefix3.adb	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,8 ----
+ -- { dg-do compile }
+ 
+ with Prefix3_Pkg;
+ 
+ procedure Prefix3 is
+ begin
+   Prefix3_Pkg.Handler.Log ("Hello");
+ end;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/prefix3_pkg.adb gcc-16-20251109/gcc/testsuite/gnat.dg/prefix3_pkg.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/prefix3_pkg.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/prefix3_pkg.adb	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,16 ----
+ package body Prefix3_Pkg is
+ 
+   My_Handler : aliased Logging := (Output => Ada.Text_IO.Current_Output);
+   
+   My_Generic_Handler : Logging_Class := My_Handler'Access;
+ 
+   procedure Log (Handler : Logging; Msg : String) is
+   begin
+     Ada.Text_IO.Put_Line (Handler.Output.all, Msg);
+   end Log;
+ 
+   function Handler return Logging_Class is (My_Generic_Handler);
+ 
+   procedure Handler (To : Logging_Class) is null;
+ 
+ end Prefix3_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/prefix3_pkg.ads gcc-16-20251109/gcc/testsuite/gnat.dg/prefix3_pkg.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/prefix3_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/prefix3_pkg.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,16 ----
+ with Ada.Text_IO;
+ 
+ package Prefix3_Pkg is
+ 
+   type Logging is tagged record
+     Output : Ada.Text_IO.File_Access;
+   end record;
+ 
+   procedure Log (Handler : Logging; Msg : String);
+ 
+   type Logging_Class is access all Logging'Class;
+ 
+   function Handler return Logging_Class;
+   procedure Handler (To : Logging_Class);
+ 
+ end Prefix3_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/protected_subtype1.adb gcc-16-20251109/gcc/testsuite/gnat.dg/protected_subtype1.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/protected_subtype1.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/protected_subtype1.adb	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,26 ----
+ -- { dg-do compile }
+ 
+ procedure Protected_Subtype1 is
+ 
+    protected type Object with Lock_Free => True is
+    end Object;
+ 
+    protected body Object is
+    end Object;
+ 
+    A : Object;
+ 
+    subtype Object_Subtype is Object;
+ 
+    B : Object_Subtype;
+ 
+    type Rec is record
+       A : Object;         
+       B : Object_Subtype;
+    end record;
+ 
+    C : Rec;
+ 
+ begin
+   null;
+ end;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/renaming19.adb gcc-16-20251109/gcc/testsuite/gnat.dg/renaming19.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/renaming19.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/renaming19.adb	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,24 ----
+ -- { dg-do run }
+ 
+ with Ada.Text_IO;
+ with Renaming19_Pkg;
+ 
+ procedure Renaming19 is
+ 
+   Handler : aliased Renaming19_Pkg.Logging :=
+     (Output => Ada.Text_IO.Current_Output);
+ 
+   Full_Handler : aliased Renaming19_Pkg.Full_Logging :=
+     (Output => Ada.Text_IO.Current_Output);
+ 
+   Generic_Handler : access Renaming19_Pkg.Logging'Class := Handler'Access;
+ 
+   procedure My_Log_3 (Msg : String) renames Generic_Handler.Log;
+   procedure My_Log_4 (Msg : String; Err : Natural) renames Generic_Handler.Log;
+ 
+ begin
+   My_Log_3 ("First");
+   Generic_Handler := Full_Handler'Access;
+   My_Log_3 ("Second");
+   My_Log_4 ("Third", 3);
+ end;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/renaming19_pkg.adb gcc-16-20251109/gcc/testsuite/gnat.dg/renaming19_pkg.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/renaming19_pkg.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/renaming19_pkg.adb	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,18 ----
+ package body Renaming19_Pkg is
+ 
+   procedure Log (Handler : Logging; Msg : String) is
+   begin
+     Ada.Text_IO.Put_Line (Handler.Output.all, Msg);
+   end Log;
+ 
+   procedure Log (Handler : Logging; Msg : String; Err : Natural) is
+   begin
+      Ada.Text_IO.Put_Line (Handler.Output.all, Msg & Err'Image);
+   end Log;
+ 
+   procedure Log (Handler : Full_Logging; Msg : String) is
+   begin
+       raise Program_Error;
+   end Log;
+ 
+ end Renaming19_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/renaming19_pkg.ads gcc-16-20251109/gcc/testsuite/gnat.dg/renaming19_pkg.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/renaming19_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/renaming19_pkg.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,16 ----
+ with Ada.Text_IO;
+ 
+ package Renaming19_Pkg is
+ 
+   type Logging is tagged record
+     Output : Ada.Text_IO.File_Access;
+   end record;
+ 
+   procedure Log (Handler : Logging; Msg : String);
+   procedure Log (Handler : Logging; Msg : String; Err : Natural);
+ 
+   type Full_Logging is new Logging with null record;
+ 
+   procedure Log (Handler : Full_Logging; Msg : String);
+ 
+ end Renaming19_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/abstract1.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/abstract1.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/abstract1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/abstract1.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,9 ----
+ -- { dg-do compile }
+ 
+ package Abstract1 is
+ 
+   type T is abstract tagged null record;
+ 
+   type S is abstract new T; -- { dg-error "allowed only for record extension" }
+ 
+ end Abstract1;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/discr8.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/discr8.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/discr8.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/discr8.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,14 ----
+ -- { dg-do compile }
+ 
+ package Discr8 is
+ 
+   type T1 (N : Natural) is null record;
+ 
+   type T2 (N : Natural) is record
+     C1 : string (1 .. T2.n); -- { dg-error "alone as a direct name" }
+     C2 : string (1 .. n);
+     C3 : T1 (T2.n); -- { dg-error "alone as a direct name" }
+     C4 : T1 (n);
+   end record;
+ 
+ end Discr8;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,20 ----
+ -- { dg-do compile }
+ 
+ with Generic_Inst9_Pkg1;
+ with Generic_Inst9_Pkg2.G;
+ 
+ package Generic_Inst9 is
+ 
+    type T4 is null record;
+    type T5 is null record;
+ 
+    subtype T3 is T5;
+ 
+    type T4_ptr is access T4;
+    type T5_ptr is access T5;
+ 
+    package My_Pkg2 is new Generic_Inst9_Pkg2 (T2 => T4);
+    package My_G4 is new My_Pkg2.G (T4_ptr); -- { dg-bogus "does not match|abandoned" }
+    package My_G5 is new My_Pkg2.G (T5_ptr); -- { dg-error "does not match|abandoned" }
+ 
+ end Generic_Inst9;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg1.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg1.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg1.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,5 ----
+ generic
+    type T1 is private;
+ package Generic_Inst9_Pkg1 is
+    subtype T3 is T1;
+ end Generic_Inst9_Pkg1;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2-g.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2-g.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2-g.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2-g.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,4 ----
+ generic
+    type T2 is access the_pak1.T3;
+ package Generic_Inst9_Pkg2.G is
+ end Generic_Inst9_Pkg2.G;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/generic_inst9_pkg2.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,7 ----
+ with Generic_Inst9_Pkg1;
+ 
+ generic
+    type T2 is private;
+ package Generic_Inst9_Pkg2 is
+    package the_pak1 is new Generic_Inst9_Pkg1 (T1 => T2);
+ end Generic_Inst9_Pkg2;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with1.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with1.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with1.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,23 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatc" }
+ 
+ with Ada.Containers.Vectors;
+ with Limited_With1_Pkg;
+ 
+ package Limited_With1 is
+ 
+    type Object is tagged private;
+    type Object_Ref is access all Object;
+    type Class_Ref is access all Object'Class;
+ 
+    package Vec is new Ada.Containers.Vectors
+      (Positive, Limited_With1_Pkg.Object_Ref,Limited_With1_Pkg ."=");
+    subtype Vector is Vec.Vector;
+ 
+ private
+ 
+    type Object is tagged record
+       V : Vector;
+    end record;
+ 
+ end Limited_With1;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with1_pkg.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with1_pkg.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with1_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with1_pkg.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,15 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnatc" }
+ 
+ limited with Limited_With1;
+ 
+ package Limited_With1_Pkg is
+ 
+    type Object is tagged null record;
+    type Object_Ref is access all Object;
+    type Class_Ref is access all Object'Class;
+ 
+    function Func return Limited_With1.Class_Ref;
+    procedure Proc (Arg : Limited_With1.Class_Ref);
+ 
+ end Limited_With1_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with2-child1.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with2-child1.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with2-child1.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with2-child1.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,6 ----
+ -- { dg-do compile }
+ 
+ with Limited_With2.Child2;
+ 
+ package Limited_With2.Child1 is
+ end Limited_With2.Child1;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with2-child2.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with2-child2.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with2-child2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with2-child2.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,6 ----
+ -- { dg-do compile }
+ 
+ limited with Limited_With2.Child1;
+ 
+ package Limited_With2.Child2 is
+ end Limited_With2.Child2;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with2.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with2.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with2.ads	Sun Nov  9 22:33:45 2025
***************
*** 0 ****
--- 1,2 ----
+ private package Limited_With2 is
+ end Limited_With2;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with4.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with4.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with4.ads	Sun Nov  2 22:34:17 2025
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with4.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- -- { dg-do compile }
- -- { dg-options "-gnatc" }
- 
- with Ada.Containers.Vectors;
- with Limited_With4_Pkg;
- 
- package Limited_With4 is
- 
-    type Object is tagged private;
-    type Object_Ref is access all Object;
-    type Class_Ref is access all Object'Class;
- 
-    package Vec is new Ada.Containers.Vectors
-      (Positive, Limited_With4_Pkg.Object_Ref,Limited_With4_Pkg ."=");
-    subtype Vector is Vec.Vector;
- 
- private
- 
-    type Object is tagged record
-       V : Vector;
-    end record;
- 
- end Limited_With4;
--- 0 ----
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with4_pkg.ads gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with4_pkg.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/specs/limited_with4_pkg.ads	Sun Nov  2 22:34:17 2025
--- gcc-16-20251109/gcc/testsuite/gnat.dg/specs/limited_with4_pkg.ads	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- -- { dg-do compile }
- -- { dg-options "-gnatc" }
- 
- limited with Limited_With4;
- 
- package Limited_With4_Pkg is
- 
-    type Object is tagged null record;
-    type Object_Ref is access all Object;
-    type Class_Ref is access all Object'Class;
- 
-    function Func return Limited_With4.Class_Ref;
-    procedure Proc (Arg : Limited_With4.Class_Ref);
- 
- end Limited_With4_Pkg;
--- 0 ----
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/vect19.adb gcc-16-20251109/gcc/testsuite/gnat.dg/vect19.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/vect19.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/vect19.adb	Sun Nov  9 22:33:46 2025
***************
*** 0 ****
--- 1,17 ----
+ -- { dg-do compile { target i?86-*-* x86_64-*-* } }
+ -- { dg-options "-O3 -msse2 -gnatn -fno-tree-slp-vectorize -fdump-tree-vect-details" }
+ 
+ package body Vect19 is
+ 
+   function NSum (X : Arr; N : Positive) return Arr is
+     Ret : Arr := X;
+   begin
+     for I in 1 .. N loop
+       Ret := Sum (Ret, X);
+     end loop;
+     return Ret;
+   end;
+ 
+ end Vect19;
+ 
+ -- { dg-final { scan-tree-dump "vectorized 1 loops" "vect"  } }
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/vect19.ads gcc-16-20251109/gcc/testsuite/gnat.dg/vect19.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/vect19.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/vect19.ads	Sun Nov  9 22:33:46 2025
***************
*** 0 ****
--- 1,7 ----
+ with Vect19_Pkg; use Vect19_Pkg;
+ 
+ package Vect19 is
+ 
+   function NSum (X : Arr; N : Positive) return Arr;
+ 
+ end Vect19;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/vect19_pkg.adb gcc-16-20251109/gcc/testsuite/gnat.dg/vect19_pkg.adb
*** gcc-16-20251102/gcc/testsuite/gnat.dg/vect19_pkg.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/vect19_pkg.adb	Sun Nov  9 22:33:46 2025
***************
*** 0 ****
--- 1,12 ----
+ package body Vect19_Pkg is
+ 
+   function Sum (X : Arr; Y : Arr) return Arr is
+     Result : Arr;
+   begin
+     for I in X'Range loop
+       Result(I) := X(I) + Y(I);
+     end loop;
+     return Result;
+   end;
+ 
+ end Vect19_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/gnat.dg/vect19_pkg.ads gcc-16-20251109/gcc/testsuite/gnat.dg/vect19_pkg.ads
*** gcc-16-20251102/gcc/testsuite/gnat.dg/vect19_pkg.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/gcc/testsuite/gnat.dg/vect19_pkg.ads	Sun Nov  9 22:33:46 2025
***************
*** 0 ****
--- 1,9 ----
+ package Vect19_Pkg is
+ 
+   type Arr is array (1 .. 4) of Float;
+   for Arr'Alignment use 16;
+ 
+   function Sum (X : Arr; Y : Arr) return Arr;
+   pragma Inline (Sum);
+ 
+ end Vect19_Pkg;
diff -Nrcpad gcc-16-20251102/gcc/testsuite/lib/lto.exp gcc-16-20251109/gcc/testsuite/lib/lto.exp
*** gcc-16-20251102/gcc/testsuite/lib/lto.exp	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/testsuite/lib/lto.exp	Sun Nov  9 22:33:48 2025
*************** proc lto-obj { source dest optall optfil
*** 309,314 ****
--- 309,351 ----
      ${tool}_check_compile "$testcase $dest assemble" $optstr $dest $comp_output
  }
  
+ proc lto-build-archive { testname objlist dest } {
+     global testcase
+     global tool
+     global GCC_UNDER_TEST
+ 
+     upvar dg-messages-by-file dg-messages-by-file
+ 
+     verbose "lto-build-archive" 2
+     file_on_host delete $dest
+ 
+     # Check that all of the objects were built successfully.
+     foreach obj [split $objlist] {
+ 	if ![file_on_host exists $obj] then {
+ 	    unresolved "$testcase $testname build-archive"
+ 	    return
+ 	}
+     }
+ 
+     # Hack up the gcc-ar command from $GCC_UNDER_TEST.
+     set ar_cmd [file dirname [lindex $GCC_UNDER_TEST 0]]
+     set ar_cmd "$ar_cmd/gcc-ar [lrange $GCC_UNDER_TEST 1 end]"
+     set ar_output [remote_exec host "$ar_cmd rcs $dest $objlist"]
+     set retval [lindex $ar_output 0]
+     set retmsg [lindex $ar_output 1]
+ 
+     # If any message remains, we fail.  Don't bother overriding tool since
+     # we're not really looking to match any specific error or warning patterns
+     # here.
+     if ![string match "0" $retval] then {
+ 	${tool}_fail $testcase "ar returned $retval: $retmsg"
+ 	return 0
+     } else {
+ 	${tool}_pass $testcase "archive"
+ 	return 0
+     }
+ }
+ 
  # lto-link-and-maybe-run -- link the object files and run the executable
  # if compile_type is set to "run"
  #
*************** proc lto-link-and-maybe-run { testname o
*** 379,385 ****
      }
  
      # Return if we only needed to link.
!     if { ![string compare "link" $compile_type] } {
  	return
      }
  
--- 416,423 ----
      }
  
      # Return if we only needed to link.
!     if { ![string compare "link" $compile_type] \
!         || ![string compare "ar-link" $compile_type] } {
  	return
      }
  
*************** proc lto-get-options-main { src } {
*** 510,515 ****
--- 548,555 ----
  		set compile_type "run"
  	    } elseif { ![string compare "link" $dgdo] } {
  		set compile_type "link"
+ 	    } elseif { ![string compare "ar-link" $dgdo] } {
+ 		set compile_type "ar-link"
  	    } else {
  		warning "lto.exp does not support dg-lto-do $dgdo"
  	    }
*************** proc lto-execute-1 { src1 sid } {
*** 691,696 ****
--- 731,742 ----
      # Get the base name of this test, for use in messages.
      set testcase [lindex ${src_list} 0]
  
+     # The test needs to build all but the main file into an archive and then
+     # link them all together.
+     if { ![string compare "ar-link" $compile_type] } {
+         set arname "${sid}_${base}.a"
+     }
+ 
      # Remove the $srcdir and $tmpdir prefixes from $src1.  (It would
      # be possible to use "regsub" here, if we were careful to escape
      # all regular expression characters in $srcdir and $tmpdir, but
*************** proc lto-execute-1 { src1 sid } {
*** 755,762 ****
--- 801,824 ----
  	    incr i
  	}
  
+ 	# Bundle all but the main file into an archive. Update objlist to only
+ 	# have the archive and the last file.
+ 	if { ![string compare "ar-link" $compile_type] } {
+ 	    set mainsrc [lindex $obj_list 0]
+ 	    set obj_list [lrange $obj_list 1 end]
+ 	    lto-build-archive \
+ 		"[lindex $obj_list 1]-[lindex $obj_list end]" \
+ 		$obj_list $arname
+ 
+ 	    set obj_list ""
+ 	    lappend obj_list $mainsrc
+ 	    lappend obj_list $arname
+ 	    set num_srcs 2
+ 	}
+ 
  	# Link (using the compiler under test), run, and clean up tests.
  	if { ![string compare "run" $compile_type] \
+ 	     || ![string compare "ar-link" $compile_type] \
  	     || ![string compare "link" $compile_type] } {
  
  	    # Filter out any link options we were asked to suppress.
*************** proc lto-execute-1 { src1 sid } {
*** 772,777 ****
--- 834,843 ----
  		    "[lindex $obj_list 0]-[lindex $obj_list end]" \
  		    $obj_list $execname $filtered ${dg-extra-ld-options} \
  		    $filtered
+ 
+ 	    if (![string compare "ar-link" $compile_type]) {
+ 		file_on_host delete $arname
+ 	      }
  	}
  
  
*************** proc lto-execute-1 { src1 sid } {
*** 818,823 ****
--- 884,890 ----
  	unset testname_with_flags
  	
  	if { ![string compare "run" $compile_type] \
+ 	     || ![string compare "ar-link" $compile_type] \
  	     || ![string compare "link" $compile_type] } {
  	    file_on_host delete $execname
  	}
diff -Nrcpad gcc-16-20251102/gcc/testsuite/lib/target-supports.exp gcc-16-20251109/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20251102/gcc/testsuite/lib/target-supports.exp	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/testsuite/lib/target-supports.exp	Sun Nov  9 22:33:48 2025
*************** proc check_effective_target_arm_vfp3_ok
*** 5169,5186 ****
  
  # Return 1 if this is an ARM target supporting -mfpu=fp-armv8
  # -mfloat-abi=softfp.
! proc check_effective_target_arm_v8_vfp_ok {} {
!     if { [check_effective_target_arm32] } {
! 	return [check_no_compiler_messages arm_v8_vfp_ok object {
! 	  int foo (void)
! 	  {
! 	     __asm__ volatile ("vrinta.f32.f32 s0, s0");
! 	     return 0;
! 	  }
! 	} "-mfpu=fp-armv8 -mfloat-abi=softfp"]
!     } else {
! 	return 0
      }
  }
  
  # Return 1 if this is an ARM target supporting -mfpu=vfp
--- 5169,5207 ----
  
  # Return 1 if this is an ARM target supporting -mfpu=fp-armv8
  # -mfloat-abi=softfp.
! proc check_effective_target_arm_v8_vfp_ok_nocache {} {
!     global et_arm_v8_vfp_flags
!     set et_arm_v8_vfp_flags ""
!     foreach flags {
! 	""
! 	"-mfloat-abi=softfp"
! 	"-mcpu=unset -march=armv8-a+simd -mfpu=auto"
! 	"-mcpu=unset -march=armv8-a+simd -mfpu=auto -mfloat-abi=softfp"
!     } {
! 	if { [check_no_compiler_messages_nocache arm_v8_vfp_ok object {
! 	    #if __ARM_ARCH < 8
! 	    #error not armv8 or later
! 	    #endif
! 	    #if __ARM_ARCH_PROFILE == 'M'
! 	    #error incompatible profile
! 	    #endif
! 	    int foo (void)
! 	    {
! 		__asm__ volatile ("vrinta.f32.f32 s0, s0");
! 		return 0;
! 	    }
! 	} "$flags"] } {
! 	    set et_arm_v8_vfp_flags "$flags"
! 	    return 1
! 	}
      }
+ 
+     return 0
+ }
+ 
+ proc check_effective_target_arm_v8_vfp_ok { } {
+     return [check_cached_effective_target arm_v8_vfp_ok \
+ 		check_effective_target_arm_v8_vfp_ok_nocache]
  }
  
  # Return 1 if this is an ARM target supporting -mfpu=vfp
*************** proc add_options_for_arm_v8_vfp { flags
*** 5455,5461 ****
      if { ! [check_effective_target_arm_v8_vfp_ok] } {
  	return "$flags"
      }
!     return "$flags -mfpu=fp-armv8 -mfloat-abi=softfp"
  }
  
  proc add_options_for_arm_v8_neon { flags } {
--- 5476,5483 ----
      if { ! [check_effective_target_arm_v8_vfp_ok] } {
  	return "$flags"
      }
!     global et_arm_v8_vfp_flags
!     return "$flags $et_arm_v8_vfp_flags"
  }
  
  proc add_options_for_arm_v8_neon { flags } {
diff -Nrcpad gcc-16-20251102/gcc/tree-core.h gcc-16-20251109/gcc/tree-core.h
*** gcc-16-20251102/gcc/tree-core.h	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-core.h	Sun Nov  9 22:33:51 2025
*************** struct GTY(()) tree_ssa_name {
*** 1717,1722 ****
--- 1717,1726 ----
  		"!POINTER_TYPE_P (TREE_TYPE ((tree)&%1)) : 2"))) info;
    /* Immediate uses list for this SSA_NAME.  */
    struct ssa_use_operand_t imm_uses;
+ #if defined ENABLE_GIMPLE_CHECKING
+   gimple *GTY((skip(""))) active_iterated_stmt;
+   unsigned fast_iteration_depth;
+ #endif
  };
  
  struct GTY(()) phi_arg_d {
diff -Nrcpad gcc-16-20251102/gcc/tree-scalar-evolution.cc gcc-16-20251109/gcc/tree-scalar-evolution.cc
*** gcc-16-20251102/gcc/tree-scalar-evolution.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-scalar-evolution.cc	Sun Nov  9 22:33:51 2025
*************** final_value_replacement_loop (class loop
*** 3947,3957 ****
  	 GENERIC interface).  */
        def = unshare_expr (def);
        auto loc = gimple_phi_arg_location (phi, exit->dest_idx);
-       remove_phi_node (&psi, false);
  
        /* Create the replacement statements.  */
        gimple_seq stmts;
        def = force_gimple_operand (def, &stmts, false, NULL_TREE);
        gassign *ass = gimple_build_assign (rslt, def);
        gimple_set_location (ass, loc);
        gimple_seq_add_stmt (&stmts, ass);
--- 3947,3961 ----
  	 GENERIC interface).  */
        def = unshare_expr (def);
        auto loc = gimple_phi_arg_location (phi, exit->dest_idx);
  
        /* Create the replacement statements.  */
        gimple_seq stmts;
        def = force_gimple_operand (def, &stmts, false, NULL_TREE);
+ 
+       /* Remove the old phi after the gimplification to make sure the
+ 	 SSA name is defined by a statement so that fold_stmt during
+ 	 the gimplification does not crash. */
+       remove_phi_node (&psi, false);
        gassign *ass = gimple_build_assign (rslt, def);
        gimple_set_location (ass, loc);
        gimple_seq_add_stmt (&stmts, ass);
diff -Nrcpad gcc-16-20251102/gcc/tree-ssa-forwprop.cc gcc-16-20251109/gcc/tree-ssa-forwprop.cc
*** gcc-16-20251102/gcc/tree-ssa-forwprop.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-ssa-forwprop.cc	Sun Nov  9 22:33:51 2025
*************** forward_propagate_addr_expr_1 (tree name
*** 925,936 ****
  static bool
  forward_propagate_addr_expr (tree name, tree rhs, bool parent_single_use_p)
  {
-   imm_use_iterator iter;
-   gimple *use_stmt;
    bool all = true;
    bool single_use_p = parent_single_use_p && has_single_use (name);
  
!   FOR_EACH_IMM_USE_STMT (use_stmt, iter, name)
      {
        bool result;
        tree use_rhs;
--- 925,934 ----
  static bool
  forward_propagate_addr_expr (tree name, tree rhs, bool parent_single_use_p)
  {
    bool all = true;
    bool single_use_p = parent_single_use_p && has_single_use (name);
  
!   for (gimple *use_stmt : gather_imm_use_stmts (name))
      {
        bool result;
        tree use_rhs;
*************** simplify_vector_constructor (gimple_stmt
*** 3809,3821 ****
    bool maybe_blend[2] = { true, true };
    tree one_constant = NULL_TREE;
    tree one_nonconstant = NULL_TREE;
    auto_vec<tree> constants;
    constants.safe_grow_cleared (nelts, true);
    auto_vec<std::pair<unsigned, unsigned>, 64> elts;
    FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (op), i, elt)
      {
        tree ref, op1;
!       unsigned int elem;
  
        if (i >= nelts)
  	return false;
--- 3807,3822 ----
    bool maybe_blend[2] = { true, true };
    tree one_constant = NULL_TREE;
    tree one_nonconstant = NULL_TREE;
+   tree subelt;
    auto_vec<tree> constants;
    constants.safe_grow_cleared (nelts, true);
    auto_vec<std::pair<unsigned, unsigned>, 64> elts;
+   unsigned int tsubelts = 0;
    FOR_EACH_VEC_SAFE_ELT (CONSTRUCTOR_ELTS (op), i, elt)
      {
        tree ref, op1;
!       unsigned int elem, src_elem_size;
!       unsigned HOST_WIDE_INT nsubelts = 1;
  
        if (i >= nelts)
  	return false;
*************** simplify_vector_constructor (gimple_stmt
*** 3826,3835 ****
        if (op1
  	  && TREE_CODE ((ref = TREE_OPERAND (op1, 0))) == SSA_NAME
  	  && VECTOR_TYPE_P (TREE_TYPE (ref))
! 	  && useless_type_conversion_p (TREE_TYPE (op1),
  					TREE_TYPE (TREE_TYPE (ref)))
! 	  && constant_multiple_p (bit_field_offset (op1),
! 				  bit_field_size (op1), &elem)
  	  && TYPE_VECTOR_SUBPARTS (TREE_TYPE (ref)).is_constant (&refnelts))
  	{
  	  unsigned int j;
--- 3827,3842 ----
        if (op1
  	  && TREE_CODE ((ref = TREE_OPERAND (op1, 0))) == SSA_NAME
  	  && VECTOR_TYPE_P (TREE_TYPE (ref))
! 	  && (useless_type_conversion_p (TREE_TYPE (op1),
  					TREE_TYPE (TREE_TYPE (ref)))
! 	      || (VECTOR_TYPE_P (TREE_TYPE (op1))
! 		  && useless_type_conversion_p (TREE_TYPE (TREE_TYPE (op1)),
! 						TREE_TYPE (TREE_TYPE (ref)))
! 		  && TYPE_VECTOR_SUBPARTS (TREE_TYPE (op1))
! 			.is_constant (&nsubelts)))
! 	  && constant_multiple_p (bit_field_size (op1), nsubelts,
! 				  &src_elem_size)
! 	  && constant_multiple_p (bit_field_offset (op1), src_elem_size, &elem)
  	  && TYPE_VECTOR_SUBPARTS (TREE_TYPE (ref)).is_constant (&refnelts))
  	{
  	  unsigned int j;
*************** simplify_vector_constructor (gimple_stmt
*** 3853,3859 ****
  		maybe_ident = false;
  	      if (elem != i)
  		maybe_blend[j] = false;
! 	      elts.safe_push (std::make_pair (j, elem));
  	      continue;
  	    }
  	  /* Else fallthru.  */
--- 3860,3868 ----
  		maybe_ident = false;
  	      if (elem != i)
  		maybe_blend[j] = false;
! 	      for (unsigned int k = 0; k < nsubelts; ++k)
! 		elts.safe_push (std::make_pair (j, elem + k));
! 	      tsubelts += nsubelts;
  	      continue;
  	    }
  	  /* Else fallthru.  */
*************** simplify_vector_constructor (gimple_stmt
*** 3865,3891 ****
  	  && orig[1] != error_mark_node)
  	return false;
        orig[1] = error_mark_node;
        if (CONSTANT_CLASS_P (elt->value))
  	{
  	  if (one_nonconstant)
  	    return false;
  	  if (!one_constant)
! 	    one_constant = elt->value;
! 	  constants[i] = elt->value;
  	}
        else
  	{
  	  if (one_constant)
  	    return false;
  	  if (!one_nonconstant)
! 	    one_nonconstant = elt->value;
! 	  else if (!operand_equal_p (one_nonconstant, elt->value, 0))
  	    return false;
  	}
!       elts.safe_push (std::make_pair (1, i));
        maybe_ident = false;
      }
!   if (i < nelts)
      return false;
  
    if (! orig[0]
--- 3874,3920 ----
  	  && orig[1] != error_mark_node)
  	return false;
        orig[1] = error_mark_node;
+       if (VECTOR_TYPE_P (TREE_TYPE (elt->value))
+ 	  && !TYPE_VECTOR_SUBPARTS (TREE_TYPE (elt->value))
+ 			.is_constant (&nsubelts))
+ 	return false;
        if (CONSTANT_CLASS_P (elt->value))
  	{
  	  if (one_nonconstant)
  	    return false;
  	  if (!one_constant)
! 	    one_constant = TREE_CODE (elt->value) == VECTOR_CST
! 			   ? VECTOR_CST_ELT (elt->value, 0)
! 			   : elt->value;
! 	  if (TREE_CODE (elt->value) == VECTOR_CST)
! 	    {
! 	      for (unsigned int k = 0; k < nsubelts; k++)
! 		constants[tsubelts + k] = VECTOR_CST_ELT (elt->value, k);
! 	    }
! 	  else
! 	    constants[tsubelts] = elt->value;
  	}
        else
  	{
  	  if (one_constant)
  	    return false;
+ 	  subelt = VECTOR_TYPE_P (TREE_TYPE (elt->value))
+ 		   ? ssa_uniform_vector_p (elt->value)
+ 		   : elt->value;
+ 	  if (!subelt)
+ 	    return false;
  	  if (!one_nonconstant)
! 	    one_nonconstant = subelt;
! 	  else if (!operand_equal_p (one_nonconstant, subelt, 0))
  	    return false;
  	}
!       for (unsigned int k = 0; k < nsubelts; ++k)
! 	elts.safe_push (std::make_pair (1, tsubelts + k));
!       tsubelts += nsubelts;
        maybe_ident = false;
      }
! 
!   if (elts.length () < nelts)
      return false;
  
    if (! orig[0]
*************** optimize_unreachable (basic_block bb)
*** 5051,5057 ****
        stmt = gsi_stmt (gsi);
        if (gcond *cond_stmt = dyn_cast <gcond *> (stmt))
  	{
! 	  if (e->flags & EDGE_TRUE_VALUE)
  	    gimple_cond_make_false (cond_stmt);
  	  else if (e->flags & EDGE_FALSE_VALUE)
  	    gimple_cond_make_true (cond_stmt);
--- 5080,5091 ----
        stmt = gsi_stmt (gsi);
        if (gcond *cond_stmt = dyn_cast <gcond *> (stmt))
  	{
! 	  /* If the condition is already true/false
! 	     ignore it. This can happen during copy prop of forwprop. */
! 	  if (gimple_cond_true_p (cond_stmt)
! 	      || gimple_cond_false_p (cond_stmt))
! 	    continue;
! 	  else if (e->flags & EDGE_TRUE_VALUE)
  	    gimple_cond_make_false (cond_stmt);
  	  else if (e->flags & EDGE_FALSE_VALUE)
  	    gimple_cond_make_true (cond_stmt);
diff -Nrcpad gcc-16-20251102/gcc/tree-ssa-loop-niter.cc gcc-16-20251109/gcc/tree-ssa-loop-niter.cc
*** gcc-16-20251102/gcc/tree-ssa-loop-niter.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-ssa-loop-niter.cc	Sun Nov  9 22:33:51 2025
*************** dump_affine_iv (FILE *file, affine_iv *i
*** 1752,1767 ****
    if (!integer_zerop (iv->step))
      fprintf (file, "[");
  
!   print_generic_expr (dump_file, iv->base, TDF_SLIM);
  
    if (!integer_zerop (iv->step))
      {
        fprintf (file, ", + , ");
!       print_generic_expr (dump_file, iv->step, TDF_SLIM);
        fprintf (file, "]%s", iv->no_overflow ? "(no_overflow)" : "");
      }
  }
  
  /* Determine the number of iterations according to condition (for staying
     inside loop) which compares two induction variables using comparison
     operator CODE.  The induction variable on left side of the comparison
--- 1752,1774 ----
    if (!integer_zerop (iv->step))
      fprintf (file, "[");
  
!   print_generic_expr (file, iv->base, TDF_SLIM);
  
    if (!integer_zerop (iv->step))
      {
        fprintf (file, ", + , ");
!       print_generic_expr (file, iv->step, TDF_SLIM);
        fprintf (file, "]%s", iv->no_overflow ? "(no_overflow)" : "");
      }
  }
  
+ DEBUG_FUNCTION void
+ debug (affine_iv *iv)
+ {
+   dump_affine_iv (stderr, iv);
+   fputc ('\n', stderr);
+ }
+ 
  /* Determine the number of iterations according to condition (for staying
     inside loop) which compares two induction variables using comparison
     operator CODE.  The induction variable on left side of the comparison
diff -Nrcpad gcc-16-20251102/gcc/tree-ssa-operands.cc gcc-16-20251109/gcc/tree-ssa-operands.cc
*** gcc-16-20251102/gcc/tree-ssa-operands.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-ssa-operands.cc	Sun Nov  9 22:33:51 2025
*************** single_imm_use_1 (const ssa_use_operand_
*** 1416,1418 ****
--- 1416,1438 ----
    return single_use;
  }
  
+ /* Gather all stmts SSAVAR is used on, eliminating duplicates.  */
+ 
+ auto_vec<gimple *, 2>
+ gather_imm_use_stmts (tree ssavar)
+ {
+   auto_vec<gimple *, 2> stmts;
+   imm_use_iterator iter;
+   use_operand_p use_p;
+   FOR_EACH_IMM_USE_FAST (use_p, iter, ssavar)
+     {
+       gimple *use_stmt = USE_STMT (use_p);
+       if (use_stmt->ilf)
+ 	continue;
+       use_stmt->ilf = 1;
+       stmts.safe_push (use_stmt);
+     }
+   for (gimple *use_stmt : stmts)
+     use_stmt->ilf = 0;
+   return stmts;
+ }
diff -Nrcpad gcc-16-20251102/gcc/tree-ssanames.cc gcc-16-20251109/gcc/tree-ssanames.cc
*** gcc-16-20251102/gcc/tree-ssanames.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-ssanames.cc	Sun Nov  9 22:33:51 2025
*************** make_ssa_name_fn (struct function *fn, t
*** 406,411 ****
--- 406,415 ----
    SSA_NAME_IN_FREE_LIST (t) = 0;
    SSA_NAME_IS_DEFAULT_DEF (t) = 0;
    init_ssa_name_imm_use (t);
+ #if defined ENABLE_GIMPLE_CHECKING
+   t->ssa_name.active_iterated_stmt = NULL;
+   t->ssa_name.fast_iteration_depth = 0;
+ #endif
  
    return t;
  }
diff -Nrcpad gcc-16-20251102/gcc/tree-vect-data-refs.cc gcc-16-20251109/gcc/tree-vect-data-refs.cc
*** gcc-16-20251102/gcc/tree-vect-data-refs.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-vect-data-refs.cc	Sun Nov  9 22:33:51 2025
*************** vect_prune_runtime_alias_test_list (loop
*** 4425,4430 ****
--- 4425,4592 ----
    return opt_result::success ();
  }
  
+ /* Structure to hold information about a supported gather/scatter
+    configuration.  */
+ struct gather_scatter_config
+ {
+   internal_fn ifn;
+   tree offset_vectype;
+   int scale;
+   vec<int> elsvals;
+ };
+ 
+ /* Determine which gather/scatter IFN is supported for the given parameters.
+    IFN_MASK_GATHER_LOAD, IFN_GATHER_LOAD, and IFN_MASK_LEN_GATHER_LOAD
+    are mutually exclusive, so we only need to find one.  Return the
+    supported IFN or IFN_LAST if none are supported.  */
+ 
+ static internal_fn
+ vect_gather_scatter_which_ifn (bool read_p, bool masked_p,
+ 			       tree vectype, tree memory_type,
+ 			       tree offset_vectype, int scale,
+ 			       vec<int> *elsvals)
+ {
+   /* Work out which functions to try.  */
+   internal_fn ifn, alt_ifn, alt_ifn2;
+   if (read_p)
+     {
+       ifn = masked_p ? IFN_MASK_GATHER_LOAD : IFN_GATHER_LOAD;
+       alt_ifn = IFN_MASK_GATHER_LOAD;
+       alt_ifn2 = IFN_MASK_LEN_GATHER_LOAD;
+     }
+   else
+     {
+       ifn = masked_p ? IFN_MASK_SCATTER_STORE : IFN_SCATTER_STORE;
+       alt_ifn = IFN_MASK_SCATTER_STORE;
+       alt_ifn2 = IFN_MASK_LEN_SCATTER_STORE;
+     }
+ 
+   if (!offset_vectype)
+     return IFN_LAST;
+ 
+   if (internal_gather_scatter_fn_supported_p (ifn, vectype, memory_type,
+ 					      offset_vectype, scale, elsvals))
+     return ifn;
+   if (internal_gather_scatter_fn_supported_p (alt_ifn, vectype, memory_type,
+ 					      offset_vectype, scale, elsvals))
+     return alt_ifn;
+   if (internal_gather_scatter_fn_supported_p (alt_ifn2, vectype, memory_type,
+ 					      offset_vectype, scale, elsvals))
+     return alt_ifn2;
+ 
+   return IFN_LAST;
+ }
+ 
+ /* Collect all supported offset vector types for a gather load or scatter
+    store.  READ_P is true for loads and false for stores.  MASKED_P is true
+    if the load or store is conditional.  VECTYPE is the data vector type.
+    MEMORY_TYPE is the type of the memory elements being loaded or stored,
+    and OFFSET_TYPE is the type of the offset.
+    SCALE is the amount by which the offset should be multiplied.
+ 
+    Return a vector of all configurations the target supports (which can
+    be none).  */
+ 
+ static auto_vec<gather_scatter_config>
+ vect_gather_scatter_get_configs (vec_info *vinfo, bool read_p, bool masked_p,
+ 				 tree vectype, tree memory_type,
+ 				 tree offset_type, int scale)
+ {
+   auto_vec<gather_scatter_config> configs;
+ 
+   auto_vec<tree, 8> offset_types_to_try;
+ 
+   /* Try all sizes from the offset type's precision up to POINTER_SIZE.  */
+   for (unsigned int bits = TYPE_PRECISION (offset_type);
+        bits <= POINTER_SIZE;
+        bits *= 2)
+     {
+       /* Signed variant.  */
+       offset_types_to_try.safe_push
+ 	(build_nonstandard_integer_type (bits, 0));
+       /* Unsigned variant.  */
+       offset_types_to_try.safe_push
+ 	(build_nonstandard_integer_type (bits, 1));
+     }
+ 
+   /* Once we find which IFN works for one offset type, we know that it
+      will work for other offset types as well.  Then we can perform
+      the checks for the remaining offset types with only that IFN.
+      However, we might need to try different offset types to find which
+      IFN is supported, since the check is offset-type-specific.  */
+   internal_fn ifn = IFN_LAST;
+ 
+   /* Try each offset type.  */
+   for (unsigned int i = 0; i < offset_types_to_try.length (); i++)
+     {
+       tree offset_type = offset_types_to_try[i];
+       tree offset_vectype = get_vectype_for_scalar_type (vinfo, offset_type);
+       if (!offset_vectype)
+ 	continue;
+ 
+       /* Try multiple scale values.  Start with exact match, then try
+ 	 smaller common scales that a target might support .  */
+       int scales_to_try[] = {scale, 1, 2, 4, 8};
+ 
+       for (unsigned int j = 0;
+ 	   j < sizeof (scales_to_try) / sizeof (*scales_to_try);
+ 	   j++)
+ 	{
+ 	  int try_scale = scales_to_try[j];
+ 
+ 	  /* Skip scales >= requested scale (except for exact match).  */
+ 	  if (j > 0 && try_scale >= scale)
+ 	    continue;
+ 
+ 	  /* Skip if requested scale is not a multiple of this scale.  */
+ 	  if (j > 0 && scale % try_scale != 0)
+ 	    continue;
+ 
+ 	  vec<int> elsvals = vNULL;
+ 
+ 	  /* If we haven't determined which IFN is supported yet, try all three
+ 	     to find which one the target supports.  */
+ 	  if (ifn == IFN_LAST)
+ 	    {
+ 	      ifn = vect_gather_scatter_which_ifn (read_p, masked_p,
+ 						   vectype, memory_type,
+ 						   offset_vectype, try_scale,
+ 						   &elsvals);
+ 	      if (ifn != IFN_LAST)
+ 		{
+ 		  /* Found which IFN is supported.  Save this configuration.  */
+ 		  gather_scatter_config config;
+ 		  config.ifn = ifn;
+ 		  config.offset_vectype = offset_vectype;
+ 		  config.scale = try_scale;
+ 		  config.elsvals = elsvals;
+ 		  configs.safe_push (config);
+ 		}
+ 	    }
+ 	  else
+ 	    {
+ 	      /* We already know which IFN is supported, just check if this
+ 		 offset type and scale work with it.  */
+ 	      if (internal_gather_scatter_fn_supported_p (ifn, vectype,
+ 							  memory_type,
+ 							  offset_vectype,
+ 							  try_scale,
+ 							  &elsvals))
+ 		{
+ 		  gather_scatter_config config;
+ 		  config.ifn = ifn;
+ 		  config.offset_vectype = offset_vectype;
+ 		  config.scale = try_scale;
+ 		  config.elsvals = elsvals;
+ 		  configs.safe_push (config);
+ 		}
+ 	    }
+ 	}
+     }
+ 
+   return configs;
+ }
+ 
  /* Check whether we can use an internal function for a gather load
     or scatter store.  READ_P is true for loads and false for stores.
     MASKED_P is true if the load or store is conditional.  MEMORY_TYPE is
*************** vect_prune_runtime_alias_test_list (loop
*** 4433,4450 ****
     base address.  If OFFSET_TYPE is scalar the function chooses an
     appropriate vector type for it.  SCALE is the amount by which the
     offset should be multiplied *after* it has been converted to address width.
  
     Return true if the function is supported, storing the function id in
     *IFN_OUT and the vector type for the offset in *OFFSET_VECTYPE_OUT.
  
!    If we can use gather and store the possible else values in ELSVALS.  */
  
  bool
  vect_gather_scatter_fn_p (vec_info *vinfo, bool read_p, bool masked_p,
  			  tree vectype, tree memory_type, tree offset_type,
! 			  int scale, internal_fn *ifn_out,
! 			  tree *offset_vectype_out, vec<int> *elsvals)
  {
    unsigned int memory_bits = tree_to_uhwi (TYPE_SIZE (memory_type));
    unsigned int element_bits = vector_element_bits (vectype);
    if (element_bits != memory_bits)
--- 4595,4624 ----
     base address.  If OFFSET_TYPE is scalar the function chooses an
     appropriate vector type for it.  SCALE is the amount by which the
     offset should be multiplied *after* it has been converted to address width.
+    If the target does not support the requested SCALE, SUPPORTED_SCALE
+    will contain the scale that is actually supported
+    (which may be smaller, requiring additional multiplication).
+    Otherwise SUPPORTED_SCALE is 0.
  
     Return true if the function is supported, storing the function id in
     *IFN_OUT and the vector type for the offset in *OFFSET_VECTYPE_OUT.
+    If we support an offset vector type with different signedness than
+    OFFSET_TYPE store it in SUPPORTED_OFFSET_VECTYPE.
  
!    If we can use gather/scatter and ELSVALS is nonzero, store the possible
!    else values in ELSVALS.  */
  
  bool
  vect_gather_scatter_fn_p (vec_info *vinfo, bool read_p, bool masked_p,
  			  tree vectype, tree memory_type, tree offset_type,
! 			  int scale, int *supported_scale,
! 			  internal_fn *ifn_out,
! 			  tree *offset_vectype_out,
! 			  tree *supported_offset_vectype,
! 			  vec<int> *elsvals)
  {
+   *supported_offset_vectype = NULL_TREE;
+   *supported_scale = 0;
    unsigned int memory_bits = tree_to_uhwi (TYPE_SIZE (memory_type));
    unsigned int element_bits = vector_element_bits (vectype);
    if (element_bits != memory_bits)
*************** vect_gather_scatter_fn_p (vec_info *vinf
*** 4452,4531 ****
         memory elements.  */
      return false;
  
!   /* Work out which function we need.  */
!   internal_fn ifn, alt_ifn, alt_ifn2;
!   if (read_p)
!     {
!       ifn = masked_p ? IFN_MASK_GATHER_LOAD : IFN_GATHER_LOAD;
!       alt_ifn = IFN_MASK_GATHER_LOAD;
!       /* When target supports MASK_LEN_GATHER_LOAD, we always
! 	 use MASK_LEN_GATHER_LOAD regardless whether len and
! 	 mask are valid or not.  */
!       alt_ifn2 = IFN_MASK_LEN_GATHER_LOAD;
!     }
!   else
!     {
!       ifn = masked_p ? IFN_MASK_SCATTER_STORE : IFN_SCATTER_STORE;
!       alt_ifn = IFN_MASK_SCATTER_STORE;
!       /* When target supports MASK_LEN_SCATTER_STORE, we always
! 	 use MASK_LEN_SCATTER_STORE regardless whether len and
! 	 mask are valid or not.  */
!       alt_ifn2 = IFN_MASK_LEN_SCATTER_STORE;
!     }
  
!   for (;;)
      {
!       tree offset_vectype;
!       if (VECTOR_TYPE_P (offset_type))
! 	offset_vectype = offset_type;
!       else
  	{
! 	  offset_vectype = get_vectype_for_scalar_type (vinfo, offset_type);
! 	  if (!offset_vectype)
! 	    return false;
  	}
  
!       /* Test whether the target supports this combination.  */
!       if (internal_gather_scatter_fn_supported_p (ifn, vectype, memory_type,
! 						  offset_vectype, scale,
! 						  elsvals))
  	{
! 	  *ifn_out = ifn;
  	  *offset_vectype_out = offset_vectype;
  	  return true;
  	}
!       else if (!masked_p
! 	       && internal_gather_scatter_fn_supported_p (alt_ifn, vectype,
! 							  memory_type,
! 							  offset_vectype,
! 							  scale, elsvals))
  	{
! 	  *ifn_out = alt_ifn;
! 	  *offset_vectype_out = offset_vectype;
  	  return true;
  	}
!       else if (internal_gather_scatter_fn_supported_p (alt_ifn2, vectype,
! 						       memory_type,
! 						       offset_vectype, scale,
! 						       elsvals))
  	{
! 	  *ifn_out = alt_ifn2;
  	  *offset_vectype_out = offset_vectype;
  	  return true;
  	}
- 
-       /* For fixed offset vector type we're done.  */
-       if (VECTOR_TYPE_P (offset_type))
- 	return false;
- 
-       if (TYPE_PRECISION (offset_type) >= POINTER_SIZE
- 	  && TYPE_PRECISION (offset_type) >= element_bits)
- 	return false;
- 
-       /* Try a larger offset vector type.  */
-       offset_type = build_nonstandard_integer_type
- 	(TYPE_PRECISION (offset_type) * 2, TYPE_UNSIGNED (offset_type));
      }
  }
  
  /* STMT_INFO is a call to an internal gather load or scatter store function.
--- 4626,4756 ----
         memory elements.  */
      return false;
  
!   /* Get the original offset vector type for comparison.  */
!   tree offset_vectype = VECTOR_TYPE_P (offset_type)
!     ? offset_type : get_vectype_for_scalar_type (vinfo, offset_type);
  
!   offset_type = TREE_TYPE (offset_vectype);
! 
!   /* Get all supported configurations for this data vector type.  */
!   auto_vec<gather_scatter_config> configs
!     = vect_gather_scatter_get_configs (vinfo, read_p, masked_p, vectype,
! 				       memory_type, offset_type, scale);
! 
!   if (configs.is_empty ())
!     return false;
! 
!   /* Selection priority:
!      1 - Exact scale match + offset type match
!      2 - Exact scale match + sign-swapped offset
!      3 - Smaller scale + offset type match
!      4 - Smaller scale + sign-swapped offset
!      Within each category, prefer smaller offset types.  */
! 
!   /* First pass: exact scale match with no conversion.  */
!   for (unsigned int i = 0; i < configs.length (); i++)
      {
!       if (configs[i].scale == scale
! 	  && TYPE_SIGN (configs[i].offset_vectype)
! 	     == TYPE_SIGN (offset_vectype))
  	{
! 	  *ifn_out = configs[i].ifn;
! 	  *offset_vectype_out = configs[i].offset_vectype;
! 	  if (elsvals)
! 	    *elsvals = configs[i].elsvals;
! 	  return true;
  	}
+     }
  
!   /* No direct match.  This means we try to find either
!       - a sign-swapped offset vectype or
!       - a different scale and 2x larger offset type
!       - a different scale and larger sign-swapped offset vectype.  */
!   unsigned int offset_precision = TYPE_PRECISION (TREE_TYPE (offset_vectype));
!   unsigned int needed_precision
!     = TYPE_UNSIGNED (offset_vectype) ? offset_precision * 2 : POINTER_SIZE;
!   needed_precision = std::min (needed_precision, (unsigned) POINTER_SIZE);
! 
!   /* Second pass: No direct match.  This means we try to find a sign-swapped
!      offset vectype.  */
!   enum tree_code tmp;
!   for (unsigned int i = 0; i < configs.length (); i++)
!     {
!       unsigned int precision
! 	= TYPE_PRECISION (TREE_TYPE (configs[i].offset_vectype));
!       if (configs[i].scale == scale
! 	  && precision >= needed_precision
! 	  && (supportable_convert_operation (CONVERT_EXPR,
! 					     configs[i].offset_vectype,
! 					     offset_vectype, &tmp)
! 	      || (needed_precision == offset_precision
! 		  && tree_nop_conversion_p (configs[i].offset_vectype,
! 					    offset_vectype))))
  	{
! 	  *ifn_out = configs[i].ifn;
  	  *offset_vectype_out = offset_vectype;
+ 	  *supported_offset_vectype = configs[i].offset_vectype;
+ 	  if (elsvals)
+ 	    *elsvals = configs[i].elsvals;
  	  return true;
  	}
!     }
! 
!   /* Third pass: Try a smaller scale with the same signedness.  */
!   needed_precision = offset_precision * 2;
!   needed_precision = std::min (needed_precision, (unsigned) POINTER_SIZE);
! 
!   for (unsigned int i = 0; i < configs.length (); i++)
!     {
!       unsigned int precision
! 	= TYPE_PRECISION (TREE_TYPE (configs[i].offset_vectype));
!       if (configs[i].scale < scale
! 	  && precision >= needed_precision
! 	  && (supportable_convert_operation (CONVERT_EXPR,
! 					    configs[i].offset_vectype,
! 					    offset_vectype, &tmp)
! 	      || (needed_precision == offset_precision
! 		  && tree_nop_conversion_p (configs[i].offset_vectype,
! 					    offset_vectype))))
  	{
! 	  *ifn_out = configs[i].ifn;
! 	  *offset_vectype_out = configs[i].offset_vectype;
! 	  *supported_scale = configs[i].scale;
! 	  if (elsvals)
! 	    *elsvals = configs[i].elsvals;
  	  return true;
  	}
!     }
! 
!   /* Fourth pass: Try a smaller scale and sign-swapped offset vectype.  */
!   needed_precision
!     = TYPE_UNSIGNED (offset_vectype) ? offset_precision * 2 : POINTER_SIZE;
!   needed_precision = std::min (needed_precision, (unsigned) POINTER_SIZE);
! 
!   for (unsigned int i = 0; i < configs.length (); i++)
!     {
!       unsigned int precision
! 	= TYPE_PRECISION (TREE_TYPE (configs[i].offset_vectype));
!       if (configs[i].scale < scale
! 	  && precision >= needed_precision
! 	  && (supportable_convert_operation (CONVERT_EXPR,
! 					     configs[i].offset_vectype,
! 					     offset_vectype, &tmp)
! 	      || (needed_precision == offset_precision
! 		  && tree_nop_conversion_p (configs[i].offset_vectype,
! 					    offset_vectype))))
  	{
! 	  *ifn_out = configs[i].ifn;
  	  *offset_vectype_out = offset_vectype;
+ 	  *supported_offset_vectype = configs[i].offset_vectype;
+ 	  *supported_scale = configs[i].scale;
+ 	  if (elsvals)
+ 	    *elsvals = configs[i].elsvals;
  	  return true;
  	}
      }
+ 
+   return false;
  }
  
  /* STMT_INFO is a call to an internal gather load or scatter store function.
*************** vect_check_gather_scatter (stmt_vec_info
*** 4678,4683 ****
--- 4903,4910 ----
  
    base = fold_convert (sizetype, base);
    base = size_binop (PLUS_EXPR, base, size_int (pbytepos));
+   int tmp_scale;
+   tree tmp_offset_vectype;
  
    /* OFF at this point may be either a SSA_NAME or some tree expression
       from get_inner_reference.  Try to peel off loop invariants from it
*************** vect_check_gather_scatter (stmt_vec_info
*** 4750,4763 ****
  		  && !vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr),
  						masked_p, vectype, memory_type,
  						signed_char_type_node,
! 						new_scale, &ifn,
  						&offset_vectype,
  						elsvals)
  		  && !vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr),
  						masked_p, vectype, memory_type,
  						unsigned_char_type_node,
! 						new_scale, &ifn,
  						&offset_vectype,
  						elsvals))
  		break;
  	      scale = new_scale;
--- 4977,4994 ----
  		  && !vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr),
  						masked_p, vectype, memory_type,
  						signed_char_type_node,
! 						new_scale, &tmp_scale,
! 						&ifn,
  						&offset_vectype,
+ 						&tmp_offset_vectype,
  						elsvals)
  		  && !vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr),
  						masked_p, vectype, memory_type,
  						unsigned_char_type_node,
! 						new_scale, &tmp_scale,
! 						&ifn,
  						&offset_vectype,
+ 						&tmp_offset_vectype,
  						elsvals))
  		break;
  	      scale = new_scale;
*************** vect_check_gather_scatter (stmt_vec_info
*** 4780,4787 ****
  	      && !POINTER_TYPE_P (TREE_TYPE (off))
  	      && vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr),
  					   masked_p, vectype, memory_type,
! 					   TREE_TYPE (off), scale, &ifn,
! 					   &offset_vectype, elsvals))
  	    break;
  
  	  if (TYPE_PRECISION (TREE_TYPE (op0))
--- 5011,5022 ----
  	      && !POINTER_TYPE_P (TREE_TYPE (off))
  	      && vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr),
  					   masked_p, vectype, memory_type,
! 					   TREE_TYPE (off),
! 					   scale, &tmp_scale,
! 					   &ifn,
! 					   &offset_vectype,
! 					   &tmp_offset_vectype,
! 					   elsvals))
  	    break;
  
  	  if (TYPE_PRECISION (TREE_TYPE (op0))
*************** vect_check_gather_scatter (stmt_vec_info
*** 4834,4841 ****
    if (use_ifn_p)
      {
        if (!vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr), masked_p,
! 				     vectype, memory_type, offtype, scale,
! 				     &ifn, &offset_vectype, elsvals))
  	ifn = IFN_LAST;
        decl = NULL_TREE;
      }
--- 5069,5079 ----
    if (use_ifn_p)
      {
        if (!vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr), masked_p,
! 				     vectype, memory_type, offtype,
! 				     scale, &tmp_scale,
! 				     &ifn, &offset_vectype,
! 				     &tmp_offset_vectype,
! 				     elsvals))
  	ifn = IFN_LAST;
        decl = NULL_TREE;
      }
diff -Nrcpad gcc-16-20251102/gcc/tree-vect-generic.cc gcc-16-20251109/gcc/tree-vect-generic.cc
*** gcc-16-20251102/gcc/tree-vect-generic.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-vect-generic.cc	Sun Nov  9 22:33:51 2025
*************** add_shift (gimple_stmt_iterator *gsi, tr
*** 497,523 ****
  
    return NULL_TREE;
  }
! /* Try to expand integer vector multiplication by constant of power 2 using
!    left shifts.  */
  static tree
  expand_vector_mult (gimple_stmt_iterator *gsi, tree type, tree op0,
  		    tree op1)
  {
    unsigned int nunits = nunits_for_known_piecewise_op (type);
    int *shifts = XALLOCAVEC (int, nunits);
  
!   // if all element are same value and a power of 2, then we can use shifts
    for (unsigned int i = 0; i < nunits; i++)
      {
        tree cst = VECTOR_CST_ELT (op1, i);
!       if ((TREE_CODE (cst) != INTEGER_CST || integer_zerop (cst))
! 	  || !integer_pow2p (cst) || tree_int_cst_sgn (cst) != 1)
  	return NULL_TREE;
  
        shifts[i] = tree_log2 (cst);
      }
!   tree cur_op = add_shift (gsi, type, op0, shifts, LSHIFT_EXPR);
!   return cur_op;
  }
  /* Try to expand integer vector division by constant using
     widening multiply, shifts and additions.  */
--- 497,697 ----
  
    return NULL_TREE;
  }
! 
! /* Verify that the target has optabs of VECTYPE to perform all the steps
!    needed by the multiplication-by-immediate synthesis algorithm described by
!    ALG and VAR.  Return true iff the target supports all the steps.  */
! static bool
! target_supports_mult_synth_alg (struct algorithm *alg, mult_variant var,
! 				tree vectype)
! {
!   if (alg->op[0] != alg_zero && alg->op[0] != alg_m)
!     return false;
! 
!   bool plus_supported_p = target_supports_op_p (vectype, PLUS_EXPR,
! 						  optab_vector);
!   bool minus_supported_p = target_supports_op_p (vectype, MINUS_EXPR,
! 						  optab_vector);
!   bool negate_supported_p = target_supports_op_p (vectype, NEGATE_EXPR,
! 						  optab_vector);
! 
!   if ((var == negate_variant && !negate_supported_p)
!       || (var == add_variant && !plus_supported_p))
!     return false;
! 
!   bool lshift_supported_p
!     = (target_supports_op_p (vectype, LSHIFT_EXPR, optab_scalar)
!        || target_supports_op_p (vectype, LSHIFT_EXPR, optab_vector));
! 
!   for (int i = 1; i < alg->ops; i++)
!     {
!       switch (alg->op[i])
! 	{
! 	case alg_shift:
! 	  if (!lshift_supported_p)
! 	    return false;
! 	  break;
! 	case alg_add_t_m2:
! 	case alg_add_t2_m:
! 	case alg_add_factor:
! 	  if (!plus_supported_p || !lshift_supported_p)
! 	    return false;
! 	  break;
! 	case alg_sub_t_m2:
! 	case alg_sub_t2_m:
! 	case alg_sub_factor:
! 	  if (!minus_supported_p || !lshift_supported_p)
! 	    return false;
! 	  break;
! 	case alg_unknown:
! 	case alg_m:
! 	case alg_zero:
! 	case alg_impossible:
! 	  return false;
! 	default:
! 	  gcc_unreachable ();
! 	}
!     }
! 
!   return true;
! }
! /* For integer multiplications with exact power of 2, use left shifts.
!    In constant is a uniform vector, then check if it can be synthesized with
!    shifts and adds/subs.  Use scalar multiplication cost to compare with the
!    synthesized vector code as done in expmed.cc.  */
  static tree
  expand_vector_mult (gimple_stmt_iterator *gsi, tree type, tree op0,
  		    tree op1)
  {
+   if (!CONSTANT_CLASS_P (op1))
+     return NULL_TREE;
    unsigned int nunits = nunits_for_known_piecewise_op (type);
    int *shifts = XALLOCAVEC (int, nunits);
  
!   bool perfect_pow2_p = true;
!   bool uniform_const_p = true;
!   unsigned HOST_WIDE_INT first_cst, const_elt;
    for (unsigned int i = 0; i < nunits; i++)
      {
        tree cst = VECTOR_CST_ELT (op1, i);
!       if (TREE_CODE (cst) != INTEGER_CST || tree_int_cst_sgn (cst) <= 0)
  	return NULL_TREE;
  
+       perfect_pow2_p &= integer_pow2p (cst);
+ 
+       if (uniform_const_p && tree_fits_uhwi_p (cst))
+ 	{
+ 	  const_elt = TREE_INT_CST_LOW (cst);
+ 	  if (i == 0)
+ 	    first_cst = const_elt;
+ 	  else if (first_cst != const_elt)
+ 	    uniform_const_p = false;
+ 	}
+       else
+ 	uniform_const_p = false;
+ 
        shifts[i] = tree_log2 (cst);
      }
!   if (perfect_pow2_p)
!     return add_shift (gsi, type, op0, shifts, LSHIFT_EXPR);
!   else if (uniform_const_p)
!     {
!       tree scalar_type = type;
!       gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
!       scalar_type = TREE_TYPE (type);
! 
!       // handle signed ints
!       bool cast_to_unsigned_p = !TYPE_OVERFLOW_WRAPS (scalar_type);
!       tree multtype = cast_to_unsigned_p
! 	? unsigned_type_for (scalar_type) : scalar_type;
!       tree vectype = cast_to_unsigned_p ? unsigned_type_for (type) : type;
! 
!       // estimate the scalar MULT cost by generating dummy rtx insns
!       machine_mode mode = TYPE_MODE (multtype);
!       rtx rop0 = gen_rtx_REG (mode, 0);
!       rtx rop1 = gen_rtx_REG (mode, 1);
!       rtx mult_rtx = gen_rtx_MULT (mode, rop0, rop1);
!       int max_cost = nunits * set_src_cost (mult_rtx, mode, true);
! 
!       struct algorithm alg;
!       mult_variant variant;
! 
!       bool possible = choose_mult_variant (TYPE_MODE (vectype), const_elt, &alg,
! 					   &variant, max_cost);
!       if (!possible || !target_supports_mult_synth_alg (&alg, variant, vectype))
! 	return NULL_TREE;
!       if (cast_to_unsigned_p)
! 	{
! 	  tree tmp_op = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, vectype, op0);
! 	  op0 = tmp_op;
! 	}
!       tree accumulator, tmp_var;
!       if (alg.op[0] == alg_zero)
! 	accumulator = build_int_cst (vectype, 0);
!       else
! 	accumulator = op0;
! 
!       for (int i = 1; i < alg.ops; i++)
! 	{
! 	  for (unsigned int j = 0; j < nunits; j++)
! 	    shifts[j] = alg.log[i];
! 
! 	  switch (alg.op[i])
! 	    {
! 	    case alg_shift:
! 	      accumulator = add_shift (gsi, vectype, accumulator, shifts,
! 				       LSHIFT_EXPR);
! 	      break;
! 	    case alg_add_t_m2:
! 	       tmp_var = add_shift (gsi, vectype, op0, shifts, LSHIFT_EXPR);
! 	      accumulator = gimplify_build2 (gsi, PLUS_EXPR, vectype, tmp_var,
! 					    accumulator);
! 	      break;
! 	    case alg_sub_t_m2:
! 	      tmp_var = add_shift (gsi, vectype, op0, shifts, LSHIFT_EXPR);
! 	      accumulator = gimplify_build2 (gsi, MINUS_EXPR, vectype,
! 					     accumulator, tmp_var);
! 	      break;
! 	    case alg_add_t2_m:
! 	      tmp_var = add_shift (gsi, vectype, accumulator, shifts,
! 				   LSHIFT_EXPR);
! 	      accumulator = gimplify_build2 (gsi, PLUS_EXPR, vectype, tmp_var,
! 					     op0);
! 	      break;
! 	    case alg_sub_t2_m:
! 	      tmp_var = add_shift (gsi, vectype, accumulator, shifts,
! 				   LSHIFT_EXPR);
! 	      accumulator = gimplify_build2 (gsi, MINUS_EXPR, vectype,
! 					     tmp_var, op0);
! 	      break;
! 	    case alg_add_factor:
! 	      tmp_var = add_shift (gsi, vectype, accumulator, shifts,
! 				   LSHIFT_EXPR);
! 	      accumulator = gimplify_build2 (gsi, PLUS_EXPR, vectype,
! 					     accumulator, tmp_var);
! 	      break;
! 	    case alg_sub_factor:
! 	      tmp_var = add_shift (gsi, vectype, accumulator, shifts,
! 				   LSHIFT_EXPR);
! 	      accumulator = gimplify_build2 (gsi, MINUS_EXPR, vectype,
! 					     accumulator, tmp_var);
! 	      break;
! 	    default:
! 	      gcc_unreachable ();
! 	    }
! 	}
!       if (variant == negate_variant)
! 	accumulator = gimplify_build1 (gsi, NEGATE_EXPR, vectype, accumulator);
!       else if (variant == add_variant)
! 	accumulator = gimplify_build2 (gsi, PLUS_EXPR, vectype, accumulator,
! 				       op0);
! 
!       if (cast_to_unsigned_p)
! 	accumulator = gimplify_build1 (gsi, VIEW_CONVERT_EXPR, vectype,
! 				       accumulator);
!       return accumulator;
!     }
!   return NULL_TREE;
  }
  /* Try to expand integer vector division by constant using
     widening multiply, shifts and additions.  */
*************** lower_vec_perm (gimple_stmt_iterator *gs
*** 1619,1642 ****
    update_stmt (gsi_stmt (*gsi));
  }
  
- /* If OP is a uniform vector return the element it is a splat from.  */
- 
- static tree
- ssa_uniform_vector_p (tree op)
- {
-   if (TREE_CODE (op) == VECTOR_CST
-       || TREE_CODE (op) == VEC_DUPLICATE_EXPR
-       || TREE_CODE (op) == CONSTRUCTOR)
-     return uniform_vector_p (op);
-   if (TREE_CODE (op) == SSA_NAME)
-     {
-       gimple *def_stmt = SSA_NAME_DEF_STMT (op);
-       if (gimple_assign_single_p (def_stmt))
- 	return uniform_vector_p (gimple_assign_rhs1 (def_stmt));
-     }
-   return NULL_TREE;
- }
- 
  /* Return the type that should be used to implement OP on type TYPE.
     This is TYPE itself if the target can do the operation directly,
     otherwise it is a scalar type or a smaller vector type.  */
--- 1793,1798 ----
diff -Nrcpad gcc-16-20251102/gcc/tree-vect-loop.cc gcc-16-20251109/gcc/tree-vect-loop.cc
*** gcc-16-20251102/gcc/tree-vect-loop.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-vect-loop.cc	Sun Nov  9 22:33:51 2025
*************** vectorizable_reduction (loop_vec_info lo
*** 7578,7584 ****
    if ((double_reduc || neutral_op)
        && !nunits_out.is_constant ()
        && (SLP_TREE_LANES (slp_node) != 1 && !reduc_chain)
!       && !operand_equal_p (neutral_op, vect_phi_initial_value (reduc_def_phi))
        && !direct_internal_fn_supported_p (IFN_VEC_SHL_INSERT,
  					  vectype_out, OPTIMIZE_FOR_SPEED))
      {
--- 7578,7586 ----
    if ((double_reduc || neutral_op)
        && !nunits_out.is_constant ()
        && (SLP_TREE_LANES (slp_node) != 1 && !reduc_chain)
!       && (!neutral_op
! 	  || !operand_equal_p (neutral_op,
! 			       vect_phi_initial_value (reduc_def_phi)))
        && !direct_internal_fn_supported_p (IFN_VEC_SHL_INSERT,
  					  vectype_out, OPTIMIZE_FOR_SPEED))
      {
diff -Nrcpad gcc-16-20251102/gcc/tree-vect-stmts.cc gcc-16-20251109/gcc/tree-vect-stmts.cc
*** gcc-16-20251102/gcc/tree-vect-stmts.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-vect-stmts.cc	Sun Nov  9 22:33:51 2025
*************** check_load_store_for_partial_vectors (lo
*** 1505,1510 ****
--- 1505,1521 ----
  			  : 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);
+ 
+       /* The following "supported" checks just verify what we established in
+ 	 get_load_store_type and don't try different offset types.
+ 	 Therefore, off_vectype must be a supported offset type.  In case
+ 	 we chose a different one use this instead.  */
+       if (ls->supported_offset_vectype)
+ 	off_vectype = ls->supported_offset_vectype;
+       /* Same for scale.  */
+       if (ls->supported_scale)
+ 	scale = ls->supported_scale;
+ 
        if (internal_gather_scatter_fn_supported_p (len_ifn, vectype,
  						  memory_type,
  						  off_vectype, scale,
*************** vect_truncate_gather_scatter_offset (stm
*** 1697,1706 ****
        /* See whether the target supports the operation with an offset
  	 no narrower than OFFSET_TYPE.  */
        tree memory_type = TREE_TYPE (DR_REF (dr));
        if (!vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr), masked_p,
! 				     vectype, memory_type, offset_type, scale,
  				     &gs_info->ifn, &gs_info->offset_vectype,
! 				     elsvals)
  	  || gs_info->ifn == IFN_LAST)
  	continue;
  
--- 1708,1720 ----
        /* See whether the target supports the operation with an offset
  	 no narrower than OFFSET_TYPE.  */
        tree memory_type = TREE_TYPE (DR_REF (dr));
+       tree tmp_offset_vectype;
+       int tmp_scale;
        if (!vect_gather_scatter_fn_p (loop_vinfo, DR_IS_READ (dr), masked_p,
! 				     vectype, memory_type, offset_type,
! 				     scale, &tmp_scale,
  				     &gs_info->ifn, &gs_info->offset_vectype,
! 				     &tmp_offset_vectype, elsvals)
  	  || gs_info->ifn == IFN_LAST)
  	continue;
  
*************** vect_use_grouped_gather (dr_vec_info *dr
*** 1779,1788 ****
       type must exist) so it is possible that even though a gather/scatter is
       not available we still have a strided load/store.  */
    bool ok = false;
    if (vect_gather_scatter_fn_p
        (loop_vinfo, DR_IS_READ (dr), masked_p, *pun_vectype,
!        TREE_TYPE (*pun_vectype), *pun_vectype, 1, &ifn,
!        &offset_vectype, elsvals))
      ok = true;
    else if (internal_strided_fn_supported_p (strided_ifn, *pun_vectype,
  					    elsvals))
--- 1793,1804 ----
       type must exist) so it is possible that even though a gather/scatter is
       not available we still have a strided load/store.  */
    bool ok = false;
+   tree tmp_vectype;
+   int tmp_scale;
    if (vect_gather_scatter_fn_p
        (loop_vinfo, DR_IS_READ (dr), masked_p, *pun_vectype,
!        TREE_TYPE (*pun_vectype), *pun_vectype, 1, &tmp_scale, &ifn,
!        &offset_vectype, &tmp_vectype, elsvals))
      ok = true;
    else if (internal_strided_fn_supported_p (strided_ifn, *pun_vectype,
  					    elsvals))
*************** vect_use_strided_gather_scatters_p (stmt
*** 1840,1854 ****
  						masked_p, gs_info, elsvals))
  	return false;
      }
-   else
-     {
-       tree old_offset_type = TREE_TYPE (gs_info->offset);
-       tree new_offset_type = TREE_TYPE (gs_info->offset_vectype);
- 
-       gcc_assert (TYPE_PRECISION (new_offset_type)
- 		  >= TYPE_PRECISION (old_offset_type));
-       gs_info->offset = fold_convert (new_offset_type, gs_info->offset);
-     }
  
    if (!single_element_p
        && !targetm.vectorize.prefer_gather_scatter (TYPE_MODE (vectype),
--- 1856,1861 ----
*************** get_load_store_type (vec_info  *vinfo, s
*** 2080,2085 ****
--- 2087,2094 ----
    tree *ls_type = &ls->ls_type;
    bool *slp_perm = &ls->slp_perm;
    unsigned *n_perms = &ls->n_perms;
+   tree *supported_offset_vectype = &ls->supported_offset_vectype;
+   int *supported_scale = &ls->supported_scale;
    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
*** 2152,2163 ****
        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
--- 2161,2189 ----
        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, supported_scale,
  				    &ls->gs.ifn, &tem,
! 				    supported_offset_vectype, elsvals))
! 	{
! 	  if (dump_enabled_p ())
! 	    {
! 	      dump_printf_loc (MSG_NOTE, vect_location,
! 			       "gather/scatter with required "
! 			       "offset type "
! 			       "%T and offset scale %d.\n",
! 			       offset_vectype, scale);
! 	      if (*supported_offset_vectype)
! 		dump_printf_loc (MSG_NOTE, vect_location,
! 				 " target supports offset type %T.\n",
! 				 *supported_offset_vectype);
! 	      if (*supported_scale)
! 		dump_printf_loc (MSG_NOTE, vect_location,
! 				 " target supports offset scale %d.\n",
! 				 *supported_scale);
! 	    }
! 	  *memory_access_type = VMAT_GATHER_SCATTER_IFN;
! 	}
        else if (vls_type == VLS_LOAD
  	       ? (targetm.vectorize.builtin_gather
  		  && (ls->gs.decl
*************** get_load_store_type (vec_info  *vinfo, s
*** 2421,2426 ****
--- 2447,2465 ----
  						 masked_p, &gs_info, elsvals,
  						 group_size, single_element_p))
  	{
+ 	  /* vect_use_strided_gather_scatters_p does not save the actually
+ 	     supported scale and offset type so do that here.
+ 	     We need it later in check_load_store_for_partial_vectors
+ 	     where we only check if the given internal function is supported
+ 	     (to choose whether to use the IFN, LEGACY, or EMULATED flavor
+ 	     of gather/scatter) and don't re-do the full analysis.  */
+ 	  tree tmp;
+ 	  gcc_assert (vect_gather_scatter_fn_p
+ 		      (loop_vinfo, vls_type == VLS_LOAD, masked_p, vectype,
+ 		       gs_info.memory_type, TREE_TYPE (gs_info.offset),
+ 		       gs_info.scale, supported_scale, &gs_info.ifn,
+ 		       &tmp, supported_offset_vectype, elsvals));
+ 
  	  SLP_TREE_GS_SCALE (slp_node) = gs_info.scale;
  	  SLP_TREE_GS_BASE (slp_node) = error_mark_node;
  	  ls->gs.ifn = gs_info.ifn;
*************** vectorizable_conversion (vec_info *vinfo
*** 5282,5296 ****
      return false;
  
    if (!VECTOR_BOOLEAN_TYPE_P (vectype_out)
!       && ((INTEGRAL_TYPE_P (lhs_type)
! 	   && !type_has_mode_precision_p (lhs_type))
! 	  || (INTEGRAL_TYPE_P (rhs_type)
! 	      && !type_has_mode_precision_p (rhs_type))))
      {
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
!                          "type conversion to/from bit-precision unsupported."
!                          "\n");
        return false;
      }
  
--- 5321,5332 ----
      return false;
  
    if (!VECTOR_BOOLEAN_TYPE_P (vectype_out)
!       && INTEGRAL_TYPE_P (lhs_type)
!       && !type_has_mode_precision_p (lhs_type))
      {
        if (dump_enabled_p ())
  	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
! 			 "type conversion to bit-precision unsupported\n");
        return false;
      }
  
*************** vectorizable_store (vec_info *vinfo,
*** 8812,8817 ****
--- 8848,8862 ----
  	    {
  	      if (costing_p)
  		{
+ 		  if (ls.supported_offset_vectype)
+ 		    inside_cost
+ 		      += record_stmt_cost (cost_vec, 1, vector_stmt,
+ 					   slp_node, 0, vect_body);
+ 		  if (ls.supported_scale)
+ 		    inside_cost
+ 		      += record_stmt_cost (cost_vec, 1, vector_stmt,
+ 					   slp_node, 0, vect_body);
+ 
  		  unsigned int cnunits = vect_nunits_for_cost (vectype);
  		  inside_cost
  		    += record_stmt_cost (cost_vec, cnunits, scalar_store,
*************** vectorizable_store (vec_info *vinfo,
*** 8823,8828 ****
--- 8868,8897 ----
  		vec_offset = vec_offsets[j];
  
  	      tree scale = size_int (SLP_TREE_GS_SCALE (slp_node));
+ 	      bool strided = !VECTOR_TYPE_P (TREE_TYPE (vec_offset));
+ 
+ 	      /* Perform the offset conversion and scaling if necessary.  */
+ 	      if (!strided
+ 		  && (ls.supported_offset_vectype || ls.supported_scale))
+ 		{
+ 		  gimple_seq stmts = NULL;
+ 		  if (ls.supported_offset_vectype)
+ 		    vec_offset = gimple_convert
+ 		      (&stmts, ls.supported_offset_vectype, vec_offset);
+ 		  if (ls.supported_scale)
+ 		    {
+ 		      tree mult_cst = build_int_cst
+ 			(TREE_TYPE (TREE_TYPE (vec_offset)),
+ 			 SLP_TREE_GS_SCALE (slp_node) / ls.supported_scale);
+ 		      tree mult = build_vector_from_val
+ 			(TREE_TYPE (vec_offset), mult_cst);
+ 		      vec_offset = gimple_build
+ 			(&stmts, MULT_EXPR, TREE_TYPE (vec_offset),
+ 			 vec_offset, mult);
+ 		      scale = size_int (ls.supported_scale);
+ 		    }
+ 		  gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
+ 		}
  
  	      if (ls.gs.ifn == IFN_MASK_LEN_SCATTER_STORE)
  		{
*************** vectorizable_load (vec_info *vinfo,
*** 10638,10643 ****
--- 10707,10721 ----
  	    {
  	      if (costing_p)
  		{
+ 		  if (ls.supported_offset_vectype)
+ 		    inside_cost
+ 		      += record_stmt_cost (cost_vec, 1, vector_stmt,
+ 					   slp_node, 0, vect_body);
+ 		  if (ls.supported_scale)
+ 		    inside_cost
+ 		      += record_stmt_cost (cost_vec, 1, vector_stmt,
+ 					   slp_node, 0, vect_body);
+ 
  		  unsigned int cnunits = vect_nunits_for_cost (vectype);
  		  inside_cost
  		    = record_stmt_cost (cost_vec, cnunits, scalar_load,
*************** vectorizable_load (vec_info *vinfo,
*** 10648,10653 ****
--- 10726,10755 ----
  		vec_offset = vec_offsets[i];
  	      tree zero = build_zero_cst (vectype);
  	      tree scale = size_int (SLP_TREE_GS_SCALE (slp_node));
+ 	      bool strided = !VECTOR_TYPE_P (TREE_TYPE (vec_offset));
+ 
+ 	      /* Perform the offset conversion and scaling if necessary.  */
+ 	      if (!strided
+ 		  && (ls.supported_offset_vectype || ls.supported_scale))
+ 		{
+ 		  gimple_seq stmts = NULL;
+ 		  if (ls.supported_offset_vectype)
+ 		    vec_offset = gimple_convert
+ 		      (&stmts, ls.supported_offset_vectype, vec_offset);
+ 		  if (ls.supported_scale)
+ 		    {
+ 		      tree mult_cst = build_int_cst
+ 			(TREE_TYPE (TREE_TYPE (vec_offset)),
+ 			 SLP_TREE_GS_SCALE (slp_node) / ls.supported_scale);
+ 		      tree mult = build_vector_from_val
+ 			(TREE_TYPE (vec_offset), mult_cst);
+ 		      vec_offset = gimple_build
+ 			(&stmts, MULT_EXPR, TREE_TYPE (vec_offset),
+ 			 vec_offset, mult);
+ 		      scale = size_int (ls.supported_scale);
+ 		    }
+ 		  gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
+ 		}
  
  	      if (ls.gs.ifn == IFN_MASK_LEN_GATHER_LOAD)
  		{
diff -Nrcpad gcc-16-20251102/gcc/tree-vectorizer.h gcc-16-20251109/gcc/tree-vectorizer.h
*** gcc-16-20251102/gcc/tree-vectorizer.h	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree-vectorizer.h	Sun Nov  9 22:33:51 2025
*************** struct vect_load_store_data : vect_data
*** 289,294 ****
--- 289,303 ----
    } gs;
    tree strided_offset_vectype; // VMAT_GATHER_SCATTER_IFN, originally strided
    tree ls_type; // VMAT_GATHER_SCATTER_IFN
+   /* This is set to a supported offset vector type if we don't support the
+      originally requested offset type, otherwise NULL.
+      If nonzero there will be an additional offset conversion before
+      the gather/scatter.  */
+   tree supported_offset_vectype; // VMAT_GATHER_SCATTER_IFN
+   /* Similar for scale.  Only nonzero if we don't support the requested
+      scale.  Then we need to multiply the offset vector before the
+      gather/scatter.  */
+   int supported_scale; // VMAT_GATHER_SCATTER_IFN
    auto_vec<int> elsvals;
    /* True if the load requires a load permutation.  */
    bool slp_perm;    // SLP_TREE_LOAD_PERMUTATION
*************** extern bool vect_slp_analyze_instance_al
*** 2588,2595 ****
  extern opt_result vect_analyze_data_ref_accesses (vec_info *, vec<int> *);
  extern opt_result vect_prune_runtime_alias_test_list (loop_vec_info);
  extern bool vect_gather_scatter_fn_p (vec_info *, bool, bool, tree, tree,
! 				      tree, int, internal_fn *, tree *,
! 				      vec<int> * = nullptr);
  extern bool vect_check_gather_scatter (stmt_vec_info, tree,
  				       loop_vec_info, gather_scatter_info *,
  				       vec<int> * = nullptr);
--- 2597,2604 ----
  extern opt_result vect_analyze_data_ref_accesses (vec_info *, vec<int> *);
  extern opt_result vect_prune_runtime_alias_test_list (loop_vec_info);
  extern bool vect_gather_scatter_fn_p (vec_info *, bool, bool, tree, tree,
! 				      tree, int, int *, internal_fn *, tree *,
! 				      tree *, vec<int> * = nullptr);
  extern bool vect_check_gather_scatter (stmt_vec_info, tree,
  				       loop_vec_info, gather_scatter_info *,
  				       vec<int> * = nullptr);
diff -Nrcpad gcc-16-20251102/gcc/tree.cc gcc-16-20251109/gcc/tree.cc
*** gcc-16-20251102/gcc/tree.cc	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree.cc	Sun Nov  9 22:33:51 2025
*************** uniform_vector_p (const_tree vec)
*** 10823,10828 ****
--- 10823,10846 ----
    return NULL_TREE;
  }
  
+ /* If OP is a uniform vector return the element it is a splat from.  */
+ 
+ tree
+ ssa_uniform_vector_p (tree op)
+ {
+   if (TREE_CODE (op) == VECTOR_CST
+       || TREE_CODE (op) == VEC_DUPLICATE_EXPR
+       || TREE_CODE (op) == CONSTRUCTOR)
+     return uniform_vector_p (op);
+   if (TREE_CODE (op) == SSA_NAME)
+     {
+       gimple *def_stmt = SSA_NAME_DEF_STMT (op);
+       if (gimple_assign_single_p (def_stmt))
+ 	return uniform_vector_p (gimple_assign_rhs1 (def_stmt));
+     }
+   return NULL_TREE;
+ }
+ 
  /* If the argument is INTEGER_CST, return it.  If the argument is vector
     with all elements the same INTEGER_CST, return that INTEGER_CST.  Otherwise
     return NULL_TREE.
*************** build_call_1 (tree return_type, tree fn,
*** 11013,11044 ****
  
  /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
     FN and a null static chain slot.  NARGS is the number of call arguments
!    which are specified as "..." arguments.  */
  
  tree
! build_call_nary (tree return_type, tree fn, int nargs, ...)
  {
!   tree ret;
!   va_list args;
!   va_start (args, nargs);
!   ret = build_call_valist (return_type, fn, nargs, args);
!   va_end (args);
!   return ret;
  }
  
  /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
!    FN and a null static chain slot.  NARGS is the number of call arguments
!    which are specified as a va_list ARGS.  */
  
  tree
! build_call_valist (tree return_type, tree fn, int nargs, va_list args)
  {
    tree t;
    int i;
  
    t = build_call_1 (return_type, fn, nargs);
    for (i = 0; i < nargs; i++)
!     CALL_EXPR_ARG (t, i) = va_arg (args, tree);
    process_call_operands (t);
    return t;
  }
--- 11031,11064 ----
  
  /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
     FN and a null static chain slot.  NARGS is the number of call arguments
!    which are specified as a va_list ARGS.  */
  
  tree
! build_call_valist (tree return_type, tree fn, int nargs, va_list args)
  {
!   tree t;
!   int i;
! 
!   t = build_call_1 (return_type, fn, nargs);
!   for (i = 0; i < nargs; i++)
!     CALL_EXPR_ARG (t, i) = va_arg (args, tree);
!   process_call_operands (t);
!   return t;
  }
  
  /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
!    FN and a null static chain slot.  ARGS specifies the call arguments.  */
  
  tree
! build_call (tree return_type, tree fn, std::initializer_list<tree> args)
  {
    tree t;
    int i;
+   int nargs = args.size();
  
    t = build_call_1 (return_type, fn, nargs);
    for (i = 0; i < nargs; i++)
!     CALL_EXPR_ARG (t, i) = args.begin()[i];
    process_call_operands (t);
    return t;
  }
diff -Nrcpad gcc-16-20251102/gcc/tree.h gcc-16-20251109/gcc/tree.h
*** gcc-16-20251102/gcc/tree.h	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/gcc/tree.h	Sun Nov  9 22:33:51 2025
*************** extern tree build_omp_clause (location_t
*** 4974,4981 ****
  
  extern tree build_vl_exp (enum tree_code, int CXX_MEM_STAT_INFO);
  
- extern tree build_call_nary (tree, tree, int, ...);
  extern tree build_call_valist (tree, tree, int, va_list);
  #define build_call_array(T1,T2,N,T3)\
     build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3)
  extern tree build_call_array_loc (location_t, tree, tree, int, const tree *);
--- 4974,4994 ----
  
  extern tree build_vl_exp (enum tree_code, int CXX_MEM_STAT_INFO);
  
  extern tree build_call_valist (tree, tree, int, va_list);
+ extern tree build_call (tree, tree, std::initializer_list<tree>);
+ 
+ 
+ /* Build a CALL_EXPR of class tcc_vl_exp with the indicated RETURN_TYPE and
+    FN and a null static chain slot.  NARGS is the number of call arguments
+    which are specified as "..." arguments.  */
+ 
+ template <typename ...T>
+ inline tree build_call_nary (tree return_type, tree fn, int nargs, T... args)
+ {
+   std::initializer_list<tree> args_ = {args...};
+   gcc_checking_assert (sizeof...(args) == nargs);
+   return build_call (return_type, fn, args_);
+ }
  #define build_call_array(T1,T2,N,T3)\
     build_call_array_loc (UNKNOWN_LOCATION, T1, T2, N, T3)
  extern tree build_call_array_loc (location_t, tree, tree, int, const tree *);
*************** extern tree vector_cst_elt (const_tree,
*** 5303,5308 ****
--- 5316,5325 ----
  
  extern tree uniform_vector_p (const_tree);
  
+ /* Same as above, but if VEC is an SSA_NAME, inspect its definition.  */
+ 
+ extern tree ssa_uniform_vector_p (tree);
+ 
  /* If the argument is INTEGER_CST, return it.  If the argument is vector
     with all elements the same INTEGER_CST, return that INTEGER_CST.  Otherwise
     return NULL_TREE.  */
diff -Nrcpad gcc-16-20251102/libatomic/ChangeLog gcc-16-20251109/libatomic/ChangeLog
*** gcc-16-20251102/libatomic/ChangeLog	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/libatomic/ChangeLog	Sun Nov  9 22:34:06 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-09  Prathamesh Kulkarni  <prathameshk@nvidia.com>
  	    Matthew Malcolmson  <mmalcolmson@nvidia.com>
  
diff -Nrcpad gcc-16-20251102/libatomic/configure gcc-16-20251109/libatomic/configure
*** gcc-16-20251102/libatomic/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libatomic/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 6343,6357 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6343,6349 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6443,6464 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6435,6465 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6550,6591 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6551,6576 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6677,6701 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6662,6700 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 11848,11854 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11851 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11847,11853 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11850 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11954,11960 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11957 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11953,11959 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11956 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libbacktrace/ChangeLog gcc-16-20251109/libbacktrace/ChangeLog
*** gcc-16-20251102/libbacktrace/ChangeLog	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/libbacktrace/ChangeLog	Sun Nov  9 22:34:06 2025
***************
*** 1,3 ****
--- 1,11 ----
+ 2025-11-06  Ian Lance Taylor  <iant@golang.org>
+ 
+ 	* elf.c (ELFMAGn): In #undef rename from ELF_MAGn.
+ 
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-02  H.J. Lu  <hjl.tools@gmail.com>
  
  	* Makefile.in: Regenerated.
diff -Nrcpad gcc-16-20251102/libbacktrace/configure gcc-16-20251109/libbacktrace/configure
*** gcc-16-20251102/libbacktrace/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libbacktrace/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 6634,6648 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6634,6640 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6734,6755 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6726,6756 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6841,6882 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6842,6867 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6968,6992 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6953,6991 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12010,12016 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12013 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12009,12015 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12012 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12116,12122 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12119 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12115,12121 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12118 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libbacktrace/elf.c gcc-16-20251109/libbacktrace/elf.c
*** gcc-16-20251102/libbacktrace/elf.c	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/libbacktrace/elf.c	Sun Nov  9 22:34:06 2025
*************** dl_iterate_phdr (int (*callback) (struct
*** 160,169 ****
  #undef EI_CLASS
  #undef EI_DATA
  #undef EI_VERSION
! #undef ELF_MAG0
! #undef ELF_MAG1
! #undef ELF_MAG2
! #undef ELF_MAG3
  #undef ELFCLASS32
  #undef ELFCLASS64
  #undef ELFDATA2LSB
--- 160,169 ----
  #undef EI_CLASS
  #undef EI_DATA
  #undef EI_VERSION
! #undef ELFMAG0
! #undef ELFMAG1
! #undef ELFMAG2
! #undef ELFMAG3
  #undef ELFCLASS32
  #undef ELFCLASS64
  #undef ELFDATA2LSB
diff -Nrcpad gcc-16-20251102/libcc1/ChangeLog gcc-16-20251109/libcc1/ChangeLog
*** gcc-16-20251102/libcc1/ChangeLog	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/libcc1/ChangeLog	Sun Nov  9 22:34:06 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-09  David Malcolm  <dmalcolm@redhat.com>
  
  	* context.cc: Define INCLUDE_VECTOR.
diff -Nrcpad gcc-16-20251102/libcc1/configure gcc-16-20251109/libcc1/configure
*** gcc-16-20251102/libcc1/configure	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/libcc1/configure	Sun Nov  9 22:34:06 2025
*************** rm -f conftest*
*** 5890,5904 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5890,5896 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 5990,6011 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5982,6012 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6097,6138 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6098,6123 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6224,6248 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6209,6247 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 11265,11271 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11268 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11264,11270 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11267 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11371,11377 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11374 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11370,11376 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11373 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libffi/ChangeLog gcc-16-20251109/libffi/ChangeLog
*** gcc-16-20251102/libffi/ChangeLog	Sun Nov  2 22:34:18 2025
--- gcc-16-20251109/libffi/ChangeLog	Sun Nov  9 22:34:06 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libffi/configure gcc-16-20251109/libffi/configure
*** gcc-16-20251102/libffi/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libffi/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 6557,6571 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6557,6563 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6657,6678 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6649,6679 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6764,6805 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6765,6790 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6891,6915 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6876,6914 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12063,12069 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12066 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12062,12068 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12065 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12169,12175 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12172 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12168,12174 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12171 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libgcobol/ChangeLog gcc-16-20251109/libgcobol/ChangeLog
*** gcc-16-20251102/libgcobol/ChangeLog	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/ChangeLog	Sun Nov  9 22:34:16 2025
***************
*** 1,3 ****
--- 1,79 ----
+ 2025-11-06  Robert Dubner  <rdubner@symas.com>
+ 	    James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* charmaps.cc (__gg__encoding_iconv_type): Eliminate trailing
+ 	'/' characters from encoding names.
+ 	(__gg__get_charmap): Switch to DEFAULT_SOURCE_ENCODING macro name.
+ 	* charmaps.h (DEFAULT_CHARMAP_SOURCE): Likewise.
+ 	(DEFAULT_SOURCE_ENCODING): Likewise.
+ 	(class charmap_t): Enhance constructor.
+ 	* encodings.h (valid_encoding): New routine.
+ 	* gcobolio.h (enum cblc_file_prior_op_t): Support DELETE FILE.
+ 	* gfileio.cc (get_filename): Likewise.
+ 	(__io__file_remove): Likewise.
+ 	(__gg__file_reopen): Likewise.
+ 	(__io__file_open): Likewise.
+ 	(gcobol_fileops): Likewise.
+ 	(__gg__file_delete): Likewise.
+ 	(__gg__file_remove): Likewise.
+ 	* intrinsic.cc (get_all_time):  Switch to DEFAULT_SOURCE_ENCODING
+ 	macro name.
+ 	(ftime_replace): Support ASCII/EBCDIC encoding.
+ 	(__gg__current_date): Likewise.
+ 	(__gg__max): Likewise.
+ 	(__gg__lower_case): Likewise.
+ 	(numval): Likewise.
+ 	(numval_c): Likewise.
+ 	(__gg__upper_case): Likewise.
+ 	(__gg__when_compiled): Likewise.
+ 	(gets_int): Likewise.
+ 	(gets_nanoseconds): Likewise.
+ 	(fill_cobol_tm): Likewise.
+ 	(floating_format_tester): Likewise.
+ 	(__gg__numval_f): Likewise.
+ 	(__gg__test_numval_f): Likewise.
+ 	(iscasematch): Likewise.
+ 	(strcasestr): Likewise.
+ 	(strcaselaststr): Likewise.
+ 	(__gg__substitute): Likewise.
+ 	(__gg__locale_compare): Support for locale.
+ 	(__gg__locale_date): Likewise.
+ 	(__gg__locale_time): Likewise.
+ 	(__gg__locale_time_from_seconds): Likewise.
+ 	* libgcobol.cc (class ec_status_t): Support for encoding.
+ 	(int128_to_field): Likewise.
+ 	(__gg__dirty_to_float): Likewise.
+ 	(format_for_display_internal): Likewise.
+ 	(get_float128): Likewise.
+ 	(compare_field_class): Likewise.
+ 	(__gg__compare_2): Likewise.
+ 	(init_var_both): Likewise.
+ 	(__gg__move): Likewise.
+ 	(display_both): Likewise.
+ 	(is_numeric_display_numeric): Likewise.
+ 	(accept_envar): Likewise.
+ 	(__gg__get_argv): Likewise.
+ 	(__gg__unstring): Likewise.
+ 	(__gg__check_fatal_exception): Likewise.
+ 	(__gg__adjust_encoding): Likewise.
+ 	(__gg__func_exception_location): Likewise.
+ 	(__gg__func_exception_statement): Likewise.
+ 	(__gg__func_exception_status): Likewise.
+ 	(__gg__func_exception_file): Likewise.
+ 	(__gg__just_mangle_name): Likewise.
+ 	(__gg__function_handle_from_name): Likewise.
+ 	(get_the_byte): Likewise.
+ 	(__gg__module_name): Likewise.
+ 	(__gg__accept_arg_value): Likewise.
+ 	* xmlparse.cc (fatalError): Formatting.
+ 	(setDocumentLocator): Formatting.
+ 	(xmlchar_of): Formatting.
+ 	(xmlParserErrors_str): Formatting.
+ 
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-28  Sam James  <sam@gentoo.org>
  
  	PR cobol/122451
diff -Nrcpad gcc-16-20251102/libgcobol/charmaps.cc gcc-16-20251109/libgcobol/charmaps.cc
*** gcc-16-20251102/libgcobol/charmaps.cc	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/charmaps.cc	Sun Nov  9 22:34:16 2025
*************** static encodings_t encodings[] = {
*** 1376,1382 ****
    { false, iconv_UTF_7_e, "UTF-7" },
    // Is UTF-8 supported??  "supported" means "recognized by parser_alphabet",
    // but UTF-8 is not a valid runtime encoding.
!   { false, iconv_UTF_8_e, "UTF-8" },  
    { false, iconv_UTF_16_e, "UTF-16" },
    { false, iconv_UTF_16BE_e, "UTF-16BE" },
    { false, iconv_UTF_16LE_e, "UTF-16LE" },
--- 1376,1382 ----
    { false, iconv_UTF_7_e, "UTF-7" },
    // Is UTF-8 supported??  "supported" means "recognized by parser_alphabet",
    // but UTF-8 is not a valid runtime encoding.
!   { false, iconv_UTF_8_e, "UTF-8" },
    { false, iconv_UTF_16_e, "UTF-16" },
    { false, iconv_UTF_16BE_e, "UTF-16BE" },
    { false, iconv_UTF_16LE_e, "UTF-16LE" },
*************** cbl_encoding_t
*** 1439,1448 ****
  __gg__encoding_iconv_type( const char *name ) {
    static encodings_t *eoencodings = encodings + COUNT_OF(encodings);
  
    auto p = std::find_if( encodings, eoencodings,
!                          [name]( const encodings_t& elem ) {
!                            return strcmp(name, elem.name) == 0;
                           } );
    return p < eoencodings? p->type : no_encoding_e;
  }
  
--- 1439,1458 ----
  __gg__encoding_iconv_type( const char *name ) {
    static encodings_t *eoencodings = encodings + COUNT_OF(encodings);
  
+   char *slashless = strdup(name);
+   assert(slashless);
+   char *pslash = strchr(slashless, '/');
+   if( pslash )
+     {
+     *pslash = '\0';
+     }
+ 
    auto p = std::find_if( encodings, eoencodings,
!                          [slashless]( const encodings_t& elem ) {
!                            return strcasecmp(slashless, elem.name) == 0;
                           } );
+   free(slashless);
+ 
    return p < eoencodings? p->type : no_encoding_e;
  }
  
*************** __gg__get_charmap(cbl_encoding_t encodin
*** 1557,1563 ****
  
    if( encoding == custom_encoding_e)
      {
!     encoding = DEFAULT_CHARMAP_SOURCE;
      }
  
    charmap_t *retval;
--- 1567,1573 ----
  
    if( encoding == custom_encoding_e)
      {
!     encoding = DEFAULT_SOURCE_ENCODING;
      }
  
    charmap_t *retval;
diff -Nrcpad gcc-16-20251102/libgcobol/charmaps.h gcc-16-20251109/libgcobol/charmaps.h
*** gcc-16-20251102/libgcobol/charmaps.h	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/charmaps.h	Sun Nov  9 22:34:16 2025
*************** char * __gg__iconverter(cbl_encoding_t f
*** 228,240 ****
                          size_t length,
                          size_t *outlength);
  
! #define DEFAULT_CHARMAP_SOURCE (iconv_CP1252_e)
  
  class charmap_t
    {
    private:
      // This is the encoding of this character map
      cbl_encoding_t m_encoding;
  
      enum
        {
--- 228,244 ----
                          size_t length,
                          size_t *outlength);
  
! #define DEFAULT_SOURCE_ENCODING (iconv_CP1252_e)
  
  class charmap_t
    {
    private:
      // This is the encoding of this character map
      cbl_encoding_t m_encoding;
+     bool m_is_valid;
+     bool m_is_big_endian;
+     bool m_has_bom = false;
+     int  m_stride; // Number of bytes between one character and the next
  
      enum
        {
*************** class charmap_t
*** 246,277 ****
      // need be called but once for each ASCII value.
      std::unordered_map<int, int>m_map_of_encodings;
  
!     void determine_sign_type()
        {
!       if( mapped_character(ascii_0) & 0x80 )
          {
!         m_numeric_sign_type = sign_type_ebcdic;
          }
!       else
          {
          m_numeric_sign_type = sign_type_ascii;
          }
        }
  
!   public:
!     explicit charmap_t(cbl_encoding_t e) : m_encoding(e)
!       {
!       determine_sign_type();
!       }
!     explicit charmap_t(uint16_t e) : m_encoding(static_cast<cbl_encoding_t>(e))
!       {
!       determine_sign_type();
!       }
  
      int mapped_character(int ch)
        {
        // The assumption is that anybody calling this routine is providing
!       // a single-byte character in the DEFAULT_CHARMAP_SOURCE encoding.  We
        // return the equivalent character in the m_encoding
        int retval;
        std::unordered_map<int, int>::const_iterator it =
--- 250,363 ----
      // need be called but once for each ASCII value.
      std::unordered_map<int, int>m_map_of_encodings;
  
!   public:
!     explicit charmap_t(cbl_encoding_t e) : m_encoding(e)
        {
!       // We are constructing a new charmap_t from an arbitrary encoding.  We
!       // need to figure out how wide it is, its endianness, whether or not
!       // it is EBCDIC-based, and so on.
! 
!       // We do that by converting "0" to the target encoding, and we analyze
!       // what we get back.
!       
!       size_t outlength = 0;
!       const char challenge[] = "0";
!       const unsigned char *response = PTRCAST(unsigned char,
!                                    __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                                     m_encoding,
!                                                     challenge,
!                                                     1,
!                                                     &outlength));
!       unsigned char char_0 = 0x00;
! 
!       m_is_valid = false;
!       m_has_bom  = false;
!       m_is_big_endian = false;
! 
!       if( outlength == 1 )
          {
!         m_stride = 1;
!         // This is our happy place:  A single-byte encoded character set.
!         char_0 = response[0];
          }
!       else if( outlength == 2 )
!         {
!         m_stride = 2;
!         if( response[0] )
!           {
!           char_0 = response[0];
!           }
!         else if( response[1] )
!           {
!           m_is_big_endian = true;
!           char_0 = response[1];
!           }
!         }
!       else if( outlength == 4 )
!         {
!         // Check for the Byte Order Mark (BOM)
!         if( response[0] == 0xFF && response[1] == 0xFE )
!           {
!           m_stride = 2;
!           m_has_bom = true;
!           char_0 = response[2];
!           }
!         else if( response[0] == 0xFE && response[1] == 0xFF )
!           {
!           m_stride = 2;
!           m_has_bom = true;
!           m_is_big_endian = true;
!           char_0 = response[3];
!           }
!         else if( response[0] )
!           {
!           m_stride = 4;
!           char_0 = response[0];
!           }
!         else
!           {
!           m_stride = 4;
!           m_is_big_endian = true;
!           char_0 = response[3];
!           }
!         }
!       else if( outlength == 8 )
          {
+         m_stride = 4;
+         if( response[0] == 0xFF && response[1] == 0xFE )
+           {
+           char_0 = response[4];
+           }
+         else if( response[0] == 0xFE && response[1] == 0xFF )
+           {
+           m_is_big_endian = true;
+           char_0 = response[7];
+           }
+         }
+ 
+       // With everything else established, we now check the zero character.
+       // We know about only 0x30 for ASCII and 0xF0 for EBCDIC.
+       if( char_0 == 0x30 )
+         {
+         m_is_valid = true;
          m_numeric_sign_type = sign_type_ascii;
          }
+       else if( char_0 == 0xF0 )
+         {
+         m_is_valid = true;
+         m_numeric_sign_type = sign_type_ebcdic;
+         }
        }
  
!     bool is_valid()      const{return m_is_valid     ;}
!     bool is_big_endian() const{return m_is_big_endian;}
!     bool has_bom()       const{return m_has_bom      ;}
!     int  stride()        const{return m_stride       ;}
  
      int mapped_character(int ch)
        {
        // The assumption is that anybody calling this routine is providing
!       // a single-byte character in the DEFAULT_SOURCE_ENCODING encoding.  We
        // return the equivalent character in the m_encoding
        int retval;
        std::unordered_map<int, int>::const_iterator it =
*************** class charmap_t
*** 284,290 ****
          {
          retval = 0;
          size_t outlength = 0;
!         const char *mapped = __gg__iconverter(DEFAULT_CHARMAP_SOURCE,
                                                m_encoding,
                                                PTRCAST(char, &ch),
                                                1,
--- 370,376 ----
          {
          retval = 0;
          size_t outlength = 0;
!         const char *mapped = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
                                                m_encoding,
                                                PTRCAST(char, &ch),
                                                1,
diff -Nrcpad gcc-16-20251102/libgcobol/configure gcc-16-20251109/libgcobol/configure
*** gcc-16-20251102/libgcobol/configure	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/configure	Sun Nov  9 22:34:16 2025
*************** rm -f conftest*
*** 6776,6790 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6776,6782 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6876,6897 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6868,6898 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6983,7024 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6984,7009 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7110,7134 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7095,7133 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12185,12191 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12188 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12184,12190 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12187 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12291,12297 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12294 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12290,12296 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12293 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libgcobol/encodings.h gcc-16-20251109/libgcobol/encodings.h
*** gcc-16-20251102/libgcobol/encodings.h	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/encodings.h	Sun Nov  9 22:34:16 2025
*************** enum cbl_encoding_t {
*** 1195,1200 ****
--- 1195,1205 ----
    iconv_YU_e,
  };
  
+ static inline bool
+ valid_encoding( cbl_encoding_t enc ) {
+   return enc <= iconv_YU_e;
+ }
+ 
  #define ASCII_e  iconv_ASCII_e   
  #define CP1252_e iconv_CP1252_e
  #define EBCDIC_e iconv_CP1140_e
diff -Nrcpad gcc-16-20251102/libgcobol/gcobolio.h gcc-16-20251109/libgcobol/gcobolio.h
*** gcc-16-20251102/libgcobol/gcobolio.h	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/gcobolio.h	Sun Nov  9 22:34:16 2025
*************** enum cblc_file_prior_op_t
*** 81,86 ****
--- 81,87 ----
    file_op_rewrite,
    file_op_delete,
    file_op_close,
+   file_op_remove,
    };
  
  /* end implementation details */
diff -Nrcpad gcc-16-20251102/libgcobol/gfileio.cc gcc-16-20251109/libgcobol/gfileio.cc
*** gcc-16-20251102/libgcobol/gfileio.cc	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/gfileio.cc	Sun Nov  9 22:34:16 2025
*************** handle_errno(cblc_file_t *file, const ch
*** 191,199 ****
  
  static
  char *
! get_filename( const cblc_file_t *file,
!               int is_quoted)
    {
    static size_t fname_size = MINIMUM_ALLOCATION_SIZE;
    static char *fname = static_cast<char *>(malloc(MINIMUM_ALLOCATION_SIZE));
    massert(fname);
--- 191,200 ----
  
  static
  char *
! get_filename( const cblc_file_t *file)
    {
+   bool is_quoted = !!(file->flags & file_name_quoted_e);
+ 
    static size_t fname_size = MINIMUM_ALLOCATION_SIZE;
    static char *fname = static_cast<char *>(malloc(MINIMUM_ALLOCATION_SIZE));
    massert(fname);
*************** __io__file_delete(cblc_file_t *file, boo
*** 1152,1157 ****
--- 1153,1232 ----
    }
  
  static void
+ __io__file_remove(cblc_file_t *file, char *filename, int is_quoted)
+   {
+   // filename is the result of a strdup or malloc.  Because both FILE OPEN
+   // and FILE DELETE can establish or change a name, we free it here and
+   // replace it.  The same is true in FILE DELETE Format 2
+   free(file->filename);
+   file->filename = filename;
+   file->flags &= ~file_name_quoted_e;
+   file->flags |= is_quoted ? file_name_quoted_e : file_flag_none_e;
+   int erc;
+ 
+   // This code copied from reopen
+   const char *trimmed_name = get_filename(file);
+   if( !trimmed_name[0] )
+     {
+     bool all_spaces = true;
+     for(size_t i=0; i<strlen(file->filename); i++)
+       {
+       if( file->filename[i] != ascii_space )
+         {
+         all_spaces = false;
+         }
+       break;
+       }
+     if( all_spaces )
+       {
+       warnx("Warning: %s specified with a filename that is all spaces",
+             file->name);
+       file->io_status = FsNameError;    // "31"
+       goto done;
+       }
+ 
+     warnx(  "%s(): There is no environment variable named \"%s\"\n",
+             __func__,
+             file->filename);
+     file->io_status = FsNoFile;    // "35"
+     goto done;
+     }
+   // trimmed_name is now the file system name of the file to be removed.
+ 
+   // If the file is open, we flag that with "41"
+   if( file->file_pointer )
+     {
+     file->io_status = FsIsOpen;    // "41"
+     goto done;
+     }
+ 
+   // There's been a lot of buildup.  We can now try to remove the file:
+   errno = 0;
+   erc = remove(trimmed_name);
+   if( erc == 0 )
+     {
+     // All is copacetic.  There was a file, and now it's gone.
+     file->io_status = FsSuccess;    // "00"
+     }
+   else if( errno == ENOENT )
+     {
+     // The file didn't exist.  
+     file->io_status = FsUnavail;    // "05"
+     }
+   else
+     {
+     // We have some other kind of error.  Lack of credentials, or whatever.
+     file->io_status = FsErrno;    // 
+     goto done;
+     }
+ 
+   file->prior_op = file_op_remove;
+   done:
+   file->errnum = errno;
+   establish_status(file, -1);
+   }
+ 
+ static void
  indexed_file_start( cblc_file_t *file,
                      int relop,
                      int key_number,
*************** __gg__file_reopen(cblc_file_t *file, int
*** 4115,4121 ****
    // Stash the mode_char for later analysis during READ and WRITE operations
    file->mode_char = mode_char;
    char *trimmed_name;
!   trimmed_name = get_filename(file, !!(file->flags & file_name_quoted_e));
    if( !trimmed_name[0] )
      {
      bool all_spaces = true;
--- 4190,4196 ----
    // Stash the mode_char for later analysis during READ and WRITE operations
    file->mode_char = mode_char;
    char *trimmed_name;
!   trimmed_name = get_filename(file);
    if( !trimmed_name[0] )
      {
      bool all_spaces = true;
*************** __io__file_open(cblc_file_t *file,
*** 4353,4360 ****
      }
    else
      {
!     // filename is the result of a strdup or malloc.  We will free() it at
!     // file close time.
      file->filename = filename;
      file->flags &= ~file_name_quoted_e;
      file->flags |= is_quoted ? file_name_quoted_e : file_flag_none_e;
--- 4428,4437 ----
      }
    else
      {
!     // filename is the result of a strdup or malloc.  Because both FILE OPEN
!     // and FILE DELETE can establish or change a name, we free it here and
!     // replace it.  The same is true in FILE DELETE Format 2
!     free(file->filename);
      file->filename = filename;
      file->flags &= ~file_name_quoted_e;
      file->flags |= is_quoted ? file_name_quoted_e : file_flag_none_e;
*************** public:
*** 4492,4497 ****
--- 4569,4577 ----
                              size_t length, bool is_random );
    typedef void (delete_t)( cblc_file_t *file,
                            bool is_random );
+   typedef void (remove_t)( cblc_file_t *file,
+                           char *filename,
+                           int is_quoted);
  
    open_t      *Open;
    close_t     *Close;
*************** public:
*** 4500,4505 ****
--- 4580,4586 ----
    write_t     *Write;
    rewrite_t   *Rewrite;
    delete_t    *Delete;
+   remove_t    *Remove;
  
    gcobol_io_t()
      : Open(NULL)
*************** public:
*** 4509,4523 ****
      , Write(NULL)
      , Rewrite(NULL)
      , Delete(NULL)
    {}
  
!   gcobol_io_t(  open_t      *Open,
                   close_t     *Close,
                   start_t     *Start,
                   read_t      *Read,
                   write_t     *Write,
                   rewrite_t   *Rewrite,
!                  delete_t    *Delete )
      : Open(Open)
      , Close(Close)
      , Start(Start)
--- 4590,4606 ----
      , Write(NULL)
      , Rewrite(NULL)
      , Delete(NULL)
+     , Remove(NULL)
    {}
  
!   gcobol_io_t(   open_t      *Open,
                   close_t     *Close,
                   start_t     *Start,
                   read_t      *Read,
                   write_t     *Write,
                   rewrite_t   *Rewrite,
!                  delete_t    *Delete,
!                  remove_t    *Remove)
      : Open(Open)
      , Close(Close)
      , Start(Start)
*************** public:
*** 4525,4530 ****
--- 4608,4614 ----
      , Write(Write)
      , Rewrite(Rewrite)
      , Delete(Delete)
+     , Remove(Remove)
    {}
  
  #if FILE_IO_IMPLEMENTED
*************** gcobol_fileops() {
*** 4552,4558 ****
                            __io__file_read,
                            __io__file_write,
                            __io__file_rewrite,
!                           __io__file_delete );
  }
  
  /*
--- 4636,4643 ----
                            __io__file_read,
                            __io__file_write,
                            __io__file_rewrite,
!                           __io__file_delete,
!                           __io__file_remove);
  }
  
  /*
*************** extern "C"
*** 4657,4665 ****
--- 4742,4760 ----
  void
  __gg__file_delete(cblc_file_t *file, bool is_random)
    {
+     // DELETE FILE Format 1 - deletes a record.
      gcobol_io_t *functions = gcobol_io_funcs();
      functions->Delete(file, is_random);
    }
+ extern "C"
+ 
+ void
+ __gg__file_remove(cblc_file_t *file, char *name, int is_quoted)
+   {
+     // DELETE FILE Format 2 - removes a file.
+     gcobol_io_t *functions = gcobol_io_funcs();
+     functions->Remove(file, name, is_quoted);
+   }
  
  /* end interface functions */
  
diff -Nrcpad gcc-16-20251102/libgcobol/intrinsic.cc gcc-16-20251109/libgcobol/intrinsic.cc
*** gcc-16-20251102/libgcobol/intrinsic.cc	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/intrinsic.cc	Sun Nov  9 22:34:16 2025
***************
*** 55,61 ****
  #include "libgcobol.h"
  #include "charmaps.h"
  
- 
  #pragma GCC diagnostic ignored "-Wformat-truncation"
  
  #define JD_OF_1601_01_02 2305812.5
--- 55,60 ----
*************** get_all_time( const cblc_field_t *dest,
*** 576,582 ****
            ctm.day_of_year,
            ctm.ZZZZ);
    __gg__convert_encoding(PTRCAST(char, stime),
!                          DEFAULT_CHARMAP_SOURCE,
                           dest->encoding);
    }
  
--- 575,581 ----
            ctm.day_of_year,
            ctm.ZZZZ);
    __gg__convert_encoding(PTRCAST(char, stime),
!                          DEFAULT_SOURCE_ENCODING,
                           dest->encoding);
    }
  
*************** ftime_replace(char *dest,
*** 810,816 ****
    const char *src;
    bool saw_decimal_point = false;
    bool saw_plus_sign = false;
-   char decimal_point = __gg__get_decimal_point();
    static const int OFFSET_TO_YYYY           =  0;
    static const int OFFSET_TO_MM             =  4;
    static const int OFFSET_TO_DD             =  6;
--- 809,814 ----
*************** ftime_replace(char *dest,
*** 826,843 ****
    static const int OFFSET_TO_DOY            = 34;
    static const int OFFSET_TO_ZZZZ           = 37;
  
!   int source_Y    = charmap_source->mapped_character(ascii_Y   );
!   int source_W    = charmap_source->mapped_character(ascii_W   );
!   int source_s    = charmap_source->mapped_character(ascii_s   );
!   int source_m    = charmap_source->mapped_character(ascii_m   );
!   int source_h    = charmap_source->mapped_character(ascii_h   );
!   int source_plus = charmap_source->mapped_character(ascii_plus);
!   int source_D    = charmap_source->mapped_character(ascii_D   );
!   int source_M    = charmap_source->mapped_character(ascii_M   );
  
    while( source < source_end && dest < dest_end )
      {
!     char fchar = *source;
      if( fchar == source_Y )
        {
        // This can only be a YYYY
--- 824,843 ----
    static const int OFFSET_TO_DOY            = 34;
    static const int OFFSET_TO_ZZZZ           = 37;
  
!   unsigned int decimal_point =
!                    charmap_source->mapped_character(__gg__get_decimal_point());
!   unsigned int source_Y    = charmap_source->mapped_character(ascii_Y   );
!   unsigned int source_W    = charmap_source->mapped_character(ascii_W   );
!   unsigned int source_s    = charmap_source->mapped_character(ascii_s   );
!   unsigned int source_m    = charmap_source->mapped_character(ascii_m   );
!   unsigned int source_h    = charmap_source->mapped_character(ascii_h   );
!   unsigned int source_plus = charmap_source->mapped_character(ascii_plus);
!   unsigned int source_D    = charmap_source->mapped_character(ascii_D   );
!   unsigned int source_M    = charmap_source->mapped_character(ascii_M   );
  
    while( source < source_end && dest < dest_end )
      {
!     unsigned char fchar = *source;
      if( fchar == source_Y )
        {
        // This can only be a YYYY
*************** ftime_replace(char *dest,
*** 847,853 ****
        const char *p = source;
        while(p < source_end)
          {
!         if( *p++ == source_W )
            {
            src = ftime + OFFSET_TO_ZZZZ;
            }
--- 847,853 ----
        const char *p = source;
        while(p < source_end)
          {
!         if( (unsigned char)*p++ == source_W )
            {
            src = ftime + OFFSET_TO_ZZZZ;
            }
*************** ftime_replace(char *dest,
*** 864,875 ****
      else if( fchar == source_D )
        {
        // It can be a D, DD or DDD
!       if( source[2] == source_D )
          {
          ncount = 3;
          src = ftime + OFFSET_TO_DOY;
          }
!       else if( source[1] == source_D )
          {
          ncount = 2;
          src = ftime + OFFSET_TO_DD;
--- 864,875 ----
      else if( fchar == source_D )
        {
        // It can be a D, DD or DDD
!       if( (unsigned char)source[2] == source_D )
          {
          ncount = 3;
          src = ftime + OFFSET_TO_DOY;
          }
!       else if( (unsigned char)source[1] == source_D )
          {
          ncount = 2;
          src = ftime + OFFSET_TO_DD;
*************** ftime_replace(char *dest,
*** 946,952 ****
        {
        // This indicates special processing for a variable number of 's'
        // characters
!       while(*source == 's' && dest < dest_end)
          {
          source += 1;
          *dest++ = *src++;
--- 946,952 ----
        {
        // This indicates special processing for a variable number of 's'
        // characters
!       while((unsigned char)*source == source_s && dest < dest_end)
          {
          source += 1;
          *dest++ = *src++;
*************** __gg__current_date(cblc_field_t *dest)
*** 1279,1285 ****
    char retval[DATE_STRING_BUFFER_SIZE];
    timespec_to_string(retval, tp);
    __gg__convert_encoding(PTRCAST(char, retval),
!                          DEFAULT_CHARMAP_SOURCE,
                           dest->encoding);
    string_to_dest(dest, retval);
    }
--- 1279,1285 ----
    char retval[DATE_STRING_BUFFER_SIZE];
    timespec_to_string(retval, tp);
    __gg__convert_encoding(PTRCAST(char, retval),
!                          DEFAULT_SOURCE_ENCODING,
                           dest->encoding);
    string_to_dest(dest, retval);
    }
*************** __gg__max(cblc_field_t *dest,
*** 2022,2028 ****
          }
        }
  
- 
      __gg__adjust_dest_size(dest, best_length);
      dest->type = FldAlphanumeric;
      assert(best_location);
--- 2022,2027 ----
*************** __gg__lower_case( cblc_field_t *dest,
*** 2088,2099 ****
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
                                  from,
!                                 DEFAULT_CHARMAP_SOURCE);
    std::transform(dest->data, dest->data + dest_length, dest->data,
                   [](unsigned char c) { return std::tolower(c); });
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
!                                 DEFAULT_CHARMAP_SOURCE,
                                  to);
    }
  
--- 2087,2098 ----
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
                                  from,
!                                 DEFAULT_SOURCE_ENCODING);
    std::transform(dest->data, dest->data + dest_length, dest->data,
                   [](unsigned char c) { return std::tolower(c); });
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
!                                 DEFAULT_SOURCE_ENCODING,
                                  to);
    }
  
*************** numval( cblc_field_t *dest,
*** 2391,2415 ****
          size_t input_offset,
          size_t input_size)
    {
!   // Returns the one-based character position of a bad character
!   // returns zero if it is okay
  
!   const char *p    = PTRCAST(char, (input->data + input_offset));
!   const char *pend =     p + input_size;
  
    int errpos = 0;
    __int128 retval = 0;
    int retval_rdigits = 0;
  
-   charmap_t *charmap = __gg__get_charmap(input->encoding);
-   unsigned char decimal_point
-                    = charmap->mapped_character(__gg__get_decimal_point());
-   int mapped_0 = charmap->mapped_character(ascii_0);
-   int mapped_9 = charmap->mapped_character(ascii_9);
-   int mapped_space = charmap->mapped_character(ascii_space);
-   int mapped_plus = charmap->mapped_character(ascii_plus);
-   int mapped_minus = charmap->mapped_character(ascii_minus);
- 
    bool saw_digit= false;
    bool in_fraction  = false;
    bool leading_sign = false;
--- 2390,2412 ----
          size_t input_offset,
          size_t input_size)
    {
!   // Returns the one-based character position of a bad character.
!   // Returns zero if it is okay.
  
!   // This routine works in ASCII space:
! 
!   size_t nbytes;
!   const char *p = __gg__iconverter(input->encoding,
!                                    DEFAULT_SOURCE_ENCODING,
!                                    PTRCAST(char, input->data + input_offset),
!                                    input_size,
!                                    &nbytes);
!   const char *pend = p + input_size;
  
    int errpos = 0;
    __int128 retval = 0;
    int retval_rdigits = 0;
  
    bool saw_digit= false;
    bool in_fraction  = false;
    bool leading_sign = false;
*************** numval( cblc_field_t *dest,
*** 2437,2467 ****
        case SPACE1:
          // We tolerate spaces, and expect to end with a sign, digit,
          // or decimal point:
!         if( ch == mapped_space )
            {
            continue;
            }
!         if( ch == mapped_plus )
            {
            leading_sign = true;
            state = SPACE2;
            break;
            }
!         if( ch == mapped_minus )
            {
            leading_sign = true;
            is_negative  = true;
            state = SPACE2;
            break;
            }
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            saw_digit = true;
            retval = ch & 0xF;
            state = DIGITS;
            break;
            }
!         if( ch == decimal_point )
            {
            in_fraction = true;
            state = DIGITS;
--- 2434,2464 ----
        case SPACE1:
          // We tolerate spaces, and expect to end with a sign, digit,
          // or decimal point:
!         if( ch == ascii_space )
            {
            continue;
            }
!         if( ch == ascii_plus )
            {
            leading_sign = true;
            state = SPACE2;
            break;
            }
!         if( ch == ascii_minus )
            {
            leading_sign = true;
            is_negative  = true;
            state = SPACE2;
            break;
            }
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            saw_digit = true;
            retval = ch & 0xF;
            state = DIGITS;
            break;
            }
!         if( ch == __gg__decimal_point )
            {
            in_fraction = true;
            state = DIGITS;
*************** numval( cblc_field_t *dest,
*** 2473,2490 ****
  
        case SPACE2:
          // We tolerate spaces, and expect to end with a digit or decimal point:
!         if( ch == mapped_space )
            {
            break;
            }
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            saw_digit = true;
            retval = ch & 0xF;
            state = DIGITS;
            break;
            }
!         if( ch == decimal_point )
            {
            in_fraction = true;
            state = DIGITS;
--- 2470,2487 ----
  
        case SPACE2:
          // We tolerate spaces, and expect to end with a digit or decimal point:
!         if( ch == ascii_space )
            {
            break;
            }
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            saw_digit = true;
            retval = ch & 0xF;
            state = DIGITS;
            break;
            }
!         if( ch == __gg__decimal_point )
            {
            in_fraction = true;
            state = DIGITS;
*************** numval( cblc_field_t *dest,
*** 2499,2505 ****
          // end with a space, a sign, "DB" or "CR", or the the end of the string
          // It's a bit complicated
  
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            saw_digit = true;
            retval *= 10;
--- 2496,2502 ----
          // end with a space, a sign, "DB" or "CR", or the the end of the string
          // It's a bit complicated
  
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            saw_digit = true;
            retval *= 10;
*************** numval( cblc_field_t *dest,
*** 2510,2552 ****
              }
            break;
            }
!         if( ch == decimal_point && in_fraction )
            {
            // Only one decimal is allowed
            goto done;
            }
!         if( ch == decimal_point )
            {
            in_fraction = true;
            break;
            }
!         if( ch == mapped_space )
            {
            state = SPACE3;
            break;
            }
!         if( ch == mapped_plus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == mapped_minus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == mapped_plus )
            {
            state = SPACE4;
            break;
            }
!         if( ch == mapped_minus )
            {
            is_negative = true;
            state = SPACE4;
            break;
            }
!         if( std::tolower(ch) == 'd' )
            {
            if( leading_sign )
              {
--- 2507,2549 ----
              }
            break;
            }
!         if( ch == __gg__decimal_point && in_fraction )
            {
            // Only one decimal is allowed
            goto done;
            }
!         if( ch == __gg__decimal_point )
            {
            in_fraction = true;
            break;
            }
!         if( ch == ascii_space )
            {
            state = SPACE3;
            break;
            }
!         if( ch == ascii_plus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == ascii_minus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == ascii_plus )
            {
            state = SPACE4;
            break;
            }
!         if( ch == ascii_minus )
            {
            is_negative = true;
            state = SPACE4;
            break;
            }
!         if( std::tolower(ch) == ascii_d )
            {
            if( leading_sign )
              {
*************** numval( cblc_field_t *dest,
*** 2554,2560 ****
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != 'b' )
              {
              goto done;
              }
--- 2551,2557 ----
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != ascii_b )
              {
              goto done;
              }
*************** numval( cblc_field_t *dest,
*** 2562,2568 ****
            state = SPACE4;
            break;
            }
!         if( std::tolower(ch) == 'c' )
            {
            if( leading_sign )
              {
--- 2559,2565 ----
            state = SPACE4;
            break;
            }
!         if( std::tolower(ch) == ascii_c )
            {
            if( leading_sign )
              {
*************** numval( cblc_field_t *dest,
*** 2570,2576 ****
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != 'r' )
              {
              goto done;
              }
--- 2567,2573 ----
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != ascii_r )
              {
              goto done;
              }
*************** numval( cblc_field_t *dest,
*** 2584,2609 ****
  
        case SPACE3:
          // We tolerate spaces, or we end with a sign:
!         if( ch == mapped_space )
            {
            break;
            }
!         if( ch == mapped_plus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == mapped_minus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == mapped_plus )
            {
            state = SPACE4;
            break;
            }
!         if( ch == mapped_minus )
            {
            is_negative = true;
            state = SPACE4;
--- 2581,2606 ----
  
        case SPACE3:
          // We tolerate spaces, or we end with a sign:
!         if( ch == ascii_space )
            {
            break;
            }
!         if( ch == ascii_plus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == ascii_minus && leading_sign)
            {
            // We are allowed leading or trailing signs, but not both
            goto done;
            }
!         if( ch == ascii_plus )
            {
            state = SPACE4;
            break;
            }
!         if( ch == ascii_minus )
            {
            is_negative = true;
            state = SPACE4;
*************** numval( cblc_field_t *dest,
*** 2617,2623 ****
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != 'b' )
              {
              goto done;
              }
--- 2614,2620 ----
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != ascii_b )
              {
              goto done;
              }
*************** numval( cblc_field_t *dest,
*** 2633,2639 ****
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != 'r' )
              {
              goto done;
              }
--- 2630,2636 ----
              }
            ch = *p++;
            errpos += 1;
!           if( p > pend || std::tolower(ch) != ascii_r )
              {
              goto done;
              }
*************** numval( cblc_field_t *dest,
*** 2644,2650 ****
          goto done;
          break;
        case SPACE4:
!         if( ch == mapped_space )
            {
            break;
            }
--- 2641,2647 ----
          goto done;
          break;
        case SPACE4:
!         if( ch == ascii_space )
            {
            break;
            }
*************** numval( cblc_field_t *dest,
*** 2658,2664 ****
      }
    else if( p == pend )
      {
!     // If we got to the end without seeing adigit, we need to bump the
      // error pointer:
      errpos += 1;
      }
--- 2655,2661 ----
      }
    else if( p == pend )
      {
!     // If we got to the end without seeing a digit, we need to bump the
      // error pointer:
      errpos += 1;
      }
*************** numval_c( cblc_field_t *dest,
*** 2696,2702 ****
    {
    size_t errcode = 0;
  
!   char *pstart = PTRCAST(char, (src->data+src_offset));
    char *pend   = pstart + src_size;
    char *p      = pstart;
  
--- 2693,2707 ----
    {
    size_t errcode = 0;
  
! //  char *pstart = PTRCAST(char, (src->data+src_offset));
!   size_t nbytes;
!   const char *converted = __gg__iconverter(src->encoding,
!                                   DEFAULT_SOURCE_ENCODING,
!                                   PTRCAST(char, src->data+src_offset),
!                                   src_size,
!                                   &nbytes);
!   char *pstart = strdup(converted);
!   massert(pstart);
    char *pend   = pstart + src_size;
    char *p      = pstart;
  
*************** numval_c( cblc_field_t *dest,
*** 2704,2748 ****
    int sign = 0;
    int rdigits = 0;
    int rdigit_bump = 0;
!   charmap_t *charmap = __gg__get_charmap(src->encoding);
!   unsigned char decimal_point
!                    = charmap->mapped_character(__gg__get_decimal_point());
!   unsigned char decimal_separator
!                    = charmap->mapped_character(__gg__get_decimal_separator());
!   int mapped_0 = charmap->mapped_character(ascii_0);
!   int mapped_9 = charmap->mapped_character(ascii_9);
!   int mapped_space = charmap->mapped_character(ascii_space);
!   int mapped_plus = charmap->mapped_character(ascii_plus);
!   int mapped_minus = charmap->mapped_character(ascii_minus);
!   int mapped_C = charmap->mapped_character(ascii_C);
!   int mapped_R = charmap->mapped_character(ascii_R);
!   int mapped_D = charmap->mapped_character(ascii_D);
!   int mapped_B = charmap->mapped_character(ascii_B);
!   int mapped_c = charmap->mapped_character(ascii_c);
!   int mapped_r = charmap->mapped_character(ascii_r);
!   int mapped_d = charmap->mapped_character(ascii_d);
!   int mapped_b = charmap->mapped_character(ascii_b);
  
    char *currency_start;
    char *currency_end;
    if( crcy )
      {
!     currency_start = PTRCAST(char, (crcy->data+crcy_offset));
!     currency_end   = currency_start + crcy_size;
      }
    else
      {
!     currency_start = __gg__get_default_currency_string();
!     currency_end   = currency_start + strlen(currency_start);
      }
    char *pcurrency = currency_start;
    // Trim off spaces from the currency:
!   while( *pcurrency == mapped_space && pcurrency < currency_end )
      {
      pcurrency += 1;
      }
  
!   while( *(currency_end-1) == mapped_space && currency_end > currency_start )
      {
      currency_end -= 1;
      }
--- 2709,2749 ----
    int sign = 0;
    int rdigits = 0;
    int rdigit_bump = 0;
!   unsigned char decimal_point = __gg__decimal_point;
!   unsigned char decimal_separator = __gg__decimal_separator;
! 
!   char *currency_in_ascii;
  
    char *currency_start;
    char *currency_end;
    if( crcy )
      {
!     converted = __gg__iconverter(crcy->encoding,
!                                  DEFAULT_SOURCE_ENCODING,
!                                  PTRCAST(char, crcy->data+crcy_offset),
!                                  crcy_size,
!                                  &nbytes);
!     currency_in_ascii = static_cast<char*>(malloc(nbytes+1));
!     massert(currency_in_ascii);
!     strcpy(currency_in_ascii, converted);
      }
    else
      {
!     // This is in ascii
!     currency_in_ascii = strdup(__gg__get_default_currency_string());
!     massert(currency_in_ascii);
      }
+   currency_start = currency_in_ascii;
+   currency_end   = currency_start + strlen(currency_start);
+ 
    char *pcurrency = currency_start;
    // Trim off spaces from the currency:
!   while( *pcurrency == ascii_space && pcurrency < currency_end )
      {
      pcurrency += 1;
      }
  
!   while( *(currency_end-1) == ascii_space && currency_end > currency_start )
      {
      currency_end -= 1;
      }
*************** numval_c( cblc_field_t *dest,
*** 2769,2780 ****
        {
        case first_space   :
          // Eat up spaces, if any, and then dispatch on the first non-space:
!         if( ch != mapped_space )
            {
            // ch can now be a plus, a minus, a digit, or the first character
            // of the currency string
!           if(   ch == mapped_plus
!              || ch == mapped_minus )
              {
              state = first_sign;
              // Decrement to pointer in order to pick up the character again
--- 2770,2781 ----
        {
        case first_space   :
          // Eat up spaces, if any, and then dispatch on the first non-space:
!         if( ch != ascii_space )
            {
            // ch can now be a plus, a minus, a digit, or the first character
            // of the currency string
!           if(   ch == ascii_plus
!              || ch == ascii_minus )
              {
              state = first_sign;
              // Decrement to pointer in order to pick up the character again
*************** numval_c( cblc_field_t *dest,
*** 2785,2791 ****
              state = currency;
              p -= 1;
              }
!           else if(  (ch >= mapped_0 && ch <= mapped_9)
                      || ch == decimal_point )
              {
              state = digits;
--- 2786,2792 ----
              state = currency;
              p -= 1;
              }
!           else if(  (ch >= ascii_0 && ch <= ascii_9)
                      || ch == decimal_point )
              {
              state = digits;
*************** numval_c( cblc_field_t *dest,
*** 2805,2811 ****
  
        case first_sign    :
          // We know the character is a plus or a minus:
!         if( ch == mapped_plus )
            {
            sign = 1;
            state = second_space;
--- 2806,2812 ----
  
        case first_sign    :
          // We know the character is a plus or a minus:
!         if( ch == ascii_plus )
            {
            sign = 1;
            state = second_space;
*************** numval_c( cblc_field_t *dest,
*** 2820,2833 ****
        case second_space :
          // Eat up spaces, if any.  This segment has to end with a currency or
          // a digit:
!         if( ch != mapped_space )
            {
            if( ch == *pcurrency )
              {
              state = currency;
              p -= 1;
              }
!           else if(  (ch >= mapped_0 && ch <= mapped_9)
                      || ch == decimal_point )
              {
              state = digits;
--- 2821,2834 ----
        case second_space :
          // Eat up spaces, if any.  This segment has to end with a currency or
          // a digit:
!         if( ch != ascii_space )
            {
            if( ch == *pcurrency )
              {
              state = currency;
              p -= 1;
              }
!           else if(  (ch >= ascii_0 && ch <= ascii_9)
                      || ch == decimal_point )
              {
              state = digits;
*************** numval_c( cblc_field_t *dest,
*** 2868,2876 ****
  
        case before_digits :
          // Eat up spaces, if any.  This segment has to end with a digit
!         if( ch != mapped_space )
            {
!           if(  (ch >= mapped_0 && ch <= mapped_9)
                 || ch == decimal_point )
              {
              state = digits;
--- 2869,2877 ----
  
        case before_digits :
          // Eat up spaces, if any.  This segment has to end with a digit
!         if( ch != ascii_space )
            {
!           if(  (ch >= ascii_0 && ch <= ascii_9)
                 || ch == decimal_point )
              {
              state = digits;
*************** numval_c( cblc_field_t *dest,
*** 2890,2896 ****
        case digits     :
          // The only thing allowed here are digits, decimal points, and
          // decimal separators
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            // We have a digit.
            rdigits += rdigit_bump;
--- 2891,2897 ----
        case digits     :
          // The only thing allowed here are digits, decimal points, and
          // decimal separators
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            // We have a digit.
            rdigits += rdigit_bump;
*************** numval_c( cblc_field_t *dest,
*** 2923,2936 ****
  
        case after_digits  :
          // after digits, the only valid things are spaces, plus, minus, D, or C
!         if( ch != charmap->mapped_character(ascii_space) )
            {
!           if(       ch == mapped_plus
!                  || ch == mapped_minus
!                  || ch == mapped_D
!                  || ch == mapped_d
!                  || ch == mapped_C
!                  || ch == mapped_c )
              {
              state = second_sign;
              p -= 1;
--- 2924,2937 ----
  
        case after_digits  :
          // after digits, the only valid things are spaces, plus, minus, D, or C
!         if( ch != ascii_space )
            {
!           if(       ch == ascii_plus
!                  || ch == ascii_minus
!                  || ch == ascii_D
!                  || ch == ascii_d
!                  || ch == ascii_C
!                  || ch == ascii_c )
              {
              state = second_sign;
              p -= 1;
*************** numval_c( cblc_field_t *dest,
*** 2945,2968 ****
            errcode = p - pstart;
            p = pend;
            }
!         if( ch == mapped_plus )
            {
            sign = 1;
            }
!         else if( ch == mapped_minus )
            {
            sign = -1;
            }
!         else if(    (ch == mapped_D || ch == mapped_d)
                      && p < pend
!                     && (*p == mapped_B || *p == mapped_b) )
            {
            sign = -1;
            p += 1;
            }
!         else if(    (ch == mapped_C || ch == mapped_c)
                      && p < pend
!                     && (*p == mapped_R || *p == mapped_r) )
            {
            sign = -1;
            p += 1;
--- 2946,2969 ----
            errcode = p - pstart;
            p = pend;
            }
!         if( ch == ascii_plus )
            {
            sign = 1;
            }
!         else if( ch == ascii_minus )
            {
            sign = -1;
            }
!         else if(    (ch == ascii_D || ch == ascii_d)
                      && p < pend
!                     && (*p == ascii_B || *p == ascii_b) )
            {
            sign = -1;
            p += 1;
            }
!         else if(    (ch == ascii_C || ch == ascii_c)
                      && p < pend
!                     && (*p == ascii_R || *p == ascii_r) )
            {
            sign = -1;
            p += 1;
*************** numval_c( cblc_field_t *dest,
*** 2972,2978 ****
  
        case final_space   :
          // There should be only spaces until the end
!         if( ch == mapped_space )
            {
            continue;
            }
--- 2973,2979 ----
  
        case final_space   :
          // There should be only spaces until the end
!         if( ch == ascii_space )
            {
            continue;
            }
*************** numval_c( cblc_field_t *dest,
*** 3003,3008 ****
--- 3004,3011 ----
                              truncation_e,
                              NULL);
      }
+   free(currency_in_ascii);
+   free(pstart);
    return (int)errcode;
    }
  
*************** __gg__upper_case( cblc_field_t *dest,
*** 3910,3921 ****
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
                                  from,
!                                 DEFAULT_CHARMAP_SOURCE);
    std::transform(dest->data, dest->data + dest_length, dest->data,
                   [](unsigned char c) { return std::toupper(c); });
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
!                                 DEFAULT_CHARMAP_SOURCE,
                                  to);
    }
  
--- 3913,3924 ----
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
                                  from,
!                                 DEFAULT_SOURCE_ENCODING);
    std::transform(dest->data, dest->data + dest_length, dest->data,
                   [](unsigned char c) { return std::toupper(c); });
    __gg__convert_encoding_length(PTRCAST(char, dest->data),
                                  length,
!                                 DEFAULT_SOURCE_ENCODING,
                                  to);
    }
  
*************** __gg__when_compiled(cblc_field_t *dest,
*** 3946,3952 ****
    char retval[DATE_STRING_BUFFER_SIZE];
    timespec_to_string(retval, tp);
    __gg__convert_encoding(PTRCAST(char, retval),
!                          DEFAULT_CHARMAP_SOURCE,
                           dest->encoding);
    string_to_dest(dest, retval);
    }
--- 3949,3955 ----
    char retval[DATE_STRING_BUFFER_SIZE];
    timespec_to_string(retval, tp);
    __gg__convert_encoding(PTRCAST(char, retval),
!                          DEFAULT_SOURCE_ENCODING,
                           dest->encoding);
    string_to_dest(dest, retval);
    }
*************** gets_int( int ndigits,
*** 3992,3999 ****
    // position (starting at 1) where the problem is.
    int retval = 0;
  
!   int checked_0 = charmap->mapped_character(ascii_0);
!   int checked_9 = charmap->mapped_character(ascii_9);
  
    memset(digits, 0xFF, ndigits * sizeof(int));
    for(int i=1; i<=ndigits; i++)
--- 3995,4002 ----
    // position (starting at 1) where the problem is.
    int retval = 0;
  
!   unsigned int checked_0 = charmap->mapped_character(ascii_0);
!   unsigned int checked_9 = charmap->mapped_character(ascii_9);
  
    memset(digits, 0xFF, ndigits * sizeof(int));
    for(int i=1; i<=ndigits; i++)
*************** gets_int( int ndigits,
*** 4004,4010 ****
        retval = -i;
        break;
        }
!     int ch = *p++;
      if( ch < checked_0 || ch > checked_9 )
        {
        // This isn't a digit zero through nine
--- 4007,4013 ----
        retval = -i;
        break;
        }
!     unsigned int ch = (unsigned char)*p++;
      if( ch < checked_0 || ch > checked_9 )
        {
        // This isn't a digit zero through nine
*************** gets_nanoseconds( const char *f,
*** 4502,4520 ****
    // positive return value.  A negative return value contains the number of
    // digits we processed,
  
!   int format_s = charmap_format->mapped_character(ascii_s);
!   int source_0 = charmap_source->mapped_character(ascii_0);
!   int source_9 = charmap_source->mapped_character(ascii_9);
  
    int errpos = 0;
    int ncount = 0;
    int nanoseconds = 0;
  
    const char *pinit = p;
!   while( f < f_end && *f == format_s && p < pend )
      {
      f += 1;
!     int ch = *p++;
      errpos += 1;
  
      if( ch < source_0 || ch > source_9 )
--- 4505,4523 ----
    // positive return value.  A negative return value contains the number of
    // digits we processed,
  
!   unsigned int format_s = charmap_format->mapped_character(ascii_s);
!   unsigned int source_0 = charmap_source->mapped_character(ascii_0);
!   unsigned int source_9 = charmap_source->mapped_character(ascii_9);
  
    int errpos = 0;
    int ncount = 0;
    int nanoseconds = 0;
  
    const char *pinit = p;
!   while( f < f_end && (unsigned char)*f == format_s && p < pend )
      {
      f += 1;
!     unsigned int ch = (unsigned char)*p++;
      errpos += 1;
  
      if( ch < source_0 || ch > source_9 )
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4560,4565 ****
--- 4563,4572 ----
    charmap_t *charmap_format = __gg__get_charmap(par1->encoding);
    charmap_t *charmap_checked = __gg__get_charmap(par2->encoding);
    int checked_space = charmap_checked->mapped_character(ascii_space);
+   int source_plus  = charmap_checked->mapped_character(ascii_plus);
+   int source_minus = charmap_checked->mapped_character(ascii_minus);
+   int source_zero  = charmap_checked->mapped_character(ascii_zero);
+ 
    int format_space  = charmap_format->mapped_character(ascii_space);
    int format_T      = charmap_format->mapped_character(ascii_T      );
    int format_colon  = charmap_format->mapped_character(ascii_colon  );
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4576,4581 ****
--- 4583,4590 ----
    int format_M      = charmap_format->mapped_character(ascii_M      );
    int format_D      = charmap_format->mapped_character(ascii_D      );
    int format_zero   = charmap_format->mapped_character(ascii_zero   );
+   char decimal_point
+                 = charmap_format->mapped_character(__gg__get_decimal_point());
  
    // Let's eliminate trailing spaces...
    trim_trailing_spaces(format, format_end, format_space);
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4584,4591 ****
    bool in_offset = false;
    bool in_nanoseconds = false;
  
-   char decimal_point = __gg__get_decimal_point();
- 
    // We keep constant track of the current error location.
    int retval = 1;
    int errpos;
--- 4593,4598 ----
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4596,4602 ****
    int bump;
    while( format < format_end && source < source_end )
      {
!     char ch = *format;
  
      if(    ch == format_T
             || ch == format_colon
--- 4603,4609 ----
    int bump;
    while( format < format_end && source < source_end )
      {
!     unsigned char ch = *format;
  
      if(    ch == format_T
             || ch == format_colon
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4605,4611 ****
        {
        // These are just formatting characters.  They need to be duplicated,
        // but are otherwise ignored.
!       if( *source != ch )
          {
          break;
          }
--- 4612,4618 ----
        {
        // These are just formatting characters.  They need to be duplicated,
        // but are otherwise ignored.
!       if( (unsigned char)*source != ch )
          {
          break;
          }
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4616,4646 ****
      if( ch == format_plus )
        {
        // This flags a following hhmm offset.  It needs to match a '+' or '-'
!       if(    *source != format_plus
!           && *source != format_minus
!           && *source != format_zero)
          {
          break;
          }
!       if( *source == format_zero )
          {
          // The next four characters have to be zeroes
!         if( source[1] != format_zero )
            {
            retval += 1;
            break;
            }
!         if( source[2] != format_zero )
            {
            retval += 2;
            break;
            }
!         if( source[3] != format_zero )
            {
            retval += 3;
            break;
            }
!         if( source[4] != format_zero )
            {
            retval += 4;
            break;
--- 4623,4653 ----
      if( ch == format_plus )
        {
        // This flags a following hhmm offset.  It needs to match a '+' or '-'
!       if(    (unsigned char)*source != source_plus
!           && (unsigned char)*source != source_minus
!           && (unsigned char)*source != source_zero)
          {
          break;
          }
!       if( (unsigned char)*source == format_zero )
          {
          // The next four characters have to be zeroes
!         if( (unsigned char)source[1] != format_zero )
            {
            retval += 1;
            break;
            }
!         if( (unsigned char)source[2] != format_zero )
            {
            retval += 2;
            break;
            }
!         if( (unsigned char)source[3] != format_zero )
            {
            retval += 3;
            break;
            }
!         if( (unsigned char)source[4] != format_zero )
            {
            retval += 4;
            break;
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4691,4697 ****
      if( ch == format_D )
        {
        // We have three possibilities: DDD, DD, and D
!       if( format[1] != format_D )
          {
          // A singleton 'D' is a day-of-week
          errpos = gets_day_of_week(source, source_end, charmap_checked, ctm);
--- 4698,4704 ----
      if( ch == format_D )
        {
        // We have three possibilities: DDD, DD, and D
!       if( (unsigned char)format[1] != format_D )
          {
          // A singleton 'D' is a day-of-week
          errpos = gets_day_of_week(source, source_end, charmap_checked, ctm);
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4702,4708 ****
            }
          bump = 1;
          }
!       else if( format[2] != format_D )
          {
          // This is DD, for day-of-month
          errpos = gets_day(source, source_end, charmap_checked, ctm);
--- 4709,4715 ----
            }
          bump = 1;
          }
!       else if( (unsigned char)format[2] != format_D )
          {
          // This is DD, for day-of-month
          errpos = gets_day(source, source_end, charmap_checked, ctm);
*************** fill_cobol_tm(cobol_tm &ctm,
*** 4798,4804 ****
      if( ch == format_Z || ch == format_z )
        {
        // This has to be the end of the road
!       if( std::toupper((unsigned char)source[0]) != 'Z' )
          {
          retval += 0;
          break;
--- 4805,4812 ----
      if( ch == format_Z || ch == format_z )
        {
        // This has to be the end of the road
!       if(    (unsigned char)source[0] != format_Z
!           && (unsigned char)source[0] != format_z )
          {
          retval += 0;
          break;
*************** __gg__lowest_algebraic( cblc_field_t *de
*** 5040,5058 ****
  
  static int
  floating_format_tester( char const * const f,
!                         char const * const f_end,
!                         cbl_encoding_t encoding)
    {
!   charmap_t *charmap = __gg__get_charmap(encoding);
!   int mapped_space = charmap->mapped_character(ascii_space);
!   int mapped_plus  = charmap->mapped_character(ascii_plus);
!   int mapped_minus = charmap->mapped_character(ascii_minus);
!   int mapped_0 = charmap->mapped_character(ascii_0);
!   int mapped_9 = charmap->mapped_character(ascii_9);
!   int mapped_E = charmap->mapped_character(ascii_E);
!   int mapped_e = charmap->mapped_character(ascii_e);
!   int decimal_point = charmap->mapped_character(__gg__get_decimal_point());
! 
    int retval = -1;
  
    enum
--- 5048,5056 ----
  
  static int
  floating_format_tester( char const * const f,
!                         char const * const f_end)
    {
!   // This routine operates in ASCII space
    int retval = -1;
  
    enum
*************** floating_format_tester( char const * con
*** 5074,5096 ****
      switch(state)
        {
        case SPACE1:
!         if( ch == mapped_space )
            {
            // Just keep looking
            break;
            }
!         if(    ch == mapped_minus
!             || ch == mapped_plus)
            {
            state = SPACE2;
            break;
            }
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            state = DIGITS1;
            break;
            }
!         if( decimal_point )
            {
            state = DIGITS2;
            break;
--- 5072,5094 ----
      switch(state)
        {
        case SPACE1:
!         if( ch == ascii_space )
            {
            // Just keep looking
            break;
            }
!         if(    ch == ascii_minus
!             || ch == ascii_plus)
            {
            state = SPACE2;
            break;
            }
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            state = DIGITS1;
            break;
            }
!         if( __gg__decimal_point )
            {
            state = DIGITS2;
            break;
*************** floating_format_tester( char const * con
*** 5100,5115 ****
          break;
  
        case SPACE2:
!         if( ch == mapped_space )
            {
            break;
            }
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            state = DIGITS1;
            break;
            }
!         if( ch == decimal_point )
            {
            state = DIGITS2;
            break;
--- 5098,5113 ----
          break;
  
        case SPACE2:
!         if( ch == ascii_space )
            {
            break;
            }
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            state = DIGITS1;
            break;
            }
!         if( ch == __gg__decimal_point )
            {
            state = DIGITS2;
            break;
*************** floating_format_tester( char const * con
*** 5118,5133 ****
          break;
  
        case DIGITS1:
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            break;
            }
!         if( ch == decimal_point )
            {
            state = DIGITS2;
            break;
            }
!         if( ch == mapped_space )
            {
            state = SPACE3;
            break;
--- 5116,5131 ----
          break;
  
        case DIGITS1:
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            break;
            }
!         if( ch == __gg__decimal_point )
            {
            state = DIGITS2;
            break;
            }
!         if( ch == ascii_space )
            {
            state = SPACE3;
            break;
*************** floating_format_tester( char const * con
*** 5136,5151 ****
          break;
  
        case DIGITS2:
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            break;
            }
!         if( ch == mapped_space )
            {
            state = SPACE3;
            break;
            }
!         if( ch == mapped_E || ch == mapped_e )
            {
            state = SPACE4;
            break;
--- 5134,5149 ----
          break;
  
        case DIGITS2:
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            break;
            }
!         if( ch == ascii_space )
            {
            state = SPACE3;
            break;
            }
!         if( ch == ascii_E || ch == ascii_e )
            {
            state = SPACE4;
            break;
*************** floating_format_tester( char const * con
*** 5154,5169 ****
          break;
  
        case SPACE3:
!         if( ch == mapped_space )
            {
            break;
            }
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            retval = index;
            break;
            }
!         if( ch == mapped_E || ch == mapped_e )
            {
            state = SPACE4;
            break;
--- 5152,5167 ----
          break;
  
        case SPACE3:
!         if( ch == ascii_space )
            {
            break;
            }
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            retval = index;
            break;
            }
!         if( ch == ascii_E || ch == ascii_e )
            {
            state = SPACE4;
            break;
*************** floating_format_tester( char const * con
*** 5172,5187 ****
          break;
  
        case SPACE4:
!         if( ch == mapped_space )
            {
            break;
            }
!         if( ch == mapped_minus || ch == mapped_plus )
            {
            state = SPACE5;
            break;
            }
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            state = DIGITS3;
            break;
--- 5170,5185 ----
          break;
  
        case SPACE4:
!         if( ch == ascii_space )
            {
            break;
            }
!         if( ch == ascii_minus || ch == ascii_plus )
            {
            state = SPACE5;
            break;
            }
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            state = DIGITS3;
            break;
*************** floating_format_tester( char const * con
*** 5190,5200 ****
          break;
  
        case SPACE5:
!         if( ch == mapped_space )
            {
            break;
            }
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            state = DIGITS3;
            break;
--- 5188,5198 ----
          break;
  
        case SPACE5:
!         if( ch == ascii_space )
            {
            break;
            }
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            state = DIGITS3;
            break;
*************** floating_format_tester( char const * con
*** 5203,5213 ****
          break;
  
        case DIGITS3:
!         if( ch >= mapped_0 && ch <= mapped_9 )
            {
            break;
            }
!         if( ch == mapped_space )
            {
            state = SPACE6;
            break;
--- 5201,5211 ----
          break;
  
        case DIGITS3:
!         if( ch >= ascii_0 && ch <= ascii_9 )
            {
            break;
            }
!         if( ch == ascii_space )
            {
            state = SPACE6;
            break;
*************** floating_format_tester( char const * con
*** 5216,5222 ****
          break;
  
        case SPACE6:
!       if( ch == mapped_space )
          {
          break;
          }
--- 5214,5220 ----
          break;
  
        case SPACE6:
!       if( ch == ascii_space )
          {
          break;
          }
*************** __gg__numval_f( cblc_field_t *dest,
*** 5242,5257 ****
                  size_t source_offset,
                  size_t source_size)
    {
    GCOB_FP128 value = 0;
!   const char *data     = PTRCAST(char, (source->data + source_offset));
    const char *data_end = data + source_size;
-   charmap_t *charmap = __gg__get_charmap(source->encoding);
-   int mapped_space = charmap->mapped_character(ascii_space);
  
    int error = floating_format_tester( data,
!                                       data_end,
!                                       source->encoding);
! 
    if( error || source_size >= 256 )
      {
      exception_raise(ec_argument_function_e);
--- 5240,5258 ----
                  size_t source_offset,
                  size_t source_size)
    {
+   // It's just easiest for this routine to operate in ASCII space:
+   size_t nbytes;
+   char *converted = __gg__iconverter(source->encoding,
+                                   DEFAULT_SOURCE_ENCODING,
+                                   PTRCAST(char, source->data + source_offset),
+                                   source_size,
+                                   &nbytes);
    GCOB_FP128 value = 0;
!   const char *data     = converted;
    const char *data_end = data + source_size;
  
    int error = floating_format_tester( data,
!                                       data_end);
    if( error || source_size >= 256 )
      {
      exception_raise(ec_argument_function_e);
*************** __gg__numval_f( cblc_field_t *dest,
*** 5264,5275 ****
      while( data < data_end )
        {
        char ch = *data++;
!       if( ch != mapped_space )
          {
          *p++ = ch;
          }
        }
      *p++ = '\0';
      value = strtofp128(ach, NULL);
      }
    __gg__float128_to_field(dest,
--- 5265,5277 ----
      while( data < data_end )
        {
        char ch = *data++;
!       if( ch != ascii_space )
          {
          *p++ = ch;
          }
        }
      *p++ = '\0';
+     // This next call is why we needed to be in ASCII space.
      value = strtofp128(ach, NULL);
      }
    __gg__float128_to_field(dest,
*************** __gg__test_numval_f(cblc_field_t *dest,
*** 5285,5297 ****
                      size_t source_offset,
                      size_t source_size)
    {
!   const char *data     = PTRCAST(char, (source->data + source_offset));
!   const char *data_end = data + source_size;
  
    int error = floating_format_tester( data,
!                                       data_end,
!                                       source->encoding);
! 
    __gg__int128_to_field(dest,
                          error,
                          NO_RDIGITS,
--- 5287,5304 ----
                      size_t source_offset,
                      size_t source_size)
    {
!   // It's just easiest for this routine to operate in ASCII space:
!   size_t nbytes;
!   char *converted = __gg__iconverter(source->encoding,
!                                   DEFAULT_SOURCE_ENCODING,
!                                   PTRCAST(char, source->data + source_offset),
!                                   source_size,
!                                   &nbytes);
  
+   const char *data     = converted;
+   const char *data_end = data + source_size;
    int error = floating_format_tester( data,
!                                       data_end);
    __gg__int128_to_field(dest,
                          error,
                          NO_RDIGITS,
*************** ismatch(const char *a1, const char *a2,
*** 5314,5327 ****
    }
  
  static bool
! iscasematch(const char *a1, const char *a2, const char *b1, const char *b2)
    {
    bool retval = true;
!   while( a1 < a2 && b1 < b2 )
      {
!     if( std::tolower((unsigned char)*a1++) != std::tolower((unsigned char)*b1++) )
        {
!       retval = false;
        }
      }
    return retval;
--- 5321,5372 ----
    }
  
  static bool
! iscasematch(const char *a1, const char *a2, 
!             const char *b1, const char *b2,
!             bool is_ebcdic)
    {
+   static const unsigned int ebcdic_lower[256] =
+     {
+     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+     0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+     0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+     0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+     0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+     0xc0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+     0xd0, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+     0xe0, 0xe1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+     };
+ 
    bool retval = true;
! 
!   if( !is_ebcdic )
      {
!     while( a1 < a2 && b1 < b2 )
        {
!       if( std::tolower((unsigned char)*a1++)
!               != std::tolower((unsigned char)*b1++) )
!         {
!         retval = false;
!         }
!       }
!     }
!   else
!     {
!     while( a1 < a2 && b1 < b2 )
!       {
!       if( ebcdic_lower[(unsigned int)(unsigned char)*a1++]
!                           != ebcdic_lower[(unsigned int)(unsigned char)*b1++] )
!         {
!         retval = false;
!         }
        }
      }
    return retval;
*************** const char *
*** 5353,5365 ****
  strcasestr( const char *haystack,
              const char *haystack_e,
              const char *needle,
!             const char *needle_e)
    {
    const char *retval = NULL;
    const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
!     if(iscasematch(haystack, haystack_e, needle, needle_e))
        {
        retval = haystack;
        break;
--- 5398,5411 ----
  strcasestr( const char *haystack,
              const char *haystack_e,
              const char *needle,
!             const char *needle_e,
!             bool is_ebcdic)
    {
    const char *retval = NULL;
    const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
!     if(iscasematch(haystack, haystack_e, needle, needle_e, is_ebcdic))
        {
        retval = haystack;
        break;
*************** const char *
*** 5394,5406 ****
  strcaselaststr( const char *haystack,
                  const char *haystack_e,
                  const char *needle,
!                 const char *needle_e)
    {
    const char *retval = NULL;
    const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
!     if(iscasematch(haystack, haystack_e, needle, needle_e))
        {
        retval = haystack;
        }
--- 5440,5453 ----
  strcaselaststr( const char *haystack,
                  const char *haystack_e,
                  const char *needle,
!                 const char *needle_e,
!                 bool is_ebcdic)
    {
    const char *retval = NULL;
    const char *pend = haystack_e - (needle_e - needle);
    while( haystack <= pend )
      {
!     if(iscasematch(haystack, haystack_e, needle, needle_e, is_ebcdic))
        {
        retval = haystack;
        }
*************** strcaselaststr( const char *haystack,
*** 5409,5415 ****
    return retval;
    }
  
- 
  extern "C"
  void
  __gg__substitute( cblc_field_t *dest,
--- 5456,5461 ----
*************** __gg__substitute( cblc_field_t *dest,
*** 5442,5447 ****
--- 5488,5496 ----
    const char **pflasts = static_cast<const char **>(malloc(N * sizeof(char *)));
    massert(pflasts);
  
+   const charmap_t *charmap = __gg__get_charmap(arg1_f->encoding);
+   bool is_ebcdic = charmap->is_like_ebcdic();
+ 
    if( arg1_s == 0 )
      {
      exception_raise(ec_argument_function_e);
*************** __gg__substitute( cblc_field_t *dest,
*** 5462,5475 ****
          pflasts[i] = strcasestr(haystack,
                                  haystack_e,
                                  PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i]);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strcaselaststr(haystack,
                                  haystack_e,
                                  PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i]);
          }
        else
          {
--- 5511,5526 ----
          pflasts[i] = strcasestr(haystack,
                                  haystack_e,
                                  PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i],
!                                 is_ebcdic);
          }
        else if( control[i] & substitute_last_e)
          {
          pflasts[i] = strcaselaststr(haystack,
                                  haystack_e,
                                  PTRCAST(char, (arg2_f[i]->data+arg2_o[i])),
!                                 PTRCAST(char, (arg2_f[i]->data+arg2_o[i])) + arg2_s[i],
!                                 is_ebcdic);
          }
        else
          {
*************** __gg__substitute( cblc_field_t *dest,
*** 5532,5538 ****
                                                                   haystack,
                                                                   haystack_e,
                                                                   needle,
!                                                                  needle_e);
          if( !matched )
            {
            matched = !(control[i] & substitute_anycase_e) && ismatch(haystack,
--- 5583,5590 ----
                                                                   haystack,
                                                                   haystack_e,
                                                                   needle,
!                                                                  needle_e,
!                                                                  is_ebcdic);
          if( !matched )
            {
            matched = !(control[i] & substitute_anycase_e) && ismatch(haystack,
*************** __gg__locale_compare( cblc_field_t *dest
*** 5622,5632 ****
        }
      }
  
!   __gg__adjust_dest_size(dest, 1);
!   dest->data[0] = *achretval;
!   __gg__convert_encoding(PTRCAST(char, dest->data),
!                          DEFAULT_CHARMAP_SOURCE,
                           dest->encoding);
    }
  
  extern "C"
--- 5674,5684 ----
        }
      }
  
!   __gg__convert_encoding(achretval,
!                          DEFAULT_SOURCE_ENCODING,
                           dest->encoding);
+   memcpy(dest->data, achretval, strlen(achretval));
+   __gg__adjust_dest_size(dest, strlen(achretval));
    }
  
  extern "C"
*************** __gg__locale_date(cblc_field_t *dest,
*** 5659,5670 ****
      strcpy(ach, nl_langinfo(D_FMT));
      strftime(ach, sizeof(ach), nl_langinfo(D_FMT), &tm);
      }
! 
!   __gg__adjust_dest_size(dest, strlen(ach));
!   __gg__convert_encoding(PTRCAST(char, dest->data),
!                          DEFAULT_CHARMAP_SOURCE,
                           dest->encoding);
    memcpy(dest->data, ach, strlen(ach));
    }
  
  extern "C"
--- 5711,5721 ----
      strcpy(ach, nl_langinfo(D_FMT));
      strftime(ach, sizeof(ach), nl_langinfo(D_FMT), &tm);
      }
!   __gg__convert_encoding(ach,
!                          DEFAULT_SOURCE_ENCODING,
                           dest->encoding);
    memcpy(dest->data, ach, strlen(ach));
+   __gg__adjust_dest_size(dest, strlen(ach));
    }
  
  extern "C"
*************** __gg__locale_time(cblc_field_t *dest,
*** 5698,5708 ****
      strftime(ach, sizeof(ach), nl_langinfo(T_FMT), &tm);
      }
  
!   __gg__adjust_dest_size(dest, strlen(ach));
!   __gg__convert_encoding(PTRCAST(char, dest->data),
!                          DEFAULT_CHARMAP_SOURCE,
                           dest->encoding);
    memcpy(dest->data, ach, strlen(ach));
    }
  
  extern "C"
--- 5749,5759 ----
      strftime(ach, sizeof(ach), nl_langinfo(T_FMT), &tm);
      }
  
!   __gg__convert_encoding(ach,
!                          DEFAULT_SOURCE_ENCODING,
                           dest->encoding);
    memcpy(dest->data, ach, strlen(ach));
+   __gg__adjust_dest_size(dest, strlen(ach));
    }
  
  extern "C"
*************** __gg__locale_time_from_seconds( cblc_fie
*** 5738,5746 ****
      strftime(ach, sizeof(ach), nl_langinfo(T_FMT), &tm);
      }
  
!   __gg__adjust_dest_size(dest, strlen(ach));
!   __gg__convert_encoding(PTRCAST(char, dest->data),
!                          DEFAULT_CHARMAP_SOURCE,
                           dest->encoding);
    memcpy(dest->data, ach, strlen(ach));
    }
--- 5789,5797 ----
      strftime(ach, sizeof(ach), nl_langinfo(T_FMT), &tm);
      }
  
!   __gg__convert_encoding(ach,
!                          DEFAULT_SOURCE_ENCODING,
                           dest->encoding);
    memcpy(dest->data, ach, strlen(ach));
+   __gg__adjust_dest_size(dest, strlen(ach));
    }
diff -Nrcpad gcc-16-20251102/libgcobol/libgcobol.cc gcc-16-20251109/libgcobol/libgcobol.cc
*** gcc-16-20251102/libgcobol/libgcobol.cc	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/libgcobol.cc	Sun Nov  9 22:34:16 2025
*************** class ec_status_t {
*** 289,294 ****
--- 289,295 ----
        case file_op_write: return "write";
        case file_op_rewrite: return "rewrite";
        case file_op_delete: return "delete";
+       case file_op_remove: return "remove";
        }
        return "???";
      }
*************** int128_to_field(cblc_field_t   *var,
*** 1627,1633 ****
                                  var->picture);
                size_t outlength;
                const char *converted = __gg__iconverter(
!                                      DEFAULT_CHARMAP_SOURCE,
                                       var->encoding,
                                       PTRCAST(char, location),
                                       var->capacity,
--- 1628,1634 ----
                                  var->picture);
                size_t outlength;
                const char *converted = __gg__iconverter(
!                                      DEFAULT_SOURCE_ENCODING,
                                       var->encoding,
                                       PTRCAST(char, location),
                                       var->capacity,
*************** __gg__dirty_to_float( const char *dirty,
*** 2755,2761 ****
    int delta_r = 0;
  
    // We now loop over the remaining input characters:
!   char ch = '\0';
  
    charmap_t *charmap = __gg__get_charmap(field->encoding);
  
--- 2756,2762 ----
    int delta_r = 0;
  
    // We now loop over the remaining input characters:
!   unsigned char ch = '\0';
  
    charmap_t *charmap = __gg__get_charmap(field->encoding);
  
*************** format_for_display_internal(char **dest,
*** 3055,3061 ****
          // This buffer is larger than can validly be needed
          unsigned char converted[128];
          size_t outlength;
!         retval = DEFAULT_CHARMAP_SOURCE;
          const char *mapped = __gg__iconverter(
                                    var->encoding,
                                    retval,
--- 3056,3062 ----
          // This buffer is larger than can validly be needed
          unsigned char converted[128];
          size_t outlength;
!         retval = DEFAULT_SOURCE_ENCODING;
          const char *mapped = __gg__iconverter(
                                    var->encoding,
                                    retval,
*************** format_for_display_internal(char **dest,
*** 3285,3291 ****
          }
  
        char ach[128];
!       retval = DEFAULT_CHARMAP_SOURCE;
        charmap_t *charmap = __gg__get_charmap(retval);
  
        __gg__binary_to_string_ascii(ach, digits, value);
--- 3286,3292 ----
          }
  
        char ach[128];
!       retval = DEFAULT_SOURCE_ENCODING;
        charmap_t *charmap = __gg__get_charmap(retval);
  
        __gg__binary_to_string_ascii(ach, digits, value);
*************** get_float128( const cblc_field_t *field,
*** 3724,3730 ****
      {
      if( __gg__decimal_point == '.' )
        {
!       retval = strtofp128(field->initial, NULL);
        }
      else
        {
--- 3725,3737 ----
      {
      if( __gg__decimal_point == '.' )
        {
!       size_t charsout;
!       char *converted = __gg__iconverter(field->encoding,
!                                          DEFAULT_SOURCE_ENCODING,
!                                          field->initial,
!                                          strlen(field->initial),
!                                          &charsout);
!       retval = strtofp128(converted, NULL);
        }
      else
        {
*************** compare_field_class(const cblc_field_t
*** 3954,3960 ****
          walker = right + right_len;
  
          GCOB_FP128 left_value;
!         if( left_flag == 'F' && left[0] == 'Z' )
            {
            left_value = 0;
            }
--- 3961,3967 ----
          walker = right + right_len;
  
          GCOB_FP128 left_value;
!         if( left_flag == ascii_F && left[0] == ascii_Z )
            {
            left_value = 0;
            }
*************** __gg__compare_2(cblc_field_t *left_side,
*** 4375,4383 ****
              }
            massert(buffer);
            strcpy(buffer, right_side->initial);
            if( __gg__decimal_point == ',' )
              {
!             // We need to replace any commas with periods
              char *p = strchr(buffer, ',');
              if(p)
                {
--- 4382,4392 ----
              }
            massert(buffer);
            strcpy(buffer, right_side->initial);
+ 
            if( __gg__decimal_point == ',' )
              {
!             // We are operating in DECIMAL IS COMMA mode, so we need to
!             // replace any commas with periods.
              char *p = strchr(buffer, ',');
              if(p)
                {
*************** __gg__compare_2(cblc_field_t *left_side,
*** 4385,4392 ****
                }
              }
  
!           // buffer[] now contains the string we want to convert
! 
            switch(left_side->capacity)
              {
              case 4:
--- 4394,4402 ----
                }
              }
  
!           // buffer[] now contains the right-side string we want to convert
!           // to one of the floating-point types.  We want them to be the
!           // same size:
            switch(left_side->capacity)
              {
              case 4:
*************** init_var_both(cblc_field_t  *var,
*** 4970,4976 ****
              {
              strcpy(first, walker);
              __gg__convert_encoding( first,
!                                     DEFAULT_CHARMAP_SOURCE,
                                      var->encoding);
              }
            walker += strlen(first) + 1;
--- 4980,4986 ----
              {
              strcpy(first, walker);
              __gg__convert_encoding( first,
!                                     DEFAULT_SOURCE_ENCODING,
                                      var->encoding);
              }
            walker += strlen(first) + 1;
*************** init_var_both(cblc_field_t  *var,
*** 4987,4993 ****
            else
              {
             __gg__convert_encoding( last,
!                                    DEFAULT_CHARMAP_SOURCE,
                                     var->encoding);
              }
            walker += strlen(last) + 1;
--- 4997,5003 ----
            else
              {
             __gg__convert_encoding( last,
!                                    DEFAULT_SOURCE_ENCODING,
                                     var->encoding);
              }
            walker += strlen(last) + 1;
*************** __gg__move( cblc_field_t        *fdest,
*** 6234,6240 ****
              // ascii:
              size_t charsout;
              const char *converted = __gg__iconverter(fsource->encoding,
!                                                      DEFAULT_CHARMAP_SOURCE,
                                      PTRCAST(char, fsource->data+source_offset),
                                                       source_size,
                                                       &charsout);
--- 6244,6250 ----
              // ascii:
              size_t charsout;
              const char *converted = __gg__iconverter(fsource->encoding,
!                                                      DEFAULT_SOURCE_ENCODING,
                                      PTRCAST(char, fsource->data+source_offset),
                                                       source_size,
                                                       &charsout);
*************** display_both(cblc_field_t  *field,
*** 9142,9152 ****
        }
      }
  
    size_t outlength;
    const char *converted = __gg__iconverter( encoding,
                                              encout,
                                              display_string,
!                                             strlen(display_string),
                                              &outlength);
    write(file_descriptor,
          converted,
--- 9152,9168 ----
        }
      }
  
+   size_t conversion_length = strlen(display_string);
+   if( charmap->stride() != 1 )
+     {
+     conversion_length = qual_size;
+     }
+ 
    size_t outlength;
    const char *converted = __gg__iconverter( encoding,
                                              encout,
                                              display_string,
!                                             conversion_length,
                                              &outlength);
    write(file_descriptor,
          converted,
*************** is_numeric_display_numeric(cblc_field_t
*** 10059,10065 ****
        digits_e -= 1;
        unsigned char final_char = (unsigned char)*digits_e;
        final_char = charmap->set_digit_negative(final_char, false);
!       if(   final_char<charmap->mapped_character(ascii_0) 
           || final_char>charmap->mapped_character(ascii_9) )
          {
          retval = 0;
--- 10075,10081 ----
        digits_e -= 1;
        unsigned char final_char = (unsigned char)*digits_e;
        final_char = charmap->set_digit_negative(final_char, false);
!       if(   final_char<charmap->mapped_character(ascii_0)
           || final_char>charmap->mapped_character(ascii_9) )
          {
          retval = 0;
*************** accept_envar( cblc_field_t  *tgt,
*** 10420,10433 ****
      // Convert the name to the console codeset:
      __gg__convert_encoding( trimmed_env,
                              encoding,
!                             DEFAULT_CHARMAP_SOURCE);
  
      // Pick up the environment variable, and convert it to the internal codeset
      const char *p = getenv(trimmed_env);
      if(p)
        {
        retval = 0; // Okay
!       move_string(tgt, tgt_offset, tgt_length, p, DEFAULT_CHARMAP_SOURCE);
        }
      free(env);
      }
--- 10436,10449 ----
      // Convert the name to the console codeset:
      __gg__convert_encoding( trimmed_env,
                              encoding,
!                             DEFAULT_SOURCE_ENCODING);
  
      // Pick up the environment variable, and convert it to the internal codeset
      const char *p = getenv(trimmed_env);
      if(p)
        {
        retval = 0; // Okay
!       move_string(tgt, tgt_offset, tgt_length, p, DEFAULT_SOURCE_ENCODING);
        }
      free(env);
      }
*************** __gg__get_argv( cblc_field_t *dest,
*** 10638,10644 ****
                  dest_offset,
                  dest_length,
                  stashed_argv[N],
!                 DEFAULT_CHARMAP_SOURCE);
      retcode = 0;  // Okay
      }
    return retcode;
--- 10654,10660 ----
                  dest_offset,
                  dest_length,
                  stashed_argv[N],
!                 DEFAULT_SOURCE_ENCODING);
      retcode = 0;  // Okay
      }
    return retcode;
*************** __gg__unstring( const cblc_field_t *id1,
*** 11381,11387 ****
                      id5_o[nreceiver],
                      id5_s[nreceiver],
                      "",
!                     DEFAULT_CHARMAP_SOURCE);
          }
        }
  
--- 11397,11403 ----
                      id5_o[nreceiver],
                      id5_s[nreceiver],
                      "",
!                     DEFAULT_SOURCE_ENCODING);
          }
        }
  
*************** __gg__check_fatal_exception()
*** 11768,11773 ****
--- 11784,11790 ----
      case file_op_write:
      case file_op_rewrite:
      case file_op_delete:
+     case file_op_remove:
        break;
      }
    } else {
*************** __gg__adjust_dest_size(cblc_field_t *des
*** 12041,12046 ****
--- 12058,12080 ----
  
  extern "C"
  void
+ __gg__adjust_encoding(cblc_field_t *field)
+   {
+   // Assume that field->data is in ASCII;  We need to convert it to the target
+   size_t nbytes;
+   const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
+                                            field->encoding,
+                                            PTRCAST(char, field->data),
+                                            field->capacity,
+                                            &nbytes);
+   size_t tocopy = std::min(nbytes, field->allocated);
+   field->capacity = tocopy;
+   memcpy(field->data, converted, tocopy);
+   }
+ 
+ 
+ extern "C"
+ void
  __gg__func_exception_location(cblc_field_t *dest)
    {
    char ach[512] = " ";
*************** __gg__func_exception_location(cblc_field
*** 12088,12093 ****
--- 12122,12128 ----
      }
    __gg__adjust_dest_size(dest, strlen(ach));
    memcpy(dest->data, ach, strlen(ach));
+   __gg__adjust_encoding(dest);
    }
  
  extern "C"
*************** __gg__func_exception_statement(cblc_fiel
*** 12102,12107 ****
--- 12137,12143 ----
      }
    __gg__adjust_dest_size(dest, strlen(ach));
    memcpy(dest->data, ach, strlen(ach));
+   __gg__adjust_encoding(dest);
    }
  
  extern "C"
*************** __gg__func_exception_status(cblc_field_t
*** 12128,12133 ****
--- 12164,12170 ----
      }
    __gg__adjust_dest_size(dest, strlen(ach));
    memcpy(dest->data, ach, strlen(ach));
+   __gg__adjust_encoding(dest);
    }
  
  extern "C"
*************** __gg__func_exception_file(cblc_field_t
*** 12195,12200 ****
--- 12232,12238 ----
  
    __gg__adjust_dest_size(dest, strlen(ach));
    memcpy(dest->data, ach, strlen(ach));
+   __gg__adjust_encoding(dest);
    }
  
  extern "C"
*************** __gg__just_mangle_name( const cblc_field
*** 12693,12699 ****
    // We need ach_name to be in ASCII:
    size_t charsout;
    const char *converted = __gg__iconverter(field->encoding,
!                                            DEFAULT_CHARMAP_SOURCE,
                                             PTRCAST(char, field->data),
                                             length,
                                             &charsout);
--- 12731,12737 ----
    // We need ach_name to be in ASCII:
    size_t charsout;
    const char *converted = __gg__iconverter(field->encoding,
!                                            DEFAULT_SOURCE_ENCODING,
                                             PTRCAST(char, field->data),
                                             length,
                                             &charsout);
*************** __gg__function_handle_from_name(int
*** 12784,12790 ****
  
    size_t charsout;
    const char *converted = __gg__iconverter(field->encoding,
!                                            DEFAULT_CHARMAP_SOURCE,
                                             PTRCAST(char, field->data + offset),
                                             length,
                                             &charsout);
--- 12822,12828 ----
  
    size_t charsout;
    const char *converted = __gg__iconverter(field->encoding,
!                                            DEFAULT_SOURCE_ENCODING,
                                             PTRCAST(char, field->data + offset),
                                             length,
                                             &charsout);
*************** __gg__deallocate( cblc_field_t *target,
*** 13093,13098 ****
--- 13131,13137 ----
  static int
  get_the_byte(cblc_field_t *field)
    {
+   // This is a helper routine for ALLOCATE
    int retval = -1;
    if( field )
      {
*************** get_the_byte(cblc_field_t *field)
*** 13100,13106 ****
      retval = __gg__fc_char(field);
      if(retval == -1)
        {
!       retval = (int)__gg__get_integer_binary_value(field);
        }
      }
    return retval;
--- 13139,13152 ----
      retval = __gg__fc_char(field);
      if(retval == -1)
        {
!       retval = (int)(unsigned char)__gg__get_integer_binary_value(field);
!       }
!     else
!       {
!       // This is a bit of a hack.  It turns out the figurative constant is
!       // encoded in ASCII.  We need it to be in the current DISPLAY encoding.
!       charmap_t *charmap = __gg__get_charmap(__gg__display_encoding);
!       retval = charmap->mapped_character(retval);
        }
      }
    return retval;
*************** __gg__module_name(cblc_field_t *dest, mo
*** 13373,13378 ****
--- 13419,13425 ----
  
    __gg__adjust_dest_size(dest, strlen(result));
    memcpy(dest->data, result, strlen(result)+1);
+   __gg__adjust_encoding(dest);
    }
  
  /*
*************** __gg__accept_arg_value( cblc_field_t *de
*** 13652,13658 ****
                  dest_offset,
                  dest_length,
                  stashed_argv[sv_argument_number],
!                 DEFAULT_CHARMAP_SOURCE);
      retcode = 0;  // Okay
  
      // The Fujitsu spec says bump this value by one.
--- 13699,13705 ----
                  dest_offset,
                  dest_length,
                  stashed_argv[sv_argument_number],
!                 DEFAULT_SOURCE_ENCODING);
      retcode = 0;  // Okay
  
      // The Fujitsu spec says bump this value by one.
diff -Nrcpad gcc-16-20251102/libgcobol/xmlparse.cc gcc-16-20251109/libgcobol/xmlparse.cc
*** gcc-16-20251102/libgcobol/xmlparse.cc	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgcobol/xmlparse.cc	Sun Nov  9 22:34:16 2025
*************** static void fatalError(void * CTX, const
*** 408,413 ****
--- 408,414 ----
  }
  
  #if 0
+ 
  static xmlEntityPtr getEntity(void * CTX,
                                const xmlChar * name)
  { SAYSO_DATAZ(name); }
*************** static void setDocumentLocator(void * CT
*** 484,489 ****
--- 485,491 ----
   * xmlCtxtGetStandalone() to get data from the XML declaration.
   */
  static void startDocument(void * CTX)
+ 
  {
    SAYSO();
  }
*************** xmlchar_of( const char input[] ) {
*** 616,622 ****
  static const char *
  xmlParserErrors_str( xmlParserErrors erc, const char name[] ) {
    const char *msg = "???";
- 
    switch( erc ) {
    case XML_ERR_OK:
      msg = "Success";
--- 618,623 ----
*************** xmlParserErrors_str( xmlParserErrors erc
*** 630,635 ****
--- 631,637 ----
    case XML_ERR_UNSUPPORTED_ENCODING:
      msg = "Unsupported character encoding";
      break;
+ 
  #if LIBXML_VERSION >= 21400
    case XML_ERR_RESOURCE_LIMIT:
      msg = "Internal resource limit like maximum amplification factor exceeded";
*************** static class context_t {
*** 710,715 ****
--- 712,718 ----
      }
    }
  
+ 
   protected:
    void init() {
      const char *external_entities = nullptr;
diff -Nrcpad gcc-16-20251102/libgfortran/ChangeLog gcc-16-20251109/libgfortran/ChangeLog
*** gcc-16-20251102/libgfortran/ChangeLog	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgfortran/ChangeLog	Sun Nov  9 22:34:16 2025
***************
*** 1,3 ****
--- 1,24 ----
+ 2025-11-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121628
+ 	* Makefile.in: Keep continuation indentation within 80 columns.
+ 	* aclocal.m4: Regenerate.
+ 	* libgfortran.h: Drop unused forward declaration.
+ 
+ 2025-11-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121628
+ 	* Makefile.am: Add runtime/deep_copy.c to source files.
+ 	* Makefile.in: Regenerate.
+ 	* gfortran.map: Export _gfortran_cfi_deep_copy_array symbol.
+ 	* libgfortran.h: Add prototype for internal_deep_copy_array.
+ 	* runtime/deep_copy.c: New file implementing runtime deep copy
+ 	helper for recursive allocatable array components.
+ 
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libgfortran/Makefile.am gcc-16-20251109/libgfortran/Makefile.am
*** gcc-16-20251102/libgfortran/Makefile.am	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgfortran/Makefile.am	Sun Nov  9 22:34:16 2025
*************** endif
*** 218,223 ****
--- 218,224 ----
  gfor_src= \
  runtime/bounds.c \
  runtime/compile_options.c \
+ runtime/deep_copy.c \
  runtime/memory.c \
  runtime/string.c \
  runtime/select.c
diff -Nrcpad gcc-16-20251102/libgfortran/Makefile.in gcc-16-20251109/libgfortran/Makefile.in
*** gcc-16-20251102/libgfortran/Makefile.in	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libgfortran/Makefile.in	Sun Nov  9 22:35:24 2025
*************** libgfortran_la_LIBADD =
*** 231,238 ****
  @LIBGFOR_MINIMAL_FALSE@	runtime/fpu.lo runtime/main.lo \
  @LIBGFOR_MINIMAL_FALSE@	runtime/pause.lo runtime/stop.lo
  am__objects_3 = runtime/bounds.lo runtime/compile_options.lo \
! 	runtime/memory.lo runtime/string.lo runtime/select.lo \
! 	$(am__objects_1) $(am__objects_2)
  am__objects_4 = generated/matmul_i1.lo generated/matmul_i2.lo \
  	generated/matmul_i4.lo generated/matmul_i8.lo \
  	generated/matmul_i16.lo generated/matmul_r4.lo \
--- 231,238 ----
  @LIBGFOR_MINIMAL_FALSE@	runtime/fpu.lo runtime/main.lo \
  @LIBGFOR_MINIMAL_FALSE@	runtime/pause.lo runtime/stop.lo
  am__objects_3 = runtime/bounds.lo runtime/compile_options.lo \
! 	runtime/deep_copy.lo runtime/memory.lo runtime/string.lo \
! 	runtime/select.lo $(am__objects_1) $(am__objects_2)
  am__objects_4 = generated/matmul_i1.lo generated/matmul_i2.lo \
  	generated/matmul_i4.lo generated/matmul_i8.lo \
  	generated/matmul_i16.lo generated/matmul_r4.lo \
*************** gfor_helper_src = intrinsics/associated.
*** 1013,1021 ****
  @IEEE_SUPPORT_TRUE@ieee/ieee_exceptions.F90 \
  @IEEE_SUPPORT_TRUE@ieee/ieee_features.F90
  
! gfor_src = runtime/bounds.c runtime/compile_options.c runtime/memory.c \
! 	runtime/string.c runtime/select.c $(am__append_6) \
! 	$(am__append_7)
  i_matmul_c = \
  generated/matmul_i1.c \
  generated/matmul_i2.c \
--- 1013,1021 ----
  @IEEE_SUPPORT_TRUE@ieee/ieee_exceptions.F90 \
  @IEEE_SUPPORT_TRUE@ieee/ieee_features.F90
  
! gfor_src = runtime/bounds.c runtime/compile_options.c \
! 	runtime/deep_copy.c runtime/memory.c runtime/string.c \
! 	runtime/select.c $(am__append_6) $(am__append_7)
  i_matmul_c = \
  generated/matmul_i1.c \
  generated/matmul_i2.c \
*************** runtime/bounds.lo: runtime/$(am__dirstam
*** 1981,1986 ****
--- 1981,1988 ----
  	runtime/$(DEPDIR)/$(am__dirstamp)
  runtime/compile_options.lo: runtime/$(am__dirstamp) \
  	runtime/$(DEPDIR)/$(am__dirstamp)
+ runtime/deep_copy.lo: runtime/$(am__dirstamp) \
+ 	runtime/$(DEPDIR)/$(am__dirstamp)
  runtime/memory.lo: runtime/$(am__dirstamp) \
  	runtime/$(DEPDIR)/$(am__dirstamp)
  runtime/string.lo: runtime/$(am__dirstamp) \
*************** distclean-compile:
*** 4490,4495 ****
--- 4492,4498 ----
  @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/bounds.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/compile_options.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/convert_char.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/deep_copy.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/environ.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/error.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/fpu.Plo@am__quote@
diff -Nrcpad gcc-16-20251102/libgfortran/configure gcc-16-20251109/libgfortran/configure
*** gcc-16-20251102/libgfortran/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libgfortran/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 7815,7829 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7815,7821 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7915,7936 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7907,7937 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 8022,8063 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 8023,8048 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 8149,8173 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 8134,8172 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 13222,13228 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13225 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 13221,13227 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13224 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 13328,13334 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13331 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 13327,13333 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13330 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libgfortran/gfortran.map gcc-16-20251109/libgfortran/gfortran.map
*** gcc-16-20251102/libgfortran/gfortran.map	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgfortran/gfortran.map	Sun Nov  9 22:34:16 2025
*************** GFORTRAN_16 {
*** 2037,2040 ****
--- 2037,2041 ----
    global:
      _gfortran_string_split;
      _gfortran_string_split_char4;
+     _gfortran_cfi_deep_copy_array;
  } GFORTRAN_15.2;
diff -Nrcpad gcc-16-20251102/libgfortran/libgfortran.h gcc-16-20251109/libgfortran/libgfortran.h
*** gcc-16-20251102/libgfortran/libgfortran.h	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgfortran/libgfortran.h	Sun Nov  9 22:34:16 2025
*************** internal_proto(xcalloc);
*** 914,919 ****
--- 914,924 ----
  extern void *xrealloc (void *, size_t);
  internal_proto(xrealloc);
  
+ extern void cfi_deep_copy_array (gfc_array_void *,
+ 				 gfc_array_void *,
+ 				 void (*copy_element) (void *, void *));
+ export_proto(cfi_deep_copy_array);
+ 
  /* environ.c */
  
  extern void init_variables (void);
diff -Nrcpad gcc-16-20251102/libgfortran/runtime/deep_copy.c gcc-16-20251109/libgfortran/runtime/deep_copy.c
*** gcc-16-20251102/libgfortran/runtime/deep_copy.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/libgfortran/runtime/deep_copy.c	Sun Nov  9 22:34:17 2025
***************
*** 0 ****
--- 1,125 ----
+ /* Deep copy support for allocatable components in derived types.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+ 
+ This file is part of the GNU Fortran runtime library (libgfortran).
+ 
+ Libgfortran is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 3 of the License, or (at your option) any later version.
+ 
+ Libgfortran is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ Under Section 7 of GPL version 3, you are granted additional
+ permissions described in the GCC Runtime Library Exception, version
+ 3.1, as published by the Free Software Foundation.
+ 
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "libgfortran.h"
+ #include <string.h>
+ 
+ /* Runtime helper for deep copying allocatable array components when the
+    element type contains nested allocatable components.  The front end handles
+    allocation and deallocation; this helper performs element-wise copies using
+    the compiler-generated element copier so that recursion takes place at
+    runtime.  */
+ 
+ static inline size_t
+ descriptor_elem_size (gfc_array_void *desc)
+ {
+   size_t size = GFC_DESCRIPTOR_SIZE (desc);
+   return size == 0 ? 1 : size;
+ }
+ 
+ void
+ cfi_deep_copy_array (gfc_array_void *dest, gfc_array_void *src,
+ 		     void (*copy_element) (void *, void *))
+ {
+   int rank;
+   size_t src_elem_size;
+   size_t dest_elem_size;
+   index_type extent[GFC_MAX_DIMENSIONS];
+   index_type src_stride_bytes[GFC_MAX_DIMENSIONS];
+   index_type dest_stride_bytes[GFC_MAX_DIMENSIONS];
+   index_type count[GFC_MAX_DIMENSIONS];
+   char *src_ptr;
+   char *dest_ptr;
+ 
+   if (src == NULL || dest == NULL)
+     return;
+ 
+   if (GFC_DESCRIPTOR_DATA (src) == NULL)
+     {
+       if (GFC_DESCRIPTOR_DATA (dest) != NULL)
+         internal_error (NULL, "cfi_deep_copy_array: destination must be "
+                               "deallocated when source is not allocated");
+       return;
+     }
+ 
+   if (GFC_DESCRIPTOR_DATA (dest) == NULL)
+     internal_error (NULL, "cfi_deep_copy_array: destination not allocated");
+ 
+   rank = GFC_DESCRIPTOR_RANK (src);
+   src_elem_size = descriptor_elem_size (src);
+   dest_elem_size = descriptor_elem_size (dest);
+ 
+   if (rank <= 0)
+     {
+       memcpy (GFC_DESCRIPTOR_DATA (dest), GFC_DESCRIPTOR_DATA (src),
+               src_elem_size);
+       if (copy_element != NULL)
+         copy_element (GFC_DESCRIPTOR_DATA (dest),
+                       GFC_DESCRIPTOR_DATA (src));
+       return;
+     }
+ 
+   for (int dim = 0; dim < rank; dim++)
+     {
+       extent[dim] = GFC_DESCRIPTOR_EXTENT (src, dim);
+       if (extent[dim] <= 0)
+         return;
+ 
+       src_stride_bytes[dim]
+         = GFC_DESCRIPTOR_STRIDE (src, dim) * src_elem_size;
+       dest_stride_bytes[dim]
+         = GFC_DESCRIPTOR_STRIDE (dest, dim) * dest_elem_size;
+       count[dim] = 0;
+     }
+ 
+   src_ptr = (char *) GFC_DESCRIPTOR_DATA (src);
+   dest_ptr = (char *) GFC_DESCRIPTOR_DATA (dest);
+ 
+   while (true)
+     {
+       memcpy (dest_ptr, src_ptr, src_elem_size);
+       if (copy_element != NULL)
+         copy_element (dest_ptr, src_ptr);
+ 
+       dest_ptr += dest_stride_bytes[0];
+       src_ptr += src_stride_bytes[0];
+       count[0]++;
+ 
+       int dim = 0;
+       while (count[dim] == extent[dim])
+         {
+           count[dim] = 0;
+           dest_ptr -= dest_stride_bytes[dim] * extent[dim];
+           src_ptr -= src_stride_bytes[dim] * extent[dim];
+           dim++;
+           if (dim == rank)
+             return;
+           count[dim]++;
+           dest_ptr += dest_stride_bytes[dim];
+           src_ptr += src_stride_bytes[dim];
+         }
+     }
+ }
+ 
+ export_proto(cfi_deep_copy_array);
diff -Nrcpad gcc-16-20251102/libgm2/ChangeLog gcc-16-20251109/libgm2/ChangeLog
*** gcc-16-20251102/libgm2/ChangeLog	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgm2/ChangeLog	Sun Nov  9 22:34:17 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-24  Gaius Mulley  <gaiusmod2@gmail.com>
  
  	PR modula2/122407
diff -Nrcpad gcc-16-20251102/libgm2/configure gcc-16-20251109/libgm2/configure
*** gcc-16-20251102/libgm2/configure	Sun Nov  2 22:34:19 2025
--- gcc-16-20251109/libgm2/configure	Sun Nov  9 22:34:17 2025
*************** rm -f conftest*
*** 9820,9834 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 9820,9826 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 9920,9941 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 9912,9942 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 10027,10068 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 10028,10053 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 10154,10178 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 10139,10177 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 15229,15235 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15232 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 15228,15234 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15231 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 15335,15341 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15338 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 15334,15340 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 15337 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libgomp/ChangeLog gcc-16-20251109/libgomp/ChangeLog
*** gcc-16-20251102/libgomp/ChangeLog	Sun Nov  2 22:34:20 2025
--- gcc-16-20251109/libgomp/ChangeLog	Sun Nov  9 22:34:22 2025
***************
*** 1,3 ****
--- 1,31 ----
+ 2025-11-05  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.c++/target-std__multimap-concurrent.C: Fix memory
+ 	freeing of device allocated memory with USM.
+ 
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
+ 2025-11-03  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR libgomp/122543
+ 	* testsuite/libgomp.fortran/omp_target_memset.f90: Move fptr inside
+ 	the target to avoid implicit mapping of its uninit pointee.
+ 	* testsuite/libgomp.fortran/omp_target_memset-2.f90: Likewise.
+ 
+ 2025-11-03  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	PR libgomp/122281
+ 	* testsuite/libgomp.c/pr122281.c: Fix for non-USM offloading
+ 	execution.
+ 
+ 2025-11-03  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR libgomp/122281
+ 	PR middle-end/105001
+ 	* testsuite/libgomp.c/pr122281.c: New file.
+ 
  2025-10-28  Thomas Schwinge  <tschwinge@baylibre.com>
  
  	* env.c (initialize_env): Simplify 'parse_stacksize' call.
diff -Nrcpad gcc-16-20251102/libgomp/configure gcc-16-20251109/libgomp/configure
*** gcc-16-20251102/libgomp/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libgomp/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 6339,6353 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6339,6345 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6439,6460 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6431,6461 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6546,6587 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6547,6572 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6673,6697 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6658,6696 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 11844,11850 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11847 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11843,11849 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11846 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11950,11956 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11953 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11949,11955 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11952 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libgomp/testsuite/libgomp.c/pr122281.c gcc-16-20251109/libgomp/testsuite/libgomp.c/pr122281.c
*** gcc-16-20251102/libgomp/testsuite/libgomp.c/pr122281.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251109/libgomp/testsuite/libgomp.c/pr122281.c	Sun Nov  9 22:34:23 2025
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do run }  */
+ /* { dg-additional-options "-O3" }  */
+ 
+ /* PR libgomp/122281  */
+ /* PR middle-end/105001  */
+ 
+ /* If SIMT is supported, the inner 'omp simd' is duplicated into
+    one SIMT and one SIMD variant. SIMT is currently only supported
+    with nvidia GPUs.  (This only happens with -O1 or higher.)
+ 
+    The duplication failed for the SIMD case as a tree was shared and
+    the initialization only happened in the SIMT branch, i.e. when
+    compiling for a SIMT-device, all non-SIMD (offload or host devices)
+    accesses failed (segfault) for the atomic update.  */
+ 
+ #include <omp.h>
+ 
+ int __attribute__((noinline, noclone))
+ f(int *A, int n, int dev) {
+  int cnt = 0;
+  #pragma omp target map(cnt) map(to:A[0:n]) device(dev)
+  {
+    #pragma omp parallel for simd
+    for (int i = 0; i < n; i++)
+    if (A[i] != 0)
+      {
+        #pragma omp atomic
+        cnt++;
+      }
+  }
+  return cnt;
+ }
+ 
+ int main() {
+   int n = 10;
+   int A[10] = {11,22,33,44,55,66,77,88,99,110};
+ 
+   /* Run over all devices, including the host; the host should be SIMD,
+      some non-host devices might be SIMT.  */
+   for (int dev = omp_initial_device; dev <= omp_get_num_devices(); dev++)
+     if (f (A, n, dev) != 10)
+       __builtin_abort();
+ }
diff -Nrcpad gcc-16-20251102/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C gcc-16-20251109/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C
*** gcc-16-20251102/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C	Sun Nov  2 22:34:20 2025
--- gcc-16-20251109/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C	Sun Nov  9 22:34:22 2025
***************
*** 4,9 ****
--- 4,10 ----
  #include <stdlib.h>
  #include <time.h>
  #include <map>
+ #include <omp.h>
  
  // Make sure that KEY_MAX is less than N to ensure some duplicate keys.
  #define N 3000
*************** int main (void)
*** 53,58 ****
--- 54,69 ----
  	for (auto it = range.first; it != range.second; ++it)
  	  sum += (long long) it->first * it->second;
        }
+ #ifdef MEM_SHARED
+   /* Even with USM, memory allocated on the device (with _map.insert)
+      must be freed on the device.  */
+   if (omp_get_default_device () != omp_initial_device
+       && omp_get_default_device () != omp_get_num_devices ())
+     {
+       #pragma omp target
+ 	_map.clear ();
+     }
+ #endif
  
  #ifndef MEM_SHARED
    #pragma omp target
diff -Nrcpad gcc-16-20251102/libgomp/testsuite/libgomp.fortran/omp_target_memset-2.f90 gcc-16-20251109/libgomp/testsuite/libgomp.fortran/omp_target_memset-2.f90
*** gcc-16-20251102/libgomp/testsuite/libgomp.fortran/omp_target_memset-2.f90	Sun Nov  2 22:34:21 2025
--- gcc-16-20251109/libgomp/testsuite/libgomp.fortran/omp_target_memset-2.f90	Sun Nov  9 22:34:23 2025
*************** do dev = omp_initial_device, omp_get_num
*** 11,17 ****
  block
    integer(c_int) :: i, val, start, tail
    type(c_ptr) :: ptr, ptr2, tmpptr
-   integer(c_int8_t), pointer, contiguous :: fptr(:)
    integer(c_intptr_t) :: intptr
    integer(c_size_t), parameter :: count = 1024
    integer(omp_depend_kind) :: dep(1)
--- 11,16 ----
*************** block
*** 35,56 ****
        !$omp taskwait
  
        !$omp target device(dev) is_device_ptr(ptr) depend(depobj: dep(1)) nowait
          do i = 1 + start, int(count, c_int) - start - tail
-           call c_f_pointer (ptr, fptr, [count])
            if (fptr(i) /= int (val, c_int8_t)) stop 2
            fptr(i) = fptr(i) + 2_c_int8_t
          end do
        !$omp end target
  
        ptr2 = omp_target_memset_async (tmpptr, val + 3, &
                                        count - start - tail, dev, 1, dep)
  
        !$omp target device(dev) is_device_ptr(ptr) depend(depobj: dep(1)) nowait
          do i = 1 + start, int(count, c_int) - start - tail
-           call c_f_pointer (ptr, fptr, [count])
            if (fptr(i) /= int (val + 3, c_int8_t)) stop 3
            fptr(i) = fptr(i) - 1_c_int8_t
          end do
        !$omp end target
  
        ptr2 = omp_target_memset_async (tmpptr, val - 3, &
--- 34,61 ----
        !$omp taskwait
  
        !$omp target device(dev) is_device_ptr(ptr) depend(depobj: dep(1)) nowait
+       block
+         integer(c_int8_t), pointer, contiguous :: fptr(:)
+         call c_f_pointer (ptr, fptr, [count])
          do i = 1 + start, int(count, c_int) - start - tail
            if (fptr(i) /= int (val, c_int8_t)) stop 2
            fptr(i) = fptr(i) + 2_c_int8_t
          end do
+       end block
        !$omp end target
  
        ptr2 = omp_target_memset_async (tmpptr, val + 3, &
                                        count - start - tail, dev, 1, dep)
  
        !$omp target device(dev) is_device_ptr(ptr) depend(depobj: dep(1)) nowait
+       block
+         integer(c_int8_t), pointer, contiguous :: fptr(:)
+         call c_f_pointer (ptr, fptr, [count])
          do i = 1 + start, int(count, c_int) - start - tail
            if (fptr(i) /= int (val + 3, c_int8_t)) stop 3
            fptr(i) = fptr(i) - 1_c_int8_t
          end do
+       end block
        !$omp end target
  
        ptr2 = omp_target_memset_async (tmpptr, val - 3, &
diff -Nrcpad gcc-16-20251102/libgomp/testsuite/libgomp.fortran/omp_target_memset.f90 gcc-16-20251109/libgomp/testsuite/libgomp.fortran/omp_target_memset.f90
*** gcc-16-20251102/libgomp/testsuite/libgomp.fortran/omp_target_memset.f90	Sun Nov  2 22:34:21 2025
--- gcc-16-20251109/libgomp/testsuite/libgomp.fortran/omp_target_memset.f90	Sun Nov  9 22:34:23 2025
*************** implicit none (type, external)
*** 6,12 ****
  
  integer(c_int) :: dev, i, val, start, tail
  type(c_ptr) :: ptr, ptr2, tmpptr
- integer(c_int8_t), pointer, contiguous :: fptr(:)
  integer(c_intptr_t) :: intptr
  integer(c_size_t), parameter :: count = 1024
  
--- 6,11 ----
*************** do dev = omp_initial_device, omp_get_num
*** 26,35 ****
        if (.not. c_associated (tmpptr, ptr2)) stop 1
  
        !$omp target device(dev) is_device_ptr(ptr)
          do i = 1 + start, int(count, c_int) - start - tail
-           call c_f_pointer (ptr, fptr, [count])
            if (fptr(i) /= int (val, c_int8_t)) stop 2
          end do
        !$omp end target
      end do
    end do
--- 25,37 ----
        if (.not. c_associated (tmpptr, ptr2)) stop 1
  
        !$omp target device(dev) is_device_ptr(ptr)
+       block
+         integer(c_int8_t), pointer, contiguous :: fptr(:)
+         call c_f_pointer (ptr, fptr, [count])
          do i = 1 + start, int(count, c_int) - start - tail
            if (fptr(i) /= int (val, c_int8_t)) stop 2
          end do
+       end block
        !$omp end target
      end do
    end do
diff -Nrcpad gcc-16-20251102/libgrust/ChangeLog gcc-16-20251109/libgrust/ChangeLog
*** gcc-16-20251102/libgrust/ChangeLog	Sun Nov  2 22:34:21 2025
--- gcc-16-20251109/libgrust/ChangeLog	Sun Nov  9 22:34:24 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-30  Owen Avery  <powerboat9.gamer@gmail.com>
  
  	* libformat_parser/src/lib.rs (struct FFIOpt): Likewise and
diff -Nrcpad gcc-16-20251102/libgrust/configure gcc-16-20251109/libgrust/configure
*** gcc-16-20251102/libgrust/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libgrust/configure	Sun Nov  9 22:34:24 2025
*************** rm -f conftest*
*** 7622,7636 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7622,7628 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7722,7743 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7714,7744 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7829,7870 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7830,7855 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7956,7980 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7941,7979 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 13032,13038 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13035 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 13031,13037 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13034 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 13138,13144 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13141 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 13137,13143 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 13140 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libiberty/ChangeLog gcc-16-20251109/libiberty/ChangeLog
*** gcc-16-20251102/libiberty/ChangeLog	Sun Nov  2 22:34:21 2025
--- gcc-16-20251109/libiberty/ChangeLog	Sun Nov  9 22:34:25 2025
***************
*** 1,3 ****
--- 1,29 ----
+ 2025-11-06  Peter Damianov  <peter0x44@disroot.org>
+ 
+ 	PR target/122472
+ 	* simple-object-coff.c (struct external_filehdr_bigobj): New
+ 	structure for BigObj file header.
+ 	(bigobj_magic): New constant for BigObj magic bytes.
+ 	(struct external_syment_bigobj): New structure for BigObj
+ 	20-byte symbol table entries.
+ 	(union external_auxent_bigobj): New union for BigObj 20-byte
+ 	auxiliary symbol entries.
+ 	(struct simple_object_coff_read): Add is_bigobj flag and make
+ 	nscns 32-bit to support both formats.
+ 	(struct simple_object_coff_attributes): Add is_bigobj flag.
+ 	(simple_object_coff_match): Add BigObj format detection.
+ 	(simple_object_coff_read_strtab): Use format-specific symbol
+ 	size when calculating string table offset.
+ 	(simple_object_coff_attributes_merge): Check is_bigobj flag.
+ 	(simple_object_coff_write_filehdr_bigobj): New function.
+ 	(simple_object_coff_write_to_file): Add logic for writing
+ 	BigObj vs regular COFF format with appropriate symbol
+ 	and auxiliary entry structures.
+ 
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-02  H.J. Lu  <hjl.tools@gmail.com>
  
  	* aclocal.m4: Regenerated.
diff -Nrcpad gcc-16-20251102/libiberty/configure gcc-16-20251109/libiberty/configure
*** gcc-16-20251102/libiberty/configure	Sun Nov  2 22:34:21 2025
--- gcc-16-20251109/libiberty/configure	Sun Nov  9 22:34:25 2025
*************** rm -f conftest*
*** 4506,4520 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 4506,4512 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 4606,4627 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 4598,4628 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 4713,4754 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    PLUGIN_FILE="$plugin_file"
  
  if test -n "$PLUGIN_FILE"; then
    PLUGIN_OPTION="--plugin $PLUGIN_FILE"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 4714,4739 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    PLUGIN_FILE="$plugin_file"
  
  if test -n "$PLUGIN_FILE"; then
    PLUGIN_OPTION="--plugin $PLUGIN_FILE"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 4840,4864 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   PLUGIN_OPTION="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$PLUGIN_OPTION"; then
--- 4825,4863 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ PLUGIN_OPTION="$plugin_option"
  
  fi
  if test -n "$PLUGIN_OPTION"; then
diff -Nrcpad gcc-16-20251102/libiberty/simple-object-coff.c gcc-16-20251109/libiberty/simple-object-coff.c
*** gcc-16-20251102/libiberty/simple-object-coff.c	Sun Nov  2 22:34:21 2025
--- gcc-16-20251109/libiberty/simple-object-coff.c	Sun Nov  9 22:34:25 2025
*************** struct external_filehdr
*** 57,62 ****
--- 57,88 ----
    unsigned char f_flags[2];	/* flags			*/
  };
  
+ /* BigObj COFF file header.  */
+ 
+ struct external_filehdr_bigobj
+ {
+   unsigned char sig1[2];	/* Must be 0x0000 */
+   unsigned char sig2[2];	/* Must be 0xFFFF */
+   unsigned char version[2];	/* Version, currently 2 */
+   unsigned char machine[2];	/* Machine type */
+   unsigned char timdat[4];	/* time & date stamp */
+   unsigned char classid[16];	/* Magic GUID that identifies BigObj format */
+   unsigned char sizeofdata[4];	/* Size of data (unused, set to 0) */
+   unsigned char flags[4];	/* Flags (unused, set to 0) */
+   unsigned char metadatasize[4];	/* Metadata size (unused, set to 0) */
+   unsigned char metadataoffset[4];	/* Metadata offset (unused, set to 0) */
+   unsigned char nscns[4];	/* number of sections (32-bit!) */
+   unsigned char symptr[4];	/* file pointer to symtab */
+   unsigned char nsyms[4];	/* number of symtab entries */
+ };
+ 
+ /* The BigObj magic GUID (ClassID).  */
+ static const unsigned char bigobj_magic[16] =
+ {
+   0xC7, 0xA1, 0xBA, 0xD1, 0xEE, 0xBA, 0xA9, 0x4B,
+   0xAF, 0x20, 0xFA, 0xF6, 0x6A, 0xA4, 0xDC, 0xB8
+ };
+ 
  /* Bits for filehdr f_flags field.  */
  
  #define F_EXEC			(0x0002)
*************** struct external_syment
*** 119,124 ****
--- 145,172 ----
    unsigned char e_numaux[1];
  };
  
+ /* BigObj COFF symbol table entry (20 bytes instead of 18).  */
+ 
+ struct external_syment_bigobj
+ {
+   union
+   {
+     unsigned char e_name[E_SYMNMLEN];
+ 
+     struct
+     {
+       unsigned char e_zeroes[4];
+       unsigned char e_offset[4];
+     } e;
+   } e;
+ 
+   unsigned char e_value[4];
+   unsigned char e_scnum[4];	/* 32-bit section number! */
+   unsigned char e_type[2];
+   unsigned char e_sclass[1];
+   unsigned char e_numaux[1];
+ };
+ 
  /* Length allowed for filename in aux sym format 4.  */
  
  #define E_FILNMLEN	18
*************** union external_auxent
*** 149,154 ****
--- 197,229 ----
    } x_scn;
  };
  
+ /* BigObj auxiliary symbol (20 bytes to match symbol size).  */
+ 
+ union external_auxent_bigobj
+ {
+   /* Aux sym format 4: file.  */
+   union
+   {
+     char x_fname[E_FILNMLEN];
+     struct
+     {
+       unsigned char x_zeroes[4];
+       unsigned char x_offset[4];
+     } x_n;
+   } x_file;
+   /* Aux sym format 5: section.  */
+   struct
+   {
+     unsigned char x_scnlen[4];		/* section length		*/
+     unsigned char x_nreloc[2];		/* # relocation entries		*/
+     unsigned char x_nlinno[2];		/* # line numbers		*/
+     unsigned char x_checksum[4];	/* section COMDAT checksum	*/
+     unsigned char x_associated[2];	/* COMDAT assoc section index	*/
+     unsigned char x_comdat[1];		/* COMDAT selection number	*/
+     unsigned char x_pad[3];		/* Padding to 20 bytes		*/
+   } x_scn;
+ };
+ 
  /* Symbol-related constants.  */
  
  #define IMAGE_SYM_DEBUG		(-2)
*************** struct simple_object_coff_read
*** 168,175 ****
    unsigned short magic;
    /* Whether the file is big-endian.  */
    unsigned char is_big_endian;
    /* Number of sections.  */
!   unsigned short nscns;
    /* File offset of symbol table.  */
    off_t symptr;
    /* Number of symbol table entries.  */
--- 243,252 ----
    unsigned short magic;
    /* Whether the file is big-endian.  */
    unsigned char is_big_endian;
+   /* Whether this is BigObj format.  */
+   unsigned char is_bigobj;
    /* Number of sections.  */
!   unsigned int nscns;
    /* File offset of symbol table.  */
    off_t symptr;
    /* Number of symbol table entries.  */
*************** struct simple_object_coff_attributes
*** 188,193 ****
--- 265,272 ----
    unsigned short magic;
    /* Whether the file is big-endian.  */
    unsigned char is_big_endian;
+   /* Whether this is BigObj format.  */
+   unsigned char is_bigobj;
    /* Flags.  */
    unsigned short flags;
  };
*************** simple_object_coff_match (unsigned char
*** 240,249 ****
    int is_big_endian;
    unsigned short (*fetch_16) (const unsigned char *);
    unsigned int (*fetch_32) (const unsigned char *);
!   unsigned char hdrbuf[sizeof (struct external_filehdr)];
    unsigned short flags;
    struct simple_object_coff_read *ocr;
  
    c = sizeof (coff_magic) / sizeof (coff_magic[0]);
    magic_big = simple_object_fetch_big_16 (header);
    magic_little = simple_object_fetch_little_16 (header);
--- 319,330 ----
    int is_big_endian;
    unsigned short (*fetch_16) (const unsigned char *);
    unsigned int (*fetch_32) (const unsigned char *);
!   unsigned char hdrbuf[sizeof (struct external_filehdr_bigobj)];
    unsigned short flags;
    struct simple_object_coff_read *ocr;
+   unsigned short sig1, sig2;
  
+   /* Try regular COFF first.  */
    c = sizeof (coff_magic) / sizeof (coff_magic[0]);
    magic_big = simple_object_fetch_big_16 (header);
    magic_little = simple_object_fetch_little_16 (header);
*************** simple_object_coff_match (unsigned char
*** 254,265 ****
  	  : coff_magic[i].magic == magic_little)
  	break;
      }
!   if (i >= c)
      {
        *errmsg = NULL;
        *err = 0;
        return NULL;
      }
    is_big_endian = coff_magic[i].is_big_endian;
  
    magic = is_big_endian ? magic_big : magic_little;
--- 335,398 ----
  	  : coff_magic[i].magic == magic_little)
  	break;
      }
! 
!   /* Check for BigObj if regular COFF didn't match.  */
!   sig1 = simple_object_fetch_little_16 (header);
!   sig2 = simple_object_fetch_little_16 (header + 2);
! 
!   if (i >= c && (sig1 != 0 || sig2 != 0xFFFF))
      {
+       /* Not regular COFF and not BigObj.  */
        *errmsg = NULL;
        *err = 0;
        return NULL;
      }
+ 
+   if (sig1 == 0 && sig2 == 0xFFFF)
+     {
+       /* This looks like BigObj.  Verify the ClassID.  */
+       unsigned char bigobj_hdrbuf[sizeof (struct external_filehdr_bigobj)];
+ 
+       if (!simple_object_internal_read (descriptor, offset, bigobj_hdrbuf,
+ 					sizeof bigobj_hdrbuf, errmsg, err))
+ 	return NULL;
+ 
+       if (memcmp (bigobj_hdrbuf + offsetof (struct external_filehdr_bigobj,
+ 					    classid),
+ 		  bigobj_magic, 16) != 0)
+ 	{
+ 	  *errmsg = NULL;
+ 	  *err = 0;
+ 	  return NULL;
+ 	}
+ 
+       /* BigObj is always little-endian.  */
+       is_big_endian = 0;
+ 
+       ocr = XNEW (struct simple_object_coff_read);
+       ocr->magic = simple_object_fetch_little_16
+ 		     (bigobj_hdrbuf
+ 		      + offsetof (struct external_filehdr_bigobj, machine));
+       ocr->is_big_endian = 0;
+       ocr->is_bigobj = 1;
+       ocr->nscns = simple_object_fetch_little_32
+ 		     (bigobj_hdrbuf
+ 		      + offsetof (struct external_filehdr_bigobj, nscns));
+       ocr->symptr = simple_object_fetch_little_32
+ 		      (bigobj_hdrbuf
+ 		       + offsetof (struct external_filehdr_bigobj, symptr));
+       ocr->nsyms = simple_object_fetch_little_32
+ 		     (bigobj_hdrbuf
+ 		      + offsetof (struct external_filehdr_bigobj, nsyms));
+       ocr->flags = simple_object_fetch_little_32
+ 		     (bigobj_hdrbuf
+ 		      + offsetof (struct external_filehdr_bigobj, flags));
+       ocr->scnhdr_offset = sizeof (struct external_filehdr_bigobj);
+ 
+       return (void *) ocr;
+     }
+ 
+   /* Regular COFF.  */
    is_big_endian = coff_magic[i].is_big_endian;
  
    magic = is_big_endian ? magic_big : magic_little;
*************** simple_object_coff_match (unsigned char
*** 270,276 ****
  	      ? simple_object_fetch_big_32
  	      : simple_object_fetch_little_32);
  
!   if (!simple_object_internal_read (descriptor, offset, hdrbuf, sizeof hdrbuf,
  				    errmsg, err))
      return NULL;
  
--- 403,409 ----
  	      ? simple_object_fetch_big_32
  	      : simple_object_fetch_little_32);
  
!   if (!simple_object_internal_read (descriptor, offset, hdrbuf, sizeof (struct external_filehdr),
  				    errmsg, err))
      return NULL;
  
*************** simple_object_coff_match (unsigned char
*** 285,290 ****
--- 418,424 ----
    ocr = XNEW (struct simple_object_coff_read);
    ocr->magic = magic;
    ocr->is_big_endian = is_big_endian;
+   ocr->is_bigobj = 0;
    ocr->nscns = fetch_16 (hdrbuf + offsetof (struct external_filehdr, f_nscns));
    ocr->symptr = fetch_32 (hdrbuf
  			  + offsetof (struct external_filehdr, f_symptr));
*************** simple_object_coff_read_strtab (simple_o
*** 309,317 ****
    unsigned char strsizebuf[4];
    size_t strsize;
    char *strtab;
  
!   strtab_offset = sobj->offset + ocr->symptr
! 		  + ocr->nsyms * sizeof (struct external_syment);
    if (!simple_object_internal_read (sobj->descriptor, strtab_offset,
  				    strsizebuf, 4, errmsg, err))
      return NULL;
--- 443,455 ----
    unsigned char strsizebuf[4];
    size_t strsize;
    char *strtab;
+   size_t sym_size;
  
!   /* Symbol size depends on format.  */
!   sym_size = ocr->is_bigobj ? sizeof (struct external_syment_bigobj)
! 			    : sizeof (struct external_syment);
! 
!   strtab_offset = sobj->offset + ocr->symptr + ocr->nsyms * sym_size;
    if (!simple_object_internal_read (sobj->descriptor, strtab_offset,
  				    strsizebuf, 4, errmsg, err))
      return NULL;
*************** simple_object_coff_fetch_attributes (sim
*** 444,449 ****
--- 582,588 ----
    ret = XNEW (struct simple_object_coff_attributes);
    ret->magic = ocr->magic;
    ret->is_big_endian = ocr->is_big_endian;
+   ret->is_bigobj = ocr->is_bigobj;
    ret->flags = ocr->flags;
    return ret;
  }
*************** simple_object_coff_attributes_merge (voi
*** 466,472 ****
    struct simple_object_coff_attributes *from =
      (struct simple_object_coff_attributes *) fromdata;
  
!   if (to->magic != from->magic || to->is_big_endian != from->is_big_endian)
      {
        *err = 0;
        return "COFF object format mismatch";
--- 605,613 ----
    struct simple_object_coff_attributes *from =
      (struct simple_object_coff_attributes *) fromdata;
  
!   if (to->magic != from->magic
!       || to->is_big_endian != from->is_big_endian
!       || to->is_bigobj != from->is_bigobj)
      {
        *err = 0;
        return "COFF object format mismatch";
*************** simple_object_coff_start_write (void *at
*** 500,505 ****
--- 641,692 ----
    return ret;
  }
  
+ /* Write out a BigObj COFF filehdr.  */
+ 
+ static int
+ simple_object_coff_write_filehdr_bigobj (simple_object_write *sobj,
+ 					 int descriptor,
+ 					 unsigned int nscns,
+ 					 size_t symtab_offset,
+ 					 unsigned int nsyms,
+ 					 const char **errmsg, int *err)
+ {
+   struct simple_object_coff_attributes *attrs =
+     (struct simple_object_coff_attributes *) sobj->data;
+   unsigned char hdrbuf[sizeof (struct external_filehdr_bigobj)];
+   unsigned char *hdr;
+   void (*set_16) (unsigned char *, unsigned short);
+   void (*set_32) (unsigned char *, unsigned int);
+ 
+   hdr = &hdrbuf[0];
+ 
+   /* BigObj is always little-endian.  */
+   set_16 = simple_object_set_little_16;
+   set_32 = simple_object_set_little_32;
+ 
+   memset (hdr, 0, sizeof (struct external_filehdr_bigobj));
+ 
+   /* Set BigObj signatures.  */
+   set_16 (hdr + offsetof (struct external_filehdr_bigobj, sig1), 0);
+   set_16 (hdr + offsetof (struct external_filehdr_bigobj, sig2), 0xFFFF);
+   set_16 (hdr + offsetof (struct external_filehdr_bigobj, version), 2);
+   set_16 (hdr + offsetof (struct external_filehdr_bigobj, machine),
+ 	  attrs->magic);
+   /* timdat left as zero.  */
+   /* Copy ClassID.  */
+   memcpy (hdr + offsetof (struct external_filehdr_bigobj, classid),
+ 	  bigobj_magic, 16);
+   /* sizeofdata, flags, metadatasize, metadataoffset left as zero.  */
+   set_32 (hdr + offsetof (struct external_filehdr_bigobj, nscns), nscns);
+   set_32 (hdr + offsetof (struct external_filehdr_bigobj, symptr),
+ 	  symtab_offset);
+   set_32 (hdr + offsetof (struct external_filehdr_bigobj, nsyms), nsyms);
+ 
+   return simple_object_internal_write (descriptor, 0, hdrbuf,
+ 				       sizeof (struct external_filehdr_bigobj),
+ 				       errmsg, err);
+ }
+ 
  /* Write out a COFF filehdr.  */
  
  static int
*************** simple_object_coff_write_to_file (simple
*** 618,631 ****
       what 'gas' uses when told to assemble from stdin.  */
    const char *source_filename = "fake";
    size_t sflen;
!   union
!   {
!     struct external_syment sym;
!     union external_auxent aux;
!   } syms[2];
    void (*set_16) (unsigned char *, unsigned short);
    void (*set_32) (unsigned char *, unsigned int);
  
    set_16 = (attrs->is_big_endian
  	    ? simple_object_set_big_16
  	    : simple_object_set_little_16);
--- 805,820 ----
       what 'gas' uses when told to assemble from stdin.  */
    const char *source_filename = "fake";
    size_t sflen;
!   size_t symsize;
    void (*set_16) (unsigned char *, unsigned short);
    void (*set_32) (unsigned char *, unsigned int);
  
+   /* Determine symbol size based on format.  */
+   if (attrs->is_bigobj)
+     symsize = sizeof (struct external_syment_bigobj);
+   else
+     symsize = sizeof (struct external_syment);
+ 
    set_16 = (attrs->is_big_endian
  	    ? simple_object_set_big_16
  	    : simple_object_set_little_16);
*************** simple_object_coff_write_to_file (simple
*** 637,643 ****
    for (section = sobj->sections; section != NULL; section = section->next)
      ++nscns;
  
!   scnhdr_offset = sizeof (struct external_filehdr);
    offset = scnhdr_offset + nscns * sizeof (struct external_scnhdr);
    name_offset = 4;
    for (section = sobj->sections; section != NULL; section = section->next)
--- 826,835 ----
    for (section = sobj->sections; section != NULL; section = section->next)
      ++nscns;
  
!   if (attrs->is_bigobj)
!     scnhdr_offset = sizeof (struct external_filehdr_bigobj);
!   else
!     scnhdr_offset = sizeof (struct external_filehdr);
    offset = scnhdr_offset + nscns * sizeof (struct external_scnhdr);
    name_offset = 4;
    for (section = sobj->sections; section != NULL; section = section->next)
*************** simple_object_coff_write_to_file (simple
*** 693,783 ****
    symtab_offset = offset;
    /* Advance across space reserved for symbol table to locate
       start of string table.  */
!   offset += nsyms * sizeof (struct external_syment);
  
    /* Write out file symbol.  */
!   memset (&syms[0], 0, sizeof (syms));
!   strcpy ((char *)&syms[0].sym.e.e_name[0], ".file");
!   set_16 (&syms[0].sym.e_scnum[0], IMAGE_SYM_DEBUG);
!   set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
!   syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_FILE;
!   syms[0].sym.e_numaux[0] = 1;
!   /* The name need not be nul-terminated if it fits into the x_fname field
!      directly, but must be if it has to be placed into the string table.  */
!   sflen = strlen (source_filename);
!   if (sflen <= E_FILNMLEN)
!     memcpy (&syms[1].aux.x_file.x_fname[0], source_filename, sflen);
!   else
      {
!       set_32 (&syms[1].aux.x_file.x_n.x_offset[0], name_offset);
!       if (!simple_object_internal_write (descriptor, offset + name_offset,
! 					 ((const unsigned char *)
! 					  source_filename),
! 					 sflen + 1, &errmsg, err))
  	return errmsg;
-       name_offset += strlen (source_filename) + 1;
-     }
-   if (!simple_object_internal_write (descriptor, symtab_offset,
- 				     (const unsigned char *) &syms[0],
- 				     sizeof (syms), &errmsg, err))
-     return errmsg;
  
!   /* Write the string table length, followed by the strings and section
!      symbols in step with each other.  */
!   set_32 (strsizebuf, name_offset);
!   if (!simple_object_internal_write (descriptor, offset, strsizebuf, 4,
! 				     &errmsg, err))
!     return errmsg;
  
!   name_offset = 4;
!   secsym_offset = symtab_offset + sizeof (syms);
!   memset (&syms[0], 0, sizeof (syms));
!   set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
!   syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_STATIC;
!   syms[0].sym.e_numaux[0] = 1;
!   secnum = 1;
  
!   for (section = sobj->sections; section != NULL; section = section->next)
      {
!       size_t namelen;
!       size_t scnsize;
!       struct simple_object_write_section_buffer *buffer;
  
!       namelen = strlen (section->name);
!       set_16 (&syms[0].sym.e_scnum[0], secnum++);
!       scnsize = 0;
!       for (buffer = section->buffers; buffer != NULL; buffer = buffer->next)
! 	scnsize += buffer->size;
!       set_32 (&syms[1].aux.x_scn.x_scnlen[0], scnsize);
!       if (namelen > SCNNMLEN)
  	{
! 	  set_32 (&syms[0].sym.e.e.e_zeroes[0], 0);
! 	  set_32 (&syms[0].sym.e.e.e_offset[0], name_offset);
  	  if (!simple_object_internal_write (descriptor, offset + name_offset,
  					     ((const unsigned char *)
! 					      section->name),
! 					     namelen + 1, &errmsg, err))
  	    return errmsg;
! 	  name_offset += namelen + 1;
! 	}
!       else
! 	{
! 	  memcpy (&syms[0].sym.e.e_name[0], section->name,
! 		  strlen (section->name));
! 	  memset (&syms[0].sym.e.e_name[strlen (section->name)], 0,
! 		  E_SYMNMLEN - strlen (section->name));
  	}
! 
!       if (!simple_object_internal_write (descriptor, secsym_offset,
  					 (const unsigned char *) &syms[0],
  					 sizeof (syms), &errmsg, err))
  	return errmsg;
!       secsym_offset += sizeof (syms);
      }
  
!   if (!simple_object_coff_write_filehdr (sobj, descriptor, nscns,
! 					 symtab_offset, nsyms, &errmsg, err))
!     return errmsg;
  
    return NULL;
  }
--- 885,1082 ----
    symtab_offset = offset;
    /* Advance across space reserved for symbol table to locate
       start of string table.  */
!   offset += nsyms * symsize;
  
    /* Write out file symbol.  */
!   if (attrs->is_bigobj)
      {
!       union
!       {
! 	struct external_syment_bigobj sym;
! 	union external_auxent_bigobj aux;
!       } syms[2];
! 
!       memset (&syms[0], 0, sizeof (syms));
!       strcpy ((char *)&syms[0].sym.e.e_name[0], ".file");
!       set_32 (&syms[0].sym.e_scnum[0], IMAGE_SYM_DEBUG);
!       set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
!       syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_FILE;
!       syms[0].sym.e_numaux[0] = 1;
!       /* The name need not be nul-terminated if it fits into the x_fname field
! 	 directly, but must be if it has to be placed into the string table.  */
!       sflen = strlen (source_filename);
!       if (sflen <= E_FILNMLEN)
! 	memcpy (&syms[1].aux.x_file.x_fname[0], source_filename, sflen);
!       else
! 	{
! 	  set_32 (&syms[1].aux.x_file.x_n.x_offset[0], name_offset);
! 	  if (!simple_object_internal_write (descriptor, offset + name_offset,
! 					     ((const unsigned char *)
! 					      source_filename),
! 					     sflen + 1, &errmsg, err))
! 	    return errmsg;
! 	  name_offset += strlen (source_filename) + 1;
! 	}
!       if (!simple_object_internal_write (descriptor, symtab_offset,
! 					 (const unsigned char *) &syms[0],
! 					 sizeof (syms), &errmsg, err))
  	return errmsg;
  
!       /* Write the string table length, followed by the strings and section
! 	 symbols in step with each other.  */
!       set_32 (strsizebuf, name_offset);
!       if (!simple_object_internal_write (descriptor, offset, strsizebuf, 4,
! 					 &errmsg, err))
! 	return errmsg;
  
!       name_offset = 4;
!       secsym_offset = symtab_offset + sizeof (syms);
!       memset (&syms[0], 0, sizeof (syms));
!       set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
!       syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_STATIC;
!       syms[0].sym.e_numaux[0] = 1;
!       secnum = 1;
  
!       for (section = sobj->sections; section != NULL; section = section->next)
! 	{
! 	  size_t namelen;
! 	  size_t scnsize;
! 	  struct simple_object_write_section_buffer *buffer;
! 
! 	  namelen = strlen (section->name);
! 	  set_32 (&syms[0].sym.e_scnum[0], secnum++);
! 	  scnsize = 0;
! 	  for (buffer = section->buffers; buffer != NULL; buffer = buffer->next)
! 	    scnsize += buffer->size;
! 	  set_32 (&syms[1].aux.x_scn.x_scnlen[0], scnsize);
! 	  if (namelen > SCNNMLEN)
! 	    {
! 	      set_32 (&syms[0].sym.e.e.e_zeroes[0], 0);
! 	      set_32 (&syms[0].sym.e.e.e_offset[0], name_offset);
! 	      if (!simple_object_internal_write (descriptor, offset + name_offset,
! 						 ((const unsigned char *)
! 						  section->name),
! 						 namelen + 1, &errmsg, err))
! 		return errmsg;
! 	      name_offset += namelen + 1;
! 	    }
! 	  else
! 	    {
! 	      memcpy (&syms[0].sym.e.e_name[0], section->name,
! 		      strlen (section->name));
! 	      memset (&syms[0].sym.e.e_name[strlen (section->name)], 0,
! 		      E_SYMNMLEN - strlen (section->name));
! 	    }
! 
! 	  if (!simple_object_internal_write (descriptor, secsym_offset,
! 					     (const unsigned char *) &syms[0],
! 					     sizeof (syms), &errmsg, err))
! 	    return errmsg;
! 	  secsym_offset += sizeof (syms);
! 	}
!     }
!   else
      {
!       /* Regular COFF.  */
!       union
!       {
! 	struct external_syment sym;
! 	union external_auxent aux;
!       } syms[2];
  
!       memset (&syms[0], 0, sizeof (syms));
!       strcpy ((char *)&syms[0].sym.e.e_name[0], ".file");
!       set_16 (&syms[0].sym.e_scnum[0], IMAGE_SYM_DEBUG);
!       set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
!       syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_FILE;
!       syms[0].sym.e_numaux[0] = 1;
!       /* The name need not be nul-terminated if it fits into the x_fname field
! 	 directly, but must be if it has to be placed into the string table.  */
!       sflen = strlen (source_filename);
!       if (sflen <= E_FILNMLEN)
! 	memcpy (&syms[1].aux.x_file.x_fname[0], source_filename, sflen);
!       else
  	{
! 	  set_32 (&syms[1].aux.x_file.x_n.x_offset[0], name_offset);
  	  if (!simple_object_internal_write (descriptor, offset + name_offset,
  					     ((const unsigned char *)
! 					      source_filename),
! 					     sflen + 1, &errmsg, err))
  	    return errmsg;
! 	  name_offset += strlen (source_filename) + 1;
  	}
!       if (!simple_object_internal_write (descriptor, symtab_offset,
  					 (const unsigned char *) &syms[0],
  					 sizeof (syms), &errmsg, err))
  	return errmsg;
! 
!       /* Write the string table length, followed by the strings and section
! 	 symbols in step with each other.  */
!       set_32 (strsizebuf, name_offset);
!       if (!simple_object_internal_write (descriptor, offset, strsizebuf, 4,
! 					 &errmsg, err))
! 	return errmsg;
! 
!       name_offset = 4;
!       secsym_offset = symtab_offset + sizeof (syms);
!       memset (&syms[0], 0, sizeof (syms));
!       set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
!       syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_STATIC;
!       syms[0].sym.e_numaux[0] = 1;
!       secnum = 1;
! 
!       for (section = sobj->sections; section != NULL; section = section->next)
! 	{
! 	  size_t namelen;
! 	  size_t scnsize;
! 	  struct simple_object_write_section_buffer *buffer;
! 
! 	  namelen = strlen (section->name);
! 	  set_16 (&syms[0].sym.e_scnum[0], secnum++);
! 	  scnsize = 0;
! 	  for (buffer = section->buffers; buffer != NULL; buffer = buffer->next)
! 	    scnsize += buffer->size;
! 	  set_32 (&syms[1].aux.x_scn.x_scnlen[0], scnsize);
! 	  if (namelen > SCNNMLEN)
! 	    {
! 	      set_32 (&syms[0].sym.e.e.e_zeroes[0], 0);
! 	      set_32 (&syms[0].sym.e.e.e_offset[0], name_offset);
! 	      if (!simple_object_internal_write (descriptor, offset + name_offset,
! 						 ((const unsigned char *)
! 						  section->name),
! 						 namelen + 1, &errmsg, err))
! 		return errmsg;
! 	      name_offset += namelen + 1;
! 	    }
! 	  else
! 	    {
! 	      memcpy (&syms[0].sym.e.e_name[0], section->name,
! 		      strlen (section->name));
! 	      memset (&syms[0].sym.e.e_name[strlen (section->name)], 0,
! 		      E_SYMNMLEN - strlen (section->name));
! 	    }
! 
! 	  if (!simple_object_internal_write (descriptor, secsym_offset,
! 					     (const unsigned char *) &syms[0],
! 					     sizeof (syms), &errmsg, err))
! 	    return errmsg;
! 	  secsym_offset += sizeof (syms);
! 	}
      }
  
!   if (attrs->is_bigobj)
!     {
!       if (!simple_object_coff_write_filehdr_bigobj (sobj, descriptor, nscns,
! 						     symtab_offset, nsyms,
! 						     &errmsg, err))
! 	return errmsg;
!     }
!   else
!     {
!       if (!simple_object_coff_write_filehdr (sobj, descriptor, nscns,
! 					     symtab_offset, nsyms, &errmsg, err))
! 	return errmsg;
!     }
  
    return NULL;
  }
diff -Nrcpad gcc-16-20251102/libitm/ChangeLog gcc-16-20251109/libitm/ChangeLog
*** gcc-16-20251102/libitm/ChangeLog	Sun Nov  2 22:34:21 2025
--- gcc-16-20251109/libitm/ChangeLog	Sun Nov  9 22:34:25 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libitm/configure gcc-16-20251109/libitm/configure
*** gcc-16-20251102/libitm/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libitm/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 7000,7014 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7000,7006 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7100,7121 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7092,7122 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7207,7248 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7208,7233 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7334,7358 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7319,7357 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12506,12512 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12509 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12505,12511 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12508 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12612,12618 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12615 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12611,12617 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12614 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libobjc/ChangeLog gcc-16-20251109/libobjc/ChangeLog
*** gcc-16-20251102/libobjc/ChangeLog	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libobjc/ChangeLog	Sun Nov  9 22:34:25 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* aclocal.m4: Regenerate.
diff -Nrcpad gcc-16-20251102/libobjc/configure gcc-16-20251109/libobjc/configure
*** gcc-16-20251102/libobjc/configure	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libobjc/configure	Sun Nov  9 22:34:25 2025
*************** rm -f conftest*
*** 5673,5687 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5673,5679 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 5773,5794 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5765,5795 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 5880,5921 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5881,5906 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6007,6031 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 5992,6030 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 11251,11257 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11254 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11250,11256 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11253 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11357,11363 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11360 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11356,11362 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11359 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libphobos/ChangeLog gcc-16-20251109/libphobos/ChangeLog
*** gcc-16-20251102/libphobos/ChangeLog	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libphobos/ChangeLog	Sun Nov  9 22:34:25 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libphobos/configure gcc-16-20251109/libphobos/configure
*** gcc-16-20251102/libphobos/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libphobos/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 6864,6878 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6864,6870 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6964,6985 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6956,6986 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7071,7112 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7072,7097 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7198,7222 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7183,7221 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12239,12245 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12242 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12238,12244 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12241 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12345,12351 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12348 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12344,12350 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12347 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libquadmath/ChangeLog gcc-16-20251109/libquadmath/ChangeLog
*** gcc-16-20251102/libquadmath/ChangeLog	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libquadmath/ChangeLog	Sun Nov  9 22:34:26 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libquadmath/configure gcc-16-20251109/libquadmath/configure
*** gcc-16-20251102/libquadmath/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libquadmath/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 5888,5902 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5888,5894 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 5988,6009 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5980,6010 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6095,6136 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6096,6121 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6222,6246 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6207,6245 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 11297,11303 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11300 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11296,11302 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11299 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11403,11409 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11406 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11402,11408 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11405 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libsanitizer/ChangeLog gcc-16-20251109/libsanitizer/ChangeLog
*** gcc-16-20251102/libsanitizer/ChangeLog	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libsanitizer/ChangeLog	Sun Nov  9 22:34:26 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libsanitizer/configure gcc-16-20251109/libsanitizer/configure
*** gcc-16-20251102/libsanitizer/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libsanitizer/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 7475,7489 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7475,7481 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7575,7596 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7567,7597 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7682,7723 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7683,7708 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7809,7833 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7794,7832 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12850,12856 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12853 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12849,12855 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12852 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12956,12962 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12959 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12955,12961 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12958 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libssp/ChangeLog gcc-16-20251109/libssp/ChangeLog
*** gcc-16-20251102/libssp/ChangeLog	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libssp/ChangeLog	Sun Nov  9 22:34:26 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libssp/configure gcc-16-20251109/libssp/configure
*** gcc-16-20251102/libssp/configure	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libssp/configure	Sun Nov  9 22:34:26 2025
*************** rm -f conftest*
*** 6130,6144 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6130,6136 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6230,6251 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6222,6252 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6337,6378 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 6338,6363 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6464,6488 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6449,6487 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 11539,11545 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11542 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11538,11544 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11541 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11645,11651 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11648 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11644,11650 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11647 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/libstdc++-v3/ChangeLog gcc-16-20251109/libstdc++-v3/ChangeLog
*** gcc-16-20251102/libstdc++-v3/ChangeLog	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libstdc++-v3/ChangeLog	Sun Nov  9 22:34:26 2025
***************
*** 1,3 ****
--- 1,38 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* include/bits/quoted_string.h: Add ADL friends.
+ 	* libsupc++/exception_ptr.h: Add ADL friend.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* src/c++23/std.cc.in: Move TBB macro shenanigans after
+ 	bits/stdc++.h.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* include/precompiled/stdc++.h: Remove <cassert>.
+ 	* testsuite/util/exception/safety.h: Add <cassert>.
+ 	* testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc:
+ 	Don't define _GLIBCXX_NO_ASSERT.
+ 
+ 2025-11-03  Jason Merrill  <jason@redhat.com>
+ 
+ 	* include/bits/ios_base.h: Add attribs to _Ios_Fmtflags,
+ 	_Ios_Iostate, _ios_seekdir.
+ 	* testsuite/27_io/ios_base/types/fmtflags/case_label.cc: Remove
+ 	unneeded cases.
+ 	* testsuite/27_io/ios_base/types/iostate/case_label.cc: Likewise.
+ 	* testsuite/27_io/ios_base/types/openmode/case_label.cc: Likewise.
+ 	* testsuite/27_io/ios_base/types/seekdir/case_label.cc: Likewise.
+ 
+ 2025-11-02  Jason Merrill  <jason@redhat.com>
+ 
+ 	* src/c++23/std.cc.in: Uncomment usings for vprint_*_buffered.
+ 
  2025-10-30  Jakub Jelinek  <jakub@redhat.com>
  
  	* include/bits/version.def (is_implicit_lifetime): New.
diff -Nrcpad gcc-16-20251102/libstdc++-v3/configure gcc-16-20251109/libstdc++-v3/configure
*** gcc-16-20251102/libstdc++-v3/configure	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libstdc++-v3/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 7118,7132 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7118,7124 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7218,7239 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7210,7240 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7325,7366 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7326,7351 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7452,7476 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7437,7475 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12655,12661 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12658 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12654,12660 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12657 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12761,12767 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12764 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12760,12766 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12763 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** $as_echo "$glibcxx_cv_atomic_word" >&6;
*** 16423,16429 ****
      # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16426 "configure"
  #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int main()
  {
--- 16422,16428 ----
      # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16425 "configure"
  #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int main()
  {
*************** $as_echo "mutex" >&6; }
*** 16569,16575 ****
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16572 "configure"
  int main()
  {
    _Decimal32 d1;
--- 16568,16574 ----
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16571 "configure"
  int main()
  {
    _Decimal32 d1;
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 16611,16617 ****
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16614 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
--- 16610,16616 ----
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16613 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
*************** $as_echo "$glibcxx_cv_libbacktrace_atomi
*** 53941,53947 ****
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 53944 "configure"
  #include <stddef.h>
  int main()
  {
--- 53940,53946 ----
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 53943 "configure"
  #include <stddef.h>
  int main()
  {
diff -Nrcpad gcc-16-20251102/libstdc++-v3/include/bits/ios_base.h gcc-16-20251109/libstdc++-v3/include/bits/ios_base.h
*** gcc-16-20251102/libstdc++-v3/include/bits/ios_base.h	Sun Nov  2 22:34:22 2025
--- gcc-16-20251109/libstdc++-v3/include/bits/ios_base.h	Sun Nov  9 22:34:27 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 56,62 ****
    // as permitted (but not required) in the standard, in order to provide
    // better type safety in iostream calls.  A side effect is that in C++98
    // expressions involving them are not compile-time constants.
!   enum _Ios_Fmtflags
      {
        _S_boolalpha 	= 1L << 0,
        _S_dec 		= 1L << 1,
--- 56,62 ----
    // as permitted (but not required) in the standard, in order to provide
    // better type safety in iostream calls.  A side effect is that in C++98
    // expressions involving them are not compile-time constants.
!   enum __attribute__((__flag_enum__)) _Ios_Fmtflags
      {
        _S_boolalpha 	= 1L << 0,
        _S_dec 		= 1L << 1,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 76,84 ****
        _S_adjustfield 	= _S_left | _S_right | _S_internal,
        _S_basefield 	= _S_dec | _S_oct | _S_hex,
        _S_floatfield 	= _S_scientific | _S_fixed,
!       _S_ios_fmtflags_end = 1L << 16,
!       _S_ios_fmtflags_max = __INT_MAX__,
!       _S_ios_fmtflags_min = ~__INT_MAX__
      };
  
    _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
--- 76,84 ----
        _S_adjustfield 	= _S_left | _S_right | _S_internal,
        _S_basefield 	= _S_dec | _S_oct | _S_hex,
        _S_floatfield 	= _S_scientific | _S_fixed,
!       _S_ios_fmtflags_end __attribute__((__unused__)) = 1L << 16,
!       _S_ios_fmtflags_max __attribute__((__unused__)) = __INT_MAX__,
!       _S_ios_fmtflags_min __attribute__((__unused__)) = ~__INT_MAX__
      };
  
    _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 176,190 ****
    { return __a = __a ^ __b; }
  
  
!   enum _Ios_Iostate
      {
        _S_goodbit 		= 0,
        _S_badbit 		= 1L << 0,
        _S_eofbit 		= 1L << 1,
        _S_failbit		= 1L << 2,
!       _S_ios_iostate_end = 1L << 16,
!       _S_ios_iostate_max = __INT_MAX__,
!       _S_ios_iostate_min = ~__INT_MAX__
      };
  
    _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
--- 176,190 ----
    { return __a = __a ^ __b; }
  
  
!   enum __attribute__((__flag_enum__)) _Ios_Iostate
      {
        _S_goodbit 		= 0,
        _S_badbit 		= 1L << 0,
        _S_eofbit 		= 1L << 1,
        _S_failbit		= 1L << 2,
!       _S_ios_iostate_end __attribute__((__unused__)) = 1L << 16,
!       _S_ios_iostate_max __attribute__((__unused__)) = __INT_MAX__,
!       _S_ios_iostate_min __attribute__((__unused__)) = ~__INT_MAX__
      };
  
    _GLIBCXX_NODISCARD _GLIBCXX_CONSTEXPR
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 228,234 ****
        _S_beg = 0,
        _S_cur = _GLIBCXX_STDIO_SEEK_CUR,
        _S_end = _GLIBCXX_STDIO_SEEK_END,
!       _S_ios_seekdir_end = 1L << 16
      };
  
  #if __cplusplus >= 201103L
--- 228,234 ----
        _S_beg = 0,
        _S_cur = _GLIBCXX_STDIO_SEEK_CUR,
        _S_end = _GLIBCXX_STDIO_SEEK_END,
!       _S_ios_seekdir_end __attribute__((__unused__)) = 1L << 16
      };
  
  #if __cplusplus >= 201103L
diff -Nrcpad gcc-16-20251102/libstdc++-v3/include/bits/quoted_string.h gcc-16-20251109/libstdc++-v3/include/bits/quoted_string.h
*** gcc-16-20251102/libstdc++-v3/include/bits/quoted_string.h	Sun Nov  2 22:34:23 2025
--- gcc-16-20251109/libstdc++-v3/include/bits/quoted_string.h	Sun Nov  9 22:34:27 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 61,66 ****
--- 61,83 ----
  	_Quoted_string&
  	operator=(_Quoted_string&) = delete;
  
+ 	// Friends for ADL with module std.
+ 	template<typename _CharT2, typename _Traits>
+ 	friend std::basic_ostream<_CharT2, _Traits>&
+ 	operator<<(std::basic_ostream<_CharT2, _Traits>& __os,
+ 		   const _Quoted_string<const _CharT2*, _CharT2>& __str);
+ 
+ 	template<typename _CharT2, typename _Traits, typename _String2>
+ 	friend std::basic_ostream<_CharT2, _Traits>&
+ 	operator<<(std::basic_ostream<_CharT2, _Traits>& __os,
+ 		   const _Quoted_string<_String2, _CharT2>& __str);
+ 
+ 	template<typename _CharT2, typename _Traits, typename _Alloc>
+ 	friend std::basic_istream<_CharT2, _Traits>&
+ 	operator>>(std::basic_istream<_CharT2, _Traits>& __is,
+ 		   const _Quoted_string<basic_string<_CharT2, _Traits, _Alloc>&,
+ 		   _CharT2>& __str);
+ 
  	_String _M_string;
  	_CharT _M_delim;
  	_CharT _M_escape;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 78,83 ****
--- 95,106 ----
  	_Quoted_string&
  	operator=(_Quoted_string&) = delete;
  
+ 	// Friend for ADL with module std.
+ 	template<typename _CharT2, typename _Traits2, typename _String2>
+ 	friend std::basic_ostream<_CharT2, _Traits2>&
+ 	operator<<(std::basic_ostream<_CharT2, _Traits2>& __os,
+ 		   const _Quoted_string<_String2, _CharT2>& __str);
+ 
  	basic_string_view<_CharT, _Traits> _M_string;
  	_CharT _M_delim;
  	_CharT _M_escape;
diff -Nrcpad gcc-16-20251102/libstdc++-v3/include/precompiled/stdc++.h gcc-16-20251109/libstdc++-v3/include/precompiled/stdc++.h
*** gcc-16-20251102/libstdc++-v3/include/precompiled/stdc++.h	Sun Nov  2 22:34:23 2025
--- gcc-16-20251109/libstdc++-v3/include/precompiled/stdc++.h	Sun Nov  9 22:34:27 2025
***************
*** 29,37 ****
  // 17.4.1.2 Headers
  
  // C
! #ifndef _GLIBCXX_NO_ASSERT
! #include <cassert>
! #endif
  #include <cctype>
  #include <cfloat>
  #include <climits>
--- 29,35 ----
  // 17.4.1.2 Headers
  
  // C
! // Don't include cassert, it's not suitable for PCH or header unit.
  #include <cctype>
  #include <cfloat>
  #include <climits>
***************
*** 104,112 ****
  
  #if _GLIBCXX_HOSTED
  // C
- #ifndef _GLIBCXX_NO_ASSERT
- #include <cassert>
- #endif
  #include <cctype>
  #include <cerrno>
  #include <cfloat>
--- 102,107 ----
diff -Nrcpad gcc-16-20251102/libstdc++-v3/libsupc++/exception_ptr.h gcc-16-20251109/libstdc++-v3/libsupc++/exception_ptr.h
*** gcc-16-20251102/libstdc++-v3/libsupc++/exception_ptr.h	Sun Nov  2 22:34:23 2025
--- gcc-16-20251109/libstdc++-v3/libsupc++/exception_ptr.h	Sun Nov  9 22:34:27 2025
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 214,219 ****
--- 214,223 ----
        { return __x._M_exception_object != __y._M_exception_object; }
  #endif
  
+       // Friend for ADL with module std.
+       friend _GLIBCXX26_CONSTEXPR void
+       swap(exception_ptr& __lhs, exception_ptr& __rhs);
+ 
        const class std::type_info*
        __cxa_exception_type() const _GLIBCXX_USE_NOEXCEPT
  	__attribute__ ((__pure__));
diff -Nrcpad gcc-16-20251102/libstdc++-v3/src/c++23/std.cc.in gcc-16-20251109/libstdc++-v3/src/c++23/std.cc.in
*** gcc-16-20251102/libstdc++-v3/src/c++23/std.cc.in	Sun Nov  2 22:34:23 2025
--- gcc-16-20251109/libstdc++-v3/src/c++23/std.cc.in	Sun Nov  9 22:34:27 2025
***************
*** 23,33 ****
  
  module;
  
  // stdc++.h doesn't include <execution> because of TBB issues;
  // FIXME for now let's avoid the problem by suppressing TBB.
! #define _GLIBCXX_USE_TBB_PAR_BACKEND 0
! 
! #include <bits/stdc++.h>
  #include <execution>
  
  // Module std does include deprecated library interfaces.
--- 23,36 ----
  
  module;
  
+ #include <bits/stdc++.h>
+ 
  // stdc++.h doesn't include <execution> because of TBB issues;
  // FIXME for now let's avoid the problem by suppressing TBB.
! #ifdef _PSTL_PAR_BACKEND_TBB
! #undef _PSTL_PAR_BACKEND_TBB
! #define _PSTL_PAR_BACKEND_SERIAL
! #endif
  #include <execution>
  
  // Module std does include deprecated library interfaces.
diff -Nrcpad gcc-16-20251102/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc gcc-16-20251109/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc
*** gcc-16-20251102/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc	Sun Nov  2 22:34:23 2025
--- gcc-16-20251109/libstdc++-v3/testsuite/17_intro/headers/c++1998/stdc++_assert_neg.cc	Sun Nov  9 22:34:28 2025
***************
*** 1,8 ****
  // { dg-do compile }
- // { dg-options "-D_GLIBCXX_NO_ASSERT" }
  // { dg-require-effective-target hosted }
- // NB: This is done to force any generated and possibly included PCH
- // to be invalid, and also to remove cassert from the include set.
  
  // 2005-05-24 bkoz
  
--- 1,5 ----
diff -Nrcpad gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc
*** gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc	Sun Nov  2 22:34:31 2025
--- gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/fmtflags/case_label.cc	Sun Nov  9 22:34:35 2025
*************** case_labels(bitmask_type b)
*** 68,79 ****
        break;
      case std::ios_base::floatfield:
        break;
-     case std::_S_ios_fmtflags_end:
-       break;
-     case __INT_MAX__:
-       break;
-     case ~__INT_MAX__:
-       break;
      }
    using underlying_type = std::underlying_type<bitmask_type>::type;
    static_assert( sizeof(underlying_type) == sizeof(int),
--- 68,73 ----
diff -Nrcpad gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc
*** gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc	Sun Nov  2 22:34:31 2025
--- gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/iostate/case_label.cc	Sun Nov  9 22:34:35 2025
*************** case_labels(bitmask_type b)
*** 40,51 ****
        break;
      case std::ios_base::failbit:
        break;
-     case std::_S_ios_iostate_end:
-       break;
-     case __INT_MAX__:
-       break;
-     case ~__INT_MAX__:
-       break;
      }
    using underlying_type = std::underlying_type<bitmask_type>::type;
    static_assert( sizeof(underlying_type) == sizeof(int),
--- 40,45 ----
diff -Nrcpad gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc
*** gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc	Sun Nov  2 22:34:31 2025
--- gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/openmode/case_label.cc	Sun Nov  9 22:34:35 2025
*************** case_labels(bitmask_type b)
*** 48,59 ****
      case std::ios_base::noreplace:
        break;
  #endif
-     case std::_S_ios_openmode_end:
-       break;
-     case __INT_MAX__:
-       break;
-     case ~__INT_MAX__:
-       break;
      }
    using underlying_type = std::underlying_type<bitmask_type>::type;
    static_assert( sizeof(underlying_type) == sizeof(int),
--- 48,53 ----
diff -Nrcpad gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc
*** gcc-16-20251102/libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc	Sun Nov  2 22:34:31 2025
--- gcc-16-20251109/libstdc++-v3/testsuite/27_io/ios_base/types/seekdir/case_label.cc	Sun Nov  9 22:34:35 2025
*************** case_labels(test_type b)
*** 38,44 ****
        break;
      case std::ios_base::end:
        break;
-     case std::_S_ios_fmtflags_end:
-       break;
      }
  }
--- 38,42 ----
diff -Nrcpad gcc-16-20251102/libstdc++-v3/testsuite/util/exception/safety.h gcc-16-20251109/libstdc++-v3/testsuite/util/exception/safety.h
*** gcc-16-20251102/libstdc++-v3/testsuite/util/exception/safety.h	Sun Nov  2 22:34:33 2025
--- gcc-16-20251109/libstdc++-v3/testsuite/util/exception/safety.h	Sun Nov  9 22:34:37 2025
***************
*** 24,29 ****
--- 24,30 ----
  #include <ext/throw_allocator.h>
  #include <cstdlib> // getenv, atoi
  #include <cstdio>  // printf, fflush
+ #include <cassert> // assert
  
  // Container requirement testing.
  namespace __gnu_test
diff -Nrcpad gcc-16-20251102/libvtv/ChangeLog gcc-16-20251109/libvtv/ChangeLog
*** gcc-16-20251102/libvtv/ChangeLog	Sun Nov  2 22:34:33 2025
--- gcc-16-20251109/libvtv/ChangeLog	Sun Nov  9 22:34:37 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/libvtv/configure gcc-16-20251109/libvtv/configure
*** gcc-16-20251102/libvtv/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/libvtv/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 7369,7383 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7369,7375 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7469,7490 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7461,7491 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7576,7617 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7577,7602 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7703,7727 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7688,7726 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12744,12750 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12747 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12743,12749 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12746 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12850,12856 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12853 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12849,12855 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12852 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/lto-plugin/ChangeLog gcc-16-20251109/lto-plugin/ChangeLog
*** gcc-16-20251102/lto-plugin/ChangeLog	Sun Nov  2 22:34:33 2025
--- gcc-16-20251109/lto-plugin/ChangeLog	Sun Nov  9 22:34:37 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-05  Sam James  <sam@gentoo.org>
  
  	* Makefile.in: Regenerate.
diff -Nrcpad gcc-16-20251102/lto-plugin/configure gcc-16-20251109/lto-plugin/configure
*** gcc-16-20251102/lto-plugin/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/lto-plugin/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 7240,7254 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7240,7246 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7340,7361 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7332,7362 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7447,7488 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 7448,7473 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 7574,7598 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 7559,7597 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 12616,12622 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12619 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12615,12621 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12618 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 12722,12728 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12725 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 12721,12727 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 12724 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
diff -Nrcpad gcc-16-20251102/zlib/ChangeLog gcc-16-20251109/zlib/ChangeLog
*** gcc-16-20251102/zlib/ChangeLog	Sun Nov  2 22:34:33 2025
--- gcc-16-20251109/zlib/ChangeLog	Sun Nov  9 22:34:37 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-11-03  Sam James  <sam@gentoo.org>
+ 
+ 	* configure: Regenerate.
+ 
  2025-10-02  H.J. Lu  <hjl.tools@gmail.com>
  
  	* Makefile.in: Regenerated.
diff -Nrcpad gcc-16-20251102/zlib/configure gcc-16-20251109/zlib/configure
*** gcc-16-20251102/zlib/configure	Sun Nov  2 22:34:35 2025
--- gcc-16-20251109/zlib/configure	Sun Nov  9 22:35:24 2025
*************** rm -f conftest*
*** 5690,5704 ****
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test x$plugin_file = x$plugin; then
! 	if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5690,5696 ----
  fi
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $clang_cv_is_clang" >&5
  $as_echo "$clang_cv_is_clang" >&6; }
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}llvm-config", so it can be a program name with args.
  set dummy ${ac_tool_prefix}llvm-config; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 5790,5811 ****
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
! 	if test "$?" != 0; then
! 	  as_fn_error $? "Required tool 'llvm-config' not found on PATH." "$LINENO" 5
! 	fi
! 	clang_lib_dir=`$LLVM_CONFIG --libdir`
! 	if test -f $clang_lib_dir/$plugin; then
! 	  plugin_file=$clang_lib_dir/$plugin
! 	fi
! 	if test x$plugin_file != x$plugin; then
  	  break;
  	fi
        fi
      done
!     if test -z $plugin_file; then
!       as_fn_error $? "Couldn't find clang plugin file for $CC." "$LINENO" 5
!     fi
!         if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5782,5812 ----
    LLVM_CONFIG="$ac_cv_prog_LLVM_CONFIG"
  fi
  
!   plugin_file=
!   if test $clang_cv_is_clang = yes; then
!     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang plugin file" >&5
! $as_echo_n "checking for clang plugin file... " >&6; }
!     plugin_names="LLVMgold.so"
!     for plugin in $plugin_names; do
!       plugin_file=`${CC} ${CFLAGS} --print-file-name $plugin`
!       if test "$plugin_file" != "$plugin"; then
! 	break;
!       fi
!       if test -n "${LLVM_CONFIG}"; then
! 	plugin_file=`${LLVM_CONFIG} --libdir`/$plugin
! 	if test -f "$plugin_file"; then
  	  break;
  	fi
        fi
+       plugin_file=
      done
!     if test -z "$plugin_file"; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
! $as_echo "no" >&6; }
!     else
!       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
! $as_echo "$plugin_file" >&6; }
!             if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 5897,5938 ****
    AR="$ac_cv_prog_AR"
  fi
  
!     if test "${AR}" = "" ; then
!       as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!     fi
!     plugin_option="--plugin $plugin_file"
!     touch conftest.c
!     ${AR} $plugin_option rc conftest.a conftest.c
!     if test "$?" != 0; then
!       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!       plugin_file=
      fi
-     rm -f conftest.*
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_file" >&5
- $as_echo "$plugin_file" >&6; }
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! 
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
--- 5898,5923 ----
    AR="$ac_cv_prog_AR"
  fi
  
!       if test -z "${AR}"; then
! 	as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
!       fi
!       plugin_option="--plugin $plugin_file"
!       touch conftest.c
!       ${AR} $plugin_option rc conftest.a conftest.c
!       if test "$?" != 0; then
! 	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
  $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
! 	plugin_file=
!       fi
!       rm -f conftest.*
      fi
    fi
    plugin_file="$plugin_file"
  
  if test -n "$plugin_file"; then
    plugin_option="--plugin $plugin_file"
  else
!   if test -n "$ac_tool_prefix"; then
    # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
  set dummy ${ac_tool_prefix}ar; ac_word=$2
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
*************** else
*** 6024,6048 ****
    AR="$ac_cv_prog_AR"
  fi
  
! if test "${AR}" = "" ; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! touch conftest.c
! ${AR} $plugin_option rc conftest.a conftest.c
! if test "$?" != 0; then
!   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
! $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
!   plugin_option=
! fi
! rm -f conftest.*
! if test -n "$plugin_option"; then
!   plugin_option="$plugin_option"
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
! $as_echo "$plugin_option" >&6; }
! else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
  fi
  
  fi
  if test -n "$ac_tool_prefix"; then
--- 6009,6047 ----
    AR="$ac_cv_prog_AR"
  fi
  
! if test -z "${AR}"; then
    as_fn_error $? "Required archive tool 'ar' not found on PATH." "$LINENO" 5
  fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -plugin option" >&5
! $as_echo_n "checking for -plugin option... " >&6; }
! plugin_names="liblto_plugin.so liblto_plugin-0.dll cyglto_plugin-0.dll"
! plugin_option=
! for plugin in $plugin_names; do
!   plugin_so=`${CC} ${CFLAGS} --print-prog-name $plugin`
!   if test x$plugin_so = x$plugin; then
!     plugin_so=`${CC} ${CFLAGS} --print-file-name $plugin`
!   fi
!   if test x$plugin_so != x$plugin; then
!     plugin_option="--plugin $plugin_so"
!     break
!   fi
! done
! if test -z "$plugin_option"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
  $as_echo "no" >&6; }
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $plugin_option" >&5
+ $as_echo "$plugin_option" >&6; }
+     touch conftest.c
+   ${AR} $plugin_option rc conftest.a conftest.c
+   if test "$?" != 0; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Failed: $AR $plugin_option rc" >&5
+ $as_echo "$as_me: WARNING: Failed: $AR $plugin_option rc" >&2;}
+     plugin_option=
+   fi
+   rm -f conftest.*
  fi
+ plugin_option="$plugin_option"
  
  fi
  if test -n "$ac_tool_prefix"; then
*************** else
*** 11228,11234 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11231 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11227,11233 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11230 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 11334,11340 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11337 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 11333,11339 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 11336 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
