diff -Nrcpad gcc-16-20251207/ChangeLog gcc-16-20251214/ChangeLog
*** gcc-16-20251207/ChangeLog	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/ChangeLog	Sun Dec 14 22:32:05 2025
***************
*** 1,3 ****
--- 1,24 ----
+ 2025-12-12  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	* MAINTAINERS: add myself to write after approval
+ 
+ 2025-12-11  Jeff Law  <jlaw@ventanamicro.com>
+ 
+ 	* MAINTAINERS: Update entries for contributors formerly at
+ 	Ventana Microsystems to refer to Qualcomm instead.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* MAINTAINERS: add myself to write after approval
+ 
+ 2025-12-11  Pengxuan Zheng  <pengxuan.zheng@oss.qualcomm.com>
+ 
+ 	* MAINTAINERS (Pengxuan Zheng): Update email address.
+ 
+ 2025-12-08  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	* MAINTAINERS: add ncm
+ 
  2025-11-30  Jose E. Marchesi  <jose.marchesi@oracle.com>
  
  	* MAINTAINERS: Add Algol 68 subsystems.
diff -Nrcpad gcc-16-20251207/LAST_UPDATED gcc-16-20251214/LAST_UPDATED
*** gcc-16-20251207/LAST_UPDATED	Sun Dec  7 22:32:22 2025
--- gcc-16-20251214/LAST_UPDATED	Sun Dec 14 22:32:21 2025
***************
*** 1 ****
! Obtained from git: master revision 01d4414e3ea4090bffe644c9e2d2834f451ee6a5
--- 1 ----
! Obtained from git: master revision 8e23a9982fa4b885a27608825cbe326d61f20498
diff -Nrcpad gcc-16-20251207/MAINTAINERS gcc-16-20251214/MAINTAINERS
*** gcc-16-20251207/MAINTAINERS	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/MAINTAINERS	Sun Dec 14 22:32:05 2025
*************** Richard Biener
*** 35,41 ****
  Richard Earnshaw                                <richard.earnshaw@arm.com>
  Jakub Jelinek                                   <jakub@redhat.com>
  Richard Kenner                                  <kenner@nyu.edu>
! Jeff Law                                        <jlaw@ventanamicro.com>
  Michael Meissner                                <gnu@the-meissners.org>
  Jason Merrill                                   <jason@redhat.com>
  David S. Miller                                 <davem@redhat.com>
--- 35,41 ----
  Richard Earnshaw                                <richard.earnshaw@arm.com>
  Jakub Jelinek                                   <jakub@redhat.com>
  Richard Kenner                                  <kenner@nyu.edu>
! Jeff Law                                        <jefflaw@qti.qualcomm.com>
  Michael Meissner                                <gnu@the-meissners.org>
  Jason Merrill                                   <jason@redhat.com>
  David S. Miller                                 <davem@redhat.com>
*************** Dragan Mladjenovic              draganm
*** 695,700 ****
--- 695,701 ----
  Alan Modra                      amodra          <amodra@gmail.com>
  Toon Moene                      toon            <toon@moene.org>
  Alexander Monakov               amonakov        <amonakov@ispras.ru>
+ Pietro Monteiro                 pietro          <pietro@sociotechnical.xyz>
  Catherine Moore                 clm             <clm@codesourcery.com>
  Mikael Morin                    mikael          <mikael@gcc.gnu.org>
  James A. Morrison               phython         <phython@gcc.gnu.org>
*************** Christoph Müllner               cmuelln
*** 706,711 ****
--- 707,713 ----
  Steven Munroe                   munroesj        <munroesj52@gmail.com>
  Philippe De Muyter              -               <phdm@macqel.be>
  Joseph Myers                    jsm28           <josmyers@redhat.com>
+ Nathan Myers                    ncm             <ncm@cantrip.org>
  Szabolcs Nagy                   nsz             <nsz@gcc.gnu.org>
  Victor Do Nascimento            victorldn       <victor.donascimento@arm.com>
  Quentin Neill                   qneill          <quentin.neill.gnu@gmail.com>
*************** Mike Stump                      mrs
*** 832,837 ****
--- 834,840 ----
  Jeff Sturm                      jsturm          <jsturm@gcc.gnu.org>
  YunQiang Su                     syq             <syq@gcc.gnu.org>
  Robert Suchanek                 rts             <rsuchy84@gmail.com>
+ Supers1ngular                   -               <supers1ngular@baylibre.com>
  Andrew Sutton                   asutton         <andrew.n.sutton@gmail.com>
  Gabriele Svelto                 gsvelto         <gabriele.svelto@st.com>
  Torbjörn Svensson               azoff           <torbjorn.svensson@foss.st.com>
*************** Jie Zhang                       jiez
*** 926,935 ****
  Yufeng Zhang                    yufeng          <yufeng.zhang@arm.com>
  Qing Zhao                       qinzhao         <qing.zhao@oracle.com>
  Shujing Zhao                    pzhao           <pearly.zhao@oracle.com>
! Pengxuan Zheng                  pzheng          <quic_pzheng@quicinc.com>
  Juzhe Zhong                     -               <juzhe.zhong@rivai.ai>
  Roman Zhuykov                   zhroma          <zhroma@ispras.ru>
  Jon Ziegler                     jonz            <jonz@apple.com>
  Roman Zippel                    zippel          <zippel@linux-m68k.org>
  Claudiu Zissulescu              claziss         <claziss@gmail.com>
  Josef Zlomek                    zlomek          <josef.zlomek@email.cz>
--- 929,939 ----
  Yufeng Zhang                    yufeng          <yufeng.zhang@arm.com>
  Qing Zhao                       qinzhao         <qing.zhao@oracle.com>
  Shujing Zhao                    pzhao           <pearly.zhao@oracle.com>
! Pengxuan Zheng                  pzheng          <pengxuan.zheng@oss.qualcomm.com>
  Juzhe Zhong                     -               <juzhe.zhong@rivai.ai>
  Roman Zhuykov                   zhroma          <zhroma@ispras.ru>
  Jon Ziegler                     jonz            <jonz@apple.com>
+ Raphael Zinsly                  -               <rzinsly@qti.qualcomm.com>
  Roman Zippel                    zippel          <zippel@linux-m68k.org>
  Claudiu Zissulescu              claziss         <claziss@gmail.com>
  Josef Zlomek                    zlomek          <josef.zlomek@email.cz>
*************** information.
*** 949,965 ****
--- 953,973 ----
  
  
  Soumya AR                                       <soumyaa@nvidia.com>
+ Daniel Barboza                                  <dbarboza@qti.qualcomm.com>
+ Daniel Barboza                                  <dbarboza@ventanamicro.com>
  Peter Bergner                                   <bergner@tenstorrent.com>
  Dhruv Chawla                                    <dhruvc@nvidia.com>
  Juergen Christ                                  <jchrist@linux.ibm.com>
  Giuseppe D'Angelo                               <giuseppe.dangelo@kdab.com>
  Robin Dapp                                      <rdapp.gcc@gmail.com>
+ Robin Dapp                                      <rdapp@qti.qualcomm.com>
  Robin Dapp                                      <rdapp@ventanamicro.com>
  Aldy Hernandez                                  <aldy@quesejoda.com>
  Michal Jires                                    <mjires@suse.cz>
  Matthias Kretz                                  <m.kretz@gsi.de>
  Prathamesh Kulkarni                             <prathameshk@nvidia.com>
  Tim Lange                                       <mail@tim-lange.me>
+ Jeff Law                                        <jefflaw@qti.qualcomm.com>
  Jeff Law                                        <jeffreyalaw@gmail.com>
  Jeff Law                                        <jlaw@tachyum.com>
  Jeff Law                                        <jlaw@ventanamicro.com>
*************** Yuao Ma
*** 969,974 ****
--- 977,984 ----
  Matthew Malcomson                               <mmalcomson@nvidia.com>
  Immad Mir                                       <mir@sourceware.org>
  Gaius Mulley                                    <gaiusmod2@gmail.com>
+ Shreya Munnangi                                 <smunnang@qti.qualcomm.com>
+ Shreya Munnangi                                 <smunnangi1@ventanamicro.com>
  Szabolcs Nagy                                   <nsz@gcc.gnu.org>
  Mikael Pettersson                               <mikpelinux@gmail.com>
  Andrew Pinski                                   <andrew.pinski@oss.qualcomm.com>
*************** Kugan Vivekanandarajah
*** 990,993 ****
--- 1000,1006 ----
  Jonathan Wakely                                 <jwakely@redhat.com>
  Alexander Westbrooks                            <alexanderw@gcc.gnu.org>
  Chung-Ju Wu                                     <jasonwucj@gmail.com>
+ Pengxuan Zheng                                  <pengxuan.zheng@oss.qualcomm.com>
  Pengxuan Zheng                                  <quic_pzheng@quicinc.com>
+ Raphael Zinsly                                  <rzinsly@qti.qualcomm.com>
+ Raphael Zinsly                                  <rzinsly@ventanamicro.com>
diff -Nrcpad gcc-16-20251207/MD5SUMS gcc-16-20251214/MD5SUMS
*** gcc-16-20251207/MD5SUMS	Sun Dec  7 22:32:27 2025
--- gcc-16-20251214/MD5SUMS	Sun Dec 14 22:32:26 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-16-20251207.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-20251214.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,34 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 81e206529aaaf8a6cb747d98fe582747  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 25fdaa9f598961408f5471aae37aad08  LAST_UPDATED
! 9e74773603f25753d4aca0184b8ebaeb  MAINTAINERS
  303dcd6947e003fbebd9a1ba06190d09  Makefile.def
  97cb7e7715d72f600061eb2b788d9978  Makefile.in
  06bb9185fc38eb1a37d9b86363018cb3  Makefile.tpl
--- 23,34 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 86ba1548e4b906bd760fa562c6be7635  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 70efcf126ce8f6472ef6b1627c5e77ca  LAST_UPDATED
! b700a43d3f580039c0f891f2a148baae  MAINTAINERS
  303dcd6947e003fbebd9a1ba06190d09  Makefile.def
  97cb7e7715d72f600061eb2b788d9978  Makefile.in
  06bb9185fc38eb1a37d9b86363018cb3  Makefile.tpl
*************** c5a60ac6626343968c4ef1fdf261bf62  c++too
*** 48,54 ****
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! 1d1f54db7874d2d925f0b876096db487  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
  9d2aa7a8838218577399701b0cd4166b  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
--- 48,54 ----
  c64564b7c7563dae5ebe016f340c9cd9  config.guess
  040359150cf11493f973a46d8a25b06b  config.rpath
  111d54aa3a3019adbab413c8fb435f22  config.sub
! fa18d5725ea898f0c2988b8c47c706f5  config/ChangeLog
  e8365ab73da09dccff77a6e2ad006a68  config/acinclude.m4
  9d2aa7a8838218577399701b0cd4166b  config/acx.m4
  6b030f5cf640bdd401ea739f54a667f8  config/asmcfi.m4
*************** e5bb8100763b19abf4b1367f96305a98  config
*** 90,96 ****
  668132e429b5a64836ff6f2e6a52bcd2  config/gettext-sister.m4
  891029ae654600a455aee41cac4eb400  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
! 8df79e8a64590050a069d28f0094da95  config/gthr.m4
  c385066b0fe61ef55d44cf2619e79b26  config/gxx-include-dir.m4
  8f800a90638a3f714bf44a8321cc5003  config/hwcaps.m4
  c5515337a3d16c0eabc21d8c8ddd0909  config/iconv.m4
--- 90,96 ----
  668132e429b5a64836ff6f2e6a52bcd2  config/gettext-sister.m4
  891029ae654600a455aee41cac4eb400  config/gettext.m4
  29c9c3d57667bc9e6f14d625b2cd5894  config/glibc21.m4
! eb34bdb36bd54aa68d81e8a2e5e9f481  config/gthr.m4
  c385066b0fe61ef55d44cf2619e79b26  config/gxx-include-dir.m4
  8f800a90638a3f714bf44a8321cc5003  config/hwcaps.m4
  c5515337a3d16c0eabc21d8c8ddd0909  config/iconv.m4
*************** e2dc6b4fd62b77bff96b7951ef74f78f  config
*** 157,163 ****
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  f9b6d608238df07c76634c78009afa33  configure
  03778937a9f2ba52fd4dc7a290281c17  configure.ac
! e2f8a03514d5f78e49e4a2b0ccd659ab  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
--- 157,163 ----
  db74a73c3c9c3cc71edec37c2436e082  config/zstd.m4
  f9b6d608238df07c76634c78009afa33  configure
  03778937a9f2ba52fd4dc7a290281c17  configure.ac
! 97c5a20fb7666f4819c268ad137f6f56  contrib/ChangeLog
  5fc435c7928f858246df931ea3f3ece7  contrib/ChangeLog.jit
  7af8d2979bf1a7cfa88e30d05fa22be2  contrib/ChangeLog.tree-ssa
  13605e5ba7b533ecbe3a902b8ebe4079  contrib/analyze_brprob.py
*************** da7a8c0d3b1e154584d5e062d9a3b558  contri
*** 168,174 ****
  e45f3883956c257039f6ff14079cff05  contrib/check-params-in-docs.py
  6b9a7ea20f07df4c70a3c38a7478891a  contrib/check_GNU_style.py
  fa1c4b0172be6c080411619977750edb  contrib/check_GNU_style.sh
! ed57d10cbc953f0b2b73bf210402462f  contrib/check_GNU_style_lib.py
  90007bd4812c8bc365b6f0004e86d465  contrib/check_makefile_deps.sh
  4b4bfb3a8be5ddeae3515ff55c6c1618  contrib/check_warning_flags.sh
  ffab271b81488026969b58ab7dca818a  contrib/clang-format
--- 168,174 ----
  e45f3883956c257039f6ff14079cff05  contrib/check-params-in-docs.py
  6b9a7ea20f07df4c70a3c38a7478891a  contrib/check_GNU_style.py
  fa1c4b0172be6c080411619977750edb  contrib/check_GNU_style.sh
! 701df39868aaf119796b6764faf760e1  contrib/check_GNU_style_lib.py
  90007bd4812c8bc365b6f0004e86d465  contrib/check_makefile_deps.sh
  4b4bfb3a8be5ddeae3515ff55c6c1618  contrib/check_warning_flags.sh
  ffab271b81488026969b58ab7dca818a  contrib/clang-format
*************** b4b9188e090097e5889401ebf2b3fc04  contri
*** 178,184 ****
  51679964e74224734e766c8bb5a5d497  contrib/compareSumTests3
  036122880600e04a6dc9e6c49fcd070c  contrib/compare_tests
  4688ffec8f146aa47298dec84f2cb5cf  contrib/compare_two_ftime_report_sets
! ff41beb85e232853543074466232e9c0  contrib/config-list.mk
  d575264f7a1cdc4afba872bdd7d2e2dd  contrib/dg-cmp-results.sh
  2496352a13912278327150659aad23a7  contrib/dg-extract-results.py
  e4aa1756f00ff5294c836c52d0d1da43  contrib/dg-extract-results.sh
--- 178,184 ----
  51679964e74224734e766c8bb5a5d497  contrib/compareSumTests3
  036122880600e04a6dc9e6c49fcd070c  contrib/compare_tests
  4688ffec8f146aa47298dec84f2cb5cf  contrib/compare_two_ftime_report_sets
! 6617ffafaa212bc8e53229479c2f2f4c  contrib/config-list.mk
  d575264f7a1cdc4afba872bdd7d2e2dd  contrib/dg-cmp-results.sh
  2496352a13912278327150659aad23a7  contrib/dg-extract-results.py
  e4aa1756f00ff5294c836c52d0d1da43  contrib/dg-extract-results.sh
*************** dc562ddb86567c65e82953825713dc4b  contri
*** 334,340 ****
  0ef1f0f3b8112a12de68f806daf96994  contrib/relpath.sh
  5e4ee087708d8039fdd3e37392496a3f  contrib/repro_fail
  7a4452f82f140141ca92ef50ae08afe8  contrib/sarif-listener.py
! 5510b9bfcbc746c19c3b2216673da4be  contrib/test_installed
  b60f03a88bd6e5db8ea8361daec256ea  contrib/test_mklog.py
  2c2a06a23394c548bb4afba3c25aacce  contrib/test_recheck
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
--- 334,340 ----
  0ef1f0f3b8112a12de68f806daf96994  contrib/relpath.sh
  5e4ee087708d8039fdd3e37392496a3f  contrib/repro_fail
  7a4452f82f140141ca92ef50ae08afe8  contrib/sarif-listener.py
! 23c8b71db40d950898670626c11e563b  contrib/test_installed
  b60f03a88bd6e5db8ea8361daec256ea  contrib/test_mklog.py
  2c2a06a23394c548bb4afba3c25aacce  contrib/test_recheck
  c650e776de65a2de80bbfb0033641805  contrib/test_summary
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 521,527 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 84c3ac2deb9b9c9701628c8a984b5dee  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 521,527 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 1804c6d0ee0503acd051f359103bebe0  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 558,576 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! c07c5b5251726226db1723c432fcfa41  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 0df5aadb8cb3721898cef51847cc43b4  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  ee95df275c932cada412ed8168975af9  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 6867a568afbaee5e05c8818c9a27e093  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 558,576 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 41f179a3a82f2f3c35e096d9672908a0  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
  36698274bb69e2ada20f5cc434f3caa5  gcc/FSFChangeLog.11
  4dc2573d948287a3722ce977490b026c  gcc/LANGUAGES
! 0cc3e079f827fef99401f57370d28934  gcc/Makefile.in
  ec6799501b2eb2923d5de6a66169dbd2  gcc/ONEWS
  15d6908b4409b0925d9f1c72b56b5cb7  gcc/README.Portability
  ee95df275c932cada412ed8168975af9  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 4323751f7958a05664920218021954b8  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** d82e2d327d75e250ca7bdd5716c9bf7d  gcc/ad
*** 798,804 ****
  0e4de6363c3876604fc8fa97e180ddcf  gcc/ada/exp_pakd.ads
  b854c252a817c2248929d37e459d3e76  gcc/ada/exp_prag.adb
  b971e56ee00efc31bd07e4f49eb4e97e  gcc/ada/exp_prag.ads
! 8eb9145492d5ab5b0d7c2b5e36087feb  gcc/ada/exp_put_image.adb
  c0f39ee1d515a13193e5726a49291c99  gcc/ada/exp_put_image.ads
  e224b65ac653dc73160c1665f825b557  gcc/ada/exp_sel.adb
  adda0da8d4f449351c0486c3277f39bd  gcc/ada/exp_sel.ads
--- 798,804 ----
  0e4de6363c3876604fc8fa97e180ddcf  gcc/ada/exp_pakd.ads
  b854c252a817c2248929d37e459d3e76  gcc/ada/exp_prag.adb
  b971e56ee00efc31bd07e4f49eb4e97e  gcc/ada/exp_prag.ads
! ac8c4c711f36e29a0ff8fde54434258d  gcc/ada/exp_put_image.adb
  c0f39ee1d515a13193e5726a49291c99  gcc/ada/exp_put_image.ads
  e224b65ac653dc73160c1665f825b557  gcc/ada/exp_sel.adb
  adda0da8d4f449351c0486c3277f39bd  gcc/ada/exp_sel.ads
*************** bb35d323ecf448aa8fb7025a4bc206ac  gcc/ad
*** 2869,2876 ****
  3d4a1dc93d967d84654b6489aaf51b1b  gcc/ada/restrict.adb
  058035f6a217fb7bed8ac566527a2c23  gcc/ada/restrict.ads
  9d12840e7f4b919f1f71a18a65b3463c  gcc/ada/rident.ads
! 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
--- 2869,2876 ----
  3d4a1dc93d967d84654b6489aaf51b1b  gcc/ada/restrict.adb
  058035f6a217fb7bed8ac566527a2c23  gcc/ada/restrict.ads
  9d12840e7f4b919f1f71a18a65b3463c  gcc/ada/rident.ads
! ea22245a2f9a79e09dc4fcb1574dcbfc  gcc/ada/rtfinal.c
! 4c8e126c0677897288b626aa161accd3  gcc/ada/rtinit.c
  1e27242a4b1e6be20b3aee25a5d9b8d7  gcc/ada/rtsfind.adb
  359c6afc76f2b2ddecfb45b309c955e9  gcc/ada/rtsfind.ads
  66e987f268458746a6afb190c151af7a  gcc/ada/runtime.h
*************** cbf1143b39dba16ccff2bad507662b80  gcc/ad
*** 2891,2899 ****
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
  a424011f3e6f5e5a1163e2a9e1324779  gcc/ada/sem.adb
  b1230ac9f3cae75bd98a0fc5e0fabdcf  gcc/ada/sem.ads
! c27fe1bc54a9ebed16421b64914008f5  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! 8240de38646ce59bb4164ffd8b17f767  gcc/ada/sem_attr.adb
  2a239613f39312b54ea82d1e690a3ea2  gcc/ada/sem_attr.ads
  9933f6b1c6d6ebb417929ba3ed154bff  gcc/ada/sem_aux.adb
  e15b069fa2ff472febda85c8b9cacb81  gcc/ada/sem_aux.ads
--- 2891,2899 ----
  3bf01e026b494a442389a5d3541785b8  gcc/ada/seh_init.c
  a424011f3e6f5e5a1163e2a9e1324779  gcc/ada/sem.adb
  b1230ac9f3cae75bd98a0fc5e0fabdcf  gcc/ada/sem.ads
! 35bea96899d106c6584dbdbff3268c97  gcc/ada/sem_aggr.adb
  d9e9e67a1e6554ab3bc7e11269dd3763  gcc/ada/sem_aggr.ads
! 749f57dc58f0f56e802c7b65792c7d8d  gcc/ada/sem_attr.adb
  2a239613f39312b54ea82d1e690a3ea2  gcc/ada/sem_attr.ads
  9933f6b1c6d6ebb417929ba3ed154bff  gcc/ada/sem_aux.adb
  e15b069fa2ff472febda85c8b9cacb81  gcc/ada/sem_aux.ads
*************** e364f4e3ae92066699cc93a8f7b828c1  gcc/ad
*** 2905,2911 ****
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! 8e7d895f32fc962f6e8fecfd4aff6054  gcc/ada/sem_ch12.adb
  f981520c42b732545be8bb5c8813ccfd  gcc/ada/sem_ch12.ads
  ab726649c68610977b83977d89dcbd52  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
--- 2905,2911 ----
  6e34ce648cfc10b24c12b68e0e59dcb8  gcc/ada/sem_ch10.ads
  5980a02146588bf0e31ced2382290670  gcc/ada/sem_ch11.adb
  1b6f89866a5d427002df059be3847d62  gcc/ada/sem_ch11.ads
! 10f6c702173a27e75cdc1ced5bbe58fd  gcc/ada/sem_ch12.adb
  f981520c42b732545be8bb5c8813ccfd  gcc/ada/sem_ch12.ads
  ab726649c68610977b83977d89dcbd52  gcc/ada/sem_ch13.adb
  42a7b1073e168e8be85f2203fbddd148  gcc/ada/sem_ch13.ads
*************** cc77d76c407f099273c5d6691a91f67a  gcc/ad
*** 3057,3068 ****
  a8f3f69de7abdd693a971d4655971bf7  gcc/ada/xutil.ads
  60f1f34895b64cc9a3b2d590e6cf576f  gcc/addresses.h
  df3f6c6882fc8f715d4cc537af0f6442  gcc/adjust-alignment.cc
! e4e9af1bba62ce1f208f80f158f73679  gcc/algol68/ChangeLog
  2a93a1799a2add5d7ad920f0001f7aa5  gcc/algol68/Make-lang.in
  7479907efeefafc7c6d3bc2aaa5c6a83  gcc/algol68/README
  fb43be530798e23528ffc144413b80a9  gcc/algol68/a68-diagnostics.cc
  95aea877c594908679a2057305b999c8  gcc/algol68/a68-exports.cc
! 48edb9e9154504f31035964193e1d0bb  gcc/algol68/a68-imports.cc
  6691c0e619bbdb98556bd44b6eb8bd41  gcc/algol68/a68-lang.cc
  c7f3e4b6ca328ed109839fb6af254e6b  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
--- 3057,3068 ----
  a8f3f69de7abdd693a971d4655971bf7  gcc/ada/xutil.ads
  60f1f34895b64cc9a3b2d590e6cf576f  gcc/addresses.h
  df3f6c6882fc8f715d4cc537af0f6442  gcc/adjust-alignment.cc
! e5d25a7b64f4f7663769ead9921716a4  gcc/algol68/ChangeLog
  2a93a1799a2add5d7ad920f0001f7aa5  gcc/algol68/Make-lang.in
  7479907efeefafc7c6d3bc2aaa5c6a83  gcc/algol68/README
  fb43be530798e23528ffc144413b80a9  gcc/algol68/a68-diagnostics.cc
  95aea877c594908679a2057305b999c8  gcc/algol68/a68-exports.cc
! e26818bcc3bc1f737dac9cb588b14ad6  gcc/algol68/a68-imports.cc
  6691c0e619bbdb98556bd44b6eb8bd41  gcc/algol68/a68-lang.cc
  c7f3e4b6ca328ed109839fb6af254e6b  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
*************** e475601178306ca722c941848f7b25d7  gcc/al
*** 3073,3087 ****
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
  f7c4063a70cd0a3f31880770cd974ec2  gcc/algol68/a68-low-decls.cc
  ef61d04fdb839242c97e53b105268e52  gcc/algol68/a68-low-generator.cc
! f2482e4ac91f0405b19f2792f14ff03f  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
  c81c9137e6f6284c6a1ba0be68609895  gcc/algol68/a68-low-moids.cc
  7cff8c4f9adad0de3b4db98dc5e2039f  gcc/algol68/a68-low-multiples.cc
  1a382214dc720355d1f18b5402c6aa93  gcc/algol68/a68-low-posix.cc
! 517f37fafd5f012cb4aad67999cbb5a1  gcc/algol68/a68-low-prelude.cc
  b761d3ea5bc6d29640619297fd8a70b6  gcc/algol68/a68-low-procs.cc
  335ffa6c3b75121835fb8d3c30f87b67  gcc/algol68/a68-low-ranges.cc
! 41adee843006a834cf5b35cc2f8cad55  gcc/algol68/a68-low-reals.cc
  aebb4c3b9e607164c25541593333b832  gcc/algol68/a68-low-refs.cc
  40f76246c51a161a5581e7b237bf02a6  gcc/algol68/a68-low-runtime.cc
  1260a05894c64c285b902308bb8a46f9  gcc/algol68/a68-low-runtime.def
--- 3073,3087 ----
  5aa76e1c20ed5b89f9d01211f6bb6cc6  gcc/algol68/a68-low-complex.cc
  f7c4063a70cd0a3f31880770cd974ec2  gcc/algol68/a68-low-decls.cc
  ef61d04fdb839242c97e53b105268e52  gcc/algol68/a68-low-generator.cc
! 49e9c1592266268c752da49a2ef0bbc9  gcc/algol68/a68-low-ints.cc
  949d0f0a5f79da34ba44f79c6ebfe282  gcc/algol68/a68-low-misc.cc
  c81c9137e6f6284c6a1ba0be68609895  gcc/algol68/a68-low-moids.cc
  7cff8c4f9adad0de3b4db98dc5e2039f  gcc/algol68/a68-low-multiples.cc
  1a382214dc720355d1f18b5402c6aa93  gcc/algol68/a68-low-posix.cc
! a0a1cfa2c51f6a415389792643b1d1e6  gcc/algol68/a68-low-prelude.cc
  b761d3ea5bc6d29640619297fd8a70b6  gcc/algol68/a68-low-procs.cc
  335ffa6c3b75121835fb8d3c30f87b67  gcc/algol68/a68-low-ranges.cc
! 4d895047574428a4a2c4f2452766f8ff  gcc/algol68/a68-low-reals.cc
  aebb4c3b9e607164c25541593333b832  gcc/algol68/a68-low-refs.cc
  40f76246c51a161a5581e7b237bf02a6  gcc/algol68/a68-low-runtime.cc
  1260a05894c64c285b902308bb8a46f9  gcc/algol68/a68-low-runtime.def
*************** bf2e9b5dd21e1dfe9dc046812e7dd756  gcc/al
*** 3094,3103 ****
  86ee3e220ec49b15faa51baf250cf66f  gcc/algol68/a68-moids-misc.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  c324f111303d399ec78ee3371488176f  gcc/algol68/a68-parser-attrs.def
! ccbd763a1dbbdcb84e98c45193835c87  gcc/algol68/a68-parser-bottom-up.cc
  11c6e7547ee9292410a3b91692ea6ad1  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! abd60542bcc197bcaf32511a37de7e62  gcc/algol68/a68-parser-extract.cc
  5aa1c44cc0b96934ca5906eb2e0e500e  gcc/algol68/a68-parser-keywords.cc
  cef52688a96e5c6b6309f823287d7460  gcc/algol68/a68-parser-modes.cc
  451910827918a165063a77e10deebc2a  gcc/algol68/a68-parser-moids-check.cc
--- 3094,3103 ----
  86ee3e220ec49b15faa51baf250cf66f  gcc/algol68/a68-moids-misc.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  c324f111303d399ec78ee3371488176f  gcc/algol68/a68-parser-attrs.def
! e5ff07e371674982739a2c89b6f737dc  gcc/algol68/a68-parser-bottom-up.cc
  11c6e7547ee9292410a3b91692ea6ad1  gcc/algol68/a68-parser-brackets.cc
  06167f432b9437d0cc135868d1067782  gcc/algol68/a68-parser-debug.cc
! f0ccd998d854bd7f1c8c0a97fe8dfd8d  gcc/algol68/a68-parser-extract.cc
  5aa1c44cc0b96934ca5906eb2e0e500e  gcc/algol68/a68-parser-keywords.cc
  cef52688a96e5c6b6309f823287d7460  gcc/algol68/a68-parser-modes.cc
  451910827918a165063a77e10deebc2a  gcc/algol68/a68-parser-moids-check.cc
*************** eb200628692c30c1ade0eaeabcddf008  gcc/al
*** 3105,3137 ****
  21df1102d7944e20f83a720318e21de8  gcc/algol68/a68-parser-moids-equivalence.cc
  5ff1fcb1ff4985b94774b904b71582b7  gcc/algol68/a68-parser-pragmat.cc
  05804e13f2603c536bbb12fb8a5a14ff  gcc/algol68/a68-parser-prelude.cc
! 58628b673fb2417fa64a9bcfc4420a70  gcc/algol68/a68-parser-scanner.cc
  642248594944766b6cf1d2ee348ae403  gcc/algol68/a68-parser-scope.cc
  d259fcdbab02c9c536b330f7111ae7cf  gcc/algol68/a68-parser-serial-dsa.cc
  82335b969057c5977552639844d93cf0  gcc/algol68/a68-parser-taxes.cc
  e746d9f904915c344c976abcd29bef7e  gcc/algol68/a68-parser-top-down.cc
  9c90243f2f2e799db194a764bb6850f4  gcc/algol68/a68-parser-victal.cc
! 8d6bba06c2b65de7a7ccd2b3e3c7544d  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
  64a4d7c961501b931b15a7093ed28291  gcc/algol68/a68-types.h
  cddb33683b15b95275fe506ebd8903ca  gcc/algol68/a68-unistr.c
! 7702da44798b0fe0b876ef5c809f6b59  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  661865b5bba0ac76e041c54bd958a1ef  gcc/algol68/config-lang.in
  6877d7243fce731d111226227b06d1fe  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
! a928dec6969371977f18a30080531aa6  gcc/algol68/ga68.texi
  4810fa1d976ad329fa7a115292ce8fe8  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
! be74565d7a6c749ee24755ace00071f0  gcc/algol68/lang.opt
! 60d529161243810ca4083839f8cb23ec  gcc/algol68/lang.opt.urls
  22e67419538a3230a4cff638bb5a068b  gcc/alias.cc
  0d0b7a8d67ab4391dba470baf07f7ad4  gcc/alias.h
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! eb28d7a1fc67a9bd7e15b886b2cc09e6  gcc/analyzer/ChangeLog
  99ca8e9358149d619a543e45725f689f  gcc/analyzer/access-diagram.cc
  58f352acafda673d24da4113c4f80b8d  gcc/analyzer/access-diagram.h
  d3f3112562b7552a583d7d995ed2f2d1  gcc/analyzer/ana-state-to-diagnostic-state.cc
--- 3105,3137 ----
  21df1102d7944e20f83a720318e21de8  gcc/algol68/a68-parser-moids-equivalence.cc
  5ff1fcb1ff4985b94774b904b71582b7  gcc/algol68/a68-parser-pragmat.cc
  05804e13f2603c536bbb12fb8a5a14ff  gcc/algol68/a68-parser-prelude.cc
! 97210ee3eff2eb58ddd5146cd9bb346b  gcc/algol68/a68-parser-scanner.cc
  642248594944766b6cf1d2ee348ae403  gcc/algol68/a68-parser-scope.cc
  d259fcdbab02c9c536b330f7111ae7cf  gcc/algol68/a68-parser-serial-dsa.cc
  82335b969057c5977552639844d93cf0  gcc/algol68/a68-parser-taxes.cc
  e746d9f904915c344c976abcd29bef7e  gcc/algol68/a68-parser-top-down.cc
  9c90243f2f2e799db194a764bb6850f4  gcc/algol68/a68-parser-victal.cc
! ad4a65779f5b2bdd083adf8457dfba32  gcc/algol68/a68-parser.cc
  bb6a9492686645cd8ede63a3aa41bb2e  gcc/algol68/a68-postulates.cc
  614ee2f3c97cf1910484b4ba1b697352  gcc/algol68/a68-tree.def
  64a4d7c961501b931b15a7093ed28291  gcc/algol68/a68-types.h
  cddb33683b15b95275fe506ebd8903ca  gcc/algol68/a68-unistr.c
! f66a4bc78885fc31363bbcb594c1804f  gcc/algol68/a68.h
  cbc2ddca0589edc81c7df109b1a1927b  gcc/algol68/a68spec.cc
  661865b5bba0ac76e041c54bd958a1ef  gcc/algol68/config-lang.in
  6877d7243fce731d111226227b06d1fe  gcc/algol68/ga68-exports.pk
  f150e2c760036b980e94ec7bb14e1172  gcc/algol68/ga68-internals.texi
! 6f8f9154450672d1634858a815ea819e  gcc/algol68/ga68.texi
  4810fa1d976ad329fa7a115292ce8fe8  gcc/algol68/ga68.vw
  0a91d85c360d5ee3eb6258aecdab4636  gcc/algol68/lang-specs.h
! 325fb18926c663a69528644401707a7e  gcc/algol68/lang.opt
! 70bc70fd00e76244f79d55d14e1eea1d  gcc/algol68/lang.opt.urls
  22e67419538a3230a4cff638bb5a068b  gcc/alias.cc
  0d0b7a8d67ab4391dba470baf07f7ad4  gcc/alias.h
  a13250e9011949e791f210139f4c4323  gcc/align.h
  192d075c6984da6ef1e282fd63829079  gcc/alloc-pool.cc
  b2194a7136db5f26272ca6162d858997  gcc/alloc-pool.h
! 1c79bd86f666031ae8f5653ac344f15f  gcc/analyzer/ChangeLog
  99ca8e9358149d619a543e45725f689f  gcc/analyzer/access-diagram.cc
  58f352acafda673d24da4113c4f80b8d  gcc/analyzer/access-diagram.h
  d3f3112562b7552a583d7d995ed2f2d1  gcc/analyzer/ana-state-to-diagnostic-state.cc
*************** b5f1385e0b051936dcf6b44d2802237b  gcc/an
*** 3141,3236 ****
  5e7a1356f3a013d95df4966c3b0184db  gcc/analyzer/analyzer-language.cc
  44b8ef39c6cb5a7fde8a8f8cb953e764  gcc/analyzer/analyzer-language.h
  51d836e1d69f301e94f2958fbf5168c4  gcc/analyzer/analyzer-logging.cc
! b40988a4cf1f11f85dc4b7182a0253fd  gcc/analyzer/analyzer-logging.h
  bfd6293a1330b0a0026fdc80c0c23351  gcc/analyzer/analyzer-pass.cc
  313f066c1695c476ca0de7d8f98cc4db  gcc/analyzer/analyzer-selftests.cc
  a2da2c4ef5a4fe3acbece54115b2fcd5  gcc/analyzer/analyzer-selftests.h
! ae42d1af6f0865a580be5b5785f09543  gcc/analyzer/analyzer.cc
! f70090b21bb2e0fbc34487c63b4e13a5  gcc/analyzer/analyzer.opt
! 595736e125cff847431ca2b52f95a8c4  gcc/analyzer/analyzer.opt.urls
  36bb44ed21a23a1a8cfb1813e07e2618  gcc/analyzer/bar-chart.cc
  632007f36f35e261443f6de2baf0656a  gcc/analyzer/bar-chart.h
! 28888941c709fc542a9ccd9058d13a24  gcc/analyzer/bounds-checking.cc
  a82a71ab7f96ca02b70fd75fd951ea5f  gcc/analyzer/call-details.cc
! 34784d3ca75f5fd6835d234890d819ef  gcc/analyzer/call-details.h
! 203c27c81792a274c12b0b1f0e7658e7  gcc/analyzer/call-info.cc
! 80e57512f90deb1472ad7ad386c76c6b  gcc/analyzer/call-info.h
! 83a7dc74d76e0f16a332e5c8a5435092  gcc/analyzer/call-string.cc
! 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
  60fa08b701b562f0dde13dd1877ddcd1  gcc/analyzer/complexity.cc
  9113c9c3a7167f3119fc0552883611b5  gcc/analyzer/complexity.h
! 8439241d3b40f3fda6fa85c45b8aa42e  gcc/analyzer/constraint-manager.cc
! fd3dc93237c32deba4749cfcd1054ca0  gcc/analyzer/constraint-manager.h
! 53d9b22f17fa864fad82812b19301fac  gcc/analyzer/diagnostic-manager.cc
! 3f393f4ab5ba02ae9be5a89e15cbf389  gcc/analyzer/diagnostic-manager.h
! 5026427c4c89a12ac1685fac3d6f1a8f  gcc/analyzer/engine.cc
  acc1f4f20384df654fa365f64ad6a6f9  gcc/analyzer/engine.h
! c31696d47421f74a13cc907d022b3935  gcc/analyzer/event-loc-info.h
! bd0aa8aba8793b6e03f6cddffd57b301  gcc/analyzer/exploded-graph.h
! 7330a37bff32b8bb4d971ffc043827a2  gcc/analyzer/feasible-graph.cc
  af675735c50099e3d3123b9ef8d97dad  gcc/analyzer/feasible-graph.h
  75fa61994e084f2c6f9d6ccff6da1c5b  gcc/analyzer/function-set.cc
  73d77bbed77b45ed4b05881eeccbc992  gcc/analyzer/function-set.h
! e8fdf8aae887a06668b928191ec6da7a  gcc/analyzer/infinite-loop.cc
! 07bf452193c8d8029d30e35a47ef41f8  gcc/analyzer/infinite-recursion.cc
  7ee54f0568377ab1b37ccdc7bb949387  gcc/analyzer/inlining-iterator.h
  9289c540d66da127e56aa983ca018af6  gcc/analyzer/kf-analyzer.cc
! f939ceabcab4e031bd8a0960eaa768dc  gcc/analyzer/kf-lang-cp.cc
  6ff38999d2e80d0b4777aa487dbf4649  gcc/analyzer/kf.cc
  b1767c404b2a466ceeb581380c8a81fe  gcc/analyzer/known-function-manager.cc
  03a32d089b911aa5389a2b9006795f83  gcc/analyzer/known-function-manager.h
! 8e66d6b2b230cab65bd41073d71a2e77  gcc/analyzer/pending-diagnostic.cc
! d5314202d047f9c9dadbafd255300e4a  gcc/analyzer/pending-diagnostic.h
! 2b832b9c504b35df0b392144a6e972a2  gcc/analyzer/program-point.cc
! c1fbd7a3b6a1c66e2dbbc2e6725bab7b  gcc/analyzer/program-point.h
! b6c98305b7499c48b334f60e46be7d00  gcc/analyzer/program-state.cc
! 88b5f5d134b7604026c38d9f5b2cbb29  gcc/analyzer/program-state.h
  fe06c3c30ebc980430c4383a990fb092  gcc/analyzer/ranges.cc
  f0acfecca8767075f2b2e9bc04089741  gcc/analyzer/ranges.h
  58fb7d339e1159812f9592e6de91dfa3  gcc/analyzer/reachability.h
  59f0552f76cf621495df906f2db01f93  gcc/analyzer/record-layout.cc
  57354826ca1c448180149706333f891f  gcc/analyzer/record-layout.h
  e1490c2bf5b3d5b5a3fec56291595d0b  gcc/analyzer/region-model-asm.cc
! 3bb1776cb845ffbe486880216ac3f330  gcc/analyzer/region-model-manager.cc
! d63277a107754fc16d0f14e27723be50  gcc/analyzer/region-model-manager.h
  41f9d87a517295eec94a690a02e74027  gcc/analyzer/region-model-reachability.cc
  34ab719ce08057bb88f8bf20e7c3c959  gcc/analyzer/region-model-reachability.h
! e9868260617ca3243c105a45652ebf92  gcc/analyzer/region-model.cc
! 2a8af165dc412d9bdc6e4651bc21c877  gcc/analyzer/region-model.h
! 710c83d91f5d65f1f9577635d1bf8193  gcc/analyzer/region.cc
  1ea9c46e24a4c830bab76a9ddf0ffa3f  gcc/analyzer/region.h
! 2d30a76b5e3759b2f248f26f3deb7e6e  gcc/analyzer/sm-fd.cc
  7a28d77074f7b1b5ea7b79aa82f21698  gcc/analyzer/sm-fd.dot
! c4143ba7f15b2ebb99f1baf69977d2a4  gcc/analyzer/sm-file.cc
  38e55000eed6a24e2db959ceb1b99c4f  gcc/analyzer/sm-file.dot
! 32bfbbf03ee54412aa205747af024a67  gcc/analyzer/sm-malloc.cc
  e0c92f0f51c6cc6d8c51b020ac66c866  gcc/analyzer/sm-malloc.dot
! 2ba73b1a94b1ba447cf0faecae53806f  gcc/analyzer/sm-pattern-test.cc
! 3161ab2d3840caee34e00c9b0e28ff03  gcc/analyzer/sm-sensitive.cc
! 9bc9a3fc593ca7c6bf214544b2477cd5  gcc/analyzer/sm-signal.cc
! dce678df78f1adacad05565863b07fe6  gcc/analyzer/sm-taint.cc
! 80b4a3586caa92819fb59f51689cb53d  gcc/analyzer/sm.cc
! 8591769ffb0e0287072889a6706d28cd  gcc/analyzer/sm.h
! 0b805ff6293fa32e40ae2b5b76f12432  gcc/analyzer/state-purge.cc
! 285cfd3d271c9a04f9e1a2b348affaca  gcc/analyzer/state-purge.h
! b3c56fd197a3196163a2cf57e5cc6c07  gcc/analyzer/store.cc
  443f4aa63dd0b4df7041a7f547343650  gcc/analyzer/store.h
! 98e55f40c471fe66032881622d28d872  gcc/analyzer/supergraph.cc
! fd6d3aab6e3dc2f26680b6d3ee68a8fe  gcc/analyzer/supergraph.h
! d6538c95396953b32a01f880bc514266  gcc/analyzer/svalue.cc
! 3be843cd59e21c8d587bf5b860aa225d  gcc/analyzer/svalue.h
  23b998a0cca7e9c96d0adc0bd16828bb  gcc/analyzer/symbol.cc
  336e5422328aefad109c05dff847934f  gcc/analyzer/symbol.h
  c60f1ef3d02e040c88d9e217de84ee81  gcc/analyzer/trimmed-graph.cc
  2d528f5f807adc6941ed2a20cc193c7f  gcc/analyzer/trimmed-graph.h
! 4f474853939ba265b67e975cdb22c9ed  gcc/analyzer/varargs.cc
  cc81acb908eb9d6b13038a95c3a10a9c  gcc/analyzer/varargs.dot
  eeb42b412edc2884a4c60d6f38f7473b  gcc/array-traits.h
  6abcb9777280c69da14835a391a5c347  gcc/asan.cc
--- 3141,3243 ----
  5e7a1356f3a013d95df4966c3b0184db  gcc/analyzer/analyzer-language.cc
  44b8ef39c6cb5a7fde8a8f8cb953e764  gcc/analyzer/analyzer-language.h
  51d836e1d69f301e94f2958fbf5168c4  gcc/analyzer/analyzer-logging.cc
! 8f4f1d85bc7d7468da94fb6ebc5d2e42  gcc/analyzer/analyzer-logging.h
  bfd6293a1330b0a0026fdc80c0c23351  gcc/analyzer/analyzer-pass.cc
  313f066c1695c476ca0de7d8f98cc4db  gcc/analyzer/analyzer-selftests.cc
  a2da2c4ef5a4fe3acbece54115b2fcd5  gcc/analyzer/analyzer-selftests.h
! 21296cf10892455652933dca075daaf4  gcc/analyzer/analyzer.cc
! b193e9b8abbd69fe87ad341bf0011e24  gcc/analyzer/analyzer.opt
! 8da6e11724c67aff3fcc4467cc5abca6  gcc/analyzer/analyzer.opt.urls
  36bb44ed21a23a1a8cfb1813e07e2618  gcc/analyzer/bar-chart.cc
  632007f36f35e261443f6de2baf0656a  gcc/analyzer/bar-chart.h
! 6aa898f932d0343b913fed3975b9b848  gcc/analyzer/bounds-checking.cc
  a82a71ab7f96ca02b70fd75fd951ea5f  gcc/analyzer/call-details.cc
! 6235ff754f79c7124d6bc2ca121ba16a  gcc/analyzer/call-details.h
! 2fe3b5e642f2a80a9ee96d9590200fcc  gcc/analyzer/call-info.cc
! 9d67e5608db3076e90beea6f4e6d8368  gcc/analyzer/call-info.h
! 03c0ab6ee0e1cd6595c0418b216d662e  gcc/analyzer/call-string.cc
! a131be41d45ef61144679e37411d8b5e  gcc/analyzer/call-string.h
! 498b92c06e997fb220e232350ec7ff41  gcc/analyzer/call-summary.cc
  bc77cd1e5aec40e5623c49cb8974b3d4  gcc/analyzer/call-summary.h
! 5efec15bdf190aa8b75b249fc7ca4b24  gcc/analyzer/checker-event.cc
! 4e8eb0f192c1be7b8e6476a0fe50d2d2  gcc/analyzer/checker-event.h
  3ab3510c119841ad20bbfcab82653f7c  gcc/analyzer/checker-path.cc
  717c8ea5a0fcd626c448dd37a593cfda  gcc/analyzer/checker-path.h
! e685d4762247bcb6c8ce6983c7332b3a  gcc/analyzer/common.h
  60fa08b701b562f0dde13dd1877ddcd1  gcc/analyzer/complexity.cc
  9113c9c3a7167f3119fc0552883611b5  gcc/analyzer/complexity.h
! 2856a341b97c6fb565bb18bdc9a4df84  gcc/analyzer/constraint-manager.cc
! de3e24210b7d7d058b9fa4197b5e3a52  gcc/analyzer/constraint-manager.h
! d0e6383909772d9e78df0a42ddc85589  gcc/analyzer/diagnostic-manager.cc
! 4e59d9dab4492a2c6d76c1ba5b3d087d  gcc/analyzer/diagnostic-manager.h
! 29bfe45fac20fa31da0e1d11c3c6d461  gcc/analyzer/engine.cc
  acc1f4f20384df654fa365f64ad6a6f9  gcc/analyzer/engine.h
! dccc2d81d8b2122311176d2a595de8b5  gcc/analyzer/event-loc-info.h
! 6e0c1059e9207dc0659b0564f1817b06  gcc/analyzer/exploded-graph.h
! 4a306d43a29746c5e8585007aa6f9663  gcc/analyzer/feasible-graph.cc
  af675735c50099e3d3123b9ef8d97dad  gcc/analyzer/feasible-graph.h
  75fa61994e084f2c6f9d6ccff6da1c5b  gcc/analyzer/function-set.cc
  73d77bbed77b45ed4b05881eeccbc992  gcc/analyzer/function-set.h
! 4bc69f78c28e780fae21e49eb808680b  gcc/analyzer/impl-sm-context.h
! c925d926a8a23e675f8e9a296bce5130  gcc/analyzer/infinite-loop.cc
! 63738f06fc0dd75c3fcdd14e5314ae03  gcc/analyzer/infinite-recursion.cc
  7ee54f0568377ab1b37ccdc7bb949387  gcc/analyzer/inlining-iterator.h
  9289c540d66da127e56aa983ca018af6  gcc/analyzer/kf-analyzer.cc
! bba160592a366830aa43a07e0e86118d  gcc/analyzer/kf-lang-cp.cc
  6ff38999d2e80d0b4777aa487dbf4649  gcc/analyzer/kf.cc
  b1767c404b2a466ceeb581380c8a81fe  gcc/analyzer/known-function-manager.cc
  03a32d089b911aa5389a2b9006795f83  gcc/analyzer/known-function-manager.h
! cb424e016e5823aa62505cae534209ff  gcc/analyzer/ops.cc
! 81e3dc98cc103c9dc391fa286f20b362  gcc/analyzer/ops.h
! bfcb1ad4fb40d42049006f2257dd78f2  gcc/analyzer/pending-diagnostic.cc
! ecdcea18317dc8e6d682f70a597795c8  gcc/analyzer/pending-diagnostic.h
! cf7a2630a3efe6938fcb2c3481ed5632  gcc/analyzer/program-point.cc
! fbae8fb9ee7be10710bf23cf2f6d2d13  gcc/analyzer/program-point.h
! 6af6b2ae86e7b57620f5154b16764197  gcc/analyzer/program-state.cc
! 2cc00ae412557318378353437b3ddbb8  gcc/analyzer/program-state.h
  fe06c3c30ebc980430c4383a990fb092  gcc/analyzer/ranges.cc
  f0acfecca8767075f2b2e9bc04089741  gcc/analyzer/ranges.h
  58fb7d339e1159812f9592e6de91dfa3  gcc/analyzer/reachability.h
  59f0552f76cf621495df906f2db01f93  gcc/analyzer/record-layout.cc
  57354826ca1c448180149706333f891f  gcc/analyzer/record-layout.h
  e1490c2bf5b3d5b5a3fec56291595d0b  gcc/analyzer/region-model-asm.cc
! f7c2233b01a49c3ce8e881a91c1137d5  gcc/analyzer/region-model-manager.cc
! 1594543b67f312531d1d40036536b341  gcc/analyzer/region-model-manager.h
  41f9d87a517295eec94a690a02e74027  gcc/analyzer/region-model-reachability.cc
  34ab719ce08057bb88f8bf20e7c3c959  gcc/analyzer/region-model-reachability.h
! b933ffcd35983b36d0c410c410f8e72c  gcc/analyzer/region-model.cc
! f4c774583fb0ce97114659e550904681  gcc/analyzer/region-model.h
! 5ad0cc8e3f7fed3aed96be1f7f85fe35  gcc/analyzer/region.cc
  1ea9c46e24a4c830bab76a9ddf0ffa3f  gcc/analyzer/region.h
! 99fb5faee40376b23c3240ca70ea1e47  gcc/analyzer/sm-fd.cc
  7a28d77074f7b1b5ea7b79aa82f21698  gcc/analyzer/sm-fd.dot
! dd46ec6b51bb7e2504d00b5374ae4930  gcc/analyzer/sm-file.cc
  38e55000eed6a24e2db959ceb1b99c4f  gcc/analyzer/sm-file.dot
! 7cab289b8c54cad39a96f6f7f7bba322  gcc/analyzer/sm-malloc.cc
  e0c92f0f51c6cc6d8c51b020ac66c866  gcc/analyzer/sm-malloc.dot
! 8f177fd73ba3038d2bbd515ac9fa7c5e  gcc/analyzer/sm-pattern-test.cc
! 51b94e1105397c2793fecf5ef43e0b69  gcc/analyzer/sm-sensitive.cc
! 248d0d5138cf4ab862b2d3f62bb84039  gcc/analyzer/sm-signal.cc
! f6659b3ba8f7e4db718d3b53482398f6  gcc/analyzer/sm-taint.cc
! 3f3131ea5b4b4b66791f9d4a5b1d1068  gcc/analyzer/sm.cc
! bf7ec9c334de642875bc0af7d64fd755  gcc/analyzer/sm.h
! 76e7f245d93ec8ad82f43c597c7425ab  gcc/analyzer/state-purge.cc
! c0ba7967d47112ed257f449227aa6b76  gcc/analyzer/state-purge.h
! dd9996afff455863987249435c4c2812  gcc/analyzer/store.cc
  443f4aa63dd0b4df7041a7f547343650  gcc/analyzer/store.h
! 09fd7f23eba0ea31da5b5093f4a4db95  gcc/analyzer/supergraph-fixup-locations.cc
! 4f8ed66df3958837a577f47c80ac79cd  gcc/analyzer/supergraph-manipulation.h
! c5d61f8a7ee5ddd8a09e70002b6beb5d  gcc/analyzer/supergraph-simplify.cc
! 6e23546be75f9f07a966259c12f9257c  gcc/analyzer/supergraph-sorting.cc
! d8cfe76fc1d575e7e01aaa415df050a8  gcc/analyzer/supergraph.cc
! ef11c2ace82389357ac6a8055a7319e7  gcc/analyzer/supergraph.h
! 1d41c9be8b0944f10ffd41e881e94fea  gcc/analyzer/svalue.cc
! 2d02f3c1fd4a2ffd8217d6a22472a961  gcc/analyzer/svalue.h
  23b998a0cca7e9c96d0adc0bd16828bb  gcc/analyzer/symbol.cc
  336e5422328aefad109c05dff847934f  gcc/analyzer/symbol.h
  c60f1ef3d02e040c88d9e217de84ee81  gcc/analyzer/trimmed-graph.cc
  2d528f5f807adc6941ed2a20cc193c7f  gcc/analyzer/trimmed-graph.h
! fdc820ba8335a1c10f8e08c581379570  gcc/analyzer/varargs.cc
  cc81acb908eb9d6b13038a95c3a10a9c  gcc/analyzer/varargs.dot
  eeb42b412edc2884a4c60d6f38f7473b  gcc/array-traits.h
  6abcb9777280c69da14835a391a5c347  gcc/asan.cc
*************** a350e0e702ef2468ff3c700dff5b7433  gcc/at
*** 3243,3249 ****
  74de0da9c4c12c7fd923885069f35eb2  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
  c25bbcb70f43e3c72a329043adf2c6c2  gcc/auto-obstack.h
! 343b8a20c6b422b044d17099f8d0e63b  gcc/auto-profile.cc
  89bffa3f5c7147f088b95f40000c1e56  gcc/auto-profile.h
  1fd4de40d068f0ae7857fb0c2e22e46e  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
--- 3250,3256 ----
  74de0da9c4c12c7fd923885069f35eb2  gcc/attribs.h
  54fb3cb1cab63227c50a50819ea1a3c3  gcc/auto-inc-dec.cc
  c25bbcb70f43e3c72a329043adf2c6c2  gcc/auto-obstack.h
! be3331fd428faca111f2d99c6ab5c7d4  gcc/auto-profile.cc
  89bffa3f5c7147f088b95f40000c1e56  gcc/auto-profile.h
  1fd4de40d068f0ae7857fb0c2e22e46e  gcc/avoid-store-forwarding.cc
  b187aaef50f37afeeee1f8239d5aa033  gcc/avoid-store-forwarding.h
*************** ab9fdb6ff2584fb7c564bdd3d5546c02  gcc/bt
*** 3260,3266 ****
  67b762b0b5e04e028c2e2436f9a6cfbe  gcc/builtins.cc
  52ff6fb92e162a8ad41a1af1dfb0171a  gcc/builtins.def
  08bacecaf5d3527bf3df15480fb78537  gcc/builtins.h
! 4a3788e0c84a9822bad675c69fdfdee1  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
--- 3267,3273 ----
  67b762b0b5e04e028c2e2436f9a6cfbe  gcc/builtins.cc
  52ff6fb92e162a8ad41a1af1dfb0171a  gcc/builtins.def
  08bacecaf5d3527bf3df15480fb78537  gcc/builtins.h
! f92f1791c389a192409691371269d881  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-
*** 3268,3274 ****
  596dbd2931504d95df7e9f80209f701e  gcc/c-family/c-common.cc
  461f8fd980064d18d90eacf82418efa0  gcc/c-family/c-common.def
  a9f5b0cff328f824fd403136d48f4bca  gcc/c-family/c-common.h
! 75de6b5a4caad7c710cd519bdddc5046  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  19059a85545bb95b391e68da0cbc670c  gcc/c-family/c-format.cc
  c8d86c12bc259d3a335f338ce3a10304  gcc/c-family/c-format.h
--- 3275,3281 ----
  596dbd2931504d95df7e9f80209f701e  gcc/c-family/c-common.cc
  461f8fd980064d18d90eacf82418efa0  gcc/c-family/c-common.def
  a9f5b0cff328f824fd403136d48f4bca  gcc/c-family/c-common.h
! 14ba009130187cc3d40c52c4e77f6b5f  gcc/c-family/c-cppbuiltin.cc
  01db2d5cca29943c49bb372f2137d874  gcc/c-family/c-dump.cc
  19059a85545bb95b391e68da0cbc670c  gcc/c-family/c-format.cc
  c8d86c12bc259d3a335f338ce3a10304  gcc/c-family/c-format.h
*************** c8d86c12bc259d3a335f338ce3a10304  gcc/c-
*** 3277,3288 ****
  a4b7179d2e948bb7586a9143fbe05593  gcc/c-family/c-indentation.h
  c80c4d6e16ab46358143d22a8a146725  gcc/c-family/c-lex.cc
  c880dc584a0fd4908e5df33dd81137b8  gcc/c-family/c-objc.h
! 6293b413f6dfbe8ba4a6c8cec20ada2a  gcc/c-family/c-omp.cc
  d6f330016fc2e053464709bdc03c1101  gcc/c-family/c-opts.cc
  5be37a0daa62d32d800f4818f979e598  gcc/c-family/c-pch.cc
  6e53d008a0c4738339154c353a50ff0a  gcc/c-family/c-ppoutput.cc
  cfc760e3be8b3db6dfc8fef49282c0aa  gcc/c-family/c-pragma.cc
! 84cd366e90034d2af1be65ea66818a2d  gcc/c-family/c-pragma.h
  5e3dbb79036e1205b779ab076c679263  gcc/c-family/c-pretty-print.cc
  3a8e76e3d28170a6aad7c88d4d1fd05d  gcc/c-family/c-pretty-print.h
  5da7f0820eba217160736031aeaeabbd  gcc/c-family/c-semantics.cc
--- 3284,3295 ----
  a4b7179d2e948bb7586a9143fbe05593  gcc/c-family/c-indentation.h
  c80c4d6e16ab46358143d22a8a146725  gcc/c-family/c-lex.cc
  c880dc584a0fd4908e5df33dd81137b8  gcc/c-family/c-objc.h
! 01d687bce8334969b5e10c6c1607f672  gcc/c-family/c-omp.cc
  d6f330016fc2e053464709bdc03c1101  gcc/c-family/c-opts.cc
  5be37a0daa62d32d800f4818f979e598  gcc/c-family/c-pch.cc
  6e53d008a0c4738339154c353a50ff0a  gcc/c-family/c-ppoutput.cc
  cfc760e3be8b3db6dfc8fef49282c0aa  gcc/c-family/c-pragma.cc
! bc9be61fe8663f546d547d01dce16279  gcc/c-family/c-pragma.h
  5e3dbb79036e1205b779ab076c679263  gcc/c-family/c-pretty-print.cc
  3a8e76e3d28170a6aad7c88d4d1fd05d  gcc/c-family/c-pretty-print.h
  5da7f0820eba217160736031aeaeabbd  gcc/c-family/c-semantics.cc
*************** fc808567009babd00ebcf49b5b985691  gcc/c-
*** 3296,3324 ****
  6292cfae345d5a438f2de6171f1dccb9  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
  f33c757b5c412f1062f4d8d3d39ea3c5  gcc/c-family/c-warn.cc
! a530312b7a4fec7d277d219086eed57c  gcc/c-family/c.opt
! 25f856f2e7baf9bc2e8a09f50b2545bf  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
! 879eddd55c6cf8b2355fce0309437f99  gcc/c/ChangeLog
  a1ab86dd79d40d45839823afe798673a  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! 3190f6cc1d9feef57bf80041ee2a3156  gcc/c/c-decl.cc
  10e620f790089957c832097206d0d6d6  gcc/c/c-errors.cc
  837fc5f348c64d1c90a4430cc0fb3662  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
  66f4b0672865216b2d3040eee16759b5  gcc/c/c-lang.h
  c2644975781d9f78ae4c387d01a3270e  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! d171660519909e3b3f01de16e7b6251a  gcc/c/c-parser.cc
  4cd2bf432e96f0de530e0ea4e8b44aa2  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  37ad86287839e5f9849ab677266e1909  gcc/c/c-tree.h
! 2b41e516754ff744cdbfe50a30f534f1  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  a1cb75cf27d4ffb2f87f4f7dbf93ea45  gcc/c/gimple-parser.cc
--- 3303,3331 ----
  6292cfae345d5a438f2de6171f1dccb9  gcc/c-family/c-ubsan.cc
  a28f2477c85a17e42026521322b3649a  gcc/c-family/c-ubsan.h
  f33c757b5c412f1062f4d8d3d39ea3c5  gcc/c-family/c-warn.cc
! 634e5047a2094c2c26f9f0ff1bbba687  gcc/c-family/c.opt
! 948638055773c6edb8ccff82f57f401d  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
! 04f50d5167d27bb4ea64f4c1d46b1028  gcc/c/ChangeLog
  a1ab86dd79d40d45839823afe798673a  gcc/c/Make-lang.in
  f1e5593aebd5cffb4b3cbffe6bd0860a  gcc/c/c-aux-info.cc
  178d24653bb20936d73bad078e70763c  gcc/c/c-convert.cc
! 620f96dc272db22324f7e6a369c71721  gcc/c/c-decl.cc
  10e620f790089957c832097206d0d6d6  gcc/c/c-errors.cc
  837fc5f348c64d1c90a4430cc0fb3662  gcc/c/c-fold.cc
  d9c0725d061adffdf400457d91be3aed  gcc/c/c-lang.cc
  66f4b0672865216b2d3040eee16759b5  gcc/c/c-lang.h
  c2644975781d9f78ae4c387d01a3270e  gcc/c/c-objc-common.cc
  757f583d06a3ec98336adbfc92b4e6a8  gcc/c/c-objc-common.h
! 68e771e071730f4d539eb159a7c2c67b  gcc/c/c-parser.cc
  4cd2bf432e96f0de530e0ea4e8b44aa2  gcc/c/c-parser.h
  9179f46b6a06c7d734278f5ce2c55883  gcc/c/c-tree.def
  37ad86287839e5f9849ab677266e1909  gcc/c/c-tree.h
! a77ee56eb91026257ae7bdff107c8492  gcc/c/c-typeck.cc
  cd371895d730dd64e947066b2e4378f8  gcc/c/config-lang.in
  1bd76a24d1322659f048abe2272a6f34  gcc/c/gccspec.cc
  a1cb75cf27d4ffb2f87f4f7dbf93ea45  gcc/c/gimple-parser.cc
*************** bbad65845fcf9cdbc5137d96f92eacab  gcc/cf
*** 3348,3360 ****
  7c2358ab451ca13a153f64b7682d772a  gcc/cfgloopmanip.h
  86fd277253913430380bc5d51e4b395b  gcc/cfgrtl.cc
  132f0eb682ec622dc563cfc697da1fb8  gcc/cfgrtl.h
! 72076c35b30694d0585b5c934f936f70  gcc/cgraph.cc
! bb9ec881bec012134cb6e7900b5a37bb  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
! f260ce27ba36b1e6d964fe6ba1552cb6  gcc/cgraphclones.cc
! 4e2f7703a23f2c2483098ddb6edac479  gcc/cgraphunit.cc
  bd38ef84be4e8351bde3ee96f062c357  gcc/cif-code.def
! c1423036b65d5b923b824b0cf614c3ce  gcc/cobol/ChangeLog
  ee705da1a8f69fdc22716ef43112bfcc  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  d2b0dd7d8414ce5776a1038d19ac8153  gcc/cobol/cbldiag.h
--- 3355,3367 ----
  7c2358ab451ca13a153f64b7682d772a  gcc/cfgloopmanip.h
  86fd277253913430380bc5d51e4b395b  gcc/cfgrtl.cc
  132f0eb682ec622dc563cfc697da1fb8  gcc/cfgrtl.h
! 4da7db85ba94a8e34a74cf7ecfe3a9dd  gcc/cgraph.cc
! 7e4a03cab55e3131e6de1de90ecb7af4  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
! 6e6912b7178d1b640a657bcd1368d3d9  gcc/cgraphclones.cc
! 0aa3ff692dc9fbc1428609accd2b1c77  gcc/cgraphunit.cc
  bd38ef84be4e8351bde3ee96f062c357  gcc/cif-code.def
! 7f9335fcdc47fc3584a55874e8479428  gcc/cobol/ChangeLog
  ee705da1a8f69fdc22716ef43112bfcc  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
  d2b0dd7d8414ce5776a1038d19ac8153  gcc/cobol/cbldiag.h
*************** fc78b78c0e88e56d8a5bc08ac67ee843  gcc/co
*** 3386,3392 ****
  fd52a00ee627385048b4901c68152fd3  gcc/cobol/lang-specs.h
  326453d4d833b38774f1e514a5d906ae  gcc/cobol/lang.opt
  27fcbbb7a8eb5ed2cb9e2afff4e05f7e  gcc/cobol/lang.opt.urls
! b1dec80ff801eb3236e0eb163d64d56e  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
  112b5088144c95f653839c42f9763cb8  gcc/cobol/messages.cc
  a1dc6074f38f10cc7f2f266756cb68af  gcc/cobol/parse.y
--- 3393,3399 ----
  fd52a00ee627385048b4901c68152fd3  gcc/cobol/lang-specs.h
  326453d4d833b38774f1e514a5d906ae  gcc/cobol/lang.opt
  27fcbbb7a8eb5ed2cb9e2afff4e05f7e  gcc/cobol/lang.opt.urls
! 8dc044a3f18b53471a35b59faa9c6499  gcc/cobol/lexio.cc
  5953c820cdc03feb815bfbf28c10730c  gcc/cobol/lexio.h
  112b5088144c95f653839c42f9763cb8  gcc/cobol/messages.cc
  a1dc6074f38f10cc7f2f266756cb68af  gcc/cobol/parse.y
*************** a321b3d018a8db3f4608065a83923990  gcc/co
*** 3403,3409 ****
  56876c7f6bf3230239c8142eb049a183  gcc/cobol/symfind.cc
  ccb41d4e6733c464561a8425ed5e090e  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 1bbe4777241e927d372abc4dea72caa0  gcc/cobol/util.cc
  6cc175185e4fa5a6a21bdc88a66d3956  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
--- 3410,3416 ----
  56876c7f6bf3230239c8142eb049a183  gcc/cobol/symfind.cc
  ccb41d4e6733c464561a8425ed5e090e  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
! 06c49d4c5d6ac24da188be5b1d0a3a66  gcc/cobol/util.cc
  6cc175185e4fa5a6a21bdc88a66d3956  gcc/cobol/util.h
  0f3dba102a04da8ca1e45b9b16741bde  gcc/collect-utils.cc
  6e6685d60444844fecf36350b5956f77  gcc/collect-utils.h
*************** f55010fab8b9aabea82c3ac50d031028  gcc/co
*** 3416,3422 ****
  8db32a2301bfbb3281c1cc38024ad792  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
  1b99b9adbc8aca6636b14206165a9321  gcc/common.opt
! 0521f89a92b0c38d381ac40b8ad56b06  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
--- 3423,3429 ----
  8db32a2301bfbb3281c1cc38024ad792  gcc/combine.cc
  2b9ccf7fc2473ef7e36aee9bcf170843  gcc/common.md
  1b99b9adbc8aca6636b14206165a9321  gcc/common.opt
! 90ce4da214d6c817fab1430f539f24b5  gcc/common.opt.urls
  26050db921f73fd87b026dc950bde97b  gcc/common/common-target-def.h
  dae02ebe59cdaaf21611ad354e939ca5  gcc/common/common-target.def
  4a00b1cedd9d15d93e32920b16b3c292  gcc/common/common-target.h
*************** b5a916bb9dd788754ac9e4ad7174ee74  gcc/co
*** 3477,3483 ****
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 4b6b6a93d1722f3914a651c1538dbfa7  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  756f3bb3af308945746fb7b5683487ea  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
--- 3484,3490 ----
  b209201703dd766f76ff5e16b99191e5  gcc/compare-elim.cc
  618780fbce0ce0cb6f9b86e079ce4e54  gcc/conditions.h
  1b4bc58c657bf910929d06d51bc8fa6c  gcc/config.build
! 2167173c3ec2b6f01d43b11455236d3c  gcc/config.gcc
  053bb14b428d0f073932e88b9a29a8bd  gcc/config.host
  756f3bb3af308945746fb7b5683487ea  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
*************** fc247aa8c40db38e448846ba37245cc0  gcc/co
*** 3490,3496 ****
  482530e7572b40bc2ad01bdec0c1b97e  gcc/config/aarch64/aarch64-builtins.h
  a23e0fac46a5ec3786d2e8cc7ad18058  gcc/config/aarch64/aarch64-c.cc
  7e379e769908e6e6cce538dbc8872dad  gcc/config/aarch64/aarch64-coff.h
! a6c928b38476b702355454e1f0f3795e  gcc/config/aarch64/aarch64-cores.def
  85b8b0267c641b7fb638fffcb3016739  gcc/config/aarch64/aarch64-cost-tables.h
  bef2a61270424fd606c71d78d20ad675  gcc/config/aarch64/aarch64-d.cc
  36405b6300d5ec6ca8faf17212ad1bc9  gcc/config/aarch64/aarch64-d.h
--- 3497,3503 ----
  482530e7572b40bc2ad01bdec0c1b97e  gcc/config/aarch64/aarch64-builtins.h
  a23e0fac46a5ec3786d2e8cc7ad18058  gcc/config/aarch64/aarch64-c.cc
  7e379e769908e6e6cce538dbc8872dad  gcc/config/aarch64/aarch64-coff.h
! 8585ecd2387bb9252d2ac47716ac114a  gcc/config/aarch64/aarch64-cores.def
  85b8b0267c641b7fb638fffcb3016739  gcc/config/aarch64/aarch64-cost-tables.h
  bef2a61270424fd606c71d78d20ad675  gcc/config/aarch64/aarch64-d.cc
  36405b6300d5ec6ca8faf17212ad1bc9  gcc/config/aarch64/aarch64-d.h
*************** b824341b8f6fdb8eb1667425adf63db8  gcc/co
*** 3528,3534 ****
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! b4e4e3e722e7635575b0f0eb25bfbc9e  gcc/config/aarch64/aarch64-simd.md
  fec3caf088f2add6cefcfb20f6dcae7f  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9311f63fb41454e9c423862057e8eb6b  gcc/config/aarch64/aarch64-sve-builtins-base.cc
--- 3535,3541 ----
  7cfa3d0cdd28cdcd73a29c2c8a925548  gcc/config/aarch64/aarch64-simd-builtin-types.def
  8f28d55d0c7fc64387352822e99a37ff  gcc/config/aarch64/aarch64-simd-builtins.def
  33ce4a896b77324d9be6448637daf9ca  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 3c33a08aa401615b51ae9d17e3953501  gcc/config/aarch64/aarch64-simd.md
  fec3caf088f2add6cefcfb20f6dcae7f  gcc/config/aarch64/aarch64-sme.md
  fa6672290fdf9366d9919defcb7e41d7  gcc/config/aarch64/aarch64-speculation.cc
  9311f63fb41454e9c423862057e8eb6b  gcc/config/aarch64/aarch64-sve-builtins-base.cc
*************** ae7ea468046099ae99d717e107a85497  gcc/co
*** 3549,3560 ****
  8a1b76053840bf68b3da053c081081e8  gcc/config/aarch64/aarch64-sve.md
  0e48ec989797cfed5b216617692403e9  gcc/config/aarch64/aarch64-sve2.md
  28e8e7965d9ed466a7d53a53e2ec7397  gcc/config/aarch64/aarch64-sys-regs.def
! 9abdad77523bfa1246a02b4538de6a7d  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  586e3b2fd446baa0a6fb8da7c8cdd660  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! 0f9cdd65290f08b560c6e78cad56ac5a  gcc/config/aarch64/aarch64.cc
! 652375d120c12dc701ac4063e63b82b6  gcc/config/aarch64/aarch64.h
  87bb81f80d1f24768f04e99072c2f669  gcc/config/aarch64/aarch64.md
  0ce505ced96a535a383adbbdb7c31de8  gcc/config/aarch64/aarch64.opt
  f8862c1a17df0d9164d1f07fc8288527  gcc/config/aarch64/aarch64.opt.urls
--- 3556,3567 ----
  8a1b76053840bf68b3da053c081081e8  gcc/config/aarch64/aarch64-sve.md
  0e48ec989797cfed5b216617692403e9  gcc/config/aarch64/aarch64-sve2.md
  28e8e7965d9ed466a7d53a53e2ec7397  gcc/config/aarch64/aarch64-sys-regs.def
! 5b8c2fbcb70280c8d3a7290fd01efb5b  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  586e3b2fd446baa0a6fb8da7c8cdd660  gcc/config/aarch64/aarch64-tuning-flags.def
  a5cfcce7c9dd86a597161f8bde3497bc  gcc/config/aarch64/aarch64-vxworks.h
! ca688089bbbcac7fa0fa85b441117158  gcc/config/aarch64/aarch64.cc
! 9a8f7c54af5be142140e2dc31f99fdab  gcc/config/aarch64/aarch64.h
  87bb81f80d1f24768f04e99072c2f669  gcc/config/aarch64/aarch64.md
  0ce505ced96a535a383adbbdb7c31de8  gcc/config/aarch64/aarch64.opt
  f8862c1a17df0d9164d1f07fc8288527  gcc/config/aarch64/aarch64.opt.urls
*************** b11186ce374784981736035902e9a624  gcc/co
*** 3637,3643 ****
  93511b626141bd2b9f58ecef4371b76e  gcc/config/alpha/alpha.h
  c59dfa45c361244bab962af31c11302c  gcc/config/alpha/alpha.md
  64754b950eaea8dc58c034921706d4ee  gcc/config/alpha/alpha.opt
! 53868c533aa5165b37ba953db2a7fd84  gcc/config/alpha/alpha.opt.urls
  e31dcd453b994d3be486de8f40553e92  gcc/config/alpha/constraints.md
  2ffb559e7028fd095faa20ffb45bf74d  gcc/config/alpha/driver-alpha.cc
  e75cec79a06a11cdccad1b018a16de9f  gcc/config/alpha/elf.h
--- 3644,3650 ----
  93511b626141bd2b9f58ecef4371b76e  gcc/config/alpha/alpha.h
  c59dfa45c361244bab962af31c11302c  gcc/config/alpha/alpha.md
  64754b950eaea8dc58c034921706d4ee  gcc/config/alpha/alpha.opt
! 1715dcb6ef8f2fbcfa4f42bbd579ff7e  gcc/config/alpha/alpha.opt.urls
  e31dcd453b994d3be486de8f40553e92  gcc/config/alpha/constraints.md
  2ffb559e7028fd095faa20ffb45bf74d  gcc/config/alpha/driver-alpha.cc
  e75cec79a06a11cdccad1b018a16de9f  gcc/config/alpha/elf.h
*************** b2e606b88879370871146df60afc66a7  gcc/co
*** 3670,3680 ****
  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
  9bcf29ad085475e8b283c9bf942ee607  gcc/config/arc/arc.md
! 5e49444e76be2e50b3f491529836f101  gcc/config/arc/arc.opt
! 37a4012c7ff454831fdb2049d8fa1e27  gcc/config/arc/arc.opt.urls
  6501826900ef8a0676f77ac8ebf5ccd9  gcc/config/arc/arc600.md
  97435838006ef52f7d83f71b4e1df82f  gcc/config/arc/arc700.md
  69617b2fa1896eca15b1a22469477261  gcc/config/arc/arcEM.md
--- 3677,3687 ----
  e54824657551f1b95cd19d0a50bef8b3  gcc/config/arc/arc-simd.h
  e4a75970451275f37c431cddbd360dce  gcc/config/arc/arc-tables.opt
  6704645d075bf670b5ed5d77f0a88b86  gcc/config/arc/arc-tables.opt.urls
! e12230f2da37ae9f8432659ecbc1b24d  gcc/config/arc/arc.cc
  7571a4c51258ecb3cc685c010427e67b  gcc/config/arc/arc.h
  9bcf29ad085475e8b283c9bf942ee607  gcc/config/arc/arc.md
! adf80723d52f010a243d4980c509910d  gcc/config/arc/arc.opt
! c75ecba1b826195e2515b81214e77f6e  gcc/config/arc/arc.opt.urls
  6501826900ef8a0676f77ac8ebf5ccd9  gcc/config/arc/arc600.md
  97435838006ef52f7d83f71b4e1df82f  gcc/config/arc/arc700.md
  69617b2fa1896eca15b1a22469477261  gcc/config/arc/arcEM.md
*************** f805d118929dd79f6bd4dc75c77c968b  gcc/co
*** 3735,3741 ****
  4b4c240869c2413c542f051e20fc26d1  gcc/config/arm/arm.h
  f2549733b9a96df12519d1c4e55a1532  gcc/config/arm/arm.md
  570f0bb7a45483c8018c61ecee83a093  gcc/config/arm/arm.opt
! 7817615b377801fa8f3295df83d6ffbb  gcc/config/arm/arm.opt.urls
  ccbf8aa9582c7ea8db0ed6a70d1dd691  gcc/config/arm/arm1020e.md
  e8da624def348c2c40197e1b1ad6f812  gcc/config/arm/arm1026ejs.md
  57398c8303832436651bbcc411bcedbe  gcc/config/arm/arm1136jfs.md
--- 3742,3748 ----
  4b4c240869c2413c542f051e20fc26d1  gcc/config/arm/arm.h
  f2549733b9a96df12519d1c4e55a1532  gcc/config/arm/arm.md
  570f0bb7a45483c8018c61ecee83a093  gcc/config/arm/arm.opt
! 57a7ca88f6a922230539f24c37f0c6e9  gcc/config/arm/arm.opt.urls
  ccbf8aa9582c7ea8db0ed6a70d1dd691  gcc/config/arm/arm1020e.md
  e8da624def348c2c40197e1b1ad6f812  gcc/config/arm/arm1026ejs.md
  57398c8303832436651bbcc411bcedbe  gcc/config/arm/arm1136jfs.md
*************** f564f4fdf8d82c60a526de3aeb908531  gcc/co
*** 3892,3898 ****
  88a80edc8d111617067abb5a0b95d469  gcc/config/bpf/bpf.h
  0e05ae54f1a8ca63ad1533179b4b4571  gcc/config/bpf/bpf.md
  d0866c4d53c2fdcec825b3485236d9a1  gcc/config/bpf/bpf.opt
! b98b46049b58693c69587182eace16cf  gcc/config/bpf/bpf.opt.urls
  5642edb6fb9afaa9ee550c880d44906e  gcc/config/bpf/btfext-out.cc
  782a0494eed8e01e100083c5298ab49b  gcc/config/bpf/btfext-out.h
  df3380b38bcdd8189bd3e4a97be7a85a  gcc/config/bpf/constraints.md
--- 3899,3905 ----
  88a80edc8d111617067abb5a0b95d469  gcc/config/bpf/bpf.h
  0e05ae54f1a8ca63ad1533179b4b4571  gcc/config/bpf/bpf.md
  d0866c4d53c2fdcec825b3485236d9a1  gcc/config/bpf/bpf.opt
! 3b53ef1bf245dd250d67afe13e54cbe9  gcc/config/bpf/bpf.opt.urls
  5642edb6fb9afaa9ee550c880d44906e  gcc/config/bpf/btfext-out.cc
  782a0494eed8e01e100083c5298ab49b  gcc/config/bpf/btfext-out.h
  df3380b38bcdd8189bd3e4a97be7a85a  gcc/config/bpf/constraints.md
*************** c93f2ec23358744560217bd1d29f154e  gcc/co
*** 3914,3920 ****
  5b932bcbc60eb3f1ded7fc34f305d850  gcc/config/c6x/c6x.h
  61064f33aa69b68eeb1b39bdfba53cbc  gcc/config/c6x/c6x.md
  e5bf8a6edeb915072216f3de28271bd8  gcc/config/c6x/c6x.opt
! 3cf65708bc62348fa5f5a227ea1b912c  gcc/config/c6x/c6x.opt.urls
  5015692e7e4a606c7b9adab2ec1488a6  gcc/config/c6x/c6x_intrinsics.h
  0fbbbd475eac8967dd49b5a0bd4f461b  gcc/config/c6x/constraints.md
  251b553bb51b5e694d05d57fcad6bf7b  gcc/config/c6x/elf-common.h
--- 3921,3927 ----
  5b932bcbc60eb3f1ded7fc34f305d850  gcc/config/c6x/c6x.h
  61064f33aa69b68eeb1b39bdfba53cbc  gcc/config/c6x/c6x.md
  e5bf8a6edeb915072216f3de28271bd8  gcc/config/c6x/c6x.opt
! f5237ddeb37eb82477fd05719c3a2327  gcc/config/c6x/c6x.opt.urls
  5015692e7e4a606c7b9adab2ec1488a6  gcc/config/c6x/c6x_intrinsics.h
  0fbbbd475eac8967dd49b5a0bd4f461b  gcc/config/c6x/constraints.md
  251b553bb51b5e694d05d57fcad6bf7b  gcc/config/c6x/elf-common.h
*************** c8b88ac6c665fd095189745df437cf09  gcc/co
*** 3936,3942 ****
  cb0861d1eaf38531a9d6eb27022881f8  gcc/config/cris/cris.h
  51de895e261d869e46e1c2e2179f2294  gcc/config/cris/cris.md
  ae167ef2f4d3ee6437271a292979b5d1  gcc/config/cris/cris.opt
! c21f67672d076b394ff178f226397e7b  gcc/config/cris/cris.opt.urls
  3ca310d45dcfeb840e4527e07bf9925c  gcc/config/cris/elf.opt
  e748b88b41c294446f5d1313565d003f  gcc/config/cris/elf.opt.urls
  082fd55e9b3c978281d42a6e1551ee1d  gcc/config/cris/predicates.md
--- 3943,3949 ----
  cb0861d1eaf38531a9d6eb27022881f8  gcc/config/cris/cris.h
  51de895e261d869e46e1c2e2179f2294  gcc/config/cris/cris.md
  ae167ef2f4d3ee6437271a292979b5d1  gcc/config/cris/cris.opt
! fb2eaaac6e4d875e93964058c5cd516f  gcc/config/cris/cris.opt.urls
  3ca310d45dcfeb840e4527e07bf9925c  gcc/config/cris/elf.opt
  e748b88b41c294446f5d1313565d003f  gcc/config/cris/elf.opt.urls
  082fd55e9b3c978281d42a6e1551ee1d  gcc/config/cris/predicates.md
*************** e6669d57ebd0f18245040b982a741f22  gcc/co
*** 3952,3958 ****
  1066c7817dd8d4a7ecc2bbe3b35529f7  gcc/config/csky/csky.h
  ea8649fb89342796285f199c5e07568d  gcc/config/csky/csky.md
  23b0297f4918f983a81b94097281273f  gcc/config/csky/csky.opt
! d1eb73480dbcd5cfa3e9d466e4641797  gcc/config/csky/csky.opt.urls
  f58d69a4d5e84fcd694b3f4dcab37990  gcc/config/csky/csky_cores.def
  4ee9f8628dc592e71b88fd7f5338e4f5  gcc/config/csky/csky_genopt.sh
  5a0f275fcb06654aeed7c892fdccbeed  gcc/config/csky/csky_insn_dsp.md
--- 3959,3965 ----
  1066c7817dd8d4a7ecc2bbe3b35529f7  gcc/config/csky/csky.h
  ea8649fb89342796285f199c5e07568d  gcc/config/csky/csky.md
  23b0297f4918f983a81b94097281273f  gcc/config/csky/csky.opt
! e3af289ab0834a3c74cb46071a28c3bd  gcc/config/csky/csky.opt.urls
  f58d69a4d5e84fcd694b3f4dcab37990  gcc/config/csky/csky_cores.def
  4ee9f8628dc592e71b88fd7f5338e4f5  gcc/config/csky/csky_genopt.sh
  5a0f275fcb06654aeed7c892fdccbeed  gcc/config/csky/csky_insn_dsp.md
*************** b395ed990d9e6d7c2698fdd602685d3f  gcc/co
*** 4068,4081 ****
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  23106fa0b82354400a9c82b82a9af33a  gcc/config/gcn/gcn-tree.cc
  b8f453f14c74890d576f2a901fc2d5a7  gcc/config/gcn/gcn-valu.md
! 8ab3c9d46917c025e6a6db75e0ff71e0  gcc/config/gcn/gcn.cc
  686d66a24f66638a6a8dc76ddae3acb6  gcc/config/gcn/gcn.h
  f736fc2e3a86be8105f7e8f77e5460c1  gcc/config/gcn/gcn.md
  94eb08c14726967f367e612f565aa6c1  gcc/config/gcn/gcn.opt
  8316cbfe8905418aa5882486602d17ca  gcc/config/gcn/gcn.opt.urls
  6d70e3b6694d21aaf0fc6f1764858c4e  gcc/config/gcn/gen-gcn-device-macros.awk
  0f69ca445a7459fc69ede078e447dbac  gcc/config/gcn/gen-opt-tables.awk
! 0661e1f90046a7e8a235de673d113d0f  gcc/config/gcn/mkoffload.cc
  d6b10bd17eef3ffa35e47afa3e7b730d  gcc/config/gcn/offload.h
  37e26d22dbc6d4a9b4ffa33405bf1bd8  gcc/config/gcn/predicates.md
  3af3e12c81a2c9fdbcea0a9d7411c7bf  gcc/config/gcn/t-gcn-hsa
--- 4075,4088 ----
  ca8c1935ac88d760dc3a5b7e97558f28  gcc/config/gcn/gcn-tables.opt.urls
  23106fa0b82354400a9c82b82a9af33a  gcc/config/gcn/gcn-tree.cc
  b8f453f14c74890d576f2a901fc2d5a7  gcc/config/gcn/gcn-valu.md
! b57815162b136b02ba0927e2e1fbc3e5  gcc/config/gcn/gcn.cc
  686d66a24f66638a6a8dc76ddae3acb6  gcc/config/gcn/gcn.h
  f736fc2e3a86be8105f7e8f77e5460c1  gcc/config/gcn/gcn.md
  94eb08c14726967f367e612f565aa6c1  gcc/config/gcn/gcn.opt
  8316cbfe8905418aa5882486602d17ca  gcc/config/gcn/gcn.opt.urls
  6d70e3b6694d21aaf0fc6f1764858c4e  gcc/config/gcn/gen-gcn-device-macros.awk
  0f69ca445a7459fc69ede078e447dbac  gcc/config/gcn/gen-opt-tables.awk
! a189f0f156fd1dc416e6b6ea83abe7e2  gcc/config/gcn/mkoffload.cc
  d6b10bd17eef3ffa35e47afa3e7b730d  gcc/config/gcn/offload.h
  37e26d22dbc6d4a9b4ffa33405bf1bd8  gcc/config/gcn/predicates.md
  3af3e12c81a2c9fdbcea0a9d7411c7bf  gcc/config/gcn/t-gcn-hsa
*************** e1a1dc5e56d3c33f2c8b2ae080bf06c1  gcc/co
*** 4100,4107 ****
  19f1eed89faecae047ebe6cbfa6526a5  gcc/config/h8300/h8300.cc
  63e759894d1e6e471aa2654b3c93efe8  gcc/config/h8300/h8300.h
  c98efa4d243ed51c1105702ae383adea  gcc/config/h8300/h8300.md
! 9a792c25cddc1e8f38af22104362cb69  gcc/config/h8300/h8300.opt
! 7950bf0c1ee6b8ccc34ec33806c7b7d9  gcc/config/h8300/h8300.opt.urls
  9c526eb23649968b6b084788c80cb23f  gcc/config/h8300/jumpcall.md
  a6811f2f47d8c10c82edbfe6b0e5d6c1  gcc/config/h8300/linux.h
  58f7f56ceec868a6a25ba54adaf00b61  gcc/config/h8300/logical.md
--- 4107,4114 ----
  19f1eed89faecae047ebe6cbfa6526a5  gcc/config/h8300/h8300.cc
  63e759894d1e6e471aa2654b3c93efe8  gcc/config/h8300/h8300.h
  c98efa4d243ed51c1105702ae383adea  gcc/config/h8300/h8300.md
! 7f83af528763ab2c391dd6ec8ad01785  gcc/config/h8300/h8300.opt
! a5103b89aad288d854b885f74c3fea87  gcc/config/h8300/h8300.opt.urls
  9c526eb23649968b6b084788c80cb23f  gcc/config/h8300/jumpcall.md
  a6811f2f47d8c10c82edbfe6b0e5d6c1  gcc/config/h8300/linux.h
  58f7f56ceec868a6a25ba54adaf00b61  gcc/config/h8300/logical.md
*************** d3fb594d11281112ff8d8f304a000c4e  gcc/co
*** 4255,4261 ****
  10a38f2a86740708977ea6a86051e67e  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! e4dae6500fba0b1eefe9eebbd33f9fd2  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  bc18f421fa068cbf9bd4a5c001fe0818  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
--- 4262,4268 ----
  10a38f2a86740708977ea6a86051e67e  gcc/config/i386/i386-c.cc
  54909bb70e074c14dcf4499a5baedc54  gcc/config/i386/i386-d.cc
  172dcd61afc5800b61ebb688838d9adc  gcc/config/i386/i386-d.h
! 67e69fe15b762ace63b044cbbb29326f  gcc/config/i386/i386-expand.cc
  c9c3969c00808c9b6809fbeab3e4a1d2  gcc/config/i386/i386-expand.h
  bc18f421fa068cbf9bd4a5c001fe0818  gcc/config/i386/i386-features.cc
  1ee34fa5f2ae92fd7d48419d8fc529f8  gcc/config/i386/i386-features.h
*************** fb6d632066a5383c0ec89e867a9cc9c6  gcc/co
*** 4271,4281 ****
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 4208220abbbc437ef40c38954476ade3  gcc/config/i386/i386.cc
! e01d46d728877f9a3a104a8d3c4dccd6  gcc/config/i386/i386.h
! d3f2797a9a7b3e1ba523e7bcfb45a839  gcc/config/i386/i386.md
  4d6e66705102c7128048fa8c5bbed2a8  gcc/config/i386/i386.opt
! 909e9c6704126cda2ec3bf9fa9681c39  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
  12088706f0584b21b2bf165c3cde88e8  gcc/config/i386/ia32intrin.h
  116503ecbb821bb13293049d85a641f9  gcc/config/i386/iamcu.h
--- 4278,4288 ----
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  b19c27e8a900f9eeb7d73e2bb4b8d313  gcc/config/i386/i386-rust.cc
  24065393854cd1e08e3285bd707210fe  gcc/config/i386/i386-rust.h
! 65aeafb970568f7d8b006b3bd3131410  gcc/config/i386/i386.cc
! 8074be081d221085c70445d5cac8920f  gcc/config/i386/i386.h
! 61a944c2764dd8002b6cbaf89ebca8ea  gcc/config/i386/i386.md
  4d6e66705102c7128048fa8c5bbed2a8  gcc/config/i386/i386.opt
! a7ee58e110164c031bb7e72e772d66cc  gcc/config/i386/i386.opt.urls
  f22876926ff4a2cb67b105ac266c72ea  gcc/config/i386/i386elf.h
  12088706f0584b21b2bf165c3cde88e8  gcc/config/i386/ia32intrin.h
  116503ecbb821bb13293049d85a641f9  gcc/config/i386/iamcu.h
*************** fc41e4ebf77dd1f54ddeec4e60428d5e  gcc/co
*** 4318,4324 ****
  1d9e8c2f64fa31f36bfe9ac83a296943  gcc/config/i386/pmmintrin.h
  62337355ef8c4334a0cc9c1db0cfc0da  gcc/config/i386/popcntintrin.h
  d17b84bc85c341e7f386b3b24b231070  gcc/config/i386/ppro.md
! 16568e5cab50c7465efd2e0e345f1f39  gcc/config/i386/predicates.md
  e10e34eef814ce6c5e09777d378d36d3  gcc/config/i386/prfchiintrin.h
  eed7a3601ce61f497dcfc5655e5da7a6  gcc/config/i386/prfchwintrin.h
  bc11b09d2de8ba6b9ec2392f1cebdbd9  gcc/config/i386/raointintrin.h
--- 4325,4331 ----
  1d9e8c2f64fa31f36bfe9ac83a296943  gcc/config/i386/pmmintrin.h
  62337355ef8c4334a0cc9c1db0cfc0da  gcc/config/i386/popcntintrin.h
  d17b84bc85c341e7f386b3b24b231070  gcc/config/i386/ppro.md
! 0c7e640a7bbdf4149852257d4b84c45a  gcc/config/i386/predicates.md
  e10e34eef814ce6c5e09777d378d36d3  gcc/config/i386/prfchiintrin.h
  eed7a3601ce61f497dcfc5655e5da7a6  gcc/config/i386/prfchwintrin.h
  bc11b09d2de8ba6b9ec2392f1cebdbd9  gcc/config/i386/raointintrin.h
*************** de4e89bc042c6bc7eb093bda5d33a266  gcc/co
*** 4336,4342 ****
  380f2e50c7d803059b0e7617da00460f  gcc/config/i386/sm4intrin.h
  a24296639492577352dd1309b136bc9a  gcc/config/i386/smmintrin.h
  ffbc43ec2b7f2d37d4a6f69f70d5a345  gcc/config/i386/sol2.h
! 0166687e3611fbb0ea31702af14906aa  gcc/config/i386/sse.md
  7c6ff828c11c2892168a2e450559dcb6  gcc/config/i386/ssemath.h
  7ada9f54207701e1d29fd03ea990e163  gcc/config/i386/stringop.def
  9f75a2e9a9bf20db0bef264cabe77a29  gcc/config/i386/subst.md
--- 4343,4349 ----
  380f2e50c7d803059b0e7617da00460f  gcc/config/i386/sm4intrin.h
  a24296639492577352dd1309b136bc9a  gcc/config/i386/smmintrin.h
  ffbc43ec2b7f2d37d4a6f69f70d5a345  gcc/config/i386/sol2.h
! e91c3a948778490fe94251fc2bac0c80  gcc/config/i386/sse.md
  7c6ff828c11c2892168a2e450559dcb6  gcc/config/i386/ssemath.h
  7ada9f54207701e1d29fd03ea990e163  gcc/config/i386/stringop.def
  9f75a2e9a9bf20db0bef264cabe77a29  gcc/config/i386/subst.md
*************** f3c2c84ac99eb84969bb9952ee3bcb7f  gcc/co
*** 4418,4425 ****
  e1ac0fde2b8353b52eedeb152d799e11  gcc/config/ia64/ia64.cc
  cd2d7209d26cd7cd5a37a4a0d74960c8  gcc/config/ia64/ia64.h
  e7a3136b64591d1141a08e1e05a8b378  gcc/config/ia64/ia64.md
! 867fd3016d695a0a0b9e3a80dffccbff  gcc/config/ia64/ia64.opt
! 13e7fef6bb0ef79f939acd8117c67464  gcc/config/ia64/ia64.opt.urls
  dcc77d7023d20b64688bf213c2d327b5  gcc/config/ia64/ia64intrin.h
  4b86fa74a7636ffdb9787a8643220eec  gcc/config/ia64/ilp32.opt
  c123eb5a542afae24ac8defb18f961f8  gcc/config/ia64/ilp32.opt.urls
--- 4425,4432 ----
  e1ac0fde2b8353b52eedeb152d799e11  gcc/config/ia64/ia64.cc
  cd2d7209d26cd7cd5a37a4a0d74960c8  gcc/config/ia64/ia64.h
  e7a3136b64591d1141a08e1e05a8b378  gcc/config/ia64/ia64.md
! 12382dd2089e505f9c24b971934ab4e3  gcc/config/ia64/ia64.opt
! 72d859c8b1f5067135ead38ee225ffa4  gcc/config/ia64/ia64.opt.urls
  dcc77d7023d20b64688bf213c2d327b5  gcc/config/ia64/ia64intrin.h
  4b86fa74a7636ffdb9787a8643220eec  gcc/config/ia64/ilp32.opt
  c123eb5a542afae24ac8defb18f961f8  gcc/config/ia64/ilp32.opt.urls
*************** d592e4325cac65e0f5f226e8b606de08  gcc/co
*** 4466,4530 ****
  b61c7daa89fcf657c991f7e1ea4f98cc  gcc/config/lm32/lm32.h
  f657f3aa901b2401d8310aedc1086a14  gcc/config/lm32/lm32.md
  742ab74e9d6a559bcff5bf185413799c  gcc/config/lm32/lm32.opt
! 27e82783778bb7f706fa85a3c551f6a2  gcc/config/lm32/lm32.opt.urls
  4827e7b60ed769433c062a453decf3f2  gcc/config/lm32/predicates.md
  fdc0b83b9dafbea2480c0a1207f45509  gcc/config/lm32/rtems.h
  a9d1d80c40cc6eb8e9a32d54f82dae43  gcc/config/lm32/t-lm32
  660559cdac2b08e91486a9db7b4a2872  gcc/config/lm32/t-rtems
  da188d4272efc7354911d8ff108c2f4c  gcc/config/lm32/uclinux-elf.h
! 3b929641fdb7456994d22fbfacfeec6f  gcc/config/loongarch/constraints.md
  c34979082425d78409c769a25389d804  gcc/config/loongarch/elf.h
  8b1c9c004fdbc7f460a64bda0b70f4d6  gcc/config/loongarch/generic.md
  8a136345368965009ca46fa36dae9d99  gcc/config/loongarch/genopts/gen-evolution.awk
  a49b22e81cecc35cd2b78db104bf0fa4  gcc/config/loongarch/genopts/genstr.sh
  4dc5332a8742afccaccecc9435f3a90a  gcc/config/loongarch/genopts/isa-evolution.in
! f53279d5b7e936d4ca79a38f0268b4cd  gcc/config/loongarch/genopts/loongarch-strings
! e3b42a852449963bd9c243b0491ada0c  gcc/config/loongarch/genopts/loongarch.opt.in
! dfcc88ca848e0510d6a048cef812a984  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
! 2da06c6340275c1c0670ab82a7252f77  gcc/config/loongarch/larchintrin.h
  60dbb878b32a35c38c9313b5683b0c65  gcc/config/loongarch/lasx.md
  c10d06d896b117c45d2d741d1550a990  gcc/config/loongarch/lasxintrin.h
! 6fd190fde499f379bf158f471cde9693  gcc/config/loongarch/linux.h
! 32b1458773a3d0478a1fb7d089ff8e9b  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/config/loongarch/loongarch-d.h
  833584d561eee00538a06353674c2923  gcc/config/loongarch/loongarch-def-array.h
! 71edb8b08cf46204405e19941eef94ae  gcc/config/loongarch/loongarch-def.cc
! 5155922cf688d9073a6497f7def3c933  gcc/config/loongarch/loongarch-def.h
  4a2c4b8277bf78c873773752258854de  gcc/config/loongarch/loongarch-driver.cc
! 9034667d3a99adb6488a0cf70a9c572c  gcc/config/loongarch/loongarch-driver.h
  62c942a420b869823c67a24405a6f6ac  gcc/config/loongarch/loongarch-evol-attr.def
  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
! 05b587ad3985a07ac3c23bf92ecf6155  gcc/config/loongarch/loongarch-opts.h
  716a764a5f7b9c1a819efdbf983669c8  gcc/config/loongarch/loongarch-protos.h
! c72c4d71f42573934ede3a3fe4e132b1  gcc/config/loongarch/loongarch-str.h
  6ffb969d44f9d52731fdbc6bca845054  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! ecc8a5ec6582d4ee46eaf2cb873bcf4a  gcc/config/loongarch/loongarch.cc
! f495bb3a160f92418aeb52557dfbf694  gcc/config/loongarch/loongarch.h
! 5126429b6e9d4370dd24a682457094b6  gcc/config/loongarch/loongarch.md
! 8f1046a4d0739e3dafbb7e4db3055397  gcc/config/loongarch/loongarch.opt
! 9ea07b6ddfb83ba35035a3c88270125b  gcc/config/loongarch/loongarch.opt.urls
  5f72f375f2dbe12cbb7bb092ff21f010  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
! f6a07697aaf392cb5b7cdee31af56a7f  gcc/config/loongarch/predicates.md
  f212354ea1e442023fdb7018f7660ea0  gcc/config/loongarch/simd.md
! fded5805e6a27c8c4b3a9b1967da6d31  gcc/config/loongarch/sync.md
! e2aad9f2fd1ee2a4668948f381da109c  gcc/config/loongarch/t-linux
  d729927d6d167b8a824eae7e6db4f32b  gcc/config/loongarch/t-loongarch
  b84e97ccf92009e96031fc2edb92dde5  gcc/config/loongarch/t-multilib
  eb87423a8a7ddf65f83a151936c56485  gcc/config/lynx.h
  40aa671ada85710196f7ba9db2c5f544  gcc/config/lynx.opt
! b49f81320f8c86b222541a2041837390  gcc/config/lynx.opt.urls
  e14112b397b9641f52d406d7ec503aa3  gcc/config/m32c/addsub.md
  8ba61c1c134881136c16bea62cbb379e  gcc/config/m32c/bitops.md
  9c6470bc62cc60f34ce6733ffaad9293  gcc/config/m32c/blkmov.md
--- 4473,4537 ----
  b61c7daa89fcf657c991f7e1ea4f98cc  gcc/config/lm32/lm32.h
  f657f3aa901b2401d8310aedc1086a14  gcc/config/lm32/lm32.md
  742ab74e9d6a559bcff5bf185413799c  gcc/config/lm32/lm32.opt
! f1fc3b5f3c603baf093067313132ba00  gcc/config/lm32/lm32.opt.urls
  4827e7b60ed769433c062a453decf3f2  gcc/config/lm32/predicates.md
  fdc0b83b9dafbea2480c0a1207f45509  gcc/config/lm32/rtems.h
  a9d1d80c40cc6eb8e9a32d54f82dae43  gcc/config/lm32/t-lm32
  660559cdac2b08e91486a9db7b4a2872  gcc/config/lm32/t-rtems
  da188d4272efc7354911d8ff108c2f4c  gcc/config/lm32/uclinux-elf.h
! 0497a18f3cd4ae37fa92e68b8e325d6d  gcc/config/loongarch/constraints.md
  c34979082425d78409c769a25389d804  gcc/config/loongarch/elf.h
  8b1c9c004fdbc7f460a64bda0b70f4d6  gcc/config/loongarch/generic.md
  8a136345368965009ca46fa36dae9d99  gcc/config/loongarch/genopts/gen-evolution.awk
  a49b22e81cecc35cd2b78db104bf0fa4  gcc/config/loongarch/genopts/genstr.sh
  4dc5332a8742afccaccecc9435f3a90a  gcc/config/loongarch/genopts/isa-evolution.in
! 2e67981bbe264dee9759cda477ee3089  gcc/config/loongarch/genopts/loongarch-strings
! 47e9f81dbbd552505da99e003a6bc803  gcc/config/loongarch/genopts/loongarch.opt.in
! 918d1b33baea8dfc1166f884210f4371  gcc/config/loongarch/gnu-user.h
  0214c19eeeeb90d46d358333d5381814  gcc/config/loongarch/la464.md
! bf947398272ccf3300cfc24bd052eaff  gcc/config/loongarch/larchintrin.h
  60dbb878b32a35c38c9313b5683b0c65  gcc/config/loongarch/lasx.md
  c10d06d896b117c45d2d741d1550a990  gcc/config/loongarch/lasxintrin.h
! d722e2816249d53d0be2b68e007a50ee  gcc/config/loongarch/linux.h
! 8d32f02666750177c60ce9944ac42801  gcc/config/loongarch/loongarch-builtins.cc
! eb1b6e448fe9f721427e39b6a908c069  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/config/loongarch/loongarch-d.h
  833584d561eee00538a06353674c2923  gcc/config/loongarch/loongarch-def-array.h
! 9e97b8cb28ff9794d5cf712f23476716  gcc/config/loongarch/loongarch-def.cc
! 1cafb779b22b04e8b313ede75d1d5974  gcc/config/loongarch/loongarch-def.h
  4a2c4b8277bf78c873773752258854de  gcc/config/loongarch/loongarch-driver.cc
! 514b8daa093f4b34a39ea280b666c938  gcc/config/loongarch/loongarch-driver.h
  62c942a420b869823c67a24405a6f6ac  gcc/config/loongarch/loongarch-evol-attr.def
  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
! f350b1497a99f173af07b463c07aff41  gcc/config/loongarch/loongarch-opts.cc
! b4a163b80e648410a29c10e7ef4e213c  gcc/config/loongarch/loongarch-opts.h
  716a764a5f7b9c1a819efdbf983669c8  gcc/config/loongarch/loongarch-protos.h
! 0edad035f69c87e6ed2437d79eef49e1  gcc/config/loongarch/loongarch-str.h
  6ffb969d44f9d52731fdbc6bca845054  gcc/config/loongarch/loongarch-target-attr.cc
  f539c2da7e8d7a3ef7c741bceee19eed  gcc/config/loongarch/loongarch-tune.h
! 4ed3544507f2e1fcb793a631f22592c1  gcc/config/loongarch/loongarch.cc
! 9bff1f004518dc1a193488cec1e35e1a  gcc/config/loongarch/loongarch.h
! 836cec7217591e9b915216755b1957bc  gcc/config/loongarch/loongarch.md
! 984ead0ce7e850d1d8ebc6582a3024fd  gcc/config/loongarch/loongarch.opt
! 387011bb9dde5e25493f3602b2fd17bb  gcc/config/loongarch/loongarch.opt.urls
  5f72f375f2dbe12cbb7bb092ff21f010  gcc/config/loongarch/lsx.md
  429434e5f1e9f9afc839f4409102d5ea  gcc/config/loongarch/lsxintrin.h
  5a232a75001e3db7ee3e491afdfae629  gcc/config/loongarch/musl.h
! a980d0a84d108ceb0724e6dd9adfa282  gcc/config/loongarch/predicates.md
  f212354ea1e442023fdb7018f7660ea0  gcc/config/loongarch/simd.md
! 57d74221cdd0b158c9465642808210a5  gcc/config/loongarch/sync.md
! d08892bd83d09f30d96b48a58107e180  gcc/config/loongarch/t-linux
  d729927d6d167b8a824eae7e6db4f32b  gcc/config/loongarch/t-loongarch
  b84e97ccf92009e96031fc2edb92dde5  gcc/config/loongarch/t-multilib
  eb87423a8a7ddf65f83a151936c56485  gcc/config/lynx.h
  40aa671ada85710196f7ba9db2c5f544  gcc/config/lynx.opt
! 457b49151ec25bf9f9bea04d9376947c  gcc/config/lynx.opt.urls
  e14112b397b9641f52d406d7ec503aa3  gcc/config/m32c/addsub.md
  8ba61c1c134881136c16bea62cbb379e  gcc/config/m32c/bitops.md
  9c6470bc62cc60f34ce6733ffaad9293  gcc/config/m32c/blkmov.md
*************** a4f73e01dbf31a10c3ea1b723c70d9cb  gcc/co
*** 4555,4561 ****
  804754da591a3688e89a687f1dd6067a  gcc/config/m32r/m32r.h
  a1993567fe235f33026bd6ed92971b1f  gcc/config/m32r/m32r.md
  f15b71db5e403cb0edd0836e7fd15b15  gcc/config/m32r/m32r.opt
! 1b619e144313c0fbf5062c63561ad744  gcc/config/m32r/m32r.opt.urls
  fbc84e3917cc27d064793bd1d5d9c5e9  gcc/config/m32r/predicates.md
  2f039ecc12320280a168e4c8e6b524c6  gcc/config/m32r/t-m32r
  060a7e5fadc7cd88cb911d0bd27daeb5  gcc/config/m68k/cf.md
--- 4562,4568 ----
  804754da591a3688e89a687f1dd6067a  gcc/config/m32r/m32r.h
  a1993567fe235f33026bd6ed92971b1f  gcc/config/m32r/m32r.md
  f15b71db5e403cb0edd0836e7fd15b15  gcc/config/m32r/m32r.opt
! 829c32842d5111248d1723464a35cc7d  gcc/config/m32r/m32r.opt.urls
  fbc84e3917cc27d064793bd1d5d9c5e9  gcc/config/m32r/predicates.md
  2f039ecc12320280a168e4c8e6b524c6  gcc/config/m32r/t-m32r
  060a7e5fadc7cd88cb911d0bd27daeb5  gcc/config/m68k/cf.md
*************** e237c8634d1f5c3ea463cbfea4dc55e6  gcc/co
*** 4577,4584 ****
  5104f436bd7cfa14669224efef2624e3  gcc/config/m68k/m68k.cc
  fb041be1d836d497907055646a167985  gcc/config/m68k/m68k.h
  9bdc513a6ebcc57b29f6d823d4de1384  gcc/config/m68k/m68k.md
! 1a76a5cfb488f53d1c15e12fd9d5cc7b  gcc/config/m68k/m68k.opt
! 5f9ff7175e6c27487d31600132263254  gcc/config/m68k/m68k.opt.urls
  cda670c892463bcaa4f341cfef04ad73  gcc/config/m68k/m68kelf.h
  106584614366afa0b09fd5c99aafff6c  gcc/config/m68k/m68kemb.h
  c0472199959f16fcb58702880954da6e  gcc/config/m68k/math-68881.h
--- 4584,4591 ----
  5104f436bd7cfa14669224efef2624e3  gcc/config/m68k/m68k.cc
  fb041be1d836d497907055646a167985  gcc/config/m68k/m68k.h
  9bdc513a6ebcc57b29f6d823d4de1384  gcc/config/m68k/m68k.md
! 4021c2bf3e14e4e996c0065151448bbe  gcc/config/m68k/m68k.opt
! 15b38cffd486c4658b821caaabc64826  gcc/config/m68k/m68k.opt.urls
  cda670c892463bcaa4f341cfef04ad73  gcc/config/m68k/m68kelf.h
  106584614366afa0b09fd5c99aafff6c  gcc/config/m68k/m68kemb.h
  c0472199959f16fcb58702880954da6e  gcc/config/m68k/math-68881.h
*************** b197d1a2cd7d9e6fa37f6e5670fcc7fa  gcc/co
*** 4607,4613 ****
  cfa45e2c04603eb898475f6372afa718  gcc/config/mcore/mcore.h
  65bd0d0e447aad09484d144ce3dc20f1  gcc/config/mcore/mcore.md
  a6757d8ca2c871b28c76dd89eb4a3b93  gcc/config/mcore/mcore.opt
! cb26f6c0709fd9533aec72a07a36bf8b  gcc/config/mcore/mcore.opt.urls
  d2676839c4d7a7bcd706a386c029aea2  gcc/config/mcore/predicates.md
  8e427b88391a8cbadd500d5b5c18dd88  gcc/config/mcore/t-mcore
  899d399d572cb0f5b6983bf29e5f2dc1  gcc/config/microblaze/constraints.md
--- 4614,4620 ----
  cfa45e2c04603eb898475f6372afa718  gcc/config/mcore/mcore.h
  65bd0d0e447aad09484d144ce3dc20f1  gcc/config/mcore/mcore.md
  a6757d8ca2c871b28c76dd89eb4a3b93  gcc/config/mcore/mcore.opt
! ce5d8a592e82cf70b222e6f2a77b56a0  gcc/config/mcore/mcore.opt.urls
  d2676839c4d7a7bcd706a386c029aea2  gcc/config/mcore/predicates.md
  8e427b88391a8cbadd500d5b5c18dd88  gcc/config/mcore/t-mcore
  899d399d572cb0f5b6983bf29e5f2dc1  gcc/config/microblaze/constraints.md
*************** cd06662d679aac52aa61b8507723384a  gcc/co
*** 4618,4625 ****
  d895357dc905665b1a8b1d17ec40a25b  gcc/config/microblaze/microblaze.cc
  0a4fb603eb9a1c6e31bb8fa7e38b16d1  gcc/config/microblaze/microblaze.h
  3af23e0040365b8a82498e8fd7e83bf5  gcc/config/microblaze/microblaze.md
! 3da1e85fbc11c0a5b746cb77b96a06f3  gcc/config/microblaze/microblaze.opt
! b69b0047f0a9e98cfd6c1090ae4794f1  gcc/config/microblaze/microblaze.opt.urls
  0014185f2b662af11e97611027548662  gcc/config/microblaze/predicates.md
  6440a5281eac59ad82a11734d4e82b80  gcc/config/microblaze/rtems.h
  1750a4538fa32f377e18fb05173b0d21  gcc/config/microblaze/sync.md
--- 4625,4632 ----
  d895357dc905665b1a8b1d17ec40a25b  gcc/config/microblaze/microblaze.cc
  0a4fb603eb9a1c6e31bb8fa7e38b16d1  gcc/config/microblaze/microblaze.h
  3af23e0040365b8a82498e8fd7e83bf5  gcc/config/microblaze/microblaze.md
! 40c1116309a181dcd4160edf596f94dc  gcc/config/microblaze/microblaze.opt
! b068232199fc8154ef950e53bf98f53d  gcc/config/microblaze/microblaze.opt.urls
  0014185f2b662af11e97611027548662  gcc/config/microblaze/predicates.md
  6440a5281eac59ad82a11734d4e82b80  gcc/config/microblaze/rtems.h
  1750a4538fa32f377e18fb05173b0d21  gcc/config/microblaze/sync.md
*************** d697f9dcab04ba2434d7a21bdd7fad59  gcc/co
*** 4632,4638 ****
  86740ad1c195e245467e5a71426dceb0  gcc/config/mingw/mingw-stdint.h
  fd57a92693a8dcf9e4ddd91ee77800d5  gcc/config/mingw/mingw.opt
  19d5796358fa93b7d6fe22a02604a407  gcc/config/mingw/mingw.opt.urls
! edc4c311c5ce51d78ae963c2bdf66fbf  gcc/config/mingw/mingw32.h
  1481c2fe532a4627555acec909c44e93  gcc/config/mingw/msformat-c.cc
  804488f591e9812eba4596b9f7120153  gcc/config/mingw/t-cygming
  4b984eaba49cfc32096447ecc8a8d30a  gcc/config/mingw/winnt-cxx.cc
--- 4639,4645 ----
  86740ad1c195e245467e5a71426dceb0  gcc/config/mingw/mingw-stdint.h
  fd57a92693a8dcf9e4ddd91ee77800d5  gcc/config/mingw/mingw.opt
  19d5796358fa93b7d6fe22a02604a407  gcc/config/mingw/mingw.opt.urls
! c4139c5c6390adcc89f5bbf86b982cd8  gcc/config/mingw/mingw32.h
  1481c2fe532a4627555acec909c44e93  gcc/config/mingw/msformat-c.cc
  804488f591e9812eba4596b9f7120153  gcc/config/mingw/t-cygming
  4b984eaba49cfc32096447ecc8a8d30a  gcc/config/mingw/winnt-cxx.cc
*************** edc4c311c5ce51d78ae963c2bdf66fbf  gcc/co
*** 4640,4646 ****
  5ac3e65a2b4e8a0e77f19d4d0931ec03  gcc/config/mingw/winnt-dll.cc
  ce9dde5e44ad144027da2e35c7e97ef8  gcc/config/mingw/winnt-dll.h
  e4b2f8fb1d66b9d417e6a49457b25003  gcc/config/mingw/winnt-stubs.cc
! e05ed023d11004879eebfc978b950e34  gcc/config/mingw/winnt.cc
  e555db1aa2ef2a8826e5103e4fbb3781  gcc/config/mingw/winnt.h
  2dad819a1af61bda883b08c7310f4ced  gcc/config/mips/10000.md
  58b10461c7d9049333ab922d8faba17c  gcc/config/mips/20kc.md
--- 4647,4653 ----
  5ac3e65a2b4e8a0e77f19d4d0931ec03  gcc/config/mingw/winnt-dll.cc
  ce9dde5e44ad144027da2e35c7e97ef8  gcc/config/mingw/winnt-dll.h
  e4b2f8fb1d66b9d417e6a49457b25003  gcc/config/mingw/winnt-stubs.cc
! 815b61b25f1a9d3999da1a72e86976ee  gcc/config/mingw/winnt.cc
  e555db1aa2ef2a8826e5103e4fbb3781  gcc/config/mingw/winnt.h
  2dad819a1af61bda883b08c7310f4ced  gcc/config/mips/10000.md
  58b10461c7d9049333ab922d8faba17c  gcc/config/mips/20kc.md
*************** beaf066ed06870bef361adf40e122f78  gcc/co
*** 4698,4705 ****
  a3ec5ee1e1ecf26e9f8d09b9109434f1  gcc/config/mips/mips.cc
  18924b6fb24b33543914d89b7e1bd121  gcc/config/mips/mips.h
  db7e5c050230838281daa965138ae4f8  gcc/config/mips/mips.md
! b0ee02ac417ab7f573eb8399f8c88228  gcc/config/mips/mips.opt
! 826310e4ec0ec1a6e321bd5ddfc26434  gcc/config/mips/mips.opt.urls
  d89c4346d4e58dfefe64a850c4bfdbdb  gcc/config/mips/msa.h
  99697dba04763fc661a97d98e8e8e580  gcc/config/mips/mti-elf.h
  f86af6dede84a266816f8b53c29a3836  gcc/config/mips/mti-linux.h
--- 4705,4712 ----
  a3ec5ee1e1ecf26e9f8d09b9109434f1  gcc/config/mips/mips.cc
  18924b6fb24b33543914d89b7e1bd121  gcc/config/mips/mips.h
  db7e5c050230838281daa965138ae4f8  gcc/config/mips/mips.md
! 3219781e67770e3ff7571b2e99612886  gcc/config/mips/mips.opt
! 7742c648c8bee18fe57e3e21bd7c846b  gcc/config/mips/mips.opt.urls
  d89c4346d4e58dfefe64a850c4bfdbdb  gcc/config/mips/msa.h
  99697dba04763fc661a97d98e8e8e580  gcc/config/mips/mti-elf.h
  f86af6dede84a266816f8b53c29a3836  gcc/config/mips/mti-linux.h
*************** b3125010c873ef668d056b0187427f4e  gcc/co
*** 4761,4767 ****
  7240065d0c10b89e9a94d9efab271eab  gcc/config/mn10300/mn10300.h
  6524f4ee70cebcff2f3a2144c9d45cbe  gcc/config/mn10300/mn10300.md
  a91c18940fd2674f0c8e90ffa4d8528f  gcc/config/mn10300/mn10300.opt
! 84e37d8a4a927311a81a258b6fbb6d2d  gcc/config/mn10300/mn10300.opt.urls
  b153be562053b3d1dd6eb457e2ecf5b7  gcc/config/mn10300/predicates.md
  cc43880b3f2f29c0dfadbaa9b5d0f969  gcc/config/mn10300/t-mn10300
  1f155e4a2d8cbc4536c5ff58db331103  gcc/config/moxie/constraints.md
--- 4768,4774 ----
  7240065d0c10b89e9a94d9efab271eab  gcc/config/mn10300/mn10300.h
  6524f4ee70cebcff2f3a2144c9d45cbe  gcc/config/mn10300/mn10300.md
  a91c18940fd2674f0c8e90ffa4d8528f  gcc/config/mn10300/mn10300.opt
! 5f31963d6d20607a9f0f5452bd6219a0  gcc/config/mn10300/mn10300.opt.urls
  b153be562053b3d1dd6eb457e2ecf5b7  gcc/config/mn10300/predicates.md
  cc43880b3f2f29c0dfadbaa9b5d0f969  gcc/config/mn10300/t-mn10300
  1f155e4a2d8cbc4536c5ff58db331103  gcc/config/moxie/constraints.md
*************** cc43880b3f2f29c0dfadbaa9b5d0f969  gcc/co
*** 4770,4776 ****
  6cc9364505c5d13e6d101152c9cb0489  gcc/config/moxie/moxie.h
  2af3fc323efdb27b1bff10dd7de47e58  gcc/config/moxie/moxie.md
  d389859cd88d11e5bf9e6f63fcb35190  gcc/config/moxie/moxie.opt
! 3760ae8613d750b00a08d88bdd2f1ce0  gcc/config/moxie/moxie.opt.urls
  9ed606fe2b2c5764450b2e5c909098dc  gcc/config/moxie/moxiebox.h
  c6d98e733cdd57519b8cb86126d974ae  gcc/config/moxie/predicates.md
  f343cded05eff3191fc0b0a064b57fbf  gcc/config/moxie/rtems.h
--- 4777,4783 ----
  6cc9364505c5d13e6d101152c9cb0489  gcc/config/moxie/moxie.h
  2af3fc323efdb27b1bff10dd7de47e58  gcc/config/moxie/moxie.md
  d389859cd88d11e5bf9e6f63fcb35190  gcc/config/moxie/moxie.opt
! 72fc0128d5d652351e0cfbb4a78c6f93  gcc/config/moxie/moxie.opt.urls
  9ed606fe2b2c5764450b2e5c909098dc  gcc/config/moxie/moxiebox.h
  c6d98e733cdd57519b8cb86126d974ae  gcc/config/moxie/predicates.md
  f343cded05eff3191fc0b0a064b57fbf  gcc/config/moxie/rtems.h
*************** ad27574ff75327ca72c4ad7a382a2667  gcc/co
*** 4788,4795 ****
  632deba02b8aac054f33886ad0bbd057  gcc/config/msp430/msp430.cc
  58df59f286b927594bda75703423fd95  gcc/config/msp430/msp430.h
  d384e284dbef9e0b133a5deb8b8cd873  gcc/config/msp430/msp430.md
! a20875cf634836537faeacfb5a4f59d1  gcc/config/msp430/msp430.opt
! ffac48d9c1c0b7c08d6358c02254559d  gcc/config/msp430/msp430.opt.urls
  6cd1de7323fd314b9afbe0fc7b1cecc0  gcc/config/msp430/predicates.md
  d0a58eedfc8a59966fa3b22a02d37a42  gcc/config/msp430/t-msp430
  71561d2e29e0c6922f94af0cbe7a8c42  gcc/config/nds32/constants.md
--- 4795,4802 ----
  632deba02b8aac054f33886ad0bbd057  gcc/config/msp430/msp430.cc
  58df59f286b927594bda75703423fd95  gcc/config/msp430/msp430.h
  d384e284dbef9e0b133a5deb8b8cd873  gcc/config/msp430/msp430.md
! a03bbfba7e7041abe6a04b49d7e51b1a  gcc/config/msp430/msp430.opt
! 11f459d643f1369e6fdb3dc78d733505  gcc/config/msp430/msp430.opt.urls
  6cd1de7323fd314b9afbe0fc7b1cecc0  gcc/config/msp430/predicates.md
  d0a58eedfc8a59966fa3b22a02d37a42  gcc/config/msp430/t-msp430
  71561d2e29e0c6922f94af0cbe7a8c42  gcc/config/nds32/constants.md
*************** aba3255af1dadd043769a0ebb8ec003d  gcc/co
*** 4827,4838 ****
  efc99629f182694529236f6749d9a0f0  gcc/config/nds32/nds32-predicates.cc
  b310ad23b2862edc66a88cd2711489da  gcc/config/nds32/nds32-protos.h
  3a2abdcd5071ca63054f7b1bbee5c773  gcc/config/nds32/nds32-relax-opt.cc
! 4c004fee32c0d5edb7b1f5a1cb795808  gcc/config/nds32/nds32-utils.cc
  e19024ff067af518d91272b32e94d78e  gcc/config/nds32/nds32.cc
  93a06b5b0829d477e5f17d83bc83514f  gcc/config/nds32/nds32.h
  2dfffb21ec902a3180caacc13ce5c237  gcc/config/nds32/nds32.md
  91dad34fd2fd0c49ccf03925281af78a  gcc/config/nds32/nds32.opt
! 0a4b950a741ef3f9364b2178341bf6ae  gcc/config/nds32/nds32.opt.urls
  c09acceb380f58ddb795ee3e973945d7  gcc/config/nds32/nds32_init.inc
  c3eeea19f863cca6ead645ee6fe0d2fd  gcc/config/nds32/nds32_intrinsic.h
  48f2329ecdae4069558a16fd72832246  gcc/config/nds32/nds32_isr.h
--- 4834,4845 ----
  efc99629f182694529236f6749d9a0f0  gcc/config/nds32/nds32-predicates.cc
  b310ad23b2862edc66a88cd2711489da  gcc/config/nds32/nds32-protos.h
  3a2abdcd5071ca63054f7b1bbee5c773  gcc/config/nds32/nds32-relax-opt.cc
! 8685831a1485e6facaaa0c49ecf46076  gcc/config/nds32/nds32-utils.cc
  e19024ff067af518d91272b32e94d78e  gcc/config/nds32/nds32.cc
  93a06b5b0829d477e5f17d83bc83514f  gcc/config/nds32/nds32.h
  2dfffb21ec902a3180caacc13ce5c237  gcc/config/nds32/nds32.md
  91dad34fd2fd0c49ccf03925281af78a  gcc/config/nds32/nds32.opt
! b8bd0fec844385cadc7734346b116eb3  gcc/config/nds32/nds32.opt.urls
  c09acceb380f58ddb795ee3e973945d7  gcc/config/nds32/nds32_init.inc
  c3eeea19f863cca6ead645ee6fe0d2fd  gcc/config/nds32/nds32_intrinsic.h
  48f2329ecdae4069558a16fd72832246  gcc/config/nds32/nds32_isr.h
*************** e05bdb2e10bf411f0bfc7bbedf713577  gcc/co
*** 4886,4900 ****
  f2528020fcdc72755829904c1e2bd9cd  gcc/config/openbsd.opt.urls
  0b04499fc5518af696bc98c6731190c6  gcc/config/or1k/constraints.md
  92488a7523fc566652ebbb82b1aa8fad  gcc/config/or1k/elf.h
! 1286c65be3e7b36faf01fe2483b4e379  gcc/config/or1k/elf.opt
! 8e462ede2b5e4ca4e9b77d96feeea5ff  gcc/config/or1k/elf.opt.urls
  8975a99baca4214035d5805cff0cbf4c  gcc/config/or1k/linux.h
  8749d9b447ea37bc29800c0bf265c6e2  gcc/config/or1k/or1k-opts.h
  97baa752f8b46ebaabe66d92886e19a2  gcc/config/or1k/or1k-protos.h
  0a8ae0410b122f35e295f4cb8e352f01  gcc/config/or1k/or1k.cc
  fcbfb3ff3577f95c15cf20ae1c95b269  gcc/config/or1k/or1k.h
  8e6970aea95e29050f5ced5e315ed756  gcc/config/or1k/or1k.md
! 1ef170db4cf4943c3da6cf4ca8d5f674  gcc/config/or1k/or1k.opt
  d32c4ec7b5de81e93a91bbcadbbb3527  gcc/config/or1k/or1k.opt.urls
  ac536539c6fc239c3ee1df15c3374ccb  gcc/config/or1k/predicates.md
  db8691a94f44f22cd2b192588632bb9b  gcc/config/or1k/rtems.h
--- 4893,4907 ----
  f2528020fcdc72755829904c1e2bd9cd  gcc/config/openbsd.opt.urls
  0b04499fc5518af696bc98c6731190c6  gcc/config/or1k/constraints.md
  92488a7523fc566652ebbb82b1aa8fad  gcc/config/or1k/elf.h
! 27df39acda94c56a831882e048c6d10d  gcc/config/or1k/elf.opt
! 3c86f63999931694400c4180fcd88435  gcc/config/or1k/elf.opt.urls
  8975a99baca4214035d5805cff0cbf4c  gcc/config/or1k/linux.h
  8749d9b447ea37bc29800c0bf265c6e2  gcc/config/or1k/or1k-opts.h
  97baa752f8b46ebaabe66d92886e19a2  gcc/config/or1k/or1k-protos.h
  0a8ae0410b122f35e295f4cb8e352f01  gcc/config/or1k/or1k.cc
  fcbfb3ff3577f95c15cf20ae1c95b269  gcc/config/or1k/or1k.h
  8e6970aea95e29050f5ced5e315ed756  gcc/config/or1k/or1k.md
! 34f35a8f02d321941218a3a205234c52  gcc/config/or1k/or1k.opt
  d32c4ec7b5de81e93a91bbcadbbb3527  gcc/config/or1k/or1k.opt.urls
  ac536539c6fc239c3ee1df15c3374ccb  gcc/config/or1k/predicates.md
  db8691a94f44f22cd2b192588632bb9b  gcc/config/or1k/rtems.h
*************** e5d0569b6f22fcc3b7c04ffc10f948a8  gcc/co
*** 4907,4913 ****
  9b9d3426728f4e028f0188a35e2f2ce3  gcc/config/pa/pa-d.h
  24d035b216da675faa3b938f2f5ba840  gcc/config/pa/pa-hpux.h
  83160c1e500c5a73ed6a65d83ba1f32d  gcc/config/pa/pa-hpux.opt
! c72bd414f990a9fee6e01780673cdd56  gcc/config/pa/pa-hpux.opt.urls
  f6d8fb7b076da94980d5e21094cad327  gcc/config/pa/pa-hpux1010.h
  07e67fd79da709b915b39dd4b12a7848  gcc/config/pa/pa-hpux1010.opt
  e13114ae33cfe970d30b76ba8cd4f419  gcc/config/pa/pa-hpux1010.opt.urls
--- 4914,4920 ----
  9b9d3426728f4e028f0188a35e2f2ce3  gcc/config/pa/pa-d.h
  24d035b216da675faa3b938f2f5ba840  gcc/config/pa/pa-hpux.h
  83160c1e500c5a73ed6a65d83ba1f32d  gcc/config/pa/pa-hpux.opt
! a614debec8b70ca675ba894e0b4fd46a  gcc/config/pa/pa-hpux.opt.urls
  f6d8fb7b076da94980d5e21094cad327  gcc/config/pa/pa-hpux1010.h
  07e67fd79da709b915b39dd4b12a7848  gcc/config/pa/pa-hpux1010.opt
  e13114ae33cfe970d30b76ba8cd4f419  gcc/config/pa/pa-hpux1010.opt.urls
*************** cd1b48d66fffc5f91a26b160085fbd1e  gcc/co
*** 4927,4934 ****
  f77e24ab80f2e0ea56cc2a6c5639db88  gcc/config/pa/pa.cc
  61b4f0474933832cc8b86195296e8314  gcc/config/pa/pa.h
  15cef22d15b01bef0a336da862149b1d  gcc/config/pa/pa.md
! 120551d8deffa429a17fa0d4bf19764f  gcc/config/pa/pa.opt
! 4eaaeb2fa303dbdbc9f72b2ca97638ba  gcc/config/pa/pa.opt.urls
  b7f09c119e3da135e762b15fc5f8f98e  gcc/config/pa/pa32-linux.h
  9d886aae4bb3e78b28e25d0bdcbaee9c  gcc/config/pa/pa32-netbsd.h
  37899b8cab6e8ab2e3f1ccf39e0fdff8  gcc/config/pa/pa32-openbsd.h
--- 4934,4941 ----
  f77e24ab80f2e0ea56cc2a6c5639db88  gcc/config/pa/pa.cc
  61b4f0474933832cc8b86195296e8314  gcc/config/pa/pa.h
  15cef22d15b01bef0a336da862149b1d  gcc/config/pa/pa.md
! 6afa3a256e8a5fe315ed5ecea13305c7  gcc/config/pa/pa.opt
! 051ba40c6ad77aa43300a9282939c6ae  gcc/config/pa/pa.opt.urls
  b7f09c119e3da135e762b15fc5f8f98e  gcc/config/pa/pa32-linux.h
  9d886aae4bb3e78b28e25d0bdcbaee9c  gcc/config/pa/pa32-netbsd.h
  37899b8cab6e8ab2e3f1ccf39e0fdff8  gcc/config/pa/pa32-openbsd.h
*************** fb7e64ef669053479f8452f28b4c6355  gcc/co
*** 4949,4956 ****
  ce3f16fec4b9d9f3014c1fe7ccb4a913  gcc/config/pdp11/pdp11.cc
  cbdba9df9a494f89762b40dec85f176c  gcc/config/pdp11/pdp11.h
  21ef45d60a4c7553c109f6a2783b6290  gcc/config/pdp11/pdp11.md
! 8e8ec2d4af4ae870334fc228ff22a585  gcc/config/pdp11/pdp11.opt
! bd841bba9b527331882dbc380172491d  gcc/config/pdp11/pdp11.opt.urls
  5cc69e4d7970811930bececce702fa70  gcc/config/pdp11/predicates.md
  740f78e7670b7c23c5f094ef2b392edd  gcc/config/pdp11/t-pdp11
  b8805afcdac54accbc2845d9afcc06f3  gcc/config/phoenix.h
--- 4956,4963 ----
  ce3f16fec4b9d9f3014c1fe7ccb4a913  gcc/config/pdp11/pdp11.cc
  cbdba9df9a494f89762b40dec85f176c  gcc/config/pdp11/pdp11.h
  21ef45d60a4c7553c109f6a2783b6290  gcc/config/pdp11/pdp11.md
! acddf13919ab22e31e212b1ecbaa794f  gcc/config/pdp11/pdp11.opt
! 82b6a20d3cd861793c18c08b727e8f41  gcc/config/pdp11/pdp11.opt.urls
  5cc69e4d7970811930bececce702fa70  gcc/config/pdp11/predicates.md
  740f78e7670b7c23c5f094ef2b392edd  gcc/config/pdp11/t-pdp11
  b8805afcdac54accbc2845d9afcc06f3  gcc/config/phoenix.h
*************** bd3c6b6399d766dc28af2c04799cd0e0  gcc/co
*** 4967,4973 ****
  aa885301804f609c6898553a254e500c  gcc/config/pru/pru.h
  7419f50dd8e1b76ecf74cbd4b325e3b3  gcc/config/pru/pru.md
  0763d0945dbf14ae8f27f2768c3bab97  gcc/config/pru/pru.opt
! 2c62017af35136c78e62ba082c27ada7  gcc/config/pru/pru.opt.urls
  45c7ab42a352a571bdea3ba740be8f5d  gcc/config/pru/t-multilib
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  b4c769739d05e5eaa1450327488112ca  gcc/config/riscv/andes-23-series.md
--- 4974,4980 ----
  aa885301804f609c6898553a254e500c  gcc/config/pru/pru.h
  7419f50dd8e1b76ecf74cbd4b325e3b3  gcc/config/pru/pru.md
  0763d0945dbf14ae8f27f2768c3bab97  gcc/config/pru/pru.opt
! a75e468f9ce2e3115c4b7f638be7a433  gcc/config/pru/pru.opt.urls
  45c7ab42a352a571bdea3ba740be8f5d  gcc/config/pru/t-multilib
  540013c309ceb3efb2b16d728b1fc726  gcc/config/pru/t-pru
  b4c769739d05e5eaa1450327488112ca  gcc/config/riscv/andes-23-series.md
*************** ccf120397e978f8cd4ed98cbe2c0d4f5  gcc/co
*** 4982,4988 ****
  7444da2915b734a807ab2b707fe0fe35  gcc/config/riscv/andes_vector.h
  3d4ef2c5571dbf0e4bb86d09917f7c07  gcc/config/riscv/arch-canonicalize
  14a2555a6dd29f700e6b7024febcbe3f  gcc/config/riscv/autovec-opt.md
! b66cc3e74ba11e4863ccf7aced426362  gcc/config/riscv/autovec.md
  d4306030a8879ce9aa1e6cc18aff56eb  gcc/config/riscv/bitmanip.md
  3d4917c0a2efee97aaca242060652e02  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
--- 4989,4995 ----
  7444da2915b734a807ab2b707fe0fe35  gcc/config/riscv/andes_vector.h
  3d4ef2c5571dbf0e4bb86d09917f7c07  gcc/config/riscv/arch-canonicalize
  14a2555a6dd29f700e6b7024febcbe3f  gcc/config/riscv/autovec-opt.md
! 6f1495bb44d6d9bb4878dc8a3250fa82  gcc/config/riscv/autovec.md
  d4306030a8879ce9aa1e6cc18aff56eb  gcc/config/riscv/bitmanip.md
  3d4917c0a2efee97aaca242060652e02  gcc/config/riscv/constraints.md
  4e0968dc35562b151fd162778542718f  gcc/config/riscv/corev.def
*************** bffa0caedd7144aff55c80a16431d1a1  gcc/co
*** 5007,5017 ****
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
  674baa66306b2b08e1b80995759f5381  gcc/config/riscv/pipeline-checker
! 026c9ee53fb5994354d987b75fd97415  gcc/config/riscv/predicates.md
  47128c226cbf453b9816615bc43b879b  gcc/config/riscv/riscv-avlprop.cc
  179d92544e7a65f0ccf206e876026744  gcc/config/riscv/riscv-bclr-lowest-set-bit.cc
  e54a2d33c6fb9bb0381889dad6fa71d8  gcc/config/riscv/riscv-builtins.cc
! 019bb963b8ddc896e82e3ba7622236d2  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
  b13609eaffc2081ddd2cda1290a2b2c4  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
--- 5014,5024 ----
  80e8994ee9e6abf380e68aca6443d157  gcc/config/riscv/peephole.md
  a3d3fa9142d4e2ed34ead146941c574a  gcc/config/riscv/pic.md
  674baa66306b2b08e1b80995759f5381  gcc/config/riscv/pipeline-checker
! 5a2de8a3ef45be990e2a676b93069985  gcc/config/riscv/predicates.md
  47128c226cbf453b9816615bc43b879b  gcc/config/riscv/riscv-avlprop.cc
  179d92544e7a65f0ccf206e876026744  gcc/config/riscv/riscv-bclr-lowest-set-bit.cc
  e54a2d33c6fb9bb0381889dad6fa71d8  gcc/config/riscv/riscv-builtins.cc
! 44c502ebc66c1ee0f150a119b170a63c  gcc/config/riscv/riscv-c.cc
  3b7012a7d47b9aaf163e890d3e29013e  gcc/config/riscv/riscv-cmo.def
  b13609eaffc2081ddd2cda1290a2b2c4  gcc/config/riscv/riscv-cores.def
  173996678a5bf2b1b40e30fe260109b4  gcc/config/riscv/riscv-d.cc
*************** fb8278eead727b22c3863e30a89fbc0c  gcc/co
*** 5033,5047 ****
  e1bb69cfc54bb16775e01e36a6718b15  gcc/config/riscv/riscv-opts.h
  4b5f5f162a40b5ae9dc3359a58f10c33  gcc/config/riscv/riscv-passes.def
  6a4ba8b1df2cb6b09b291d1fdeded67c  gcc/config/riscv/riscv-profiles.def
! b4faa6d0fca97ed3f8d64546be10dc90  gcc/config/riscv/riscv-protos.h
  446f0f39c6f980e246ea56f1233e9271  gcc/config/riscv/riscv-scalar-crypto.def
  003d5626ce3adcac7ca55401c7dec2bc  gcc/config/riscv/riscv-selftests.cc
  da4e034d23a8f2754b1dfce0122f286e  gcc/config/riscv/riscv-shorten-memrefs.cc
  62b31689063eeeca8f0e7ae25da92d0a  gcc/config/riscv/riscv-sr.cc
  38e9863d2a2af1a5773ed060b713ccc1  gcc/config/riscv/riscv-string.cc
  3b52301e3425e6de33a2436af4de6bd8  gcc/config/riscv/riscv-subset.h
! 728dc8257d59a540cd2c84220df2d596  gcc/config/riscv/riscv-target-attr.cc
! 15bec414e0f1e889dafa43e0af0be32a  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  472dc58a1c70b0345dcced1152fb8244  gcc/config/riscv/riscv-vector-builtins-bases.cc
--- 5040,5054 ----
  e1bb69cfc54bb16775e01e36a6718b15  gcc/config/riscv/riscv-opts.h
  4b5f5f162a40b5ae9dc3359a58f10c33  gcc/config/riscv/riscv-passes.def
  6a4ba8b1df2cb6b09b291d1fdeded67c  gcc/config/riscv/riscv-profiles.def
! 0e489a6ff0b54dcfdf781f1343fdc50e  gcc/config/riscv/riscv-protos.h
  446f0f39c6f980e246ea56f1233e9271  gcc/config/riscv/riscv-scalar-crypto.def
  003d5626ce3adcac7ca55401c7dec2bc  gcc/config/riscv/riscv-selftests.cc
  da4e034d23a8f2754b1dfce0122f286e  gcc/config/riscv/riscv-shorten-memrefs.cc
  62b31689063eeeca8f0e7ae25da92d0a  gcc/config/riscv/riscv-sr.cc
  38e9863d2a2af1a5773ed060b713ccc1  gcc/config/riscv/riscv-string.cc
  3b52301e3425e6de33a2436af4de6bd8  gcc/config/riscv/riscv-subset.h
! cf55107f936e04e71b010f2f0948d4c8  gcc/config/riscv/riscv-target-attr.cc
! 38e8f0fc6acfe20295d7783aec360f3b  gcc/config/riscv/riscv-v.cc
  0d419e9df116fed7ce6e0ae15131417e  gcc/config/riscv/riscv-v.h
  c5f3161dedd668dfb126ffb191cfb236  gcc/config/riscv/riscv-vect-permconst.cc
  472dc58a1c70b0345dcced1152fb8244  gcc/config/riscv/riscv-vector-builtins-bases.cc
*************** a8fdfe0455fce7cebbb65a7e70831d8a  gcc/co
*** 5059,5069 ****
  724b5012debbc56e08795eb0d757a8ed  gcc/config/riscv/riscv-vsetvl.cc
  d120ed6eb2847b636271b3a1ef82ecbf  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! 3ceb4425cbef9f9e4c1dbd2fafa3ab95  gcc/config/riscv/riscv.cc
  7a65f8b385600c8a895a04444c2334d3  gcc/config/riscv/riscv.h
  df70b8958bb33644092fa7f52e8dcb7a  gcc/config/riscv/riscv.md
! 011fb3b98a9d049a17db61272a06e9a0  gcc/config/riscv/riscv.opt
! d1d34490d8b53ec20d70ed9e2e56e3ab  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
  a8044652cefd826404f261518f9e2321  gcc/config/riscv/riscv_crypto.h
  d8773b3aa8a7da49d6ba814f852a218b  gcc/config/riscv/riscv_th_vector.h
--- 5066,5076 ----
  724b5012debbc56e08795eb0d757a8ed  gcc/config/riscv/riscv-vsetvl.cc
  d120ed6eb2847b636271b3a1ef82ecbf  gcc/config/riscv/riscv-vsetvl.def
  7082a18dbfc574d47bf71f4d50dd30f9  gcc/config/riscv/riscv-zicfilp.cc
! b7792b16226d9d8a187df3952748a40b  gcc/config/riscv/riscv.cc
  7a65f8b385600c8a895a04444c2334d3  gcc/config/riscv/riscv.h
  df70b8958bb33644092fa7f52e8dcb7a  gcc/config/riscv/riscv.md
! 8f19f0367d8843752ea81feb762a76b3  gcc/config/riscv/riscv.opt
! 023bd342e35c6bece5159af574ead52c  gcc/config/riscv/riscv.opt.urls
  374e3c204946cff8c4be2bcad6641830  gcc/config/riscv/riscv_bitmanip.h
  a8044652cefd826404f261518f9e2321  gcc/config/riscv/riscv_crypto.h
  d8773b3aa8a7da49d6ba814f852a218b  gcc/config/riscv/riscv_th_vector.h
*************** bcf728ad2379630774fd5bb529d4ee86  gcc/co
*** 5098,5104 ****
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
  cf9f38e85752fd2a3ceafd8b1521322a  gcc/config/riscv/vector-iterators.md
! 3355b711886bf83a6e6370aa54943e95  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
--- 5105,5111 ----
  b5e46305db1116cc1758b504ea37fe74  gcc/config/riscv/vector-bfloat16.md
  88f7597398d0c8b8b87baba5fd207996  gcc/config/riscv/vector-crypto.md
  cf9f38e85752fd2a3ceafd8b1521322a  gcc/config/riscv/vector-iterators.md
! 3a2e592c6ae4996adc76f7618a28e079  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  0f64aaa114ab62a1a46f7ac422d6a129  gcc/config/riscv/zc.md
  36cba2444ae9c8f107fee34492bd0ed6  gcc/config/riscv/zicond.md
*************** ed631983af95aaa8f426a1beee450df8  gcc/co
*** 5203,5209 ****
  bcefe099935dfbd7bc9b6d446d83949a  gcc/config/rs6000/ppc-asm.h
  6c12e8a06d9542326b7fab89e699855a  gcc/config/rs6000/ppc-auxv.h
  4d674f911a0915ff1822c3e5b5c7a42e  gcc/config/rs6000/ppu_intrinsics.h
! e8f307427b9691501f617f9921a29126  gcc/config/rs6000/predicates.md
  a1a56cb74b09656a0d65c8351472c0dc  gcc/config/rs6000/rbtree.cc
  1bf6742f3643571d537df3e6e0603170  gcc/config/rs6000/rbtree.h
  373df9f8823774dde0d5fecc9a0bc457  gcc/config/rs6000/rs6000-builtin.cc
--- 5210,5216 ----
  bcefe099935dfbd7bc9b6d446d83949a  gcc/config/rs6000/ppc-asm.h
  6c12e8a06d9542326b7fab89e699855a  gcc/config/rs6000/ppc-auxv.h
  4d674f911a0915ff1822c3e5b5c7a42e  gcc/config/rs6000/ppu_intrinsics.h
! a63ab922bb97bda94d48022dad5dadf1  gcc/config/rs6000/predicates.md
  a1a56cb74b09656a0d65c8351472c0dc  gcc/config/rs6000/rbtree.cc
  1bf6742f3643571d537df3e6e0603170  gcc/config/rs6000/rbtree.h
  373df9f8823774dde0d5fecc9a0bc457  gcc/config/rs6000/rs6000-builtin.cc
*************** ce8de9a27f36b759a69194616c02eb38  gcc/co
*** 5231,5237 ****
  1d91827dae3ab7a332473805ac3cf40c  gcc/config/rs6000/rs6000.h
  436f411ef141a9e9faf742a0e0e4d4c6  gcc/config/rs6000/rs6000.md
  77c1c38e6705e421b8838bf19f938cef  gcc/config/rs6000/rs6000.opt
! fadb34666f17911a4b98316e48e56e0a  gcc/config/rs6000/rs6000.opt.urls
  73a5440dddc7f25e7daa3b1de22b321f  gcc/config/rs6000/rs64.md
  8cca48ec38f793e9f3dea3529cf59be4  gcc/config/rs6000/rtems.h
  90088a0a328214c98a68273bd2dc3eed  gcc/config/rs6000/secureplt.h
--- 5238,5244 ----
  1d91827dae3ab7a332473805ac3cf40c  gcc/config/rs6000/rs6000.h
  436f411ef141a9e9faf742a0e0e4d4c6  gcc/config/rs6000/rs6000.md
  77c1c38e6705e421b8838bf19f938cef  gcc/config/rs6000/rs6000.opt
! d46cc498f0b6a0445ba8e61e7054ed20  gcc/config/rs6000/rs6000.opt.urls
  73a5440dddc7f25e7daa3b1de22b321f  gcc/config/rs6000/rs64.md
  8cca48ec38f793e9f3dea3529cf59be4  gcc/config/rs6000/rtems.h
  90088a0a328214c98a68273bd2dc3eed  gcc/config/rs6000/secureplt.h
*************** a78086db7c3178a044593d53d3ae91c8  gcc/co
*** 5241,5247 ****
  7b451b5476bf2c5f0f7cbcf6ed654e97  gcc/config/rs6000/sync.md
  a6c44a7efa5a28da1ad08586215b51da  gcc/config/rs6000/sysv4.h
  8627cb0aa19d982ddf843b52c0ab4d9a  gcc/config/rs6000/sysv4.opt
! 665ad5fb698deb6ee59b34e0b9f64c6d  gcc/config/rs6000/sysv4.opt.urls
  b90965614b170912031ee318cc0a53b3  gcc/config/rs6000/sysv4le.h
  893295252d49f9f4e7859af96e9ac056  gcc/config/rs6000/t-aix52
  4483c8d66ea24dec056de78571536e20  gcc/config/rs6000/t-aix64
--- 5248,5254 ----
  7b451b5476bf2c5f0f7cbcf6ed654e97  gcc/config/rs6000/sync.md
  a6c44a7efa5a28da1ad08586215b51da  gcc/config/rs6000/sysv4.h
  8627cb0aa19d982ddf843b52c0ab4d9a  gcc/config/rs6000/sysv4.opt
! 7f522328581e3628376aac8c8887013c  gcc/config/rs6000/sysv4.opt.urls
  b90965614b170912031ee318cc0a53b3  gcc/config/rs6000/sysv4le.h
  893295252d49f9f4e7859af96e9ac056  gcc/config/rs6000/t-aix52
  4483c8d66ea24dec056de78571536e20  gcc/config/rs6000/t-aix64
*************** f11925c88524d2fd457bf77944da1302  gcc/co
*** 5269,5275 ****
  821e68180ee418f628021555b9ac4865  gcc/config/rs6000/tmmintrin.h
  38e93eff3a2b573d1d802ebad267b109  gcc/config/rs6000/vec_types.h
  a5506e6d02e00eca6773ad6611fafec6  gcc/config/rs6000/vector.md
! 92d84780bc97fec043576239dfbc4de4  gcc/config/rs6000/vsx.md
  4ccc6d6037ee6161ebb1ae1732c88c4b  gcc/config/rs6000/vxworks.h
  cd6fbfee7df45bb751e81a607bf1cb7d  gcc/config/rs6000/vxworksae.h
  ec49257e720fea1d0b85265da90de158  gcc/config/rs6000/vxworksmils.h
--- 5276,5282 ----
  821e68180ee418f628021555b9ac4865  gcc/config/rs6000/tmmintrin.h
  38e93eff3a2b573d1d802ebad267b109  gcc/config/rs6000/vec_types.h
  a5506e6d02e00eca6773ad6611fafec6  gcc/config/rs6000/vector.md
! 71dc015045110d01f69025e17fb012d6  gcc/config/rs6000/vsx.md
  4ccc6d6037ee6161ebb1ae1732c88c4b  gcc/config/rs6000/vxworks.h
  cd6fbfee7df45bb751e81a607bf1cb7d  gcc/config/rs6000/vxworksae.h
  ec49257e720fea1d0b85265da90de158  gcc/config/rs6000/vxworksmils.h
*************** c24d103090b6903467518bb52d69c4f8  gcc/co
*** 5315,5336 ****
  4145cae576e515bd090d62e91e83bd65  gcc/config/s390/htmintrin.h
  900cc527e3075aef8f3339d26e632f2c  gcc/config/s390/htmxlintrin.h
  b81d5e116305b17609e882fdbf14dedb  gcc/config/s390/linux.h
! 3c05d04569db91752fffcb62d9973505  gcc/config/s390/predicates.md
  7db97edf2bb5d34b0718e4cf1b133721  gcc/config/s390/s390-builtin-types.def
  aba1a5da14104eb3051142cfe7938bf1  gcc/config/s390/s390-builtins.def
  51c357999bf01f0e7a267dc84ce5efe2  gcc/config/s390/s390-builtins.h
! fe35fbeb73ee590ad5588ef343ec0966  gcc/config/s390/s390-c.cc
  b0ca9ea2b644ed03999193b5d9198f22  gcc/config/s390/s390-d.cc
  d7112093049d4abbc421609d032b7358  gcc/config/s390/s390-d.h
  107e065c4a74bb968d44f38ee30d0698  gcc/config/s390/s390-modes.def
  724b9c8075459b5c23142704c2ba1865  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
  b6426b7457d4617875547be76bb5112d  gcc/config/s390/s390-protos.h
! 48082e6485b533c2a0ca6b28cc817f49  gcc/config/s390/s390.cc
  fedf0be07777b765b244a82ecf4fe421  gcc/config/s390/s390.h
  def1eabaa50c31445465c2f80ad807fe  gcc/config/s390/s390.md
  2b0ec6eba7d16cee640146cd31989c99  gcc/config/s390/s390.opt
! e52dc2e9b76e0b308513c7bff2c79e1c  gcc/config/s390/s390.opt.urls
  b9ecea5f97b2e15b60d770050a07f0d1  gcc/config/s390/s390intrin.h
  ae2250a16e4a3a631a5667f95a21e560  gcc/config/s390/s390x.h
  917857ccaf1e3588432fb2544d87838b  gcc/config/s390/subst.md
--- 5322,5343 ----
  4145cae576e515bd090d62e91e83bd65  gcc/config/s390/htmintrin.h
  900cc527e3075aef8f3339d26e632f2c  gcc/config/s390/htmxlintrin.h
  b81d5e116305b17609e882fdbf14dedb  gcc/config/s390/linux.h
! d65c9f75cbbd037136281af4a56f5e41  gcc/config/s390/predicates.md
  7db97edf2bb5d34b0718e4cf1b133721  gcc/config/s390/s390-builtin-types.def
  aba1a5da14104eb3051142cfe7938bf1  gcc/config/s390/s390-builtins.def
  51c357999bf01f0e7a267dc84ce5efe2  gcc/config/s390/s390-builtins.h
! b11fe94776af11f69b92638f30c2a457  gcc/config/s390/s390-c.cc
  b0ca9ea2b644ed03999193b5d9198f22  gcc/config/s390/s390-d.cc
  d7112093049d4abbc421609d032b7358  gcc/config/s390/s390-d.h
  107e065c4a74bb968d44f38ee30d0698  gcc/config/s390/s390-modes.def
  724b9c8075459b5c23142704c2ba1865  gcc/config/s390/s390-opts.h
  87bca0c72260bdf7b32cbe797e607999  gcc/config/s390/s390-passes.def
  b6426b7457d4617875547be76bb5112d  gcc/config/s390/s390-protos.h
! 0c8add06b9fdcfba48121044bb98b19a  gcc/config/s390/s390.cc
  fedf0be07777b765b244a82ecf4fe421  gcc/config/s390/s390.h
  def1eabaa50c31445465c2f80ad807fe  gcc/config/s390/s390.md
  2b0ec6eba7d16cee640146cd31989c99  gcc/config/s390/s390.opt
! 21324a6e6f740c5b725bbd086a12a078  gcc/config/s390/s390.opt.urls
  b9ecea5f97b2e15b60d770050a07f0d1  gcc/config/s390/s390intrin.h
  ae2250a16e4a3a631a5667f95a21e560  gcc/config/s390/s390x.h
  917857ccaf1e3588432fb2544d87838b  gcc/config/s390/subst.md
*************** dfb9fde7c7559a50905b02c01b6d6ee8  gcc/co
*** 5341,5347 ****
  bc0fb519f0c53f7b5e44aadede6fbfad  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  d225211a59c66716b9cad3d9a2f13af4  gcc/config/s390/vecintrin.h
! 2f06b33ad3df0b4ebc10b52b2ac19dec  gcc/config/s390/vector.md
  b652dfbe055d93c2aaaccee4bd169ec5  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  f9d87cd50e032287752597f9c084e3f5  gcc/config/sh/constraints.md
--- 5348,5354 ----
  bc0fb519f0c53f7b5e44aadede6fbfad  gcc/config/s390/tpf.opt
  34c54b547202715f11db388829243402  gcc/config/s390/tpf.opt.urls
  d225211a59c66716b9cad3d9a2f13af4  gcc/config/s390/vecintrin.h
! 71a6abb7660b2638c0e919cb990da7c3  gcc/config/s390/vector.md
  b652dfbe055d93c2aaaccee4bd169ec5  gcc/config/s390/vx-builtins.md
  7813da5eac25ac16f589b0319ad43386  gcc/config/s390/x-native
  f9d87cd50e032287752597f9c084e3f5  gcc/config/sh/constraints.md
*************** edfe2cf69e1ab1ed445b6c32bfee6914  gcc/co
*** 5366,5372 ****
  bc3cf16ed45eb962cf4f8b13a97b724f  gcc/config/sh/sh.h
  41f79e8504a610cef908cbc11ec9b1f7  gcc/config/sh/sh.md
  ec5ab32d7efddf71dc540a3ebec3f02c  gcc/config/sh/sh.opt
! 670e5840056f2d5bcfb8444910abd200  gcc/config/sh/sh.opt.urls
  f88c001b1bae674e16a4440ff9eba0b6  gcc/config/sh/sh1.md
  20462ee7070ae303b7ca15b8ae919ce2  gcc/config/sh/sh4-300.md
  5253bb82afce8c40e61ed02d889b6f33  gcc/config/sh/sh4.md
--- 5373,5379 ----
  bc3cf16ed45eb962cf4f8b13a97b724f  gcc/config/sh/sh.h
  41f79e8504a610cef908cbc11ec9b1f7  gcc/config/sh/sh.md
  ec5ab32d7efddf71dc540a3ebec3f02c  gcc/config/sh/sh.opt
! ca21eab48fde6654a92d33174c7c3a73  gcc/config/sh/sh.opt.urls
  f88c001b1bae674e16a4440ff9eba0b6  gcc/config/sh/sh1.md
  20462ee7070ae303b7ca15b8ae919ce2  gcc/config/sh/sh4-300.md
  5253bb82afce8c40e61ed02d889b6f33  gcc/config/sh/sh4.md
*************** e580c199d31125b230bb2c433094bc3e  gcc/co
*** 5391,5397 ****
  f981246401dc02795a6f58eccb1240a8  gcc/config/sol2-rust.cc
  363aa40b2d2145d97c2b3b23b09d3ed3  gcc/config/sol2-stubs.cc
  a1b33a7b9e5a91f84a66b4e23338c3e1  gcc/config/sol2.cc
! 70bfdad9158fe1922485ee1038c3ddf1  gcc/config/sol2.h
  4796428cc640a3b87b8371614301a450  gcc/config/sol2.opt
  c9d3baaa833c42e5184e73236cc13b0e  gcc/config/sol2.opt.urls
  c12eeb9c89d82c905c55fe4b468fd9f8  gcc/config/sparc/biarch64.h
--- 5398,5404 ----
  f981246401dc02795a6f58eccb1240a8  gcc/config/sol2-rust.cc
  363aa40b2d2145d97c2b3b23b09d3ed3  gcc/config/sol2-stubs.cc
  a1b33a7b9e5a91f84a66b4e23338c3e1  gcc/config/sol2.cc
! b8421744612ca3c10c7ee37bab96ca77  gcc/config/sol2.h
  4796428cc640a3b87b8371614301a450  gcc/config/sol2.opt
  c9d3baaa833c42e5184e73236cc13b0e  gcc/config/sol2.opt.urls
  c12eeb9c89d82c905c55fe4b468fd9f8  gcc/config/sparc/biarch64.h
*************** e963c6f088ae67780aab309ebb8f2403  gcc/co
*** 5431,5437 ****
  4b349429d6888c1460a385eb768460da  gcc/config/sparc/sparc.h
  fa9d02f144f3cf8591787a3c9c6c7b11  gcc/config/sparc/sparc.md
  6f932c6d3989e90e2e77ce2f623e6e98  gcc/config/sparc/sparc.opt
! 019c9a367df04ddebd3fec05ca1fabeb  gcc/config/sparc/sparc.opt.urls
  058c0b8fd9d648a96b6360d6bb462b5a  gcc/config/sparc/sparclet.md
  95d9b0938bb19cd4b5184456f3493e75  gcc/config/sparc/supersparc.md
  62e0cf2435ed415cc9b52698d95a63e0  gcc/config/sparc/sync.md
--- 5438,5444 ----
  4b349429d6888c1460a385eb768460da  gcc/config/sparc/sparc.h
  fa9d02f144f3cf8591787a3c9c6c7b11  gcc/config/sparc/sparc.md
  6f932c6d3989e90e2e77ce2f623e6e98  gcc/config/sparc/sparc.opt
! 7ff9e17b6f09214676df797c8319a497  gcc/config/sparc/sparc.opt.urls
  058c0b8fd9d648a96b6360d6bb462b5a  gcc/config/sparc/sparclet.md
  95d9b0938bb19cd4b5184456f3493e75  gcc/config/sparc/supersparc.md
  62e0cf2435ed415cc9b52698d95a63e0  gcc/config/sparc/sync.md
*************** c10e2a71a4ff7279d736f979a277f161  gcc/co
*** 5495,5501 ****
  3475bc333320d4282bd4a4342099b5f6  gcc/config/v850/v850.h
  93f6d65f25af65f8eeae905c97500497  gcc/config/v850/v850.md
  1cdff0901df87d09db8ede9707ffe9f6  gcc/config/v850/v850.opt
! 13ddd42f65ffdae7363613429d14c9e1  gcc/config/v850/v850.opt.urls
  a0e1d91480eb5353c6687b36f64b466e  gcc/config/vax/builtins.md
  87ee04b425c009755d052b044ea1412a  gcc/config/vax/constraints.md
  afe54b36157b748770a1b69a66810564  gcc/config/vax/elf.h
--- 5502,5508 ----
  3475bc333320d4282bd4a4342099b5f6  gcc/config/v850/v850.h
  93f6d65f25af65f8eeae905c97500497  gcc/config/v850/v850.md
  1cdff0901df87d09db8ede9707ffe9f6  gcc/config/v850/v850.opt
! cc745ac54041dcd561dc8b894c6423af  gcc/config/v850/v850.opt.urls
  a0e1d91480eb5353c6687b36f64b466e  gcc/config/vax/builtins.md
  87ee04b425c009755d052b044ea1412a  gcc/config/vax/constraints.md
  afe54b36157b748770a1b69a66810564  gcc/config/vax/elf.h
*************** d6ec281776489bd1ad94d64876f5af12  gcc/co
*** 5512,5518 ****
  a51e7b0537c77e3398591603e7748765  gcc/config/vax/vax.h
  d5f8144170270a4d61b1b0c9c662ba34  gcc/config/vax/vax.md
  84f1233d12afb81233c4aff574547d07  gcc/config/vax/vax.opt
! 050c6ad83b03be32e26722de7f5065e4  gcc/config/vax/vax.opt.urls
  c09f65693ee2b00a2b1f0031654ab7d1  gcc/config/visium/constraints.md
  9014bc25af2f10953e3b87d03ad35510  gcc/config/visium/elf.h
  eefde807c96dac9d12b68bf5889d8b24  gcc/config/visium/gr5.md
--- 5519,5525 ----
  a51e7b0537c77e3398591603e7748765  gcc/config/vax/vax.h
  d5f8144170270a4d61b1b0c9c662ba34  gcc/config/vax/vax.md
  84f1233d12afb81233c4aff574547d07  gcc/config/vax/vax.opt
! 3308df8b4869da439d89972a63ceb7c5  gcc/config/vax/vax.opt.urls
  c09f65693ee2b00a2b1f0031654ab7d1  gcc/config/visium/constraints.md
  9014bc25af2f10953e3b87d03ad35510  gcc/config/visium/elf.h
  eefde807c96dac9d12b68bf5889d8b24  gcc/config/visium/gr5.md
*************** d2b2ca416a513fadbb50089b712ef8ec  gcc/co
*** 5527,5533 ****
  514c12690a4fcb3d37c70519e6234159  gcc/config/visium/visium.h
  86abede24648c392e9686552bd2c3701  gcc/config/visium/visium.md
  07ea52f5d9eabaf01dc050e7a8b4d74a  gcc/config/visium/visium.opt
! f472070cd7b7a27e5f05bbbe91107453  gcc/config/visium/visium.opt.urls
  ada361ba1541890b3e3b974814270db1  gcc/config/vms/make-crtlmap.awk
  89f15e26d8046f6bfcafb265ac6dd05b  gcc/config/vms/t-vms
  3b9ee420c9257ee242c00fd3fc0dd4e0  gcc/config/vms/t-vmsnative
--- 5534,5540 ----
  514c12690a4fcb3d37c70519e6234159  gcc/config/visium/visium.h
  86abede24648c392e9686552bd2c3701  gcc/config/visium/visium.md
  07ea52f5d9eabaf01dc050e7a8b4d74a  gcc/config/visium/visium.opt
! 7a0d924f742d55d1f16c844de561f075  gcc/config/visium/visium.opt.urls
  ada361ba1541890b3e3b974814270db1  gcc/config/vms/make-crtlmap.awk
  89f15e26d8046f6bfcafb265ac6dd05b  gcc/config/vms/t-vms
  3b9ee420c9257ee242c00fd3fc0dd4e0  gcc/config/vms/t-vmsnative
*************** f154c7dc9175c4e8204205bb4fbd2cbc  gcc/co
*** 5595,5602 ****
  0e227e351d2efea226ca8c249e52aff3  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 8161cd8f85e7921fb2f57ad922532664  gcc/configure
! cc05105f67783ef4f191a15d95dc5a4a  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
--- 5602,5609 ----
  0e227e351d2efea226ca8c249e52aff3  gcc/config/xtensa/xtensa.md
  f0452ea712955ce21c9c149136850780  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 919b3547a9b052a91dfdb02a6e02ab68  gcc/configure
! 62342358812d6993144b5b103cf00497  gcc/configure.ac
  ec3aa966ca3fe9c6f84d4378160541b6  gcc/context.cc
  d1bde52b8dee0c0c5506d7e320b1bb61  gcc/context.h
  a9c3cddee4e237141062720b72fe38cd  gcc/convert.cc
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5606,5612 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! fd379ac6b0aef5727011b7d10adc6a5c  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5613,5619 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  02796caeaa2f14f72dc3c9c23cc97dfc  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 67342768b3b00e0bde531640f0227129  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** aaf76a9b03fd0532d2904aef004fd66a  gcc/cp
*** 5685,5709 ****
  5efd09b0532a0b524e859d61c942156d  gcc/cp/mapper-client.cc
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
! dba507f47a293a9bc4b13e11d8f5c809  gcc/cp/method.cc
! 664c7b593de980b0455610babc964a9e  gcc/cp/module.cc
  f1f183b4320198a66dd316934a528e05  gcc/cp/name-lookup.cc
  496f323514612f2e06231cb67428b04e  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! 26591e3023c9ea05e31c6cfbd2363093  gcc/cp/parser.cc
  f6ddd589a7423f07d554dad74c5e43a7  gcc/cp/parser.h
! 760cfe3026fd465dac78b9f3407e7119  gcc/cp/pt.cc
  b606903e35fe6806362fe4eee7a89fef  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  9c5477f737d2c390510c3fe72454f657  gcc/cp/search.cc
! 2418a0ec4dbc034514a4126cff75a9e7  gcc/cp/semantics.cc
  8ccc82546d801360d2ccd8fd2a48b5d6  gcc/cp/std-name-hint.gperf
  bb87dbae9e49b63a73c4afa927a9018e  gcc/cp/std-name-hint.h
  1fe34e428beb7b18d5180400e36d9f86  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
  dd07aba39873c93f6859b787c8ab428c  gcc/cp/typeck.cc
! d5322228a4b4ea22ae20c897e9baaf69  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
  05a136afb0839d5238cd1390602e748e  gcc/cppbuiltin.h
--- 5692,5716 ----
  5efd09b0532a0b524e859d61c942156d  gcc/cp/mapper-client.cc
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
! a87a2754a8a50d73ad227fee0e31caec  gcc/cp/method.cc
! 6a7b266a896fa9c6565a2998af394f6d  gcc/cp/module.cc
  f1f183b4320198a66dd316934a528e05  gcc/cp/name-lookup.cc
  496f323514612f2e06231cb67428b04e  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
  813c253a000ee20d8d6598f56edc400e  gcc/cp/optimize.cc
! d6a3485f2ca3e16725710fb1bef68903  gcc/cp/parser.cc
  f6ddd589a7423f07d554dad74c5e43a7  gcc/cp/parser.h
! 3ce1e0ad5cddef00d6d7b8a3f2b9674b  gcc/cp/pt.cc
  b606903e35fe6806362fe4eee7a89fef  gcc/cp/ptree.cc
  ee1ddf1e1b9554bb1a10109ce8c6dee5  gcc/cp/rtti.cc
  9c5477f737d2c390510c3fe72454f657  gcc/cp/search.cc
! 15eb28598ab5e2f6c67492e7244d3569  gcc/cp/semantics.cc
  8ccc82546d801360d2ccd8fd2a48b5d6  gcc/cp/std-name-hint.gperf
  bb87dbae9e49b63a73c4afa927a9018e  gcc/cp/std-name-hint.h
  1fe34e428beb7b18d5180400e36d9f86  gcc/cp/tree.cc
  bb1304379ac1bf9a568942bc7e976e8a  gcc/cp/type-utils.h
  dd07aba39873c93f6859b787c8ab428c  gcc/cp/typeck.cc
! 2b27861b0d392281a32cc8cdb1d8eae5  gcc/cp/typeck2.cc
  aa6906e22dc44502ca268580e5b8dfdd  gcc/cp/vtable-class-hierarchy.cc
  c74d2f6cc5dcb1bf1953c093eb903b37  gcc/cppbuiltin.cc
  05a136afb0839d5238cd1390602e748e  gcc/cppbuiltin.h
*************** faea3ce12d5b1a3151b93f76f440980f  gcc/di
*** 6062,6069 ****
  59de35a57a51077e80939e29ebfbc93a  gcc/diagnostics/text-sink.h
  b882c3ac372bd1a3c12cb702a5bdf197  gcc/diagnostics/url.h
  e2ff50cf5215e2299270f0da4d4d60d0  gcc/digraph.cc
! 18e73120a6e21ceac1adce40777000cf  gcc/digraph.h
! 896dfab99ef4a3f697fdf60723346e28  gcc/doc/analyzer.texi
  85fc81bd6947985dce85e8d008e693a1  gcc/doc/avr-mmcu.texi
  628200aba31497f381052220465b8927  gcc/doc/bugreport.texi
  519dad6b92ca7405e11a87efd5ddd705  gcc/doc/cfg.texi
--- 6069,6076 ----
  59de35a57a51077e80939e29ebfbc93a  gcc/diagnostics/text-sink.h
  b882c3ac372bd1a3c12cb702a5bdf197  gcc/diagnostics/url.h
  e2ff50cf5215e2299270f0da4d4d60d0  gcc/digraph.cc
! 4c0fdabfb5fa1c81c85bd0c24ad721ce  gcc/digraph.h
! 7e7948d73cb80be570ea39946c973c57  gcc/doc/analyzer.texi
  85fc81bd6947985dce85e8d008e693a1  gcc/doc/avr-mmcu.texi
  628200aba31497f381052220465b8927  gcc/doc/bugreport.texi
  519dad6b92ca7405e11a87efd5ddd705  gcc/doc/cfg.texi
*************** acdfc663791e4321372e79932070d05d  gcc/do
*** 6079,6085 ****
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  916609b97298dbc7d4d607a08543d64f  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! f812418e8d1d41b7fd19e4654c3fec8b  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
--- 6086,6092 ----
  81ae745aed5479afae430c578fa29055  gcc/doc/cppinternals.texi
  916609b97298dbc7d4d607a08543d64f  gcc/doc/cppopts.texi
  14b0532614eb25d7d84e7efd6664ecf3  gcc/doc/cppwarnopts.texi
! 852b9a351d719f86b9eaaab3dab4d227  gcc/doc/extend.texi
  ddcdbcb699f5252a1c1219d92d87ed8b  gcc/doc/fragments.texi
  cd346f0c279f68138ef08c7addc796de  gcc/doc/frontends.texi
  a28615d9873d98f0d5f4ef8dd3e4c39d  gcc/doc/gcc.texi
*************** ee4c7654f733cefcb73d4fd24f3e1b82  gcc/do
*** 6103,6109 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  92e92962c982d3290684f9657660ad88  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! b051f5a74b61e587c29a5c1dae82e642  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  8783f1b0b6c204d4417b00f3b772beea  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6110,6116 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  92e92962c982d3290684f9657660ad88  gcc/doc/install.texi
  0f98706361e63fac2c35c2c4491eaac4  gcc/doc/install.texi2html
! 101fa5b74e74a846d185daab0bf0fc13  gcc/doc/invoke.texi
  47f1f55b3595acf670eb6193a0cbd933  gcc/doc/languages.texi
  8783f1b0b6c204d4417b00f3b772beea  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** a1f65f3aec3cc5d5b6505fb976d4c216  gcc/do
*** 6141,6147 ****
  c98feb0a43876ed3ef2fca3c8448e8f8  gcc/doc/lto.texi
  26f08ad01720c082109915a4ec33c80f  gcc/doc/makefile.texi
  2f8484fc473d3a7141e34a260b920ea3  gcc/doc/match-and-simplify.texi
! 82d3bf3f24667928e715e934d232e817  gcc/doc/md.texi
  8836b7001f069e8dead6a4643108258b  gcc/doc/objc.texi
  9673b2a6dd62d5ac08afb00421e98cdb  gcc/doc/optinfo.texi
  a7117c4fee8c54e338b967886f3b2dcb  gcc/doc/options.texi
--- 6148,6154 ----
  c98feb0a43876ed3ef2fca3c8448e8f8  gcc/doc/lto.texi
  26f08ad01720c082109915a4ec33c80f  gcc/doc/makefile.texi
  2f8484fc473d3a7141e34a260b920ea3  gcc/doc/match-and-simplify.texi
! 54eb9404280abee0d0a04e14630dd457  gcc/doc/md.texi
  8836b7001f069e8dead6a4643108258b  gcc/doc/objc.texi
  9673b2a6dd62d5ac08afb00421e98cdb  gcc/doc/optinfo.texi
  a7117c4fee8c54e338b967886f3b2dcb  gcc/doc/options.texi
*************** e0434ec541556c6ba008fe012784ad16  gcc/do
*** 6156,6163 ****
  bd20fd07c5ee8f444bf1d3f5e64e066a  gcc/doc/service.texi
  662dca51632c008a252102b76f63a95a  gcc/doc/sourcebuild.texi
  256b54301263a6c10e6e88798debd9e3  gcc/doc/standards.texi
! dfb23f51dafc3f0b119c35a887759f8b  gcc/doc/tm.texi
! eb3553f118b64fb9b027641ed371a756  gcc/doc/tm.texi.in
  173ab0ec22dd651701e36e43ed21375f  gcc/doc/tree-ssa.texi
  5f62752970e47d350c8cbce47123d1cf  gcc/doc/trouble.texi
  7f44041407f24d2851135ae497914475  gcc/doc/ux.texi
--- 6163,6170 ----
  bd20fd07c5ee8f444bf1d3f5e64e066a  gcc/doc/service.texi
  662dca51632c008a252102b76f63a95a  gcc/doc/sourcebuild.texi
  256b54301263a6c10e6e88798debd9e3  gcc/doc/standards.texi
! 0c0a61051d1104610d7593a2eec374c3  gcc/doc/tm.texi
! ca93e26f45f99e628a14a760a3b02746  gcc/doc/tm.texi.in
  173ab0ec22dd651701e36e43ed21375f  gcc/doc/tree-ssa.texi
  5f62752970e47d350c8cbce47123d1cf  gcc/doc/trouble.texi
  7f44041407f24d2851135ae497914475  gcc/doc/ux.texi
*************** fdd976759ee89958c91a4010e53c0f02  gcc/ea
*** 6190,6196 ****
  e67bf1a2587fc7f7361e841145ff4cfb  gcc/escaped_string.h
  0f7edc740a7778567090fd93180c02f0  gcc/et-forest.cc
  3e59fa3e669b46ddeef671a16cf79841  gcc/et-forest.h
! 03148e811fc71488faa55587eee9e692  gcc/except.cc
  9c6b987629f8664ff2e311b59a7b90cd  gcc/except.h
  29b821359071c4aa7e30220d5cb2d580  gcc/exec-tool.in
  de4a03cd382601071e81e57cc6c2a7e1  gcc/explow.cc
--- 6197,6203 ----
  e67bf1a2587fc7f7361e841145ff4cfb  gcc/escaped_string.h
  0f7edc740a7778567090fd93180c02f0  gcc/et-forest.cc
  3e59fa3e669b46ddeef671a16cf79841  gcc/et-forest.h
! ce18eb593185761e8aec8a8f5a3ecff4  gcc/except.cc
  9c6b987629f8664ff2e311b59a7b90cd  gcc/except.h
  29b821359071c4aa7e30220d5cb2d580  gcc/exec-tool.in
  de4a03cd382601071e81e57cc6c2a7e1  gcc/explow.cc
*************** b7bf1ecba30babcca6fcc9e9a66bebfb  gcc/fo
*** 6216,6222 ****
  17f1e7f727e08a6e42a5ecbeedca48b5  gcc/fold-const.cc
  09573b86bdb27d2d064ccdd670710fde  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! b089a352340bdbcdbb2c750447166bfa  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6223,6229 ----
  17f1e7f727e08a6e42a5ecbeedca48b5  gcc/fold-const.cc
  09573b86bdb27d2d064ccdd670710fde  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! f47d5c6ec831196d53b940fba2ffc5ca  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** aed3aedb6378a970055dff9e11eedc2d  gcc/fo
*** 6253,6263 ****
  16ea0e15947038265fbb5983b455b7bf  gcc/fortran/constructor.cc
  85285f438769e841d8dc39fedcd731d5  gcc/fortran/constructor.h
  8a26ac4e9bbfcee3a5911bf1864ee2e6  gcc/fortran/convert.cc
! 72a18e3cbbefa104cd97e707657e5848  gcc/fortran/cpp.cc
  b7e224f665bb5044ce35ed09435bd4fb  gcc/fortran/cpp.h
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
! d762bc15dad36c43a7650f46323c34da  gcc/fortran/decl.cc
  917fd2716f1eef2f47d4f032e14958ad  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  029735552d67a599918afceb5c9067aa  gcc/fortran/dump-parse-tree.cc
--- 6260,6270 ----
  16ea0e15947038265fbb5983b455b7bf  gcc/fortran/constructor.cc
  85285f438769e841d8dc39fedcd731d5  gcc/fortran/constructor.h
  8a26ac4e9bbfcee3a5911bf1864ee2e6  gcc/fortran/convert.cc
! 684bee52c4789faf429f7df554f0891c  gcc/fortran/cpp.cc
  b7e224f665bb5044ce35ed09435bd4fb  gcc/fortran/cpp.h
  a232f4d280ad08511e2718281b3d1ab6  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
! 6fa8c2d2d6646feaae51271e24ce9d43  gcc/fortran/decl.cc
  917fd2716f1eef2f47d4f032e14958ad  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  029735552d67a599918afceb5c9067aa  gcc/fortran/dump-parse-tree.cc
*************** fcdf26536d578abd3a720a2579b4def5  gcc/fo
*** 6268,6301 ****
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
  94aacc49d064750afb608e1a14969f5a  gcc/fortran/gfortran.h
! 18f34a213c3d17960c758bdfa4802052  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
  e4fe6ce0303cd182ebd328bdb0ae5743  gcc/fortran/interface.cc
  74d5cc035a8e6ee1fb5826c965c90532  gcc/fortran/intrinsic.cc
  47e0e62e0a6eaad27941f8e734cda2a2  gcc/fortran/intrinsic.h
! 07c7b977b84667767b6c592605b33199  gcc/fortran/intrinsic.texi
! 491e0576258d33e46ed87fe37a39cc55  gcc/fortran/invoke.texi
  4a91f323761835f16a1a9b3995485379  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
  4d2d654877c2408059ea42ec970d9e6b  gcc/fortran/iresolve.cc
  40087b4e405f3e0f17ebd4f0e9b63f48  gcc/fortran/iso-c-binding.def
  085e3672e4679e2b51b9f144b552caed  gcc/fortran/iso-fortran-env.def
  5c4523263ea0f1cd46baacba848e1fd5  gcc/fortran/lang-specs.h
! 1b21bc6997375de7ba798cd6fb5ed15a  gcc/fortran/lang.opt
! b03453b49ff20146a3acf39d8600307f  gcc/fortran/lang.opt.urls
  33cf77e4943bfb687d3a0bd5fa94ec58  gcc/fortran/libgfortran.h
! c8cf34fcd829ff55e5b3240c7d16d62c  gcc/fortran/match.cc
  cc75a1ff850c3546d6c8156895b54c5a  gcc/fortran/match.h
  672e1d4135f72ff6f083582ec84123b1  gcc/fortran/matchexp.cc
  763c37f838e32f5ed8ad600157a0d951  gcc/fortran/mathbuiltins.def
  6e89e2e347d7f6e1576cbda0e958b5bd  gcc/fortran/misc.cc
  c2ff9c82debbc68da75c5a307ef1b138  gcc/fortran/module.cc
! 4872d9bf86b297827b63676cc3271980  gcc/fortran/openmp.cc
  97facac1dd9ae327c6c4547b527e4527  gcc/fortran/options.cc
! 176e5dd6b8fff96bf0f0c6a696e63ef6  gcc/fortran/parse.cc
  718f4db6bea1b398551c501068f61597  gcc/fortran/parse.h
  c381d2f08a8a8b647089c5236ed5364a  gcc/fortran/primary.cc
! 0d236ec31473b9315daad5d26c2cf8c9  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
--- 6275,6308 ----
  a39f360f255f1ef6dfd91ccefef63e05  gcc/fortran/gfc-diagnostic.def
  bd08c55098f00394b9922e6163c27b92  gcc/fortran/gfc-internals.texi
  94aacc49d064750afb608e1a14969f5a  gcc/fortran/gfortran.h
! 51080f85cdf0c15f058a19f00f38bce7  gcc/fortran/gfortran.texi
  af66ab40a5434219772b76ad10035e45  gcc/fortran/gfortranspec.cc
  e4fe6ce0303cd182ebd328bdb0ae5743  gcc/fortran/interface.cc
  74d5cc035a8e6ee1fb5826c965c90532  gcc/fortran/intrinsic.cc
  47e0e62e0a6eaad27941f8e734cda2a2  gcc/fortran/intrinsic.h
! e4b048e3c76dd062984cec31ab97a29d  gcc/fortran/intrinsic.texi
! 5473a119790d46d5095d68484263a5f9  gcc/fortran/invoke.texi
  4a91f323761835f16a1a9b3995485379  gcc/fortran/io.cc
  d2a28ef98f6f78d1608fb52204e013a5  gcc/fortran/ioparm.def
  4d2d654877c2408059ea42ec970d9e6b  gcc/fortran/iresolve.cc
  40087b4e405f3e0f17ebd4f0e9b63f48  gcc/fortran/iso-c-binding.def
  085e3672e4679e2b51b9f144b552caed  gcc/fortran/iso-fortran-env.def
  5c4523263ea0f1cd46baacba848e1fd5  gcc/fortran/lang-specs.h
! 65a0b5b30be4263a18d3856834ecb817  gcc/fortran/lang.opt
! 1c6e75eaf5edfd00fe61a2b90514002a  gcc/fortran/lang.opt.urls
  33cf77e4943bfb687d3a0bd5fa94ec58  gcc/fortran/libgfortran.h
! e7cd34edc60390f8281e2dc77fd6fa84  gcc/fortran/match.cc
  cc75a1ff850c3546d6c8156895b54c5a  gcc/fortran/match.h
  672e1d4135f72ff6f083582ec84123b1  gcc/fortran/matchexp.cc
  763c37f838e32f5ed8ad600157a0d951  gcc/fortran/mathbuiltins.def
  6e89e2e347d7f6e1576cbda0e958b5bd  gcc/fortran/misc.cc
  c2ff9c82debbc68da75c5a307ef1b138  gcc/fortran/module.cc
! 845de4d821f6b5e1ed814be1c3022223  gcc/fortran/openmp.cc
  97facac1dd9ae327c6c4547b527e4527  gcc/fortran/options.cc
! 803727385bdded6044f6397cbfcb705d  gcc/fortran/parse.cc
  718f4db6bea1b398551c501068f61597  gcc/fortran/parse.h
  c381d2f08a8a8b647089c5236ed5364a  gcc/fortran/primary.cc
! a9bd6084141151240ceb92c53632a84f  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  d78cc6d6b48b8228757fb8b674f6ad9b  gcc/fortran/simplify.cc
*************** f13dfeafc421dcdcc35ec7a854ae1a77  gcc/fo
*** 6309,6318 ****
  fa8521f4c98868ee5fa7e9dea5a35e37  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  1bf381029ae74da9d767c99d6e64940d  gcc/fortran/trans-decl.cc
! 17146bb3feae81c285b92546d9453423  gcc/fortran/trans-expr.cc
  2889ceeab429a8d9e062daa88b51dd03  gcc/fortran/trans-intrinsic.cc
  2d29342f65aeef2af368527483b2d4f1  gcc/fortran/trans-io.cc
! 47efbf0310b508b8ee3e536751260aca  gcc/fortran/trans-openmp.cc
  cd091509b69239b87561c8695ce522ca  gcc/fortran/trans-stmt.cc
  9caf8a2f93e6cf5e2a567a3aa18f957c  gcc/fortran/trans-stmt.h
  24751fdbf5162757525888384f73dfd7  gcc/fortran/trans-types.cc
--- 6316,6325 ----
  fa8521f4c98868ee5fa7e9dea5a35e37  gcc/fortran/trans-const.cc
  857805820c2a6ac77d2652c610d23de8  gcc/fortran/trans-const.h
  1bf381029ae74da9d767c99d6e64940d  gcc/fortran/trans-decl.cc
! d56ea64da5cc1b4646832b288055ffc4  gcc/fortran/trans-expr.cc
  2889ceeab429a8d9e062daa88b51dd03  gcc/fortran/trans-intrinsic.cc
  2d29342f65aeef2af368527483b2d4f1  gcc/fortran/trans-io.cc
! c034cfe7281ba9e816c14777f6504b0e  gcc/fortran/trans-openmp.cc
  cd091509b69239b87561c8695ce522ca  gcc/fortran/trans-stmt.cc
  9caf8a2f93e6cf5e2a567a3aa18f957c  gcc/fortran/trans-stmt.h
  24751fdbf5162757525888384f73dfd7  gcc/fortran/trans-types.cc
*************** cac72ec7acd3c0b9265d75c09766a847  gcc/gc
*** 6340,6346 ****
  74b8852724cd126309c2e814288bcaa4  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  7e2f3c81fe7c2381b433886ab2914fa7  gcc/gcc-urlifier.h
! ece130897c6a1c2ede25b76ed940e4f2  gcc/gcc.cc
  265ae8f124014a92ca7dee798d9c2b46  gcc/gcc.h
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
--- 6347,6353 ----
  74b8852724cd126309c2e814288bcaa4  gcc/gcc-urlifier.cc
  3ba51d67080efcd8791ea2eaf4103d72  gcc/gcc-urlifier.def
  7e2f3c81fe7c2381b433886ab2914fa7  gcc/gcc-urlifier.h
! 5959f8cd12e6eadc0424ecf79f74ad4a  gcc/gcc.cc
  265ae8f124014a92ca7dee798d9c2b46  gcc/gcc.h
  d66e80f2ea9c1b6754479c999040b857  gcc/gcov-counter.def
  c4e07547b91be991d1bed6c22015cec2  gcc/gcov-dump.cc
*************** d6ef278998f9a4cf5f6d12d0ec72b842  gcc/gc
*** 6353,6359 ****
  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
--- 6360,6366 ----
  a44c1a607d9b75afc7b5bd869ae5342a  gcc/gcse.cc
  e5a3a3a1ad466d441c8c2f6c2ac6c208  gcc/gcse.h
  af83e4b4719ee065872080b713d24c2f  gcc/gdbasan.in
! 01e4615437941382aab3828b31a6598c  gcc/gdbhooks.py
  4a86e68e2feba4a0e46f5d39616a00ae  gcc/gdbinit.in
  bc7dc03662da0207b2f137311e3d44ff  gcc/gen-pass-instances.awk
  243e310c8de5ec89a275b8a8fdaa3f23  gcc/genattr-common.cc
*************** da09d1e31d3994eb3d6958074d7b7ce5  gcc/gi
*** 6407,6413 ****
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! a906fcf00a8b2e9c4407adab8af97857  gcc/gimple-fold.cc
  9b04ce067dded26aa256b48adea40724  gcc/gimple-fold.h
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
--- 6414,6420 ----
  fea7635818b5d7cefd4c7a0b268a254c  gcc/gimple-crc-optimization.cc
  1e3c7b3ded904be69c3703ac6d27fa44  gcc/gimple-expr.cc
  7b4f02095ce9b7a43bee8570917b9dc7  gcc/gimple-expr.h
! 17f3b81f3c8c3bccda0b5cde3d6daa38  gcc/gimple-fold.cc
  9b04ce067dded26aa256b48adea40724  gcc/gimple-fold.h
  43ad47e8cd99d438040cf6937a3cbe5e  gcc/gimple-harden-conditionals.cc
  78586a1c0ce6834da91809b77f98c6d7  gcc/gimple-harden-control-flow.cc
*************** b551cb1f1566bf3aa2bca3816f2b1c98  gcc/gi
*** 6462,6468 ****
  fcc4ed911cdab9bdd135501c8faeb812  gcc/gimple-ssa-sprintf.cc
  87d47a47b50b82ce1660751e9d73d3b3  gcc/gimple-ssa-store-merging.cc
  5081e3b07e7210c50573a328ecd9e1b9  gcc/gimple-ssa-strength-reduction.cc
! 46eea1d0c3815d9d4d5022c7e735c5f1  gcc/gimple-ssa-warn-access.cc
  3ae7b597d9d5e0c5ba61dc7ee8a7f2c2  gcc/gimple-ssa-warn-access.h
  58ebb365eca5688d01bd602f9fb054e2  gcc/gimple-ssa-warn-alloca.cc
  450934534b0c9abf5f470decbc8c446e  gcc/gimple-ssa-warn-restrict.cc
--- 6469,6475 ----
  fcc4ed911cdab9bdd135501c8faeb812  gcc/gimple-ssa-sprintf.cc
  87d47a47b50b82ce1660751e9d73d3b3  gcc/gimple-ssa-store-merging.cc
  5081e3b07e7210c50573a328ecd9e1b9  gcc/gimple-ssa-strength-reduction.cc
! caf2aebd4f089b468d37972535cbf647  gcc/gimple-ssa-warn-access.cc
  3ae7b597d9d5e0c5ba61dc7ee8a7f2c2  gcc/gimple-ssa-warn-access.h
  58ebb365eca5688d01bd602f9fb054e2  gcc/gimple-ssa-warn-alloca.cc
  450934534b0c9abf5f470decbc8c446e  gcc/gimple-ssa-warn-restrict.cc
*************** ed9c9a9b8efbcca1621cb38f6a7f739b  gcc/gi
*** 6479,6485 ****
  1835ccd82890f84e5a82ca342d0c5455  gcc/gimple.h
  78067ab7e777ee9d0a105da78655ee19  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
! 420603212a51051b729affda5b76aedb  gcc/gimplify.cc
  08a911f7f8b65840f9b57e0e76a2061c  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  7df17d7c2bcdff0a474d633a02195544  gcc/ginclude/float.h
--- 6486,6492 ----
  1835ccd82890f84e5a82ca342d0c5455  gcc/gimple.h
  78067ab7e777ee9d0a105da78655ee19  gcc/gimplify-me.cc
  84814cb09300f3db388dd0d22133ccb4  gcc/gimplify-me.h
! ce218e5b4c329178858e9fead738e927  gcc/gimplify.cc
  08a911f7f8b65840f9b57e0e76a2061c  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  7df17d7c2bcdff0a474d633a02195544  gcc/ginclude/float.h
*************** d7408ac6c915c3e2f58cd40bdb6a0671  gcc/gi
*** 6499,6505 ****
  18dd241fd4e77ac61edc90586b9fb2b6  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  b41648f499a7db07e24806aae26998b5  gcc/glimits.h
! 35b46935127001b25372accfafed59d6  gcc/go/ChangeLog
  e697a6a6e7d6942b7375c665c70d34b4  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
  88217f68368328f3ce651c46f0830df8  gcc/go/config-lang.in
--- 6506,6512 ----
  18dd241fd4e77ac61edc90586b9fb2b6  gcc/ginclude/unwind-arm-common.h
  8d9ecf0d6ef93c79623ce1d27a32a2cb  gcc/ginclude/varargs.h
  b41648f499a7db07e24806aae26998b5  gcc/glimits.h
! 95c10d40dc8a1da4d27a352f881d5661  gcc/go/ChangeLog
  e697a6a6e7d6942b7375c665c70d34b4  gcc/go/Make-lang.in
  60ea054548c83c7f66170073f9f3e74c  gcc/go/README.gcc
  88217f68368328f3ce651c46f0830df8  gcc/go/config-lang.in
*************** b4fcb26168619862a6f0f95ba175db11  gcc/go
*** 6563,6569 ****
  a66eb96a4ced95e676f646b608c6314f  gcc/go/gospec.cc
  c8bf45fde8efe08641c9932b6615f284  gcc/go/lang-specs.h
  523a1493b5ff59d32623e9bfb2c0d36a  gcc/go/lang.opt
! 854aa684ba35b7e1d89f3ef55192bcb3  gcc/go/lang.opt.urls
  398b1d230e184ae44ed6524f86bedb73  gcc/godump.cc
  b2382217b0cdd6780d4a73074019478e  gcc/graph.cc
  24e940a08206105c7347b57a3488ca77  gcc/graph.h
--- 6570,6576 ----
  a66eb96a4ced95e676f646b608c6314f  gcc/go/gospec.cc
  c8bf45fde8efe08641c9932b6615f284  gcc/go/lang-specs.h
  523a1493b5ff59d32623e9bfb2c0d36a  gcc/go/lang.opt
! a34735cec9db2102b6780074cdec10ca  gcc/go/lang.opt.urls
  398b1d230e184ae44ed6524f86bedb73  gcc/godump.cc
  b2382217b0cdd6780d4a73074019478e  gcc/graph.cc
  24e940a08206105c7347b57a3488ca77  gcc/graph.h
*************** f875de05790ff6f9d4a538f3165a775b  gcc/in
*** 6615,6621 ****
  0dc4e5a1c70a5b34153b06594dd3ae85  gcc/insn-addr.h
  eec072fb4c8277a3634cf4cdc0846598  gcc/insn-notes.def
  769443add1b7187045688cd8b1129647  gcc/int-vector-builder.h
! 29af55532b20b5fd6b5382cd796b42c0  gcc/internal-fn.cc
  1bbd00353a8c4336aed70e25ab408944  gcc/internal-fn.def
  290489b0e36c5962b1f15bf3135f8eff  gcc/internal-fn.h
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
--- 6622,6628 ----
  0dc4e5a1c70a5b34153b06594dd3ae85  gcc/insn-addr.h
  eec072fb4c8277a3634cf4cdc0846598  gcc/insn-notes.def
  769443add1b7187045688cd8b1129647  gcc/int-vector-builder.h
! d195ce274224167808b09a54f67439b5  gcc/internal-fn.cc
  1bbd00353a8c4336aed70e25ab408944  gcc/internal-fn.def
  290489b0e36c5962b1f15bf3135f8eff  gcc/internal-fn.h
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
*************** a3882f8a9c03be47eb0deee0bd27e04d  gcc/ip
*** 6633,6639 ****
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  da5a8b46913e455ff432d2110722af82  gcc/ipa-inline-analysis.cc
  3a7b210d2f26cf868f3eec1036b8a20f  gcc/ipa-inline-transform.cc
! fd89e6f19f8415d6bee80d0e6c195788  gcc/ipa-inline.cc
  a8bc23feef2d2f8a3d25702ece427f87  gcc/ipa-inline.h
  19c0cbbd70e071bd63dbb0527d02423e  gcc/ipa-locality-cloning.cc
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
--- 6640,6646 ----
  b2ecb607534e24bdc2bc2e02ba2199ca  gcc/ipa-icf.h
  da5a8b46913e455ff432d2110722af82  gcc/ipa-inline-analysis.cc
  3a7b210d2f26cf868f3eec1036b8a20f  gcc/ipa-inline-transform.cc
! 6d80b6419f5608e8903a0182e250fc89  gcc/ipa-inline.cc
  a8bc23feef2d2f8a3d25702ece427f87  gcc/ipa-inline.h
  19c0cbbd70e071bd63dbb0527d02423e  gcc/ipa-locality-cloning.cc
  e1e331896b86db8a2281657bbb21ac72  gcc/ipa-locality-cloning.h
*************** ed94ab1f6976f64c8d20b7b65da14438  gcc/ir
*** 6673,6679 ****
  e02a7a08ca9acaac686d9cb897ac121b  gcc/ira.h
  101bad313081e351312c8d42e0b24b31  gcc/is-a.h
  4e832d29f0e621d177da3fa9c3e11b69  gcc/iterator-utils.h
! cf8fb2e3821d3755a905ae0581d4984c  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
  222ee07ce761a3e77636dc2e76c20087  gcc/jit/Make-lang.in
  fd0d76b6467c987f813d430a35d4760a  gcc/jit/TODO.rst
--- 6680,6686 ----
  e02a7a08ca9acaac686d9cb897ac121b  gcc/ira.h
  101bad313081e351312c8d42e0b24b31  gcc/is-a.h
  4e832d29f0e621d177da3fa9c3e11b69  gcc/iterator-utils.h
! 60a4780467027ef2107bd1f7b87e82fa  gcc/jit/ChangeLog
  6071bdf04fb356c5ac99a99ec00c9a12  gcc/jit/ChangeLog.jit
  222ee07ce761a3e77636dc2e76c20087  gcc/jit/Make-lang.in
  fd0d76b6467c987f813d430a35d4760a  gcc/jit/TODO.rst
*************** aefe50c9e37a2e7a06545dbc6b38bbd4  gcc/ji
*** 6684,6690 ****
  40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/_build/texinfo/libgccjit-figures/factorial1.png
  11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/libgccjit-figures/sum-of-squares.png
  11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/libgccjit-figures/sum-of-squares1.png
! bc7b380434c2dc12a0d3e6dae2f2962a  gcc/jit/docs/_build/texinfo/libgccjit.texi
  14be6b0e821d44cf5f5752c6bece65bb  gcc/jit/docs/conf.py
  15010eb47b227867bbca423ef7c6d2cf  gcc/jit/docs/cp/index.rst
  4f36389ecd989ca1c6ae3d890190f480  gcc/jit/docs/cp/intro/index.rst
--- 6691,6697 ----
  40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/_build/texinfo/libgccjit-figures/factorial1.png
  11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/libgccjit-figures/sum-of-squares.png
  11b13c2e317ff217420ed928ce4ba00e  gcc/jit/docs/_build/texinfo/libgccjit-figures/sum-of-squares1.png
! f91ba0028513bb065cf08aa3582bbe0c  gcc/jit/docs/_build/texinfo/libgccjit.texi
  14be6b0e821d44cf5f5752c6bece65bb  gcc/jit/docs/conf.py
  15010eb47b227867bbca423ef7c6d2cf  gcc/jit/docs/cp/index.rst
  4f36389ecd989ca1c6ae3d890190f480  gcc/jit/docs/cp/intro/index.rst
*************** a499cf1a96a055c8d9a82f9b710d3191  gcc/ji
*** 6715,6721 ****
  33986a09f1ed6cc17277dd1b473e39d2  gcc/jit/docs/examples/tut04-toyvm/toyvm.cc
  3cbe9daf70398730ee60aa4caf2fc200  gcc/jit/docs/examples/tut05-bf.c
  59c6ebde6abd566ee645d09053ec2ad4  gcc/jit/docs/index.rst
! 271bb335b68174f089669f3f93fd1b57  gcc/jit/docs/internals/index.rst
  d72502d68617b68873d385bcee6e9c4b  gcc/jit/docs/internals/test-hello-world.exe.log.txt
  40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/intro/factorial.png
  277ad96a41c137e7916ebfc25b6affd6  gcc/jit/docs/intro/index.rst
--- 6722,6728 ----
  33986a09f1ed6cc17277dd1b473e39d2  gcc/jit/docs/examples/tut04-toyvm/toyvm.cc
  3cbe9daf70398730ee60aa4caf2fc200  gcc/jit/docs/examples/tut05-bf.c
  59c6ebde6abd566ee645d09053ec2ad4  gcc/jit/docs/index.rst
! c51489f1bd67970651942a72bb120a2e  gcc/jit/docs/internals/index.rst
  d72502d68617b68873d385bcee6e9c4b  gcc/jit/docs/internals/test-hello-world.exe.log.txt
  40d770c0fff5fdb135c9832c697a6e05  gcc/jit/docs/intro/factorial.png
  277ad96a41c137e7916ebfc25b6affd6  gcc/jit/docs/intro/index.rst
*************** a17a38f054bc1a1d5251ae4e33328510  gcc/lt
*** 6819,6829 ****
  f2a9985147f87fd566d4ae2dd8fceabc  gcc/lto-section-names.h
  92ad85d667fb88ca0d727d1081d5a438  gcc/lto-section-out.cc
  6c75be9cf8c45018aae0f2d91e2411ba  gcc/lto-streamer-in.cc
! c123d330c230c1e0fe188e9143a9dcf8  gcc/lto-streamer-out.cc
  8caf9a68892d64dc294b20c27291b749  gcc/lto-streamer.cc
  c1f5544bbcb0c97f44efaa8e7ab62c22  gcc/lto-streamer.h
  83090028348934d032ead727241d7ad7  gcc/lto-wrapper.cc
! 162f0584cb0f93d014bd404fb46da4b3  gcc/lto/ChangeLog
  3e7816807401da2506930719e6dc8b3d  gcc/lto/Make-lang.in
  705d8eaa74b456d79367c2c42b7a2fef  gcc/lto/common.cc
  3d201b30f0538a8cfddc450739b1c8c5  gcc/lto/common.h
--- 6826,6836 ----
  f2a9985147f87fd566d4ae2dd8fceabc  gcc/lto-section-names.h
  92ad85d667fb88ca0d727d1081d5a438  gcc/lto-section-out.cc
  6c75be9cf8c45018aae0f2d91e2411ba  gcc/lto-streamer-in.cc
! 023814c3b4bf23567980715ef92cf5bc  gcc/lto-streamer-out.cc
  8caf9a68892d64dc294b20c27291b749  gcc/lto-streamer.cc
  c1f5544bbcb0c97f44efaa8e7ab62c22  gcc/lto-streamer.h
  83090028348934d032ead727241d7ad7  gcc/lto-wrapper.cc
! 06d80728fd17b6fa0f5c719e892a55cc  gcc/lto/ChangeLog
  3e7816807401da2506930719e6dc8b3d  gcc/lto/Make-lang.in
  705d8eaa74b456d79367c2c42b7a2fef  gcc/lto/common.cc
  3d201b30f0538a8cfddc450739b1c8c5  gcc/lto/common.h
*************** e09c982f34fcc53d88fb9b974a77d569  gcc/lt
*** 6836,6842 ****
  24353553f316f6efb9d7f42253a3ec7c  gcc/lto/lto-dump.cc
  6f7bac8568b01539cfeadad94e94aa6e  gcc/lto/lto-lang.cc
  3b697054907d273bdcb6e5026d3bc875  gcc/lto/lto-object.cc
! bcc9814aad9ecf74b4e311e6ba1c87cb  gcc/lto/lto-partition.cc
  6bdee5523aaa6e7091e15f5270e1ef9f  gcc/lto/lto-partition.h
  3890271ac10891e53209884724fcb93a  gcc/lto/lto-symtab.cc
  37534ae509993637d7af9690433de15c  gcc/lto/lto-symtab.h
--- 6843,6849 ----
  24353553f316f6efb9d7f42253a3ec7c  gcc/lto/lto-dump.cc
  6f7bac8568b01539cfeadad94e94aa6e  gcc/lto/lto-lang.cc
  3b697054907d273bdcb6e5026d3bc875  gcc/lto/lto-object.cc
! d9bc8702c1d8c5e911fcc387fdcb212e  gcc/lto/lto-partition.cc
  6bdee5523aaa6e7091e15f5270e1ef9f  gcc/lto/lto-partition.h
  3890271ac10891e53209884724fcb93a  gcc/lto/lto-symtab.cc
  37534ae509993637d7af9690433de15c  gcc/lto/lto-symtab.h
*************** ff9a9ca6ac5fa2e371f831911c148f9b  gcc/lt
*** 6847,6853 ****
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! f78361ae2b1bf6be04ed68700d264f00  gcc/m2/ChangeLog
  1b9fd55a4978f2f62717ca706fc999f4  gcc/m2/Make-lang.in
  e212443a3231afc28440b22d94debe50  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
--- 6854,6860 ----
  b417a4bd52371186803e70c49d24764d  gcc/m2/COPYING.RUNTIME
  8f0e2cd40e05189ec81232da84bd6e1a  gcc/m2/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/m2/COPYING3.LIB
! 6c0f9a32e54236d38df2bb89d0f7686e  gcc/m2/ChangeLog
  1b9fd55a4978f2f62717ca706fc999f4  gcc/m2/Make-lang.in
  e212443a3231afc28440b22d94debe50  gcc/m2/Make-maintainer.in
  6a74129fda00ca52ba9f953538250c45  gcc/m2/NEWS
*************** dec6f2aff29cb5fe1427242c7c5e9bd7  gcc/m2
*** 6881,6887 ****
  d4b939b5e1e8ebd5bbfd57a171da0768  gcc/m2/gm2-compiler/M2CaseList.def
  d909ebca1c78b11d3c55468686f7dcea  gcc/m2/gm2-compiler/M2CaseList.mod
  e77e63c641c7e1cd6a919ca2565d5a53  gcc/m2/gm2-compiler/M2Check.def
! 38e3aebb38a1c301731879541e5c837a  gcc/m2/gm2-compiler/M2Check.mod
  478260474362f8756893377722538db4  gcc/m2/gm2-compiler/M2Code.def
  fb61dc2b9faf55fe1da94c60b08cc78b  gcc/m2/gm2-compiler/M2Code.mod
  7ec6d0e1d8778b77940a35fb413cc951  gcc/m2/gm2-compiler/M2ColorString.def
--- 6888,6894 ----
  d4b939b5e1e8ebd5bbfd57a171da0768  gcc/m2/gm2-compiler/M2CaseList.def
  d909ebca1c78b11d3c55468686f7dcea  gcc/m2/gm2-compiler/M2CaseList.mod
  e77e63c641c7e1cd6a919ca2565d5a53  gcc/m2/gm2-compiler/M2Check.def
! ed48061c8f57cad5b584b2341df0a71d  gcc/m2/gm2-compiler/M2Check.mod
  478260474362f8756893377722538db4  gcc/m2/gm2-compiler/M2Code.def
  fb61dc2b9faf55fe1da94c60b08cc78b  gcc/m2/gm2-compiler/M2Code.mod
  7ec6d0e1d8778b77940a35fb413cc951  gcc/m2/gm2-compiler/M2ColorString.def
*************** d02bb7b852c2149c474702f929b72f2d  gcc/m2
*** 7464,7470 ****
  4f9ca67dfdb615548406065b7b773e3a  gcc/m2/init/ppginit
  0a585a032e28317a1dc67efc96504e1f  gcc/m2/lang-specs.h
  dcf5869197a10fda9b1ac85f1f98f881  gcc/m2/lang.opt
! 98babbfa95039203c0e5baad7961c23b  gcc/m2/lang.opt.urls
  36221d63a7a556b1dbbd7b2aa1ddd8fa  gcc/m2/m2-tree.def
  a93d546f180b351bb03d87a0bb03ef2f  gcc/m2/m2-tree.h
  2731299d727fa2c03f42276fc7e7c611  gcc/m2/m2.flex
--- 7471,7477 ----
  4f9ca67dfdb615548406065b7b773e3a  gcc/m2/init/ppginit
  0a585a032e28317a1dc67efc96504e1f  gcc/m2/lang-specs.h
  dcf5869197a10fda9b1ac85f1f98f881  gcc/m2/lang.opt
! f1cb7df91bad432be7eee94558b6a5b1  gcc/m2/lang.opt.urls
  36221d63a7a556b1dbbd7b2aa1ddd8fa  gcc/m2/m2-tree.def
  a93d546f180b351bb03d87a0bb03ef2f  gcc/m2/m2-tree.h
  2731299d727fa2c03f42276fc7e7c611  gcc/m2/m2.flex
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7822,7828 ****
  9c73ce7b15dda9ddf7130eb220aee884  gcc/machmode.def
  550bdb35d0e034ca0050c574ba896d61  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 09bd26f68c0755db11fa9e6913268f0f  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
--- 7829,7835 ----
  9c73ce7b15dda9ddf7130eb220aee884  gcc/machmode.def
  550bdb35d0e034ca0050c574ba896d61  gcc/machmode.h
  486412acbbb6de10b080e31410a14f33  gcc/main.cc
! 98563a786ae65828f21df32c7d5e63b2  gcc/match.pd
  63bf182c7c3a100e101b2129976be89b  gcc/mcf.cc
  795fbbc034a60f5af7e79dbe3bac65a0  gcc/mem-stats-traits.h
  295dcd7618653c13dcf063266752d06f  gcc/mem-stats.h
*************** f731cb7ebdb94eb79e6d1f93d1f488ec  gcc/op
*** 7889,7895 ****
  301353d263ba0e1eac3f3242d9e7af47  gcc/optabs-libfuncs.h
  e3dcab493cb237abbc70ee839e1fc3c0  gcc/optabs-query.cc
  28bb97827aab6913c7fa55727bd8cea0  gcc/optabs-query.h
! 933d872e7e60ed7a16f387f74cf5dcd7  gcc/optabs-tree.cc
  295bbec8fcdeeac30d6f914e52d4adc4  gcc/optabs-tree.h
  79fd5b7dc301451eb44cafc5af373938  gcc/optabs.cc
  503193d9bcdf4017d90d212acc0a34f7  gcc/optabs.def
--- 7896,7902 ----
  301353d263ba0e1eac3f3242d9e7af47  gcc/optabs-libfuncs.h
  e3dcab493cb237abbc70ee839e1fc3c0  gcc/optabs-query.cc
  28bb97827aab6913c7fa55727bd8cea0  gcc/optabs-query.h
! 956c25750704a6c5f42092d7400badf3  gcc/optabs-tree.cc
  295bbec8fcdeeac30d6f914e52d4adc4  gcc/optabs-tree.h
  79fd5b7dc301451eb44cafc5af373938  gcc/optabs.cc
  503193d9bcdf4017d90d212acc0a34f7  gcc/optabs.def
*************** d6625bf8e7676e7c0d45da5ca515ab06  gcc/re
*** 7998,8004 ****
  d88ebbb33fb2dcd60634dd11046fb909  gcc/ree.cc
  40ff12eae68d7c45fee63cfa20a67634  gcc/reg-notes.def
  d9a5b27b6a11b7f53410e3e8959a2d6b  gcc/reg-stack.cc
! 5f5e42d9a84ab1e8ffc40fa2cbbd1194  gcc/regcprop.cc
  a15f939ddd4de2fc2a6dc44a5344d39f  gcc/regcprop.h
  fcafe43f1a7955c6e00e7b1301dae7ad  gcc/regenerate-attr-urls.py
  e49e4ee3d7a0a623c590ba79643ec4e1  gcc/regenerate-opt-urls.py
--- 8005,8011 ----
  d88ebbb33fb2dcd60634dd11046fb909  gcc/ree.cc
  40ff12eae68d7c45fee63cfa20a67634  gcc/reg-notes.def
  d9a5b27b6a11b7f53410e3e8959a2d6b  gcc/reg-stack.cc
! 6f0b286ad9972b8c8ef429a2be0db30b  gcc/regcprop.cc
  a15f939ddd4de2fc2a6dc44a5344d39f  gcc/regcprop.h
  fcafe43f1a7955c6e00e7b1301dae7ad  gcc/regenerate-attr-urls.py
  e49e4ee3d7a0a623c590ba79643ec4e1  gcc/regenerate-opt-urls.py
*************** f39c55472711c984059aff01fd972f31  gcc/rt
*** 8042,8048 ****
  1105088521e8de72d332faeda31306c7  gcc/rtl.cc
  41ece3c6a40e9a14609645318016e228  gcc/rtl.def
  5fd830e690852b2de24fd59bf66e4ddf  gcc/rtl.h
! d97bb2b208147641dac0560ab98d0f0b  gcc/rtlanal.cc
  e38f02dbd2d0d8c027ccae4b785f3fb2  gcc/rtlanal.h
  f829c444b36f34672cb4a7b019c4513b  gcc/rtlhash.cc
  ce0129afbbfb3ab85e5bd8ce9672117d  gcc/rtlhash.h
--- 8049,8055 ----
  1105088521e8de72d332faeda31306c7  gcc/rtl.cc
  41ece3c6a40e9a14609645318016e228  gcc/rtl.def
  5fd830e690852b2de24fd59bf66e4ddf  gcc/rtl.h
! 99715a5046015699d66147a5eac33352  gcc/rtlanal.cc
  e38f02dbd2d0d8c027ccae4b785f3fb2  gcc/rtlanal.h
  f829c444b36f34672cb4a7b019c4513b  gcc/rtlhash.cc
  ce0129afbbfb3ab85e5bd8ce9672117d  gcc/rtlhash.h
*************** c08edc659010d9072c249418c1be7fe6  gcc/rt
*** 8053,8059 ****
  ecb31a48caf7998f695601ec7350bdc0  gcc/run-rtl-passes.cc
  c4bc204b62fdb61848c09abf05a60a9d  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 58763dbd50c870e97e91c6776609ede3  gcc/rust/ChangeLog
  71972a823341f4ee0b2af7347ef7a633  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  27f492ab17f50d840e1e0fd32a89c84a  gcc/rust/ast/rust-ast-builder.cc
--- 8060,8066 ----
  ecb31a48caf7998f695601ec7350bdc0  gcc/run-rtl-passes.cc
  c4bc204b62fdb61848c09abf05a60a9d  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! 4a937995549253194fb99b79e37a81a7  gcc/rust/ChangeLog
  71972a823341f4ee0b2af7347ef7a633  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  27f492ab17f50d840e1e0fd32a89c84a  gcc/rust/ast/rust-ast-builder.cc
*************** bef8332d7c99228e46b17e35e62ab385  gcc/ru
*** 8142,8148 ****
  ded63052cb7097de9c2443746c403f00  gcc/rust/backend/rust-mangle-v0.cc
  21b6254246aa6d0468462df2e633b78b  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
! 6df730b8f6538c702c0a91c9981a8adf  gcc/rust/backend/rust-tree.cc
  578359539443d855402690166a1ff889  gcc/rust/backend/rust-tree.h
  675e019161664f914b95bbc7799e517c  gcc/rust/checks/errors/borrowck/bir-design-notes.md
  eee383c6d924f06fa96c8f58f21fc6af  gcc/rust/checks/errors/borrowck/dev-notes.md
--- 8149,8155 ----
  ded63052cb7097de9c2443746c403f00  gcc/rust/backend/rust-mangle-v0.cc
  21b6254246aa6d0468462df2e633b78b  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
! 108ad9b3d6a8af64ac85f85b367f08a0  gcc/rust/backend/rust-tree.cc
  578359539443d855402690166a1ff889  gcc/rust/backend/rust-tree.h
  675e019161664f914b95bbc7799e517c  gcc/rust/checks/errors/borrowck/bir-design-notes.md
  eee383c6d924f06fa96c8f58f21fc6af  gcc/rust/checks/errors/borrowck/dev-notes.md
*************** a6e7147406b59b396b29ce709fc52f1a  gcc/ru
*** 8377,8383 ****
  6ea149cdd32444b93f142193c19c3930  gcc/rust/hir/tree/rust-hir.h
  fa7c267c70f0094382b7b3df35e83412  gcc/rust/lang-specs.h
  e090436833a0ec80b591d0e2b8d0276b  gcc/rust/lang.opt
! 9bbbeb77fd5f1d0a5933a1f5f8e137e8  gcc/rust/lang.opt.urls
  4f1a01d5a1d9c4db6498642d7194185e  gcc/rust/lex/rust-input-source.h
  e33935e366fcf35231d6729937119c74  gcc/rust/lex/rust-lex.cc
  dff64547611254963c80197402f43560  gcc/rust/lex/rust-lex.h
--- 8384,8390 ----
  6ea149cdd32444b93f142193c19c3930  gcc/rust/hir/tree/rust-hir.h
  fa7c267c70f0094382b7b3df35e83412  gcc/rust/lang-specs.h
  e090436833a0ec80b591d0e2b8d0276b  gcc/rust/lang.opt
! a11b51758cadbfbc20e4c2969af1aa85  gcc/rust/lang.opt.urls
  4f1a01d5a1d9c4db6498642d7194185e  gcc/rust/lex/rust-input-source.h
  e33935e366fcf35231d6729937119c74  gcc/rust/lex/rust-lex.cc
  dff64547611254963c80197402f43560  gcc/rust/lex/rust-lex.h
*************** c37894be52ba5cc4406613a60ba6b289  gcc/ru
*** 8413,8419 ****
  f022a4ee2cba026a3593bb6b701ae2f8  gcc/rust/resolve/rust-ice-finalizer.h
  98f1d330caf4f27bd13e2a60d632182b  gcc/rust/resolve/rust-immutable-name-resolution-context.cc
  927471efaee1f85624e6e7eb00584819  gcc/rust/resolve/rust-immutable-name-resolution-context.h
! f9f3cb0f0d666cdc87307ef93c1b5f04  gcc/rust/resolve/rust-late-name-resolver-2.0.cc
  dd4621d653df40f236fecbec0b1caf48  gcc/rust/resolve/rust-late-name-resolver-2.0.h
  dac37149763dc8ccca753d54554514f6  gcc/rust/resolve/rust-name-resolution-context.cc
  3ea0376c3b22933ac67896d7cba8ad16  gcc/rust/resolve/rust-name-resolution-context.h
--- 8420,8426 ----
  f022a4ee2cba026a3593bb6b701ae2f8  gcc/rust/resolve/rust-ice-finalizer.h
  98f1d330caf4f27bd13e2a60d632182b  gcc/rust/resolve/rust-immutable-name-resolution-context.cc
  927471efaee1f85624e6e7eb00584819  gcc/rust/resolve/rust-immutable-name-resolution-context.h
! 720ad81788075501ebcfa6039be9e8ad  gcc/rust/resolve/rust-late-name-resolver-2.0.cc
  dd4621d653df40f236fecbec0b1caf48  gcc/rust/resolve/rust-late-name-resolver-2.0.h
  dac37149763dc8ccca753d54554514f6  gcc/rust/resolve/rust-name-resolution-context.cc
  3ea0376c3b22933ac67896d7cba8ad16  gcc/rust/resolve/rust-name-resolution-context.h
*************** d52852ab0122f14cd4f7658db8b9c6df  gcc/sy
*** 8621,8629 ****
  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
  7e57ef65e3a1144e28765b6e8d7f6cff  gcc/target-globals.cc
  32c99c974fd34089d47160168688da1d  gcc/target-globals.h
--- 8628,8636 ----
  5dcfbac7f32752af3034f02319af81d7  gcc/symtab-clones.h
  f849345d69b622ff9e7b96095bc2c34e  gcc/symtab-thunks.cc
  c9829745147a0b8ec026a3c5029fe2ff  gcc/symtab-thunks.h
! af4a7e48029da7044a4c14c49aec9bbc  gcc/symtab.cc
  b3a965e425e6cf7888319667faf58da9  gcc/sync-builtins.def
! 353703fae4f1352aaccc41524c5bf6db  gcc/system.h
  480d916fe042a150001ad88e88521c08  gcc/target-def.h
  7e57ef65e3a1144e28765b6e8d7f6cff  gcc/target-globals.cc
  32c99c974fd34089d47160168688da1d  gcc/target-globals.h
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8634,8640 ****
  b3ba747676feafec77aa6befa2dec6f0  gcc/targhooks.cc
  94a98d77cef80b0f949fc6d206067e2e  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 599e4091bb1bf7358bfb4c1819e959b8  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8641,8647 ----
  b3ba747676feafec77aa6befa2dec6f0  gcc/targhooks.cc
  94a98d77cef80b0f949fc6d206067e2e  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! ae0a9c8f11f6efe1568cf469eb1d3b17  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** f6992141febcab7071f62af571dc1662  gcc/te
*** 17294,17299 ****
--- 17301,17307 ----
  97149bb12892029bbf7ccfa70f988694  gcc/testsuite/algol68/execute/lt-int-1.a68
  403664d8fdb92d44d8d77f5c7769d658  gcc/testsuite/algol68/execute/lt-string-stride-1.a68
  1c0c0e0d45f17319389527f9956e1fe8  gcc/testsuite/algol68/execute/lwb-1.a68
+ 3c65d8653e286e0953552d6ff77e4db3  gcc/testsuite/algol68/execute/manorboy.a68
  7427bb81860a12c1d635ac31e9b96276  gcc/testsuite/algol68/execute/mcgt/execute.exp
  80101d91b48509cb4f7846351bba484c  gcc/testsuite/algol68/execute/mcgt/mcgt-1.3a.a68
  8564fc812b0e80bfef1c1a2398d54e63  gcc/testsuite/algol68/execute/mcgt/mcgt-1.3c.a68
*************** ed509318512a89382e1649c84de44521  gcc/te
*** 17356,17362 ****
  8003cac24f1aa6e0dc244b3788038cb6  gcc/testsuite/algol68/execute/mode-indication-1.a68
  bcfdb63511805c2e3f5b07f72f0171f0  gcc/testsuite/algol68/execute/modules/README
  b2a7a3e5db21bd4321546158c19963ba  gcc/testsuite/algol68/execute/modules/execute.exp
! 1dcb757cdfc80354940aadcc2c058999  gcc/testsuite/algol68/execute/modules/module1.a68
  855a8f2560fc05a0a81d49c7cb67ff67  gcc/testsuite/algol68/execute/modules/module10.a68
  3950a78a44cbdfecabd0173325cc5806  gcc/testsuite/algol68/execute/modules/module11.a68
  d96afe1f473d2f45009f219219c15469  gcc/testsuite/algol68/execute/modules/module12.a68
--- 17364,17370 ----
  8003cac24f1aa6e0dc244b3788038cb6  gcc/testsuite/algol68/execute/mode-indication-1.a68
  bcfdb63511805c2e3f5b07f72f0171f0  gcc/testsuite/algol68/execute/modules/README
  b2a7a3e5db21bd4321546158c19963ba  gcc/testsuite/algol68/execute/modules/execute.exp
! 39fcf22b33adb94c6b5bd5617b63e86d  gcc/testsuite/algol68/execute/modules/module1.a68
  855a8f2560fc05a0a81d49c7cb67ff67  gcc/testsuite/algol68/execute/modules/module10.a68
  3950a78a44cbdfecabd0173325cc5806  gcc/testsuite/algol68/execute/modules/module11.a68
  d96afe1f473d2f45009f219219c15469  gcc/testsuite/algol68/execute/modules/module12.a68
*************** a587cd3c9bf8eaf397493ee12823942c  gcc/te
*** 17365,17378 ****
  5e1d5cd221a76f2996c59afa5bf75942  gcc/testsuite/algol68/execute/modules/module15.a68
  185ca85ea1658a7f82885b2d9e7fd0b4  gcc/testsuite/algol68/execute/modules/module16.a68
  57b738768cdab45aabe10b1e59e257c5  gcc/testsuite/algol68/execute/modules/module17.a68
! 880d7639e77d0f19b0da5a934c5cec3e  gcc/testsuite/algol68/execute/modules/module3.a68
  1225a4492a80b08cd38a8c74e25a7ab0  gcc/testsuite/algol68/execute/modules/module4.a68
! dfcde2e6f5f9ba83ad95d08352828faa  gcc/testsuite/algol68/execute/modules/module5.a68
  396541529d8cfd984e6ebc38bde51a9b  gcc/testsuite/algol68/execute/modules/module6.a68
  419064d7a3423695654fcef0388d610c  gcc/testsuite/algol68/execute/modules/module7.a68
  6a5966491bddff109c2ed0e823615189  gcc/testsuite/algol68/execute/modules/module8.a68
  882e0ef3985404b3636462c72835353e  gcc/testsuite/algol68/execute/modules/module9.a68
! d82ffb64f017fd85ea727009a0f294f8  gcc/testsuite/algol68/execute/modules/program-1.a68
  5618708adeaf82bdc3bbe7bf1b1df2e9  gcc/testsuite/algol68/execute/modules/program-10.a68
  f426864755e710beb231da3ea058d671  gcc/testsuite/algol68/execute/modules/program-11.a68
  329d4057fbba0540485078cb4f62aec9  gcc/testsuite/algol68/execute/modules/program-12.a68
--- 17373,17386 ----
  5e1d5cd221a76f2996c59afa5bf75942  gcc/testsuite/algol68/execute/modules/module15.a68
  185ca85ea1658a7f82885b2d9e7fd0b4  gcc/testsuite/algol68/execute/modules/module16.a68
  57b738768cdab45aabe10b1e59e257c5  gcc/testsuite/algol68/execute/modules/module17.a68
! 9e0733a763fc93bd2c58a8ffca51301f  gcc/testsuite/algol68/execute/modules/module3.a68
  1225a4492a80b08cd38a8c74e25a7ab0  gcc/testsuite/algol68/execute/modules/module4.a68
! 4ceb6b4c31b8b4abc32b8c6a92979888  gcc/testsuite/algol68/execute/modules/module5.a68
  396541529d8cfd984e6ebc38bde51a9b  gcc/testsuite/algol68/execute/modules/module6.a68
  419064d7a3423695654fcef0388d610c  gcc/testsuite/algol68/execute/modules/module7.a68
  6a5966491bddff109c2ed0e823615189  gcc/testsuite/algol68/execute/modules/module8.a68
  882e0ef3985404b3636462c72835353e  gcc/testsuite/algol68/execute/modules/module9.a68
! fa32385209c69f16d1ffeb239cadc468  gcc/testsuite/algol68/execute/modules/program-1.a68
  5618708adeaf82bdc3bbe7bf1b1df2e9  gcc/testsuite/algol68/execute/modules/program-10.a68
  f426864755e710beb231da3ea058d671  gcc/testsuite/algol68/execute/modules/program-11.a68
  329d4057fbba0540485078cb4f62aec9  gcc/testsuite/algol68/execute/modules/program-12.a68
*************** a00ad027485af688f31ddcf5b822ad9e  gcc/te
*** 17386,17392 ****
  4d122e5a57e1d21a9b17f9f8f8dbf2ca  gcc/testsuite/algol68/execute/modules/program-6.a68
  ca3ee436ba2d2f6b312280612d6b4faa  gcc/testsuite/algol68/execute/modules/program-7.a68
  d4492021f16108b406a1eccac228712e  gcc/testsuite/algol68/execute/modules/program-8.a68
! 5962da4e941c3773891bb12cdac8fccc  gcc/testsuite/algol68/execute/mult-char-1.a68
  9938e4a6def695b9ebb313bea35be215  gcc/testsuite/algol68/execute/mult-int-1.a68
  b08b081b1c1906059423123344abcd9b  gcc/testsuite/algol68/execute/mult-string-1.a68
  5d0a358e47e5ed7d1caee2eb832a6588  gcc/testsuite/algol68/execute/mult-string-2.a68
--- 17394,17400 ----
  4d122e5a57e1d21a9b17f9f8f8dbf2ca  gcc/testsuite/algol68/execute/modules/program-6.a68
  ca3ee436ba2d2f6b312280612d6b4faa  gcc/testsuite/algol68/execute/modules/program-7.a68
  d4492021f16108b406a1eccac228712e  gcc/testsuite/algol68/execute/modules/program-8.a68
! a81f53b48af4e3b1ae21a38f4b306726  gcc/testsuite/algol68/execute/mult-char-1.a68
  9938e4a6def695b9ebb313bea35be215  gcc/testsuite/algol68/execute/mult-int-1.a68
  b08b081b1c1906059423123344abcd9b  gcc/testsuite/algol68/execute/mult-string-1.a68
  5d0a358e47e5ed7d1caee2eb832a6588  gcc/testsuite/algol68/execute/mult-string-2.a68
*************** ae3f4bf4ee25164b71dc94a7172cafcc  gcc/te
*** 17512,17518 ****
--- 17520,17528 ----
  27dc43ead96a9ec855bc98d26fcab92b  gcc/testsuite/algol68/execute/serial-dsa-5.a68
  2519a9203fb96f60b7982f762b7c4656  gcc/testsuite/algol68/execute/serial-dsa-6.a68
  3543b0b2a02ee32fac8ef667ed25e8c1  gcc/testsuite/algol68/execute/sign-int-1.a68
+ b8e8ba2539bd184e627b90e1a9d7f802  gcc/testsuite/algol68/execute/sign-int-2.a68
  21394bcfa28b81dd7c3700cd08599d4f  gcc/testsuite/algol68/execute/sign-real-1.a68
+ 1464306fc0b34e767186ebb9abdc6132  gcc/testsuite/algol68/execute/sign-real-2.a68
  a78674b92345fc7b380d9ac4502aca58  gcc/testsuite/algol68/execute/sin-1.a68
  fdf98ea6cb169d414d5b4261e0ab8051  gcc/testsuite/algol68/execute/skip-1.a68
  2152caeb6cb51f4cb6cfd71299075f57  gcc/testsuite/algol68/execute/skip-2.a68
*************** f5daaa51309a09590684e189ca5cef39  gcc/te
*** 17927,17933 ****
  27dc00e1de20b70d097540f7d52b4810  gcc/testsuite/c-c++-common/analyzer/allocation-size-2.c
  811092ddb8059f9af575535372cf4590  gcc/testsuite/c-c++-common/analyzer/allocation-size-3.c
  3ec0f11a7df9d5469e88d6b74e02f71b  gcc/testsuite/c-c++-common/analyzer/allocation-size-4.c
! 175dcd68173a275185d091a50b960a1e  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c
  e0cb9fd36a45a025e09e801b6c957686  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-2.c
  d5abab57686f3bb67c17fb893fa906c5  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-3.c
  ff142bf88e41f77d891ef01f35da87a1  gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c
--- 17937,17943 ----
  27dc00e1de20b70d097540f7d52b4810  gcc/testsuite/c-c++-common/analyzer/allocation-size-2.c
  811092ddb8059f9af575535372cf4590  gcc/testsuite/c-c++-common/analyzer/allocation-size-3.c
  3ec0f11a7df9d5469e88d6b74e02f71b  gcc/testsuite/c-c++-common/analyzer/allocation-size-4.c
! aaa6cbff71474123fbc7b9f839f77079  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c
  e0cb9fd36a45a025e09e801b6c957686  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-2.c
  d5abab57686f3bb67c17fb893fa906c5  gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-3.c
  ff142bf88e41f77d891ef01f35da87a1  gcc/testsuite/c-c++-common/analyzer/allocation-size-pr113654-1.c
*************** ec09b8590bd78bf31ce64c6cf4cafeb8  gcc/te
*** 17968,17974 ****
  cdbc4d03b7c0fff5e790a906b6ff8991  gcc/testsuite/c-c++-common/analyzer/attr-null_terminated_string_arg-nullable.c
  13ea03e0275293dce13c9983410375cc  gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-1.c
  3f7d3cba520a26c38c50f22274b6c413  gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-misuses.c
! 2a6fd4b0596437c81584911234e358fe  gcc/testsuite/c-c++-common/analyzer/bzip2-arg-parse-1.c
  d9ea3addbe933a89458f8582b71b610f  gcc/testsuite/c-c++-common/analyzer/call-summaries-1.c
  1d08e89be2885a0530a8dd0fd33848ce  gcc/testsuite/c-c++-common/analyzer/call-summaries-3.c
  a98652f2d06708729de689f5875dcc2c  gcc/testsuite/c-c++-common/analyzer/call-summaries-asm-x86.c
--- 17978,17984 ----
  cdbc4d03b7c0fff5e790a906b6ff8991  gcc/testsuite/c-c++-common/analyzer/attr-null_terminated_string_arg-nullable.c
  13ea03e0275293dce13c9983410375cc  gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-1.c
  3f7d3cba520a26c38c50f22274b6c413  gcc/testsuite/c-c++-common/analyzer/attr-tainted_args-misuses.c
! f641b240540aa403ae54c94fb424f84a  gcc/testsuite/c-c++-common/analyzer/bzip2-arg-parse-1.c
  d9ea3addbe933a89458f8582b71b610f  gcc/testsuite/c-c++-common/analyzer/call-summaries-1.c
  1d08e89be2885a0530a8dd0fd33848ce  gcc/testsuite/c-c++-common/analyzer/call-summaries-3.c
  a98652f2d06708729de689f5875dcc2c  gcc/testsuite/c-c++-common/analyzer/call-summaries-asm-x86.c
*************** c3cc13dab6d2fade664ad81477406518  gcc/te
*** 17992,18005 ****
  e8c412b9eaf42745a7fc07cc52fd19af  gcc/testsuite/c-c++-common/analyzer/compound-assignment-pr112969.c
  76288e31c6c0d1e9c35771d4cfda7811  gcc/testsuite/c-c++-common/analyzer/computed-goto-1.c
  414c98967b21f8892f6579d63fa90a9e  gcc/testsuite/c-c++-common/analyzer/conditionals-pr111881.c
! 0f5b65fd4ca424ff151315d4a8f2a405  gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c
  cc0f23b2ce68c195b7e03c19c98794a7  gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c
  155d36ab3fdd051347569701effe1700  gcc/testsuite/c-c++-common/analyzer/data-model-11.c
  ed3e5f87e61e0018134586c5a1a64feb  gcc/testsuite/c-c++-common/analyzer/data-model-12.c
  3b6f2946393d384b8f9dc15de19da5b6  gcc/testsuite/c-c++-common/analyzer/data-model-14.c
  41986412fcfd0857f096ced958eeadf1  gcc/testsuite/c-c++-common/analyzer/data-model-18.c
  4553c74241f2cd9efbf26371de99807d  gcc/testsuite/c-c++-common/analyzer/data-model-2.c
! d3ef246c1410f2f451eee532ae6fea58  gcc/testsuite/c-c++-common/analyzer/data-model-20.c
  1a7244f30f830702369a54bb48fc8aef  gcc/testsuite/c-c++-common/analyzer/data-model-21.c
  6ed32dd828aa4f9e806d00ad8e58990b  gcc/testsuite/c-c++-common/analyzer/data-model-22.c
  a0cd88952248c9e6aeab396421bca6fc  gcc/testsuite/c-c++-common/analyzer/data-model-4.c
--- 18002,18016 ----
  e8c412b9eaf42745a7fc07cc52fd19af  gcc/testsuite/c-c++-common/analyzer/compound-assignment-pr112969.c
  76288e31c6c0d1e9c35771d4cfda7811  gcc/testsuite/c-c++-common/analyzer/computed-goto-1.c
  414c98967b21f8892f6579d63fa90a9e  gcc/testsuite/c-c++-common/analyzer/conditionals-pr111881.c
! d7794ed91b592bdaaebd423b3d5d046d  gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c
! 41577e8108f61dd2242681d7534b7d2b  gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c
  cc0f23b2ce68c195b7e03c19c98794a7  gcc/testsuite/c-c++-common/analyzer/coreutils-sum-pr108666.c
  155d36ab3fdd051347569701effe1700  gcc/testsuite/c-c++-common/analyzer/data-model-11.c
  ed3e5f87e61e0018134586c5a1a64feb  gcc/testsuite/c-c++-common/analyzer/data-model-12.c
  3b6f2946393d384b8f9dc15de19da5b6  gcc/testsuite/c-c++-common/analyzer/data-model-14.c
  41986412fcfd0857f096ced958eeadf1  gcc/testsuite/c-c++-common/analyzer/data-model-18.c
  4553c74241f2cd9efbf26371de99807d  gcc/testsuite/c-c++-common/analyzer/data-model-2.c
! 761d8a93b284c51b13449ad4372b30c0  gcc/testsuite/c-c++-common/analyzer/data-model-20.c
  1a7244f30f830702369a54bb48fc8aef  gcc/testsuite/c-c++-common/analyzer/data-model-21.c
  6ed32dd828aa4f9e806d00ad8e58990b  gcc/testsuite/c-c++-common/analyzer/data-model-22.c
  a0cd88952248c9e6aeab396421bca6fc  gcc/testsuite/c-c++-common/analyzer/data-model-4.c
*************** f22c1d6f613d0a75782bbe2b9985409c  gcc/te
*** 18019,18027 ****
  3efd9ef09bb52fe32780b0cf36d7b1d3  gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr112790.c
  9e78ad2b0dc193d5d9ff12c23ed54093  gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr114408.c
  7bf4703348c765739d583b7192f279b4  gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr77425.c
! d2ac7cdc94dcc7ea5bfd23ed78b9b41a  gcc/testsuite/c-c++-common/analyzer/deref-before-check-qemu-qtest_rsp_args.c
  e72d4d58ac74047ac994b14980352fac  gcc/testsuite/c-c++-common/analyzer/disabling.c
! 4ebb603262b29b6eb98d535349c4a447  gcc/testsuite/c-c++-common/analyzer/dot-output.c
  fda96ad160dde929000c954a08b084bf  gcc/testsuite/c-c++-common/analyzer/dump-state.c
  b38fbb0d028c69f962c89ebba073f297  gcc/testsuite/c-c++-common/analyzer/edges-2.c
  cd58bff2b56161f01ab9307737cbe5dd  gcc/testsuite/c-c++-common/analyzer/equivalence.c
--- 18030,18038 ----
  3efd9ef09bb52fe32780b0cf36d7b1d3  gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr112790.c
  9e78ad2b0dc193d5d9ff12c23ed54093  gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr114408.c
  7bf4703348c765739d583b7192f279b4  gcc/testsuite/c-c++-common/analyzer/deref-before-check-pr77425.c
! 886f3f33c2d279807ee7298e0c063925  gcc/testsuite/c-c++-common/analyzer/deref-before-check-qemu-qtest_rsp_args.c
  e72d4d58ac74047ac994b14980352fac  gcc/testsuite/c-c++-common/analyzer/disabling.c
! 19aacf9c33e54908fddb0b6eaf172fdd  gcc/testsuite/c-c++-common/analyzer/dot-output.c
  fda96ad160dde929000c954a08b084bf  gcc/testsuite/c-c++-common/analyzer/dump-state.c
  b38fbb0d028c69f962c89ebba073f297  gcc/testsuite/c-c++-common/analyzer/edges-2.c
  cd58bff2b56161f01ab9307737cbe5dd  gcc/testsuite/c-c++-common/analyzer/equivalence.c
*************** af5c71db79db8bbfa151cc192fcfe969  gcc/te
*** 18047,18053 ****
  2a7d531dc598fbf61e8ce805609bcc58  gcc/testsuite/c-c++-common/analyzer/fd-manpage-getaddrinfo-server.c
  e97f066eb1df45c004940dd4bf4a5e8c  gcc/testsuite/c-c++-common/analyzer/fd-meaning.c
  591b3a6ec13f473ada0c9ad8e8cbc607  gcc/testsuite/c-c++-common/analyzer/fd-socket-meaning.c
! a84bc3781d40faab06837267da688461  gcc/testsuite/c-c++-common/analyzer/fd-symbolic-socket.c
  c1e500f74e478290b2358e6a5d237d83  gcc/testsuite/c-c++-common/analyzer/fd-uninit-1.c
  c67fd7150c48c2cbde13c569af42d724  gcc/testsuite/c-c++-common/analyzer/feasibility-1.c
  00d15989662428086fefe3003fd1d85d  gcc/testsuite/c-c++-common/analyzer/feasibility-2.c
--- 18058,18064 ----
  2a7d531dc598fbf61e8ce805609bcc58  gcc/testsuite/c-c++-common/analyzer/fd-manpage-getaddrinfo-server.c
  e97f066eb1df45c004940dd4bf4a5e8c  gcc/testsuite/c-c++-common/analyzer/fd-meaning.c
  591b3a6ec13f473ada0c9ad8e8cbc607  gcc/testsuite/c-c++-common/analyzer/fd-socket-meaning.c
! 4cada35055b521701efbb095917e72d2  gcc/testsuite/c-c++-common/analyzer/fd-symbolic-socket.c
  c1e500f74e478290b2358e6a5d237d83  gcc/testsuite/c-c++-common/analyzer/fd-uninit-1.c
  c67fd7150c48c2cbde13c569af42d724  gcc/testsuite/c-c++-common/analyzer/feasibility-1.c
  00d15989662428086fefe3003fd1d85d  gcc/testsuite/c-c++-common/analyzer/feasibility-2.c
*************** c67fd7150c48c2cbde13c569af42d724  gcc/te
*** 18056,18062 ****
  166367f89bddb5b54a71a7870a8f1fe1  gcc/testsuite/c-c++-common/analyzer/feasibility-pr107948.c
  1461e7b4d80bbbc9eaca84c3c53e4ced  gcc/testsuite/c-c++-common/analyzer/ferror-1.c
  23bc59087d794c1b065cef050c3433d2  gcc/testsuite/c-c++-common/analyzer/fgets-1.c
! 0d6e01df673fded93678160ef3f843e9  gcc/testsuite/c-c++-common/analyzer/fibonacci.c
  badf258f6f3121025b0d3b8332fda51f  gcc/testsuite/c-c++-common/analyzer/fields.c
  7556950b9334c6e70b7075b1ee29d5fe  gcc/testsuite/c-c++-common/analyzer/file-1.c
  7e6205779b03916212dd157742d257bf  gcc/testsuite/c-c++-common/analyzer/file-3.c
--- 18067,18073 ----
  166367f89bddb5b54a71a7870a8f1fe1  gcc/testsuite/c-c++-common/analyzer/feasibility-pr107948.c
  1461e7b4d80bbbc9eaca84c3c53e4ced  gcc/testsuite/c-c++-common/analyzer/ferror-1.c
  23bc59087d794c1b065cef050c3433d2  gcc/testsuite/c-c++-common/analyzer/fgets-1.c
! 48b6882b3ff2facd9adb190fa277743f  gcc/testsuite/c-c++-common/analyzer/fibonacci.c
  badf258f6f3121025b0d3b8332fda51f  gcc/testsuite/c-c++-common/analyzer/fields.c
  7556950b9334c6e70b7075b1ee29d5fe  gcc/testsuite/c-c++-common/analyzer/file-1.c
  7e6205779b03916212dd157742d257bf  gcc/testsuite/c-c++-common/analyzer/file-3.c
*************** e8f2ac5a2eaf583345c763651947c9b5  gcc/te
*** 18066,18073 ****
  50e92bcce9bdc748be8e90cf89d2dfc7  gcc/testsuite/c-c++-common/analyzer/fileno-1.c
  a54c5604b047a4dc1ca40c729785be0b  gcc/testsuite/c-c++-common/analyzer/first-field-1.c
  bdefb38ec06fb2e8a965770a1ddea724  gcc/testsuite/c-c++-common/analyzer/first-field-2.c
! fc51afade5f3ca99d0d8c342a92e8b85  gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c
! 511ea7435f4f4c53185e52c527c62a7a  gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c
  28949d2a04a0d181e2013c7f210560c6  gcc/testsuite/c-c++-common/analyzer/flexible-array-member-1.c
  3a1490518625a0c947e5b6ac2c5401eb  gcc/testsuite/c-c++-common/analyzer/fold-string-to-char.c
  3ca6537a697cd0e749a07d45d59ad24d  gcc/testsuite/c-c++-common/analyzer/fopen-2.c
--- 18077,18084 ----
  50e92bcce9bdc748be8e90cf89d2dfc7  gcc/testsuite/c-c++-common/analyzer/fileno-1.c
  a54c5604b047a4dc1ca40c729785be0b  gcc/testsuite/c-c++-common/analyzer/first-field-1.c
  bdefb38ec06fb2e8a965770a1ddea724  gcc/testsuite/c-c++-common/analyzer/first-field-2.c
! b8afac2235f0cb3ddf49379207ffb33f  gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c
! 85fe5d5ba49e6a9acd43bb251c13960c  gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c
  28949d2a04a0d181e2013c7f210560c6  gcc/testsuite/c-c++-common/analyzer/flexible-array-member-1.c
  3a1490518625a0c947e5b6ac2c5401eb  gcc/testsuite/c-c++-common/analyzer/fold-string-to-char.c
  3ca6537a697cd0e749a07d45d59ad24d  gcc/testsuite/c-c++-common/analyzer/fopen-2.c
*************** a105342d3292d355507ab715b3a2ca98  gcc/te
*** 18101,18113 ****
  6c02fdcda6da2e22db9f2590da1ed81e  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-4-limited.c
  29e098dde04cb3f8dc4bc4d3e6ecea87  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-4-unlimited-buggy.c
  57e4b763cf0302dace5e4608c7185d85  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-4-unlimited.c
! eecccbd82a0978c6fefd4883a004a5ce  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-5.c
  4a35e75e78cf53bf248bf08a1e709427  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-alloca.c
  4f74fbc85a1872090b39ede44d71e939  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-inlining.c
  6047a46b4b1e3a1818da6c9ef886d468  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-multiline-1.c
  501065cb78c98e2903bf9054434721ec  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-multiline-2.c
  678e520520e179deadde681b805a0226  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-1.c
! 8ae2d2ad11ab012d4ebd59de300448ef  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-2.c
  3c9e1c86490f5c76c234118f3a094965  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-qobject-json-parser.c
  a66185ed3bef2742621b423d3bec08ab  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108935-1.c
  7d75523d81879148276b42e991a4c362  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108935-1a.c
--- 18112,18124 ----
  6c02fdcda6da2e22db9f2590da1ed81e  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-4-limited.c
  29e098dde04cb3f8dc4bc4d3e6ecea87  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-4-unlimited-buggy.c
  57e4b763cf0302dace5e4608c7185d85  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-4-unlimited.c
! 4b57b38282c769674df370187662f8a3  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-5.c
  4a35e75e78cf53bf248bf08a1e709427  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-alloca.c
  4f74fbc85a1872090b39ede44d71e939  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-inlining.c
  6047a46b4b1e3a1818da6c9ef886d468  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-multiline-1.c
  501065cb78c98e2903bf9054434721ec  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-multiline-2.c
  678e520520e179deadde681b805a0226  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-1.c
! 6b2fa9590fbf000538c177e3195be8b2  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-2.c
  3c9e1c86490f5c76c234118f3a094965  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-qobject-json-parser.c
  a66185ed3bef2742621b423d3bec08ab  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108935-1.c
  7d75523d81879148276b42e991a4c362  gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108935-1a.c
*************** abfa35b8a5fc745a6ae1279a469abdb3  gcc/te
*** 18130,18136 ****
  f96a5e26ebe3f224244fcc898ace703b  gcc/testsuite/c-c++-common/analyzer/inlining-6.c
  03a1d1ad07367c4df1878142d6ed4cd4  gcc/testsuite/c-c++-common/analyzer/inlining-7-multiline.c
  28235c739e7b12bff289d278f8971f92  gcc/testsuite/c-c++-common/analyzer/inlining-7.c
! c24cdf96eb395500ebea40130ce0ae46  gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c
  3cb97718e1fbbc9845c767bb007b9fa9  gcc/testsuite/c-c++-common/analyzer/isatty-1.c
  a710cd85a1cb3f973bf3b9b487e3c805  gcc/testsuite/c-c++-common/analyzer/leak-2.c
  2d17a6ee0daf9cc6a6dab539670520a2  gcc/testsuite/c-c++-common/analyzer/leak-3.c
--- 18141,18148 ----
  f96a5e26ebe3f224244fcc898ace703b  gcc/testsuite/c-c++-common/analyzer/inlining-6.c
  03a1d1ad07367c4df1878142d6ed4cd4  gcc/testsuite/c-c++-common/analyzer/inlining-7-multiline.c
  28235c739e7b12bff289d278f8971f92  gcc/testsuite/c-c++-common/analyzer/inlining-7.c
! 7a48058aaf7419920b16429c67d04982  gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c
! c2fe5f3adb1d4f5c27c7d505befae7b9  gcc/testsuite/c-c++-common/analyzer/ipa-callbacks-1.c
  3cb97718e1fbbc9845c767bb007b9fa9  gcc/testsuite/c-c++-common/analyzer/isatty-1.c
  a710cd85a1cb3f973bf3b9b487e3c805  gcc/testsuite/c-c++-common/analyzer/leak-2.c
  2d17a6ee0daf9cc6a6dab539670520a2  gcc/testsuite/c-c++-common/analyzer/leak-3.c
*************** d84e4faf90db15ae62e01e3b04e20bbb  gcc/te
*** 18145,18157 ****
  8c2a26147f66df7eb2ef94470bae77e8  gcc/testsuite/c-c++-common/analyzer/loop-2.c
  d6bb93bd02ecebd1916046e5a2a48d40  gcc/testsuite/c-c++-common/analyzer/loop-2a.c
  5ecbec4be61d32149dd5b630757ddd4d  gcc/testsuite/c-c++-common/analyzer/loop-3.c
! 0ee2f8031c238940bd9e987ce44c8fcb  gcc/testsuite/c-c++-common/analyzer/loop-4.c
! c8300e47d2a3531271804a8506b3763e  gcc/testsuite/c-c++-common/analyzer/loop-n-down-to-1-by-1.c
  e2a77424037e3f8e995d18b274bebccc  gcc/testsuite/c-c++-common/analyzer/loop-start-down-to-end-by-1.c
  223665e4098412e21c85c9579758b987  gcc/testsuite/c-c++-common/analyzer/loop-start-down-to-end-by-step.c
  f87f14f8a72827b5feee7074a11c8cad  gcc/testsuite/c-c++-common/analyzer/loop-start-to-end-by-step.c
  a7e5a47a1c4034d7e2762efa201bdec0  gcc/testsuite/c-c++-common/analyzer/loop-start-up-to-end-by-1.c
! fbacd9490cdecf026deea8560b5b6b83  gcc/testsuite/c-c++-common/analyzer/loop.c
  64f76515677dddc9e538e1b91b4e1e05  gcc/testsuite/c-c++-common/analyzer/malloc-2.c
  114a7985336b3fe3ab3c21bda564f04a  gcc/testsuite/c-c++-common/analyzer/malloc-3.c
  3e77ec3489ac3db49351c1d10657035a  gcc/testsuite/c-c++-common/analyzer/malloc-5.c
--- 18157,18169 ----
  8c2a26147f66df7eb2ef94470bae77e8  gcc/testsuite/c-c++-common/analyzer/loop-2.c
  d6bb93bd02ecebd1916046e5a2a48d40  gcc/testsuite/c-c++-common/analyzer/loop-2a.c
  5ecbec4be61d32149dd5b630757ddd4d  gcc/testsuite/c-c++-common/analyzer/loop-3.c
! 24df7ef2a1bc116f8810d2ced21bbec8  gcc/testsuite/c-c++-common/analyzer/loop-4.c
! 7faa571273d7bcec1d22232cf12386c8  gcc/testsuite/c-c++-common/analyzer/loop-n-down-to-1-by-1.c
  e2a77424037e3f8e995d18b274bebccc  gcc/testsuite/c-c++-common/analyzer/loop-start-down-to-end-by-1.c
  223665e4098412e21c85c9579758b987  gcc/testsuite/c-c++-common/analyzer/loop-start-down-to-end-by-step.c
  f87f14f8a72827b5feee7074a11c8cad  gcc/testsuite/c-c++-common/analyzer/loop-start-to-end-by-step.c
  a7e5a47a1c4034d7e2762efa201bdec0  gcc/testsuite/c-c++-common/analyzer/loop-start-up-to-end-by-1.c
! b9a7d299aa00ae2e880b6f42e60f3ea7  gcc/testsuite/c-c++-common/analyzer/loop.c
  64f76515677dddc9e538e1b91b4e1e05  gcc/testsuite/c-c++-common/analyzer/malloc-2.c
  114a7985336b3fe3ab3c21bda564f04a  gcc/testsuite/c-c++-common/analyzer/malloc-3.c
  3e77ec3489ac3db49351c1d10657035a  gcc/testsuite/c-c++-common/analyzer/malloc-5.c
*************** dccaf3f6a5587a149aa108073584f903  gcc/te
*** 18221,18227 ****
  010805505962cb3ca5a783127e374794  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c
  76447181c8e4ba9f2f4b741530e5f530  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-5.c
  2c5cd1ccc8e8156dab1bceee1e648188  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c
! 2407d9e5c1b1cedd802a676294c32835  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c
  7b37db3cd00928477b112bf00cee7b33  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-curl.c
  0aa30057e371550257dca5d0ad20d954  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-sarif.c
  aa8b4b553cd662957411d18c1af815d7  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c
--- 18233,18239 ----
  010805505962cb3ca5a783127e374794  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-3.c
  76447181c8e4ba9f2f4b741530e5f530  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-5.c
  2c5cd1ccc8e8156dab1bceee1e648188  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-const-fn.c
! 6795a96b6fc0be9bd4170d12a24fbf9f  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c
  7b37db3cd00928477b112bf00cee7b33  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-curl.c
  0aa30057e371550257dca5d0ad20d954  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-1-sarif.c
  aa8b4b553cd662957411d18c1af815d7  gcc/testsuite/c-c++-common/analyzer/out-of-bounds-diagram-11.c
*************** e089e6b6af2eeb36ade618f602bd67bd  gcc/te
*** 18250,18256 ****
  25979d0595f5e4da39288a37576604b7  gcc/testsuite/c-c++-common/analyzer/paths-1a.c
  7a5be82eddd4e1df5ecb4f1b14585036  gcc/testsuite/c-c++-common/analyzer/paths-2.c
  f20f6dbe0a6340dd8819004d19a7464e  gcc/testsuite/c-c++-common/analyzer/paths-3.c
! 508bc423ef705c0c8789792e35ed3011  gcc/testsuite/c-c++-common/analyzer/paths-4.c
  324a76012fa37a5e46e7862f10d0b4ca  gcc/testsuite/c-c++-common/analyzer/paths-5.c
  d762e4f29fc0603fdeb824f4133502c6  gcc/testsuite/c-c++-common/analyzer/paths-6.c
  9195ce035a129e0bed083b3d5be5c053  gcc/testsuite/c-c++-common/analyzer/paths-7.c
--- 18262,18268 ----
  25979d0595f5e4da39288a37576604b7  gcc/testsuite/c-c++-common/analyzer/paths-1a.c
  7a5be82eddd4e1df5ecb4f1b14585036  gcc/testsuite/c-c++-common/analyzer/paths-2.c
  f20f6dbe0a6340dd8819004d19a7464e  gcc/testsuite/c-c++-common/analyzer/paths-3.c
! a7aaa0b5c14493ee8679654668fdbc6f  gcc/testsuite/c-c++-common/analyzer/paths-4.c
  324a76012fa37a5e46e7862f10d0b4ca  gcc/testsuite/c-c++-common/analyzer/paths-5.c
  d762e4f29fc0603fdeb824f4133502c6  gcc/testsuite/c-c++-common/analyzer/paths-6.c
  9195ce035a129e0bed083b3d5be5c053  gcc/testsuite/c-c++-common/analyzer/paths-7.c
*************** d092c910db92eea5975a648161bb95f1  gcc/te
*** 18308,18314 ****
  d562f145d761d598c4cf5d581b61e546  gcc/testsuite/c-c++-common/analyzer/pr94047.c
  872037e09757aa86b694f245b71c154d  gcc/testsuite/c-c++-common/analyzer/pr94099.c
  76559ba88816dd3d385d56090dd3e037  gcc/testsuite/c-c++-common/analyzer/pr94105.c
! 4a0882eb0437ed6fd5ca96ab27e0a6ba  gcc/testsuite/c-c++-common/analyzer/pr94362-1.c
  26e11daef97e39d6db3d2431e8863ce9  gcc/testsuite/c-c++-common/analyzer/pr94362-2.c
  7b14821ae094ff6c38d9eb288524fb41  gcc/testsuite/c-c++-common/analyzer/pr94399.c
  9c96000a1a0a853d0179d8fd11c65e55  gcc/testsuite/c-c++-common/analyzer/pr94447.c
--- 18320,18326 ----
  d562f145d761d598c4cf5d581b61e546  gcc/testsuite/c-c++-common/analyzer/pr94047.c
  872037e09757aa86b694f245b71c154d  gcc/testsuite/c-c++-common/analyzer/pr94099.c
  76559ba88816dd3d385d56090dd3e037  gcc/testsuite/c-c++-common/analyzer/pr94105.c
! 9f802d786bfaa4275d32e56327b77ce8  gcc/testsuite/c-c++-common/analyzer/pr94362-1.c
  26e11daef97e39d6db3d2431e8863ce9  gcc/testsuite/c-c++-common/analyzer/pr94362-2.c
  7b14821ae094ff6c38d9eb288524fb41  gcc/testsuite/c-c++-common/analyzer/pr94399.c
  9c96000a1a0a853d0179d8fd11c65e55  gcc/testsuite/c-c++-common/analyzer/pr94447.c
*************** fd0f492f05905f9735a1c3fb5aba65e2  gcc/te
*** 18318,18324 ****
  6cd931319824cc8853e7a562f4f1b30a  gcc/testsuite/c-c++-common/analyzer/pr94732.c
  fdaa0ecaf535d685940149efac11419b  gcc/testsuite/c-c++-common/analyzer/pr94839.c
  9c0c1d562c5f50e8d71f2cd524d906d8  gcc/testsuite/c-c++-common/analyzer/pr94851-1.c
! 8c6a8bbab3c19db44df94a37114a6bb5  gcc/testsuite/c-c++-common/analyzer/pr94851-2.c
  9ea2ed915597b6c25fabf8d6beb5fffd  gcc/testsuite/c-c++-common/analyzer/pr94851-3.c
  182b0e5fc0ff1e9e219acc8e4d0f9cef  gcc/testsuite/c-c++-common/analyzer/pr94851-4.c
  de6895701db3c05fb80ecd2032f4075f  gcc/testsuite/c-c++-common/analyzer/pr95026.c
--- 18330,18336 ----
  6cd931319824cc8853e7a562f4f1b30a  gcc/testsuite/c-c++-common/analyzer/pr94732.c
  fdaa0ecaf535d685940149efac11419b  gcc/testsuite/c-c++-common/analyzer/pr94839.c
  9c0c1d562c5f50e8d71f2cd524d906d8  gcc/testsuite/c-c++-common/analyzer/pr94851-1.c
! dbebf216fd7871db83ca0ab2bd202301  gcc/testsuite/c-c++-common/analyzer/pr94851-2.c
  9ea2ed915597b6c25fabf8d6beb5fffd  gcc/testsuite/c-c++-common/analyzer/pr94851-3.c
  182b0e5fc0ff1e9e219acc8e4d0f9cef  gcc/testsuite/c-c++-common/analyzer/pr94851-4.c
  de6895701db3c05fb80ecd2032f4075f  gcc/testsuite/c-c++-common/analyzer/pr95026.c
*************** a18aec5c928fb5cf0238f90bc5890720  gcc/te
*** 18329,18335 ****
  1cc9fc986e0c43dbfa3116f2b887d305  gcc/testsuite/c-c++-common/analyzer/pr96644.c
  8122e564ee9470c65abe46b95a4e01e0  gcc/testsuite/c-c++-common/analyzer/pr96646.c
  dbff5f371056a62a0166453b66a4e27a  gcc/testsuite/c-c++-common/analyzer/pr96648.c
! 7355069be28eed8d00160ea24380a9a5  gcc/testsuite/c-c++-common/analyzer/pr96650-1-notrans.c
  77b17b1f0a00bec490c6054aa76eadad  gcc/testsuite/c-c++-common/analyzer/pr96650-1-trans.c
  aa029c0bea41b0e118a8ca1f50d23b60  gcc/testsuite/c-c++-common/analyzer/pr96650-2-notrans.c
  8493678def139ca7a82b058857427371  gcc/testsuite/c-c++-common/analyzer/pr96650-2-trans.c
--- 18341,18347 ----
  1cc9fc986e0c43dbfa3116f2b887d305  gcc/testsuite/c-c++-common/analyzer/pr96644.c
  8122e564ee9470c65abe46b95a4e01e0  gcc/testsuite/c-c++-common/analyzer/pr96646.c
  dbff5f371056a62a0166453b66a4e27a  gcc/testsuite/c-c++-common/analyzer/pr96648.c
! 414d879e59c3fd4b62002334a98f99f3  gcc/testsuite/c-c++-common/analyzer/pr96650-1-notrans.c
  77b17b1f0a00bec490c6054aa76eadad  gcc/testsuite/c-c++-common/analyzer/pr96650-1-trans.c
  aa029c0bea41b0e118a8ca1f50d23b60  gcc/testsuite/c-c++-common/analyzer/pr96650-2-notrans.c
  8493678def139ca7a82b058857427371  gcc/testsuite/c-c++-common/analyzer/pr96650-2-trans.c
*************** b9380bb82c2c184f0d8eb4c299016e6a  gcc/te
*** 18357,18363 ****
  e4e4d2fd728f4821b426c4d375ab2a16  gcc/testsuite/c-c++-common/analyzer/pr98575-1.c
  bd0446dc7bfc92ba7fa31dec5245fdc8  gcc/testsuite/c-c++-common/analyzer/pr98580-a.c
  ec3f6b6ab51e286be338a54b446589e9  gcc/testsuite/c-c++-common/analyzer/pr98580-b.c
! b5432845f9f6b11cb824d6de156155cc  gcc/testsuite/c-c++-common/analyzer/pr98628.c
  75e5f564d41546d507331abeb98dc58a  gcc/testsuite/c-c++-common/analyzer/pr98918.c
  ceae315c9c06f08d0db10fee78e40833  gcc/testsuite/c-c++-common/analyzer/pr98969.c
  be93403b174680d98cbf78aa01fc24ae  gcc/testsuite/c-c++-common/analyzer/pr99044-2.c
--- 18369,18375 ----
  e4e4d2fd728f4821b426c4d375ab2a16  gcc/testsuite/c-c++-common/analyzer/pr98575-1.c
  bd0446dc7bfc92ba7fa31dec5245fdc8  gcc/testsuite/c-c++-common/analyzer/pr98580-a.c
  ec3f6b6ab51e286be338a54b446589e9  gcc/testsuite/c-c++-common/analyzer/pr98580-b.c
! 0ddbd4e948e02c502c6c1b671f0f9c9c  gcc/testsuite/c-c++-common/analyzer/pr98628.c
  75e5f564d41546d507331abeb98dc58a  gcc/testsuite/c-c++-common/analyzer/pr98918.c
  ceae315c9c06f08d0db10fee78e40833  gcc/testsuite/c-c++-common/analyzer/pr98969.c
  be93403b174680d98cbf78aa01fc24ae  gcc/testsuite/c-c++-common/analyzer/pr99044-2.c
*************** be93403b174680d98cbf78aa01fc24ae  gcc/te
*** 18367,18381 ****
  d058918b5866c765486992f2e8808a86  gcc/testsuite/c-c++-common/analyzer/pr99716-1.c
  d619f347f7a5956b714a0a9ec35757ab  gcc/testsuite/c-c++-common/analyzer/pr99716-2.c
  ad6b412250897f9dc88b89286707197e  gcc/testsuite/c-c++-common/analyzer/pr99716-3.c
! 6352d57a6346bfd0b199ef72d99f8010  gcc/testsuite/c-c++-common/analyzer/pr99774-1.c
  e7ec58c8488f858c6b9c88105194899a  gcc/testsuite/c-c++-common/analyzer/pr99906.c
  606573ca71b3befc49dfdedc5e6a6866  gcc/testsuite/c-c++-common/analyzer/pragma-1.c
! f3fc3fa68cf16f2f7c4bd1715e14c366  gcc/testsuite/c-c++-common/analyzer/pragma-2.c
  9430d0208459224bc903d37da0409ad1  gcc/testsuite/c-c++-common/analyzer/ptr-subtraction-1.c
  02794dd36e015d38e92b34ce4f665725  gcc/testsuite/c-c++-common/analyzer/ptr-subtraction-CWE-469-example.c
  b9dec47fd31ee45dd878530b5a551978  gcc/testsuite/c-c++-common/analyzer/raw-data-cst-pr117262-1.c
  86f639ec8d0b8277d748c42c89e3cd35  gcc/testsuite/c-c++-common/analyzer/raw-data-cst-pr117262-2.c
! 02fd51676a487d62e3de3243119377b0  gcc/testsuite/c-c++-common/analyzer/realloc-1.c
  9934b5785f041976924e22e94abcc411  gcc/testsuite/c-c++-common/analyzer/realloc-2.c
  c3ed923d26f47c708b12b964c6261a71  gcc/testsuite/c-c++-common/analyzer/realloc-3.c
  d3fd9e6273dea53493741229b2b67559  gcc/testsuite/c-c++-common/analyzer/realloc-4.c
--- 18379,18393 ----
  d058918b5866c765486992f2e8808a86  gcc/testsuite/c-c++-common/analyzer/pr99716-1.c
  d619f347f7a5956b714a0a9ec35757ab  gcc/testsuite/c-c++-common/analyzer/pr99716-2.c
  ad6b412250897f9dc88b89286707197e  gcc/testsuite/c-c++-common/analyzer/pr99716-3.c
! 981532d975e9a11a0d82f30054ba8726  gcc/testsuite/c-c++-common/analyzer/pr99774-1.c
  e7ec58c8488f858c6b9c88105194899a  gcc/testsuite/c-c++-common/analyzer/pr99906.c
  606573ca71b3befc49dfdedc5e6a6866  gcc/testsuite/c-c++-common/analyzer/pragma-1.c
! 997c97dd61ef110d7d5db435db020682  gcc/testsuite/c-c++-common/analyzer/pragma-2.c
  9430d0208459224bc903d37da0409ad1  gcc/testsuite/c-c++-common/analyzer/ptr-subtraction-1.c
  02794dd36e015d38e92b34ce4f665725  gcc/testsuite/c-c++-common/analyzer/ptr-subtraction-CWE-469-example.c
  b9dec47fd31ee45dd878530b5a551978  gcc/testsuite/c-c++-common/analyzer/raw-data-cst-pr117262-1.c
  86f639ec8d0b8277d748c42c89e3cd35  gcc/testsuite/c-c++-common/analyzer/raw-data-cst-pr117262-2.c
! ed19bd6035c229c80a63f4ee4d655992  gcc/testsuite/c-c++-common/analyzer/realloc-1.c
  9934b5785f041976924e22e94abcc411  gcc/testsuite/c-c++-common/analyzer/realloc-2.c
  c3ed923d26f47c708b12b964c6261a71  gcc/testsuite/c-c++-common/analyzer/realloc-3.c
  d3fd9e6273dea53493741229b2b67559  gcc/testsuite/c-c++-common/analyzer/realloc-4.c
*************** b81cc10859189c28863d9b148a72c47a  gcc/te
*** 18392,18407 ****
  773f2c55a24aaf21a6b87ad77c8e3f21  gcc/testsuite/c-c++-common/analyzer/setjmp-9.c
  8588e0ec348d5eef2edf586ce087d26b  gcc/testsuite/c-c++-common/analyzer/setjmp-pr109094.c
  394f49939f98479bfd289eb4607c2d3d  gcc/testsuite/c-c++-common/analyzer/snprintf-concat.c
! 42b00a365def68f85163d4976d2816f8  gcc/testsuite/c-c++-common/analyzer/sock-1.c
  d2d0bf430ae5db83cb2eeb1d4c3c4844  gcc/testsuite/c-c++-common/analyzer/sock-2.c
! fa7b1a5831a73be92ea8cf6c3d393f70  gcc/testsuite/c-c++-common/analyzer/sprintf-2.c
  5dd0b9c5a39e0eac15af79faec998e4e  gcc/testsuite/c-c++-common/analyzer/sprintf-3.c
! 309d9cc36ee0a4b44c86c901368cb298  gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c
  0d17ba25adaab3e664c5b31f67e250f4  gcc/testsuite/c-c++-common/analyzer/stale-frame-1.c
  44d8756f94c5eb1f54f1ad42b42b7c7e  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c
  565c27c80630eebb81d83c9cfbd163f5  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-ptr.c
  1e7d030baaceaf66501a55e6e522ff84  gcc/testsuite/c-c++-common/analyzer/stdarg-pr113509.c
! 6cb68eb8b2eb45ac0544be60f2161e0e  gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c
  386715a511e63dee39f78737e48a7137  gcc/testsuite/c-c++-common/analyzer/stdarg-types-2.c
  8ffbb46c48a69dd15b62a7f13fd55b94  gcc/testsuite/c-c++-common/analyzer/stdarg-types-3.c
  7f61fc263e6d3625a5df0e88fb730927  gcc/testsuite/c-c++-common/analyzer/stdarg-types-4.c
--- 18404,18419 ----
  773f2c55a24aaf21a6b87ad77c8e3f21  gcc/testsuite/c-c++-common/analyzer/setjmp-9.c
  8588e0ec348d5eef2edf586ce087d26b  gcc/testsuite/c-c++-common/analyzer/setjmp-pr109094.c
  394f49939f98479bfd289eb4607c2d3d  gcc/testsuite/c-c++-common/analyzer/snprintf-concat.c
! 575685f031ad1fc6fb26665c34eb23e2  gcc/testsuite/c-c++-common/analyzer/sock-1.c
  d2d0bf430ae5db83cb2eeb1d4c3c4844  gcc/testsuite/c-c++-common/analyzer/sock-2.c
! 76a9a3cbf5361173bf61bc8c208e9d90  gcc/testsuite/c-c++-common/analyzer/sprintf-2.c
  5dd0b9c5a39e0eac15af79faec998e4e  gcc/testsuite/c-c++-common/analyzer/sprintf-3.c
! a97a1068bf67d70b5efb114f54a7aad1  gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c
  0d17ba25adaab3e664c5b31f67e250f4  gcc/testsuite/c-c++-common/analyzer/stale-frame-1.c
  44d8756f94c5eb1f54f1ad42b42b7c7e  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-int.c
  565c27c80630eebb81d83c9cfbd163f5  gcc/testsuite/c-c++-common/analyzer/stdarg-pr111289-ptr.c
  1e7d030baaceaf66501a55e6e522ff84  gcc/testsuite/c-c++-common/analyzer/stdarg-pr113509.c
! 437bb25b72eb426ab31a4105ef80d41d  gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c
  386715a511e63dee39f78737e48a7137  gcc/testsuite/c-c++-common/analyzer/stdarg-types-2.c
  8ffbb46c48a69dd15b62a7f13fd55b94  gcc/testsuite/c-c++-common/analyzer/stdarg-types-3.c
  7f61fc263e6d3625a5df0e88fb730927  gcc/testsuite/c-c++-common/analyzer/stdarg-types-4.c
*************** a20f56474f9327e4df5f75e759a08cfc  gcc/te
*** 18411,18420 ****
  8f913e3de654aeeed3a380e266f73c9d  gcc/testsuite/c-c++-common/analyzer/strlen-pr111361.c
  c02d2254f7ec2e1d0a71dadd15088d94  gcc/testsuite/c-c++-common/analyzer/strlen-pr112811.c
  3d94f951f5b6fbc3d0844975b793c18e  gcc/testsuite/c-c++-common/analyzer/strlen-pr113999.c
! 094be02eb52b4c58b434801cf6dd0582  gcc/testsuite/c-c++-common/analyzer/strncpy-1.c
  95822937a3320cebcdcd88c927eb703e  gcc/testsuite/c-c++-common/analyzer/strncpy-pr111361.c
  5f63b79c771eee4d268d6bba34c9182c  gcc/testsuite/c-c++-common/analyzer/strndup-1.c
! 40f952624e2c69da69cf4f71c3709729  gcc/testsuite/c-c++-common/analyzer/strstr-1.c
  e42278d4075df8df53e7bdf029fb1b32  gcc/testsuite/c-c++-common/analyzer/strtok-1.c
  5692f39f9e1eb1d0bffdef5855475c4a  gcc/testsuite/c-c++-common/analyzer/strtok-2.c
  3860c30809fa4f2be07b2f54d0307dea  gcc/testsuite/c-c++-common/analyzer/strtok-3.c
--- 18423,18432 ----
  8f913e3de654aeeed3a380e266f73c9d  gcc/testsuite/c-c++-common/analyzer/strlen-pr111361.c
  c02d2254f7ec2e1d0a71dadd15088d94  gcc/testsuite/c-c++-common/analyzer/strlen-pr112811.c
  3d94f951f5b6fbc3d0844975b793c18e  gcc/testsuite/c-c++-common/analyzer/strlen-pr113999.c
! 188f94d7648b519e3d2cce6399a73f5f  gcc/testsuite/c-c++-common/analyzer/strncpy-1.c
  95822937a3320cebcdcd88c927eb703e  gcc/testsuite/c-c++-common/analyzer/strncpy-pr111361.c
  5f63b79c771eee4d268d6bba34c9182c  gcc/testsuite/c-c++-common/analyzer/strndup-1.c
! 3c614108330c0db6608c4a4ed728bcf3  gcc/testsuite/c-c++-common/analyzer/strstr-1.c
  e42278d4075df8df53e7bdf029fb1b32  gcc/testsuite/c-c++-common/analyzer/strtok-1.c
  5692f39f9e1eb1d0bffdef5855475c4a  gcc/testsuite/c-c++-common/analyzer/strtok-2.c
  3860c30809fa4f2be07b2f54d0307dea  gcc/testsuite/c-c++-common/analyzer/strtok-3.c
*************** c9229fff2e95406401ff0e77f9e25e9b  gcc/te
*** 18871,18877 ****
  ac27af3ea0b119b95109334b03d48ca9  gcc/testsuite/c-c++-common/cpp/openacc-define-3.c
  23d2256fdd9c03d95361e499c9aa5d11  gcc/testsuite/c-c++-common/cpp/openmp-define-1.c
  1ba0ade791f40edbd80fddddb700282b  gcc/testsuite/c-c++-common/cpp/openmp-define-2.c
! 88fdfa7ad0dd8169a90963238ee1847e  gcc/testsuite/c-c++-common/cpp/openmp-define-3.c
  fb93693065e3e66c29a51aa146b3d3fa  gcc/testsuite/c-c++-common/cpp/pr104147.c
  52031f4611a992f3a4ce30bfd206198d  gcc/testsuite/c-c++-common/cpp/pr108244-1.c
  923955687c7d11dfef99d344ff0d96a4  gcc/testsuite/c-c++-common/cpp/pr108244-2.c
--- 18883,18889 ----
  ac27af3ea0b119b95109334b03d48ca9  gcc/testsuite/c-c++-common/cpp/openacc-define-3.c
  23d2256fdd9c03d95361e499c9aa5d11  gcc/testsuite/c-c++-common/cpp/openmp-define-1.c
  1ba0ade791f40edbd80fddddb700282b  gcc/testsuite/c-c++-common/cpp/openmp-define-2.c
! c30e990dc7097f677f1b26dd6e502792  gcc/testsuite/c-c++-common/cpp/openmp-define-3.c
  fb93693065e3e66c29a51aa146b3d3fa  gcc/testsuite/c-c++-common/cpp/pr104147.c
  52031f4611a992f3a4ce30bfd206198d  gcc/testsuite/c-c++-common/cpp/pr108244-1.c
  923955687c7d11dfef99d344ff0d96a4  gcc/testsuite/c-c++-common/cpp/pr108244-2.c
*************** a485c2cf2b8fb5018ff6ffa1d09b0291  gcc/te
*** 19112,19119 ****
  9b3df6f3fe1425a3c20ed01eae079f75  gcc/testsuite/c-c++-common/fold-masked-cmp-3.c
  515d5329012cc0802e7d94f233e276c3  gcc/testsuite/c-c++-common/goacc-gomp/atomic.c
  77f7e923f565073d456eb38484c59f49  gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c
! 1db04538cbe75fca2dbf3f213635a548  gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
! 0c724489142a5ed4513ada6ff6ebaea9  gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c
  21763053fb0a3cc446b2e4952923204e  gcc/testsuite/c-c++-common/goacc/Wparentheses-1.c
  38804e577c485537958c84fd18a8c36d  gcc/testsuite/c-c++-common/goacc/acc-icf.c
  9703fd0749219513274e64adfc334e7d  gcc/testsuite/c-c++-common/goacc/acc-wait-1.c
--- 19124,19131 ----
  9b3df6f3fe1425a3c20ed01eae079f75  gcc/testsuite/c-c++-common/fold-masked-cmp-3.c
  515d5329012cc0802e7d94f233e276c3  gcc/testsuite/c-c++-common/goacc-gomp/atomic.c
  77f7e923f565073d456eb38484c59f49  gcc/testsuite/c-c++-common/goacc-gomp/nesting-1.c
! dcaef014c9e9702b3fca6ddec1a2820e  gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
! d15aecbbaf10292641895f69536931a4  gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c
  21763053fb0a3cc446b2e4952923204e  gcc/testsuite/c-c++-common/goacc/Wparentheses-1.c
  38804e577c485537958c84fd18a8c36d  gcc/testsuite/c-c++-common/goacc/acc-icf.c
  9703fd0749219513274e64adfc334e7d  gcc/testsuite/c-c++-common/goacc/acc-wait-1.c
*************** dc80449bfdca5a99a480536d2e1db33b  gcc/te
*** 19312,19320 ****
  3e0f236b99de22401e18251d5b11c962  gcc/testsuite/c-c++-common/goacc/update-1.c
  1c02e1d791c7d07a364d26261ecfa2fd  gcc/testsuite/c-c++-common/goacc/update-if_present-1.c
  e4c5c5de7badcd203a3ab00f31a22be2  gcc/testsuite/c-c++-common/goacc/update-if_present-2.c
! d8d78230b698b1427515ae7b473eaf5f  gcc/testsuite/c-c++-common/gomp/Wparentheses-1.c
! 63761edcc60694bb3443638fd038e6de  gcc/testsuite/c-c++-common/gomp/Wparentheses-2.c
! 87caf85546707f566688fc6b60a4d1e9  gcc/testsuite/c-c++-common/gomp/Wparentheses-3.c
  f2eeacd8e01fce5f98daff2393115250  gcc/testsuite/c-c++-common/gomp/Wparentheses-4.c
  613c9c963a791186529879c13f8d65f7  gcc/testsuite/c-c++-common/gomp/adjust-args-1.c
  d8f3b317a2367cb4501c5836ef9b0229  gcc/testsuite/c-c++-common/gomp/adjust-args-2.c
--- 19324,19333 ----
  3e0f236b99de22401e18251d5b11c962  gcc/testsuite/c-c++-common/goacc/update-1.c
  1c02e1d791c7d07a364d26261ecfa2fd  gcc/testsuite/c-c++-common/goacc/update-if_present-1.c
  e4c5c5de7badcd203a3ab00f31a22be2  gcc/testsuite/c-c++-common/goacc/update-if_present-2.c
! a32724069296bcf35dbe08a48fff1304  gcc/testsuite/c-c++-common/gomp/52-deps.c
! 8cdf9edae68c2b66d3e97537de0539a2  gcc/testsuite/c-c++-common/gomp/Wparentheses-1.c
! 780bb7d52763e64555ef26adda5cd3ad  gcc/testsuite/c-c++-common/gomp/Wparentheses-2.c
! a862d3ab7795b71855090b4b025bf11b  gcc/testsuite/c-c++-common/gomp/Wparentheses-3.c
  f2eeacd8e01fce5f98daff2393115250  gcc/testsuite/c-c++-common/gomp/Wparentheses-4.c
  613c9c963a791186529879c13f8d65f7  gcc/testsuite/c-c++-common/gomp/adjust-args-1.c
  d8f3b317a2367cb4501c5836ef9b0229  gcc/testsuite/c-c++-common/gomp/adjust-args-2.c
*************** b0bdd3295dc12d75c6de7a29c7b0eab9  gcc/te
*** 19324,19330 ****
  43cf0fb5b5dbd082ec114c90b24fc30d  gcc/testsuite/c-c++-common/gomp/adjust-args-6.c
  5cf6813317fa5ef169d543e63d45b26a  gcc/testsuite/c-c++-common/gomp/affinity-1.c
  02e7c1073f46e6d8b4e8e267c462c39f  gcc/testsuite/c-c++-common/gomp/affinity-2.c
! 2e8a942227251c348ea0e35322d0512a  gcc/testsuite/c-c++-common/gomp/affinity-3.c
  614a49f3f358c35cb4a5b15ce97da263  gcc/testsuite/c-c++-common/gomp/affinity-4.c
  9111959cc520a4e29a99b5bb933a762d  gcc/testsuite/c-c++-common/gomp/affinity-5.c
  273d5b4d31c635ddabf92c1100055ab0  gcc/testsuite/c-c++-common/gomp/affinity-6.c
--- 19337,19343 ----
  43cf0fb5b5dbd082ec114c90b24fc30d  gcc/testsuite/c-c++-common/gomp/adjust-args-6.c
  5cf6813317fa5ef169d543e63d45b26a  gcc/testsuite/c-c++-common/gomp/affinity-1.c
  02e7c1073f46e6d8b4e8e267c462c39f  gcc/testsuite/c-c++-common/gomp/affinity-2.c
! d02c9c3304cf733e4993fb9b9138d5c0  gcc/testsuite/c-c++-common/gomp/affinity-3.c
  614a49f3f358c35cb4a5b15ce97da263  gcc/testsuite/c-c++-common/gomp/affinity-4.c
  9111959cc520a4e29a99b5bb933a762d  gcc/testsuite/c-c++-common/gomp/affinity-5.c
  273d5b4d31c635ddabf92c1100055ab0  gcc/testsuite/c-c++-common/gomp/affinity-6.c
*************** c8657190839fd03fa2c4693563039a48  gcc/te
*** 19341,19347 ****
  ef64f47f4dc535f39ca0972442dfcf03  gcc/testsuite/c-c++-common/gomp/allocate-15.c
  110530d5e42de42ab74246c1db026fdc  gcc/testsuite/c-c++-common/gomp/allocate-16.c
  100719568d4682b49e6b7ac32a6c6515  gcc/testsuite/c-c++-common/gomp/allocate-17.c
! fd6a6a087da70dbd39bdfa12e6a8c7cd  gcc/testsuite/c-c++-common/gomp/allocate-18.c
  a844bf6b78ba9a29d15147a46c7cf098  gcc/testsuite/c-c++-common/gomp/allocate-19.c
  67afa8e9a323740282252dc23a7b959a  gcc/testsuite/c-c++-common/gomp/allocate-2.c
  9caab435288f915f6d7fe59b84b443c9  gcc/testsuite/c-c++-common/gomp/allocate-3.c
--- 19354,19360 ----
  ef64f47f4dc535f39ca0972442dfcf03  gcc/testsuite/c-c++-common/gomp/allocate-15.c
  110530d5e42de42ab74246c1db026fdc  gcc/testsuite/c-c++-common/gomp/allocate-16.c
  100719568d4682b49e6b7ac32a6c6515  gcc/testsuite/c-c++-common/gomp/allocate-17.c
! 364941e5a99804690001b372b53f6c4e  gcc/testsuite/c-c++-common/gomp/allocate-18.c
  a844bf6b78ba9a29d15147a46c7cf098  gcc/testsuite/c-c++-common/gomp/allocate-19.c
  67afa8e9a323740282252dc23a7b959a  gcc/testsuite/c-c++-common/gomp/allocate-2.c
  9caab435288f915f6d7fe59b84b443c9  gcc/testsuite/c-c++-common/gomp/allocate-3.c
*************** dcd88cf4442d15fe1ee6cf0c65bec7ba  gcc/te
*** 19402,19415 ****
  1b4f8527462b94e090104af54692febb  gcc/testsuite/c-c++-common/gomp/attrs-1.c
  44c94a36e22b6327b21381bcca1c494e  gcc/testsuite/c-c++-common/gomp/attrs-2.c
  b18e853bf462cafe38d3448d58a4e05c  gcc/testsuite/c-c++-common/gomp/attrs-3.c
! 5f55dd34d269d2c286bae5200e580724  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-1.c
! 37772e65160f2740ff271c4db5b1f385  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-2.c
! be58805a59309ad5d71c49c48877eb34  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c
! 585d8f7a0b28941f42372f69b9fe2c54  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-4.c
! 08ed3f839b805c729a22134e3facfc56  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-5.c
  a7fd5b945698db9b1babd132533f2610  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-6.c
  51f16957d5e9241fe903983e153db16c  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-7.c
! 64f674fd14d4f405b6924bf279681010  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-8.c
  f5f9cd08befce65860255ab484df2c00  gcc/testsuite/c-c++-common/gomp/attrs-tile-1.c
  39c1d1dd8bbf60b694efb0f66e3e7aa6  gcc/testsuite/c-c++-common/gomp/attrs-tile-2.c
  d9eb61a66b36f7dd001d983593880831  gcc/testsuite/c-c++-common/gomp/attrs-tile-3.c
--- 19415,19428 ----
  1b4f8527462b94e090104af54692febb  gcc/testsuite/c-c++-common/gomp/attrs-1.c
  44c94a36e22b6327b21381bcca1c494e  gcc/testsuite/c-c++-common/gomp/attrs-2.c
  b18e853bf462cafe38d3448d58a4e05c  gcc/testsuite/c-c++-common/gomp/attrs-3.c
! f7835f108eb41f01bf61bd71db3fac90  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-1.c
! e76795c9de489ba9a9872d1a5ac5c2fd  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-2.c
! 658183f0781f49a6bb4461136267cb49  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c
! a8aa8b1d7a68d1116fc3997dd4b29628  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-4.c
! c225a72a350b303ff6b6bd353cd0bac7  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-5.c
  a7fd5b945698db9b1babd132533f2610  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-6.c
  51f16957d5e9241fe903983e153db16c  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-7.c
! 4376ebe2298a64084539ceba7503c08d  gcc/testsuite/c-c++-common/gomp/attrs-metadirective-8.c
  f5f9cd08befce65860255ab484df2c00  gcc/testsuite/c-c++-common/gomp/attrs-tile-1.c
  39c1d1dd8bbf60b694efb0f66e3e7aa6  gcc/testsuite/c-c++-common/gomp/attrs-tile-2.c
  d9eb61a66b36f7dd001d983593880831  gcc/testsuite/c-c++-common/gomp/attrs-tile-3.c
*************** da9e724ebf1cfa046b19721a8b466bb9  gcc/te
*** 19428,19446 ****
  846c45b738fd066f81ec08e8734d2785  gcc/testsuite/c-c++-common/gomp/begin-assumes-2.c
  766d3b7f45920c36b59eb198aff18d97  gcc/testsuite/c-c++-common/gomp/begin-assumes-3.c
  e60d9448f0f0bde479d4c59ba577deac  gcc/testsuite/c-c++-common/gomp/begin-assumes-4.c
! d9d369b57d2dd28df8efeb2f5ecc9a5f  gcc/testsuite/c-c++-common/gomp/begin-declare-target-1.c
! 936e1a766aaf54b03a099c359cf5f3ce  gcc/testsuite/c-c++-common/gomp/begin-declare-target-2.c
  c736b176de0876f0cfa7bf6da1edba17  gcc/testsuite/c-c++-common/gomp/begin-declare-target-3.c
  aa6f51f0ce9ba32480d8b3eddf2e9835  gcc/testsuite/c-c++-common/gomp/begin-declare-target-4.c
! 9f730a41da1e4dad0ab17382046a6c23  gcc/testsuite/c-c++-common/gomp/cancel-1.c
  192802715f9a6395e2ccf6ce992c4fee  gcc/testsuite/c-c++-common/gomp/cancel-2.c
! ee83cd40d850bc850078e5cf2123b989  gcc/testsuite/c-c++-common/gomp/clause-dups-1.c
! 2d100a7efc7458044156ec5ce1b62589  gcc/testsuite/c-c++-common/gomp/clauses-1.c
  d5ffe3929242394b820f074d90b6869f  gcc/testsuite/c-c++-common/gomp/clauses-2.c
! 45fc51cf372958636efd308a8d4b048c  gcc/testsuite/c-c++-common/gomp/clauses-3.c
  8d9ef02ce9840a58a8c64026e4df30b2  gcc/testsuite/c-c++-common/gomp/clauses-4.c
  4495a5b525e167ab62035c686fc8d83b  gcc/testsuite/c-c++-common/gomp/clauses-5.c
! fb5ac32eda4e938a1684263a6f7ccfa9  gcc/testsuite/c-c++-common/gomp/clauses-6.c
  70b3d73007bef6b23ec15bb120cb88ca  gcc/testsuite/c-c++-common/gomp/combined-1.c
  8971b0fe4f2bfd550f584e814610f06e  gcc/testsuite/c-c++-common/gomp/combined-2.c
  4a818b745d1f8704ddb0479a4cad1ca2  gcc/testsuite/c-c++-common/gomp/combined-3.c
--- 19441,19459 ----
  846c45b738fd066f81ec08e8734d2785  gcc/testsuite/c-c++-common/gomp/begin-assumes-2.c
  766d3b7f45920c36b59eb198aff18d97  gcc/testsuite/c-c++-common/gomp/begin-assumes-3.c
  e60d9448f0f0bde479d4c59ba577deac  gcc/testsuite/c-c++-common/gomp/begin-assumes-4.c
! aa2e96c23bd551116e39ec68eb9f2cbc  gcc/testsuite/c-c++-common/gomp/begin-declare-target-1.c
! af214b06bdbe273a96343eed66fa9ff1  gcc/testsuite/c-c++-common/gomp/begin-declare-target-2.c
  c736b176de0876f0cfa7bf6da1edba17  gcc/testsuite/c-c++-common/gomp/begin-declare-target-3.c
  aa6f51f0ce9ba32480d8b3eddf2e9835  gcc/testsuite/c-c++-common/gomp/begin-declare-target-4.c
! fc18dca9ca9c5db3a9297405a01b1376  gcc/testsuite/c-c++-common/gomp/cancel-1.c
  192802715f9a6395e2ccf6ce992c4fee  gcc/testsuite/c-c++-common/gomp/cancel-2.c
! 777f4addf7c7d758291b4583ce759cbe  gcc/testsuite/c-c++-common/gomp/clause-dups-1.c
! 1d2b3f731ff41e629e59d5e531c2696d  gcc/testsuite/c-c++-common/gomp/clauses-1.c
  d5ffe3929242394b820f074d90b6869f  gcc/testsuite/c-c++-common/gomp/clauses-2.c
! cab7710efed273c604884629ac042306  gcc/testsuite/c-c++-common/gomp/clauses-3.c
  8d9ef02ce9840a58a8c64026e4df30b2  gcc/testsuite/c-c++-common/gomp/clauses-4.c
  4495a5b525e167ab62035c686fc8d83b  gcc/testsuite/c-c++-common/gomp/clauses-5.c
! 4b7c496e8a5692fc13da93ba79f6464e  gcc/testsuite/c-c++-common/gomp/clauses-6.c
  70b3d73007bef6b23ec15bb120cb88ca  gcc/testsuite/c-c++-common/gomp/combined-1.c
  8971b0fe4f2bfd550f584e814610f06e  gcc/testsuite/c-c++-common/gomp/combined-2.c
  4a818b745d1f8704ddb0479a4cad1ca2  gcc/testsuite/c-c++-common/gomp/combined-3.c
*************** dcd1e9ab9770a159f8a1f17c76bd1b03  gcc/te
*** 19456,19483 ****
  da6887a595231a43cf61133bb43acdb5  gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c
  ff19abdaca7330b11f4fe567c52cdd16  gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c
  b3db7e455b5c08954578749d93304a57  gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c
! 4f4730edc635e08ce7fb782360034e79  gcc/testsuite/c-c++-common/gomp/declare-target-1.c
! b4cf3cba2eeac62573f40aac959d463d  gcc/testsuite/c-c++-common/gomp/declare-target-2.c
! 5d9813953c9a6b9aeeb4294adf1df6e1  gcc/testsuite/c-c++-common/gomp/declare-target-3.c
! 7f193f6ce9a8d0456ff0bd3677a8921f  gcc/testsuite/c-c++-common/gomp/declare-target-4.c
! bd8b4a8c817f542091fc2d7fded4917a  gcc/testsuite/c-c++-common/gomp/declare-target-5.c
  a5fd6a4672c9f8415dc9097c3c6acb93  gcc/testsuite/c-c++-common/gomp/declare-target-6.c
! e6d2454095aaf222d75e92fdee506c6e  gcc/testsuite/c-c++-common/gomp/declare-target-7.c
! e38166dd368208c4e65636e5cde6a72b  gcc/testsuite/c-c++-common/gomp/declare-target-indirect-1.c
! 53c88933585712758c03a3ca25b828a7  gcc/testsuite/c-c++-common/gomp/declare-target-indirect-2.c
! 603720a33d4bc86371ea0cca28dc76fe  gcc/testsuite/c-c++-common/gomp/declare-variant-1.c
! cb1823c24b3132640f493855244a27f1  gcc/testsuite/c-c++-common/gomp/declare-variant-10.c
  51e43bef12ddebee2151356a6379e207  gcc/testsuite/c-c++-common/gomp/declare-variant-11.c
  088dc5cb2525b333a6e4b9edd63428ed  gcc/testsuite/c-c++-common/gomp/declare-variant-12.c
  3426413eb6163ee2d46f83ece16a0bc4  gcc/testsuite/c-c++-common/gomp/declare-variant-13.c
  8201a9ce72c161a5bd2784541f8201fa  gcc/testsuite/c-c++-common/gomp/declare-variant-14.c
! 6d8e68e3d6b33954cf219f53dc23e9bb  gcc/testsuite/c-c++-common/gomp/declare-variant-2.c
  5783ceed28bdb2e1617af49be1fe4d1d  gcc/testsuite/c-c++-common/gomp/declare-variant-3.c
  65b510d9e426dc2a3b6896eb93dd8335  gcc/testsuite/c-c++-common/gomp/declare-variant-4.c
  ee52d5fc3f8423c9720ccca8a58180a2  gcc/testsuite/c-c++-common/gomp/declare-variant-5.c
  31ff49ea5267f602dfb4b11b7b086584  gcc/testsuite/c-c++-common/gomp/declare-variant-6.c
  d029e5eb6faefe6ca785e1b9e12615d3  gcc/testsuite/c-c++-common/gomp/declare-variant-7.c
! 22511c9b51ce57c09ad266eab6197162  gcc/testsuite/c-c++-common/gomp/declare-variant-8.c
  10f2a69383227b55e5c061877d9c3967  gcc/testsuite/c-c++-common/gomp/declare-variant-9.c
  a364b48f0f83ef6701ae70702ba4a122  gcc/testsuite/c-c++-common/gomp/declare-variant-any.c
  827ea42c0a089134c6e7be212bdb1d45  gcc/testsuite/c-c++-common/gomp/declare-variant-arg-exprs.c
--- 19469,19496 ----
  da6887a595231a43cf61133bb43acdb5  gcc/testsuite/c-c++-common/gomp/declare-mapper-7.c
  ff19abdaca7330b11f4fe567c52cdd16  gcc/testsuite/c-c++-common/gomp/declare-mapper-8.c
  b3db7e455b5c08954578749d93304a57  gcc/testsuite/c-c++-common/gomp/declare-mapper-9.c
! c78f87c3b228d477e18288e37caca1c1  gcc/testsuite/c-c++-common/gomp/declare-target-1.c
! 916fd6ef6eeb6926f284142e6cb708f4  gcc/testsuite/c-c++-common/gomp/declare-target-2.c
! c4c81261ab4127b6a0bbe971b9acbc34  gcc/testsuite/c-c++-common/gomp/declare-target-3.c
! c82babc412aeb2917de54cc70785dd50  gcc/testsuite/c-c++-common/gomp/declare-target-4.c
! cef199b2ac3b6df806e9791adbe1837e  gcc/testsuite/c-c++-common/gomp/declare-target-5.c
  a5fd6a4672c9f8415dc9097c3c6acb93  gcc/testsuite/c-c++-common/gomp/declare-target-6.c
! 07b8730a9b60de6c3a3cf3397b48958b  gcc/testsuite/c-c++-common/gomp/declare-target-7.c
! 914bc6f46b6e82013627cd163d74cca8  gcc/testsuite/c-c++-common/gomp/declare-target-indirect-1.c
! 6c041e39f64577f58b6d48cfa40088b3  gcc/testsuite/c-c++-common/gomp/declare-target-indirect-2.c
! b2da38787311d78c52bd778474283bd8  gcc/testsuite/c-c++-common/gomp/declare-variant-1.c
! 098a4a76256cd6dbe35f493541dc8a2b  gcc/testsuite/c-c++-common/gomp/declare-variant-10.c
  51e43bef12ddebee2151356a6379e207  gcc/testsuite/c-c++-common/gomp/declare-variant-11.c
  088dc5cb2525b333a6e4b9edd63428ed  gcc/testsuite/c-c++-common/gomp/declare-variant-12.c
  3426413eb6163ee2d46f83ece16a0bc4  gcc/testsuite/c-c++-common/gomp/declare-variant-13.c
  8201a9ce72c161a5bd2784541f8201fa  gcc/testsuite/c-c++-common/gomp/declare-variant-14.c
! 059142b95b32f7ffdb91d8344de017bc  gcc/testsuite/c-c++-common/gomp/declare-variant-2.c
  5783ceed28bdb2e1617af49be1fe4d1d  gcc/testsuite/c-c++-common/gomp/declare-variant-3.c
  65b510d9e426dc2a3b6896eb93dd8335  gcc/testsuite/c-c++-common/gomp/declare-variant-4.c
  ee52d5fc3f8423c9720ccca8a58180a2  gcc/testsuite/c-c++-common/gomp/declare-variant-5.c
  31ff49ea5267f602dfb4b11b7b086584  gcc/testsuite/c-c++-common/gomp/declare-variant-6.c
  d029e5eb6faefe6ca785e1b9e12615d3  gcc/testsuite/c-c++-common/gomp/declare-variant-7.c
! 65733800196967e06155d829d9211065  gcc/testsuite/c-c++-common/gomp/declare-variant-8.c
  10f2a69383227b55e5c061877d9c3967  gcc/testsuite/c-c++-common/gomp/declare-variant-9.c
  a364b48f0f83ef6701ae70702ba4a122  gcc/testsuite/c-c++-common/gomp/declare-variant-any.c
  827ea42c0a089134c6e7be212bdb1d45  gcc/testsuite/c-c++-common/gomp/declare-variant-arg-exprs.c
*************** a43075bfd5e3a19a46ccc11ca1bf4aaa  gcc/te
*** 19490,19497 ****
  5fb2c1ff7f22a7db37e361c51d486872  gcc/testsuite/c-c++-common/gomp/default-2.c
  53f1dfff816cc4e84b475f89e062973d  gcc/testsuite/c-c++-common/gomp/default-3.c
  210213fef63c2c9f7b4d77ee3540dfd2  gcc/testsuite/c-c++-common/gomp/defaultmap-1.c
! cfe9ce2bee6dfde91d715b2c34a5a896  gcc/testsuite/c-c++-common/gomp/defaultmap-2.c
! 5ccd214a0e6437b9a7e3a44ab4d50f74  gcc/testsuite/c-c++-common/gomp/defaultmap-3.c
  2360d693f87ad48a1fb38a5739f3af5e  gcc/testsuite/c-c++-common/gomp/defaultmap-4.c
  8ed0886cc8f102288f0fc679b04d8c13  gcc/testsuite/c-c++-common/gomp/defaultmap-5.c
  e89b36d077224fe9d4b4e2b0fb8a6240  gcc/testsuite/c-c++-common/gomp/defaultmap-6.c
--- 19503,19510 ----
  5fb2c1ff7f22a7db37e361c51d486872  gcc/testsuite/c-c++-common/gomp/default-2.c
  53f1dfff816cc4e84b475f89e062973d  gcc/testsuite/c-c++-common/gomp/default-3.c
  210213fef63c2c9f7b4d77ee3540dfd2  gcc/testsuite/c-c++-common/gomp/defaultmap-1.c
! 99c742d6d0fcfbd3a593b489056b24bc  gcc/testsuite/c-c++-common/gomp/defaultmap-2.c
! 513b7bcfbdbc2ad024201756058fee02  gcc/testsuite/c-c++-common/gomp/defaultmap-3.c
  2360d693f87ad48a1fb38a5739f3af5e  gcc/testsuite/c-c++-common/gomp/defaultmap-4.c
  8ed0886cc8f102288f0fc679b04d8c13  gcc/testsuite/c-c++-common/gomp/defaultmap-5.c
  e89b36d077224fe9d4b4e2b0fb8a6240  gcc/testsuite/c-c++-common/gomp/defaultmap-6.c
*************** cc441d2ec9bf665e8ec39a8eccd34398  gcc/te
*** 19510,19521 ****
  fff73b9cb320e504bdddc09ac0026be4  gcc/testsuite/c-c++-common/gomp/depend-4.c
  a1a97cef83578cd658a8a025db89e271  gcc/testsuite/c-c++-common/gomp/depend-5.c
  23c22db41ea3bb7ef9861240bdea36af  gcc/testsuite/c-c++-common/gomp/depend-6.c
! 4a7e69295838b1320de92a6b5208a196  gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c
! 3ec0d6b08677a898631647adbce575dc  gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c
! 4d7c198a6e5377f63eba24e105bd8430  gcc/testsuite/c-c++-common/gomp/depobj-1.c
  b0614882466e367a20795bf8a724df2a  gcc/testsuite/c-c++-common/gomp/depobj-2.c
  2a1fa5f3e1fe8821515948afb685410b  gcc/testsuite/c-c++-common/gomp/depobj-3.c
! b7a7c883420d18bb6bc689577f080949  gcc/testsuite/c-c++-common/gomp/directive-1.c
  cc57a55c5ffadf14a7fc057b08775c61  gcc/testsuite/c-c++-common/gomp/dispatch-1.c
  ae148a523d43d09e8a93c84e90b05c6c  gcc/testsuite/c-c++-common/gomp/dispatch-10.c
  981f90796aa7d4ddd9bf1feb2b6708bd  gcc/testsuite/c-c++-common/gomp/dispatch-11.c
--- 19523,19534 ----
  fff73b9cb320e504bdddc09ac0026be4  gcc/testsuite/c-c++-common/gomp/depend-4.c
  a1a97cef83578cd658a8a025db89e271  gcc/testsuite/c-c++-common/gomp/depend-5.c
  23c22db41ea3bb7ef9861240bdea36af  gcc/testsuite/c-c++-common/gomp/depend-6.c
! 2dc7306fdcb1b93c05e3de91784a9634  gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c
! b1ad2a59e6fba70ef111e485676c62f1  gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c
! 08673b87a6fc8b70260dbaac7cfaffaf  gcc/testsuite/c-c++-common/gomp/depobj-1.c
  b0614882466e367a20795bf8a724df2a  gcc/testsuite/c-c++-common/gomp/depobj-2.c
  2a1fa5f3e1fe8821515948afb685410b  gcc/testsuite/c-c++-common/gomp/depobj-3.c
! d4d1e920a71df25902d43c55e6f12bb3  gcc/testsuite/c-c++-common/gomp/directive-1.c
  cc57a55c5ffadf14a7fc057b08775c61  gcc/testsuite/c-c++-common/gomp/dispatch-1.c
  ae148a523d43d09e8a93c84e90b05c6c  gcc/testsuite/c-c++-common/gomp/dispatch-10.c
  981f90796aa7d4ddd9bf1feb2b6708bd  gcc/testsuite/c-c++-common/gomp/dispatch-11.c
*************** a226cffa1831fc0ce3e0c1c6e4f6880f  gcc/te
*** 19528,19542 ****
  cc9e08334390e8c0b03ad99be1fea99d  gcc/testsuite/c-c++-common/gomp/dispatch-7.c
  61c50fa564e7da6b2d379762a433dbac  gcc/testsuite/c-c++-common/gomp/dispatch-8.c
  d81d06c178f40f2114e1b6d432699f5b  gcc/testsuite/c-c++-common/gomp/dispatch-9.c
! 389475c8477c859e20aa20be1676dbd0  gcc/testsuite/c-c++-common/gomp/distribute-1.c
! f10bae63863004428ff4b3fbefab335e  gcc/testsuite/c-c++-common/gomp/doacross-1.c
! 516128133174c1939bd4cf36e469fb51  gcc/testsuite/c-c++-common/gomp/doacross-2.c
! c9f7d4328381112d463ae5d7abf05d6b  gcc/testsuite/c-c++-common/gomp/doacross-3.c
! b80b407c1b236d995633edd987b92089  gcc/testsuite/c-c++-common/gomp/doacross-4.c
  f9a6444ebc4a1c55c546158d2ff21ead  gcc/testsuite/c-c++-common/gomp/doacross-5.c
  0f10333a8a4f6bda70dd11c725bbcfdb  gcc/testsuite/c-c++-common/gomp/doacross-6.c
  a31dd2f434001d3bdc2d6760064602a4  gcc/testsuite/c-c++-common/gomp/doacross-7.c
! db5184f418f1fcff4229563335cdcac7  gcc/testsuite/c-c++-common/gomp/doacross-8.c
  6c455748c0cbe2d54888be9d633d0fc8  gcc/testsuite/c-c++-common/gomp/dyn_groupprivate-1.c
  782e0dbe604e4a5d5d27115b264395ec  gcc/testsuite/c-c++-common/gomp/dyn_groupprivate-2.c
  5a70f931f3d1911a210ec6155240d4dc  gcc/testsuite/c-c++-common/gomp/element-1.c
--- 19541,19555 ----
  cc9e08334390e8c0b03ad99be1fea99d  gcc/testsuite/c-c++-common/gomp/dispatch-7.c
  61c50fa564e7da6b2d379762a433dbac  gcc/testsuite/c-c++-common/gomp/dispatch-8.c
  d81d06c178f40f2114e1b6d432699f5b  gcc/testsuite/c-c++-common/gomp/dispatch-9.c
! ea104786f19c702ff9f4b0780b366ede  gcc/testsuite/c-c++-common/gomp/distribute-1.c
! af208b1b8a46ce0e4419aa226c6fbb26  gcc/testsuite/c-c++-common/gomp/doacross-1.c
! 59e0827b9b718899b4667bb17060e062  gcc/testsuite/c-c++-common/gomp/doacross-2.c
! 7e53ac4d2dd78c93f6f6301e46dfaa62  gcc/testsuite/c-c++-common/gomp/doacross-3.c
! 60770a90001612662086f0fe305cbcb8  gcc/testsuite/c-c++-common/gomp/doacross-4.c
  f9a6444ebc4a1c55c546158d2ff21ead  gcc/testsuite/c-c++-common/gomp/doacross-5.c
  0f10333a8a4f6bda70dd11c725bbcfdb  gcc/testsuite/c-c++-common/gomp/doacross-6.c
  a31dd2f434001d3bdc2d6760064602a4  gcc/testsuite/c-c++-common/gomp/doacross-7.c
! 44d22e30f7c7a04fc13f60ed51adb5c7  gcc/testsuite/c-c++-common/gomp/doacross-8.c
  6c455748c0cbe2d54888be9d633d0fc8  gcc/testsuite/c-c++-common/gomp/dyn_groupprivate-1.c
  782e0dbe604e4a5d5d27115b264395ec  gcc/testsuite/c-c++-common/gomp/dyn_groupprivate-2.c
  5a70f931f3d1911a210ec6155240d4dc  gcc/testsuite/c-c++-common/gomp/element-1.c
*************** f7b26726f2f7cbd96dd84eb2d5428f35  gcc/te
*** 19577,19608 ****
  1347bc0b5f0252435543b1ef2da0c386  gcc/testsuite/c-c++-common/gomp/interop-3.c
  34a3fc2b7dbdb8a1ee4dad9dc23f38e7  gcc/testsuite/c-c++-common/gomp/interop-4.c
  4bbc494bd1264803a666067325660a6d  gcc/testsuite/c-c++-common/gomp/interop-5.c
! 93b2a9f91547c3de9e4634da1ae54b2d  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-1.c
  7a41e9c11639ccee3155f9ff2b1bc60d  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-2.c
  61a5cf3348b2df91e9c5c6dda0024e27  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-3.c
  d173a4359da95b48c8d051a752a820ad  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-4.c
  94c1c42c60585a077f568d5bea528077  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c
! 2e0840d181813aec1108fbd34f344fea  gcc/testsuite/c-c++-common/gomp/linear-1.c
! 361c8125c17070e6c93fe9d05fb2da1a  gcc/testsuite/c-c++-common/gomp/linear-2.c
! 75194c4de3abb9ff5be59d8b4da49ab6  gcc/testsuite/c-c++-common/gomp/linear-3.c
  b68341f23c6484278c5d49bb55e6bed6  gcc/testsuite/c-c++-common/gomp/linear-4.c
! ab07b5a124255abaa1fd1c7350a95ec7  gcc/testsuite/c-c++-common/gomp/loop-1.c
  1eefa1e4ebf9306f021a466fbfb0458a  gcc/testsuite/c-c++-common/gomp/loop-10.c
  d28fa472d0ed4264e8bf9d4545e77ae5  gcc/testsuite/c-c++-common/gomp/loop-11.c
! 98a2a47c678a83b550ad02b4645cb7b0  gcc/testsuite/c-c++-common/gomp/loop-2.c
! 9592f2cca3c5fd7c0e8fd9da7cb178d1  gcc/testsuite/c-c++-common/gomp/loop-3.c
! 96f80819d26df95994ad31e806db9ad9  gcc/testsuite/c-c++-common/gomp/loop-4.c
  a3272b452f6fd0011c49180d75e7b205  gcc/testsuite/c-c++-common/gomp/loop-5.c
! 3e772c5747e617d6611630ea849e25ab  gcc/testsuite/c-c++-common/gomp/loop-6.c
  576203a21b3e04e83b9327037d1c1809  gcc/testsuite/c-c++-common/gomp/loop-7.c
  bbbe92047177151542b6ff825d52c4e4  gcc/testsuite/c-c++-common/gomp/loop-8.c
  67e2138fdf955d87a5868fe981258015  gcc/testsuite/c-c++-common/gomp/loop-9.c
! 05c63339ca989589076de2520aa21fc1  gcc/testsuite/c-c++-common/gomp/map-1.c
  c344f817350996173949d094733f67be  gcc/testsuite/c-c++-common/gomp/map-2.c
! 84b32011b7cc61bdab96dc5182d6fa16  gcc/testsuite/c-c++-common/gomp/map-3.c
  db038278199fc73220fb4647e0497ea0  gcc/testsuite/c-c++-common/gomp/map-4.c
  277cedbcd2effa8734f83ed409ddc325  gcc/testsuite/c-c++-common/gomp/map-5.c
! 35c2af5e502ebab7ba925e704838b547  gcc/testsuite/c-c++-common/gomp/map-6.c
  2692678faa474fcf195a2428df6fb5e5  gcc/testsuite/c-c++-common/gomp/map-7.c
  44f82c91ea0443cfcfe48ff2e2ad3f49  gcc/testsuite/c-c++-common/gomp/map-8.c
  3e29caf558ff43e0252f11af669e8da4  gcc/testsuite/c-c++-common/gomp/map-9.c
--- 19590,19621 ----
  1347bc0b5f0252435543b1ef2da0c386  gcc/testsuite/c-c++-common/gomp/interop-3.c
  34a3fc2b7dbdb8a1ee4dad9dc23f38e7  gcc/testsuite/c-c++-common/gomp/interop-4.c
  4bbc494bd1264803a666067325660a6d  gcc/testsuite/c-c++-common/gomp/interop-5.c
! 6334fc030851fee80503150684e5e016  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-1.c
  7a41e9c11639ccee3155f9ff2b1bc60d  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-2.c
  61a5cf3348b2df91e9c5c6dda0024e27  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-3.c
  d173a4359da95b48c8d051a752a820ad  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-4.c
  94c1c42c60585a077f568d5bea528077  gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-5.c
! cba7cef127b54663f9d3c96f6ae29a3c  gcc/testsuite/c-c++-common/gomp/linear-1.c
! 3039955a8fc7cdd1a2a61ba456413e4f  gcc/testsuite/c-c++-common/gomp/linear-2.c
! 50296edd0abf37b13799023ee30c7512  gcc/testsuite/c-c++-common/gomp/linear-3.c
  b68341f23c6484278c5d49bb55e6bed6  gcc/testsuite/c-c++-common/gomp/linear-4.c
! 8cf8764a09ee14856860000dd7d8099c  gcc/testsuite/c-c++-common/gomp/loop-1.c
  1eefa1e4ebf9306f021a466fbfb0458a  gcc/testsuite/c-c++-common/gomp/loop-10.c
  d28fa472d0ed4264e8bf9d4545e77ae5  gcc/testsuite/c-c++-common/gomp/loop-11.c
! 4c7201b7c9db0b10af90a8372af6076f  gcc/testsuite/c-c++-common/gomp/loop-2.c
! 2db61d9d37857dfdc7acb2fa396aba3d  gcc/testsuite/c-c++-common/gomp/loop-3.c
! 18c4a21a470f3f3581da79b21c5634a2  gcc/testsuite/c-c++-common/gomp/loop-4.c
  a3272b452f6fd0011c49180d75e7b205  gcc/testsuite/c-c++-common/gomp/loop-5.c
! 0e5ecd8b8c9cdd84398ae025b38f672d  gcc/testsuite/c-c++-common/gomp/loop-6.c
  576203a21b3e04e83b9327037d1c1809  gcc/testsuite/c-c++-common/gomp/loop-7.c
  bbbe92047177151542b6ff825d52c4e4  gcc/testsuite/c-c++-common/gomp/loop-8.c
  67e2138fdf955d87a5868fe981258015  gcc/testsuite/c-c++-common/gomp/loop-9.c
! 8da70a5247e132a8efa279bb49f619b7  gcc/testsuite/c-c++-common/gomp/map-1.c
  c344f817350996173949d094733f67be  gcc/testsuite/c-c++-common/gomp/map-2.c
! 42caca9fac0b797494697225f198c522  gcc/testsuite/c-c++-common/gomp/map-3.c
  db038278199fc73220fb4647e0497ea0  gcc/testsuite/c-c++-common/gomp/map-4.c
  277cedbcd2effa8734f83ed409ddc325  gcc/testsuite/c-c++-common/gomp/map-5.c
! 814e1f038b9c7666d70236f83f92fa5a  gcc/testsuite/c-c++-common/gomp/map-6.c
  2692678faa474fcf195a2428df6fb5e5  gcc/testsuite/c-c++-common/gomp/map-7.c
  44f82c91ea0443cfcfe48ff2e2ad3f49  gcc/testsuite/c-c++-common/gomp/map-8.c
  3e29caf558ff43e0252f11af669e8da4  gcc/testsuite/c-c++-common/gomp/map-9.c
*************** d5ee74feb13dd8875f12132dccfe8126  gcc/te
*** 19611,19636 ****
  c8a1a97bda2a787e6f55c68563e256b6  gcc/testsuite/c-c++-common/gomp/masked-2.c
  cfaa12085558b78e5edbdb4a338479d2  gcc/testsuite/c-c++-common/gomp/masked-combined-1.c
  6e3cc2570637ae982148840ff511645f  gcc/testsuite/c-c++-common/gomp/masked-combined-2.c
! 3b2e33f5ff6d1fab628bbc47b669bb42  gcc/testsuite/c-c++-common/gomp/master-combined-1.c
! 8fdb590ce90d1a3c558de7dc81a38d89  gcc/testsuite/c-c++-common/gomp/master-combined-2.c
! 12e47fbbab05145794b374e5016428d4  gcc/testsuite/c-c++-common/gomp/metadirective-1.c
! f67e0d223bbb0c16f0c3a7499da55b84  gcc/testsuite/c-c++-common/gomp/metadirective-2.c
! 4064a5f9f31ac05197a3719255169379  gcc/testsuite/c-c++-common/gomp/metadirective-3.c
! c4c693d3bd497dda156e8c80f281ec9f  gcc/testsuite/c-c++-common/gomp/metadirective-4.c
! 41fd3da8d6c55ec28cc82c985ac26db9  gcc/testsuite/c-c++-common/gomp/metadirective-5.c
  73bada7c7787403df92d2dfc87280580  gcc/testsuite/c-c++-common/gomp/metadirective-6.c
  7b22de52752aa4a8856fe8647b82149d  gcc/testsuite/c-c++-common/gomp/metadirective-7.c
! c567b86bb1126d3b39271713b71a2141  gcc/testsuite/c-c++-common/gomp/metadirective-8.c
  c28fc6e101bf84c9d67bd2c517baab12  gcc/testsuite/c-c++-common/gomp/metadirective-condition-constexpr.c
  8485d76d1824f228789b67d7d2a1ebd7  gcc/testsuite/c-c++-common/gomp/metadirective-condition.c
! cc1a17af4b834e9dce3121d7b1504e85  gcc/testsuite/c-c++-common/gomp/metadirective-construct.c
! bfe7bd722a9814c4e3724c6c94b3bdc4  gcc/testsuite/c-c++-common/gomp/metadirective-device.c
  7c91be054d86d927a2f10a75976a8761  gcc/testsuite/c-c++-common/gomp/metadirective-error-recovery.c
  6b4e94542efc1bd9b8aeafa5fe783d4d  gcc/testsuite/c-c++-common/gomp/metadirective-no-score.c
! 69c97abaf5f460360c59b85da779c004  gcc/testsuite/c-c++-common/gomp/metadirective-target-device-1.c
! 19d35171b50642272e61c9f69291eca9  gcc/testsuite/c-c++-common/gomp/metadirective-target-device-2.c
  6fa2115821b7e05f4b4772c894f7cf12  gcc/testsuite/c-c++-common/gomp/nesting-1.c
! 499237904b7c8cb28bc8640600ad73ce  gcc/testsuite/c-c++-common/gomp/nesting-2.c
  406abd50996addc0929156835a0b5686  gcc/testsuite/c-c++-common/gomp/nesting-warn-1.c
  ce3fb89f1513613421cc620156235d68  gcc/testsuite/c-c++-common/gomp/nontemporal-1.c
  22a3481e8c3df4f0596de8f67dab0a59  gcc/testsuite/c-c++-common/gomp/nontemporal-2.c
--- 19624,19650 ----
  c8a1a97bda2a787e6f55c68563e256b6  gcc/testsuite/c-c++-common/gomp/masked-2.c
  cfaa12085558b78e5edbdb4a338479d2  gcc/testsuite/c-c++-common/gomp/masked-combined-1.c
  6e3cc2570637ae982148840ff511645f  gcc/testsuite/c-c++-common/gomp/masked-combined-2.c
! 33991433a8d5fe2997502d08681126b9  gcc/testsuite/c-c++-common/gomp/master-combined-1.c
! 4a5d49059dabcb1d7cf61373c2a995e5  gcc/testsuite/c-c++-common/gomp/master-combined-2.c
! a42964c64b7225261056bf2b2623f076  gcc/testsuite/c-c++-common/gomp/master-construct-dep.c
! b5a164e1ce999382ee655ad25a3d0c1f  gcc/testsuite/c-c++-common/gomp/metadirective-1.c
! 03a515a1e3597cf520d2d68b34480806  gcc/testsuite/c-c++-common/gomp/metadirective-2.c
! 42e3945ca7e0e1949e36b38821736b78  gcc/testsuite/c-c++-common/gomp/metadirective-3.c
! f51c12e12aa9d6e328b32af5cc76dcac  gcc/testsuite/c-c++-common/gomp/metadirective-4.c
! 6047952e1ccee66b2bec8128ef0cb301  gcc/testsuite/c-c++-common/gomp/metadirective-5.c
  73bada7c7787403df92d2dfc87280580  gcc/testsuite/c-c++-common/gomp/metadirective-6.c
  7b22de52752aa4a8856fe8647b82149d  gcc/testsuite/c-c++-common/gomp/metadirective-7.c
! d85304880c7b01ea07b7dc3c78a37186  gcc/testsuite/c-c++-common/gomp/metadirective-8.c
  c28fc6e101bf84c9d67bd2c517baab12  gcc/testsuite/c-c++-common/gomp/metadirective-condition-constexpr.c
  8485d76d1824f228789b67d7d2a1ebd7  gcc/testsuite/c-c++-common/gomp/metadirective-condition.c
! 75e4b3338350ed5352d72c946de8a8e3  gcc/testsuite/c-c++-common/gomp/metadirective-construct.c
! 69e32c2f57a34cb1c4a8f6753ba9cd28  gcc/testsuite/c-c++-common/gomp/metadirective-device.c
  7c91be054d86d927a2f10a75976a8761  gcc/testsuite/c-c++-common/gomp/metadirective-error-recovery.c
  6b4e94542efc1bd9b8aeafa5fe783d4d  gcc/testsuite/c-c++-common/gomp/metadirective-no-score.c
! a9313b0e00e046685ddf52d897b7e00a  gcc/testsuite/c-c++-common/gomp/metadirective-target-device-1.c
! 5f6a7994ed16fabfb01d2a0a93f68c05  gcc/testsuite/c-c++-common/gomp/metadirective-target-device-2.c
  6fa2115821b7e05f4b4772c894f7cf12  gcc/testsuite/c-c++-common/gomp/nesting-1.c
! f37000e541a6c64d3750a6bb2830b0f5  gcc/testsuite/c-c++-common/gomp/nesting-2.c
  406abd50996addc0929156835a0b5686  gcc/testsuite/c-c++-common/gomp/nesting-warn-1.c
  ce3fb89f1513613421cc620156235d68  gcc/testsuite/c-c++-common/gomp/nontemporal-1.c
  22a3481e8c3df4f0596de8f67dab0a59  gcc/testsuite/c-c++-common/gomp/nontemporal-2.c
*************** a8cae7afccfdaf5c55701d1fd623cbae  gcc/te
*** 19643,19669 ****
  6edff4d259a25d0cbbd6bd788efd47b2  gcc/testsuite/c-c++-common/gomp/ompx-1.c
  a53bfb3d3f3e9c540d6b019fcc527fa4  gcc/testsuite/c-c++-common/gomp/ompx-2.c
  a5b411651a6f93c5cf3ce9b7c306c2e4  gcc/testsuite/c-c++-common/gomp/order-1.c
! e576d3919b1276ac29fcd10c2af0e650  gcc/testsuite/c-c++-common/gomp/order-2.c
  db900e16f622568df37b1e202fd25b9f  gcc/testsuite/c-c++-common/gomp/order-3.c
  2c96377fc6a30d8bf8d1cd396f082ca2  gcc/testsuite/c-c++-common/gomp/order-4.c
  e8952d612b22320252f24d04beb2a8c4  gcc/testsuite/c-c++-common/gomp/order-5.c
  06c6eba3d88519d1f5d47f8bff4ee5bd  gcc/testsuite/c-c++-common/gomp/order-6.c
  346e1047ae41de5d851736fb41185adb  gcc/testsuite/c-c++-common/gomp/ordered-1.c
  ef86bb29dfbea0543e8ca02ce440c823  gcc/testsuite/c-c++-common/gomp/ordered-2.c
! 434dac8d4b0c3eac54e134c566fc150e  gcc/testsuite/c-c++-common/gomp/ordered-3.c
  5e682cf26c41baf2449ab35ba5792ab9  gcc/testsuite/c-c++-common/gomp/ordered-4.c
! 6de5cc795b03e66607152e78a7e74075  gcc/testsuite/c-c++-common/gomp/ordered-5.c
  7c7abae5700e726f7de5bd56574429f5  gcc/testsuite/c-c++-common/gomp/pr100450.c
! d074232c71f3c9bde5cf2fdec94c73bd  gcc/testsuite/c-c++-common/gomp/pr100902-1.c
  345ac275dfe65e2e8ba683d2c389ebc3  gcc/testsuite/c-c++-common/gomp/pr101535-1.c
  b3c3fe5a4ecc31231711cb240274d62c  gcc/testsuite/c-c++-common/gomp/pr101535-2.c
  5d5843e74a197943e19c270c43a913e1  gcc/testsuite/c-c++-common/gomp/pr102431.c
  6c331d01569cfa98850571463b5b3cc7  gcc/testsuite/c-c++-common/gomp/pr102432.c
! ef8ec3320ae234be32fcdfc5379eaca2  gcc/testsuite/c-c++-common/gomp/pr102640.c
  adad7bd5c50995330c12e8103e6790a5  gcc/testsuite/c-c++-common/gomp/pr103642.c
  0e59133481fb703cb575967bddb0ce8e  gcc/testsuite/c-c++-common/gomp/pr103705.c
  0cff3c6576e6db18b71f25c5da8bcbb0  gcc/testsuite/c-c++-common/gomp/pr104968.c
! 20a09a854dcd3ce8ca6f7a9db64d35cc  gcc/testsuite/c-c++-common/gomp/pr106836.c
  1164bc26f7382179d1bd6b607af1d336  gcc/testsuite/c-c++-common/gomp/pr106981.c
  8f995161beda01326e712ba172a760f8  gcc/testsuite/c-c++-common/gomp/pr107001.c
  9b182f81cba9d60fb2cbbde45ceae582  gcc/testsuite/c-c++-common/gomp/pr108244-3.c
--- 19657,19683 ----
  6edff4d259a25d0cbbd6bd788efd47b2  gcc/testsuite/c-c++-common/gomp/ompx-1.c
  a53bfb3d3f3e9c540d6b019fcc527fa4  gcc/testsuite/c-c++-common/gomp/ompx-2.c
  a5b411651a6f93c5cf3ce9b7c306c2e4  gcc/testsuite/c-c++-common/gomp/order-1.c
! dde98055342a9a3a28134ae4aa3487f1  gcc/testsuite/c-c++-common/gomp/order-2.c
  db900e16f622568df37b1e202fd25b9f  gcc/testsuite/c-c++-common/gomp/order-3.c
  2c96377fc6a30d8bf8d1cd396f082ca2  gcc/testsuite/c-c++-common/gomp/order-4.c
  e8952d612b22320252f24d04beb2a8c4  gcc/testsuite/c-c++-common/gomp/order-5.c
  06c6eba3d88519d1f5d47f8bff4ee5bd  gcc/testsuite/c-c++-common/gomp/order-6.c
  346e1047ae41de5d851736fb41185adb  gcc/testsuite/c-c++-common/gomp/ordered-1.c
  ef86bb29dfbea0543e8ca02ce440c823  gcc/testsuite/c-c++-common/gomp/ordered-2.c
! c62f3d0b8c701613fe55319de78f95a8  gcc/testsuite/c-c++-common/gomp/ordered-3.c
  5e682cf26c41baf2449ab35ba5792ab9  gcc/testsuite/c-c++-common/gomp/ordered-4.c
! 1782aa907206d89e5ba52dde92e19afd  gcc/testsuite/c-c++-common/gomp/ordered-5.c
  7c7abae5700e726f7de5bd56574429f5  gcc/testsuite/c-c++-common/gomp/pr100450.c
! 2b8b119b5f899b06ebe333d5a4fe09a6  gcc/testsuite/c-c++-common/gomp/pr100902-1.c
  345ac275dfe65e2e8ba683d2c389ebc3  gcc/testsuite/c-c++-common/gomp/pr101535-1.c
  b3c3fe5a4ecc31231711cb240274d62c  gcc/testsuite/c-c++-common/gomp/pr101535-2.c
  5d5843e74a197943e19c270c43a913e1  gcc/testsuite/c-c++-common/gomp/pr102431.c
  6c331d01569cfa98850571463b5b3cc7  gcc/testsuite/c-c++-common/gomp/pr102432.c
! b8eb3737c47823dad07903fceeebbb91  gcc/testsuite/c-c++-common/gomp/pr102640.c
  adad7bd5c50995330c12e8103e6790a5  gcc/testsuite/c-c++-common/gomp/pr103642.c
  0e59133481fb703cb575967bddb0ce8e  gcc/testsuite/c-c++-common/gomp/pr103705.c
  0cff3c6576e6db18b71f25c5da8bcbb0  gcc/testsuite/c-c++-common/gomp/pr104968.c
! 3d9e94c8e115054717bd37077a05606a  gcc/testsuite/c-c++-common/gomp/pr106836.c
  1164bc26f7382179d1bd6b607af1d336  gcc/testsuite/c-c++-common/gomp/pr106981.c
  8f995161beda01326e712ba172a760f8  gcc/testsuite/c-c++-common/gomp/pr107001.c
  9b182f81cba9d60fb2cbbde45ceae582  gcc/testsuite/c-c++-common/gomp/pr108244-3.c
*************** d29126c43ce63e6c41ed6130742b15e2  gcc/te
*** 19673,19679 ****
  424bcc14d1a0bf87f576aafc485996e9  gcc/testsuite/c-c++-common/gomp/pr118965-2.c
  c83ce004951a9a0719e190f7457302c7  gcc/testsuite/c-c++-common/gomp/pr119000.c
  250f54e2a193f434f875e2caf2868bc6  gcc/testsuite/c-c++-common/gomp/pr120052.c
! 66ea510ba6b3f54e8f1cfe27f71e6df6  gcc/testsuite/c-c++-common/gomp/pr120180-1.c
  46f67781e5603b2bc3c978d0c4f81881  gcc/testsuite/c-c++-common/gomp/pr120180-2.c
  c315375dde6dfd35915ac372415190a8  gcc/testsuite/c-c++-common/gomp/pr120564.c
  5a0fc856eddf5869c1607a51a511b91b  gcc/testsuite/c-c++-common/gomp/pr121452-1.c
--- 19687,19693 ----
  424bcc14d1a0bf87f576aafc485996e9  gcc/testsuite/c-c++-common/gomp/pr118965-2.c
  c83ce004951a9a0719e190f7457302c7  gcc/testsuite/c-c++-common/gomp/pr119000.c
  250f54e2a193f434f875e2caf2868bc6  gcc/testsuite/c-c++-common/gomp/pr120052.c
! d6f3e72d7fc95edbabd5b36d39abf504  gcc/testsuite/c-c++-common/gomp/pr120180-1.c
  46f67781e5603b2bc3c978d0c4f81881  gcc/testsuite/c-c++-common/gomp/pr120180-2.c
  c315375dde6dfd35915ac372415190a8  gcc/testsuite/c-c++-common/gomp/pr120564.c
  5a0fc856eddf5869c1607a51a511b91b  gcc/testsuite/c-c++-common/gomp/pr121452-1.c
*************** aae6611cdfa9d295d22870f8c9222f69  gcc/te
*** 19700,19706 ****
  83d8f65d36e02aa02588d7b997bdd269  gcc/testsuite/c-c++-common/gomp/pr60823-4.c
  1610228a9a46a0984cc32fd91d652f9f  gcc/testsuite/c-c++-common/gomp/pr61200.c
  5d62c24a3f7ca5be3884ca9fa737f5ee  gcc/testsuite/c-c++-common/gomp/pr61486-1.c
! a0bcd73ece188f59d460802714ee5067  gcc/testsuite/c-c++-common/gomp/pr61486-2.c
  2b6ae32069c2763c6ff2b173604cf38c  gcc/testsuite/c-c++-common/gomp/pr63249.c
  301fa510c5c9466fd8fc36226349fc5e  gcc/testsuite/c-c++-common/gomp/pr63326.c
  8c7b7ac1e0fde7a3111b8d330d0914d2  gcc/testsuite/c-c++-common/gomp/pr63328.c
--- 19714,19720 ----
  83d8f65d36e02aa02588d7b997bdd269  gcc/testsuite/c-c++-common/gomp/pr60823-4.c
  1610228a9a46a0984cc32fd91d652f9f  gcc/testsuite/c-c++-common/gomp/pr61200.c
  5d62c24a3f7ca5be3884ca9fa737f5ee  gcc/testsuite/c-c++-common/gomp/pr61486-1.c
! 31b80d849d5a28052dd6f5c4458c91ee  gcc/testsuite/c-c++-common/gomp/pr61486-2.c
  2b6ae32069c2763c6ff2b173604cf38c  gcc/testsuite/c-c++-common/gomp/pr63249.c
  301fa510c5c9466fd8fc36226349fc5e  gcc/testsuite/c-c++-common/gomp/pr63326.c
  8c7b7ac1e0fde7a3111b8d330d0914d2  gcc/testsuite/c-c++-common/gomp/pr63328.c
*************** f518663bb6d3fa214257a2306172d690  gcc/te
*** 19726,19743 ****
  2f7e224eea72eb9533c2b8dc9b23926c  gcc/testsuite/c-c++-common/gomp/pr83977-2.c
  5ed693b15605c7a6113e875ba1444a17  gcc/testsuite/c-c++-common/gomp/pr83977-3.c
  5c98b968b8b8fa3dcda75ece1f760d12  gcc/testsuite/c-c++-common/gomp/pr84341.c
! fb9e5ede5d43a206c572fa77be49ff02  gcc/testsuite/c-c++-common/gomp/pr85696.c
! 5a052f00b5f1b3e9b85f4ae57c40cd3f  gcc/testsuite/c-c++-common/gomp/pr85956.c
  62a0e309912895235f385cc84af32654  gcc/testsuite/c-c++-common/gomp/pr86025.c
! 87ee1aaaafc85753df32bcb01994259d  gcc/testsuite/c-c++-common/gomp/pr88203-1.c
! 1f30700143a21b49cf9723cf4b9afff4  gcc/testsuite/c-c++-common/gomp/pr88203-2.c
! e083342c345fbf82eb1bd2fc11805647  gcc/testsuite/c-c++-common/gomp/pr88203-3.c
  0e989c3d25d634c553662814c966233e  gcc/testsuite/c-c++-common/gomp/pr88588.c
  61ca8b866c491c9064a5bbfddd90f421  gcc/testsuite/c-c++-common/gomp/pr90954.c
  819ef14711cd571111df09cc81f8d206  gcc/testsuite/c-c++-common/gomp/pr91401-1.c
! b5b3167776d67985ba91daaee41243de  gcc/testsuite/c-c++-common/gomp/pr91401-2.c
  b3f9ad4f2faec8588c2227d327169f98  gcc/testsuite/c-c++-common/gomp/pr91920.c
! c47f7acdcdd1614c035f4f07306fc305  gcc/testsuite/c-c++-common/gomp/pr91987.c
  bfdfa56ffe2ff48534494fc41ae0f4d1  gcc/testsuite/c-c++-common/gomp/pr93555-1.c
  b31fd83ffcebdfef84e1d323888e9a76  gcc/testsuite/c-c++-common/gomp/pr93555-2.c
  5099f2ef60912770f0c4404cf9b2c25b  gcc/testsuite/c-c++-common/gomp/pr94874.c
--- 19740,19757 ----
  2f7e224eea72eb9533c2b8dc9b23926c  gcc/testsuite/c-c++-common/gomp/pr83977-2.c
  5ed693b15605c7a6113e875ba1444a17  gcc/testsuite/c-c++-common/gomp/pr83977-3.c
  5c98b968b8b8fa3dcda75ece1f760d12  gcc/testsuite/c-c++-common/gomp/pr84341.c
! c8bfa681b0dc2a64a21af52b0bda9c3d  gcc/testsuite/c-c++-common/gomp/pr85696.c
! 0db3b99e52888d9c9b44d879fcf8e946  gcc/testsuite/c-c++-common/gomp/pr85956.c
  62a0e309912895235f385cc84af32654  gcc/testsuite/c-c++-common/gomp/pr86025.c
! 41850c6a0c361bc573c86d759542ff85  gcc/testsuite/c-c++-common/gomp/pr88203-1.c
! 16d2ddfecb394141fcbe78725045d4d1  gcc/testsuite/c-c++-common/gomp/pr88203-2.c
! 52a20d34e61ca3fa5262a033c804b76e  gcc/testsuite/c-c++-common/gomp/pr88203-3.c
  0e989c3d25d634c553662814c966233e  gcc/testsuite/c-c++-common/gomp/pr88588.c
  61ca8b866c491c9064a5bbfddd90f421  gcc/testsuite/c-c++-common/gomp/pr90954.c
  819ef14711cd571111df09cc81f8d206  gcc/testsuite/c-c++-common/gomp/pr91401-1.c
! 1905c7c8bb8f357e31d042cbcd521110  gcc/testsuite/c-c++-common/gomp/pr91401-2.c
  b3f9ad4f2faec8588c2227d327169f98  gcc/testsuite/c-c++-common/gomp/pr91920.c
! 9a5db8d6155df9de99b821289e98c104  gcc/testsuite/c-c++-common/gomp/pr91987.c
  bfdfa56ffe2ff48534494fc41ae0f4d1  gcc/testsuite/c-c++-common/gomp/pr93555-1.c
  b31fd83ffcebdfef84e1d323888e9a76  gcc/testsuite/c-c++-common/gomp/pr93555-2.c
  5099f2ef60912770f0c4404cf9b2c25b  gcc/testsuite/c-c++-common/gomp/pr94874.c
*************** df4d5a9505c92f441e5ea85708315fed  gcc/te
*** 19746,19770 ****
  16407f97a063776e00434477f996fecf  gcc/testsuite/c-c++-common/gomp/pr97289.c
  164aefc7e8183e2dba0d1ca04fc30cad  gcc/testsuite/c-c++-common/gomp/pr97862.c
  ae2ea6f7d6a1c903e63c85894d80fa1f  gcc/testsuite/c-c++-common/gomp/pr97958.c
! 5f698bea3b17b89ee6b2d1f2c4d53245  gcc/testsuite/c-c++-common/gomp/pr98187.c
  ca8127e06402e403622dc86e29c1968a  gcc/testsuite/c-c++-common/gomp/pr99226.c
  c256c2058eeb3e746f5e3aa43e5ef703  gcc/testsuite/c-c++-common/gomp/pr99322.c
! c1255515899e883bf101b8fe9669ddb2  gcc/testsuite/c-c++-common/gomp/pr99928-1.c
! 70eb1900010f320f470971a222064987  gcc/testsuite/c-c++-common/gomp/pr99928-10.c
! c5857956820c1e5a99f8582d85f4edfb  gcc/testsuite/c-c++-common/gomp/pr99928-11.c
! ecc136fa73d3794c39f5db17e7e1bf89  gcc/testsuite/c-c++-common/gomp/pr99928-12.c
! 86b220f458eae9523d2d9ffaea28bfde  gcc/testsuite/c-c++-common/gomp/pr99928-13.c
! d2840e9245156eb839b5d29ba5d04813  gcc/testsuite/c-c++-common/gomp/pr99928-14.c
  0fe7c8f841c4d50dbdc412ced09bdc5f  gcc/testsuite/c-c++-common/gomp/pr99928-15.c
  6e2f48832695b8716c9560557d9ebeff  gcc/testsuite/c-c++-common/gomp/pr99928-16.c
! 01e5e6c358c1b2bda2f912c662479951  gcc/testsuite/c-c++-common/gomp/pr99928-2.c
! 27c451c1baffe80971c04424e2db95ed  gcc/testsuite/c-c++-common/gomp/pr99928-3.c
! 3a7443fce23b0e51df79d4de738fb3aa  gcc/testsuite/c-c++-common/gomp/pr99928-4.c
! b08ed6597bae58dc36345d182457b284  gcc/testsuite/c-c++-common/gomp/pr99928-5.c
! 8118a0357c6e9834a6d55e44534aa7e7  gcc/testsuite/c-c++-common/gomp/pr99928-6.c
! edd476c7cf2235802faddcd9994b240a  gcc/testsuite/c-c++-common/gomp/pr99928-7.c
! 40dfbce0df2820963a349d5fc46aa1bc  gcc/testsuite/c-c++-common/gomp/pr99928-8.c
! bb6de6a22e5ed8a789047eb3e5ce9194  gcc/testsuite/c-c++-common/gomp/pr99928-9.c
  9163b15a47c5f6fdd167e356b13cc71d  gcc/testsuite/c-c++-common/gomp/pragma-1.c
  ec917d1b32d82ceef9c2bdec8d8da20c  gcc/testsuite/c-c++-common/gomp/pragma-2.c
  7ab8fe292315282ada2f81fce2270d05  gcc/testsuite/c-c++-common/gomp/pragma-3.c
--- 19760,19784 ----
  16407f97a063776e00434477f996fecf  gcc/testsuite/c-c++-common/gomp/pr97289.c
  164aefc7e8183e2dba0d1ca04fc30cad  gcc/testsuite/c-c++-common/gomp/pr97862.c
  ae2ea6f7d6a1c903e63c85894d80fa1f  gcc/testsuite/c-c++-common/gomp/pr97958.c
! c57346a518f23fd991e5f885ae2d15ea  gcc/testsuite/c-c++-common/gomp/pr98187.c
  ca8127e06402e403622dc86e29c1968a  gcc/testsuite/c-c++-common/gomp/pr99226.c
  c256c2058eeb3e746f5e3aa43e5ef703  gcc/testsuite/c-c++-common/gomp/pr99322.c
! 1174032f6ae3a8ed110dc73d8cf54a9a  gcc/testsuite/c-c++-common/gomp/pr99928-1.c
! b82449e75195510388f591a4c01a17f2  gcc/testsuite/c-c++-common/gomp/pr99928-10.c
! 1e203e3451fae937a1314da71a5c0145  gcc/testsuite/c-c++-common/gomp/pr99928-11.c
! f6f82a7bc823fabb9b48935a5fc5a748  gcc/testsuite/c-c++-common/gomp/pr99928-12.c
! d1f78cf052f54d11a4e2000b13275285  gcc/testsuite/c-c++-common/gomp/pr99928-13.c
! 07053136bccb4df5cbab6cbca90abf63  gcc/testsuite/c-c++-common/gomp/pr99928-14.c
  0fe7c8f841c4d50dbdc412ced09bdc5f  gcc/testsuite/c-c++-common/gomp/pr99928-15.c
  6e2f48832695b8716c9560557d9ebeff  gcc/testsuite/c-c++-common/gomp/pr99928-16.c
! d6a4af3f9da043e553e6f63618b69850  gcc/testsuite/c-c++-common/gomp/pr99928-2.c
! 474879d06c5c2a6fc6280be1cf2f81c0  gcc/testsuite/c-c++-common/gomp/pr99928-3.c
! f69c8f53942d9a17a67859f05f07535f  gcc/testsuite/c-c++-common/gomp/pr99928-4.c
! 2b3737070cee8f826cd0944ba391850b  gcc/testsuite/c-c++-common/gomp/pr99928-5.c
! ba655106d772e7a869cb8c18019f4372  gcc/testsuite/c-c++-common/gomp/pr99928-6.c
! 4425b60ca3b953fecab970041b11c25d  gcc/testsuite/c-c++-common/gomp/pr99928-7.c
! 0388f3ae9f586238fc3220d3297ec77d  gcc/testsuite/c-c++-common/gomp/pr99928-8.c
! 09e807cb09a4b6a3bc80e1b3587f5b8c  gcc/testsuite/c-c++-common/gomp/pr99928-9.c
  9163b15a47c5f6fdd167e356b13cc71d  gcc/testsuite/c-c++-common/gomp/pragma-1.c
  ec917d1b32d82ceef9c2bdec8d8da20c  gcc/testsuite/c-c++-common/gomp/pragma-2.c
  7ab8fe292315282ada2f81fce2270d05  gcc/testsuite/c-c++-common/gomp/pragma-3.c
*************** cbab216a8de36785197d4e800a979308  gcc/te
*** 19784,19790 ****
  138b4d3ae4b945a10af58bf56191dc98  gcc/testsuite/c-c++-common/gomp/requires-6.c
  931b4332bd990faa5b9aab4a228ff1f0  gcc/testsuite/c-c++-common/gomp/requires-7.c
  51ad5d5dea3fc1a8b4058a688095449f  gcc/testsuite/c-c++-common/gomp/requires-8.c
! fe0a74c5903b31208f01a6cf910a26c4  gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c
  d9099abb95b3aa925b93c1cd8e3a018f  gcc/testsuite/c-c++-common/gomp/scan-1.c
  3fb5b28574137ba1aa754466a8ea9a57  gcc/testsuite/c-c++-common/gomp/scan-2.c
  9f76c491a629f3bbd470f28c269ef485  gcc/testsuite/c-c++-common/gomp/scan-3.c
--- 19798,19804 ----
  138b4d3ae4b945a10af58bf56191dc98  gcc/testsuite/c-c++-common/gomp/requires-6.c
  931b4332bd990faa5b9aab4a228ff1f0  gcc/testsuite/c-c++-common/gomp/requires-7.c
  51ad5d5dea3fc1a8b4058a688095449f  gcc/testsuite/c-c++-common/gomp/requires-8.c
! b5e0716808ae1e4913144f783517e6f2  gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c
  d9099abb95b3aa925b93c1cd8e3a018f  gcc/testsuite/c-c++-common/gomp/scan-1.c
  3fb5b28574137ba1aa754466a8ea9a57  gcc/testsuite/c-c++-common/gomp/scan-2.c
  9f76c491a629f3bbd470f28c269ef485  gcc/testsuite/c-c++-common/gomp/scan-3.c
*************** e413f648ce33386781b2b3e3e93cb96b  gcc/te
*** 19793,19799 ****
  4715bbfc6161c4d45a18bbfad6b8d4db  gcc/testsuite/c-c++-common/gomp/scan-6.c
  3a5155fae66616b98d3623c835195084  gcc/testsuite/c-c++-common/gomp/scan-7.c
  8af1ef16f27f56d5d687ed958b671d57  gcc/testsuite/c-c++-common/gomp/schedule-1.c
! 22fba04602b98c0a4fd88b5b47d5ffee  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c
  5924e1e32a4e62ad7e1324d01a4ed89e  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-2.c
  0ec2e2f575568924dc191f53badc3e5d  gcc/testsuite/c-c++-common/gomp/schedule-simd-1.c
  53548358c583f3560b346d6cccb7c834  gcc/testsuite/c-c++-common/gomp/scope-1.c
--- 19807,19813 ----
  4715bbfc6161c4d45a18bbfad6b8d4db  gcc/testsuite/c-c++-common/gomp/scan-6.c
  3a5155fae66616b98d3623c835195084  gcc/testsuite/c-c++-common/gomp/scan-7.c
  8af1ef16f27f56d5d687ed958b671d57  gcc/testsuite/c-c++-common/gomp/schedule-1.c
! 67f96e7a06232d9ddf2c2926d87eb850  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c
  5924e1e32a4e62ad7e1324d01a4ed89e  gcc/testsuite/c-c++-common/gomp/schedule-modifiers-2.c
  0ec2e2f575568924dc191f53badc3e5d  gcc/testsuite/c-c++-common/gomp/schedule-simd-1.c
  53548358c583f3560b346d6cccb7c834  gcc/testsuite/c-c++-common/gomp/scope-1.c
*************** dee5af747bd0ddc9371dcb5f4acebedc  gcc/te
*** 19813,19823 ****
  46e92b35d2398a842688290ab9b4d326  gcc/testsuite/c-c++-common/gomp/simd7.c
  cbcc4bef361026a7cc530337842d4576  gcc/testsuite/c-c++-common/gomp/simd8.c
  4763c84e6c50d72fa161297e3be84c0c  gcc/testsuite/c-c++-common/gomp/single1.c
! 844fb7ecb682dca6450572fb8b60782a  gcc/testsuite/c-c++-common/gomp/sink-1.c
! 1c82cae2e7ce3866f8094c1dd264cbae  gcc/testsuite/c-c++-common/gomp/sink-2.c
! ee53749fe1ce6195a2d3af75b4e8d7fb  gcc/testsuite/c-c++-common/gomp/sink-3.c
! 0c93f7b88c30539ace084df2f4c7f5ae  gcc/testsuite/c-c++-common/gomp/sink-4.c
! c95f2cef3c7fd923368769c2f5efbc75  gcc/testsuite/c-c++-common/gomp/sink-5.c
  0749f498cf83f772934b8604c900cb5e  gcc/testsuite/c-c++-common/gomp/target-50.c
  7dd2999f2d02373b3e86e73ae2f05008  gcc/testsuite/c-c++-common/gomp/target-data-1.c
  6e2b1e79dd9e5bf80f1786de4ce0d44f  gcc/testsuite/c-c++-common/gomp/target-data-2.c
--- 19827,19837 ----
  46e92b35d2398a842688290ab9b4d326  gcc/testsuite/c-c++-common/gomp/simd7.c
  cbcc4bef361026a7cc530337842d4576  gcc/testsuite/c-c++-common/gomp/simd8.c
  4763c84e6c50d72fa161297e3be84c0c  gcc/testsuite/c-c++-common/gomp/single1.c
! 522837eb6e38eb50d487b2abe0b24c55  gcc/testsuite/c-c++-common/gomp/sink-1.c
! e38699fc95591670923b1df8841251b7  gcc/testsuite/c-c++-common/gomp/sink-2.c
! 7aac68734460bf454d498a860bb03ca9  gcc/testsuite/c-c++-common/gomp/sink-3.c
! 6c4597989f8cc9ca199c5c5346ec81d4  gcc/testsuite/c-c++-common/gomp/sink-4.c
! 1ec786685b936c4598e96899e26e0365  gcc/testsuite/c-c++-common/gomp/sink-5.c
  0749f498cf83f772934b8604c900cb5e  gcc/testsuite/c-c++-common/gomp/target-50.c
  7dd2999f2d02373b3e86e73ae2f05008  gcc/testsuite/c-c++-common/gomp/target-data-1.c
  6e2b1e79dd9e5bf80f1786de4ce0d44f  gcc/testsuite/c-c++-common/gomp/target-data-2.c
*************** efc9a1ea706c31b0d18f03ed7004c09e  gcc/te
*** 19841,19859 ****
  a6be8d491b81e2bd5a132e54885fb1c2  gcc/testsuite/c-c++-common/gomp/target-map-iterators-2.c
  e87cc72174c798e3391c3b978ab190ca  gcc/testsuite/c-c++-common/gomp/target-map-iterators-3.c
  d290e10563b5dcd9cbe022f9ce9d118d  gcc/testsuite/c-c++-common/gomp/target-map-iterators-4.c
! b1764366c6f492a5e181e374576a2120  gcc/testsuite/c-c++-common/gomp/target-teams-1.c
  ecaf3261edcbdf06b45669d051546ad3  gcc/testsuite/c-c++-common/gomp/target-update-1.c
  e807b465f51f25bc3e564cb1576543d7  gcc/testsuite/c-c++-common/gomp/target-update-iterators-1.c
  0f6b04454d158c1ca276ecc2763de98f  gcc/testsuite/c-c++-common/gomp/target-update-iterators-2.c
  5a3145767cf31c903624fc08a8be5e8a  gcc/testsuite/c-c++-common/gomp/target-update-iterators-3.c
! 25d48772fc72e3c1f8e2192ec44ffb95  gcc/testsuite/c-c++-common/gomp/task-detach-1.c
  1bc40a217ad51b17433b0b59c1491757  gcc/testsuite/c-c++-common/gomp/task-detach-2.c
  f1e648ba677e52a9fa9d8897002b52a4  gcc/testsuite/c-c++-common/gomp/task-detach-3.c
  bd7a4a612b8188086bf0650fb29a279a  gcc/testsuite/c-c++-common/gomp/taskloop-reduction-1.c
  2308634fac41b5571bbc8ecf6a185772  gcc/testsuite/c-c++-common/gomp/taskwait-depend-1.c
  8c3ceab30b17d7db76563ec581ddede2  gcc/testsuite/c-c++-common/gomp/taskwait-depend-nowait-1.c
  539c731e3f7fd40b1bf0432a8a02c04f  gcc/testsuite/c-c++-common/gomp/teams-1.c
! 3020e821377ef557f546cba8a78f1192  gcc/testsuite/c-c++-common/gomp/teams-2.c
  3f5e45489b8b980cc7ab48dc63fd1c6d  gcc/testsuite/c-c++-common/gomp/teams-3.c
  4cf9cfae5e8904faa465b43d9e33100f  gcc/testsuite/c-c++-common/gomp/tile-1.c
  0aef92e98c2de136f1fd63b6c7d7efb6  gcc/testsuite/c-c++-common/gomp/tile-10.c
--- 19855,19873 ----
  a6be8d491b81e2bd5a132e54885fb1c2  gcc/testsuite/c-c++-common/gomp/target-map-iterators-2.c
  e87cc72174c798e3391c3b978ab190ca  gcc/testsuite/c-c++-common/gomp/target-map-iterators-3.c
  d290e10563b5dcd9cbe022f9ce9d118d  gcc/testsuite/c-c++-common/gomp/target-map-iterators-4.c
! 5d53b03c5014dede6e0f732cc32d3856  gcc/testsuite/c-c++-common/gomp/target-teams-1.c
  ecaf3261edcbdf06b45669d051546ad3  gcc/testsuite/c-c++-common/gomp/target-update-1.c
  e807b465f51f25bc3e564cb1576543d7  gcc/testsuite/c-c++-common/gomp/target-update-iterators-1.c
  0f6b04454d158c1ca276ecc2763de98f  gcc/testsuite/c-c++-common/gomp/target-update-iterators-2.c
  5a3145767cf31c903624fc08a8be5e8a  gcc/testsuite/c-c++-common/gomp/target-update-iterators-3.c
! 3e94cc26d4b0039e4d3efc66900f1480  gcc/testsuite/c-c++-common/gomp/task-detach-1.c
  1bc40a217ad51b17433b0b59c1491757  gcc/testsuite/c-c++-common/gomp/task-detach-2.c
  f1e648ba677e52a9fa9d8897002b52a4  gcc/testsuite/c-c++-common/gomp/task-detach-3.c
  bd7a4a612b8188086bf0650fb29a279a  gcc/testsuite/c-c++-common/gomp/taskloop-reduction-1.c
  2308634fac41b5571bbc8ecf6a185772  gcc/testsuite/c-c++-common/gomp/taskwait-depend-1.c
  8c3ceab30b17d7db76563ec581ddede2  gcc/testsuite/c-c++-common/gomp/taskwait-depend-nowait-1.c
  539c731e3f7fd40b1bf0432a8a02c04f  gcc/testsuite/c-c++-common/gomp/teams-1.c
! e9e7f42c9b1a5bd14983696136a79f15  gcc/testsuite/c-c++-common/gomp/teams-2.c
  3f5e45489b8b980cc7ab48dc63fd1c6d  gcc/testsuite/c-c++-common/gomp/teams-3.c
  4cf9cfae5e8904faa465b43d9e33100f  gcc/testsuite/c-c++-common/gomp/tile-1.c
  0aef92e98c2de136f1fd63b6c7d7efb6  gcc/testsuite/c-c++-common/gomp/tile-10.c
*************** dbc9807bc9d36dca6cbe7c26bce4a0fd  gcc/te
*** 19887,19892 ****
--- 19901,19910 ----
  b36b586a036a4dd648a9a73563a1397e  gcc/testsuite/c-c++-common/gomp/unroll-non-rect-2.c
  ac892fefdc113f9fa56af5822c49d8a0  gcc/testsuite/c-c++-common/gomp/unroll-non-rect-3.c
  f0fe4ca6700d6810bdfbe42f7a328581  gcc/testsuite/c-c++-common/gomp/unroll-simd-1.c
+ c67d4ce1ba8835a7d5bba95cfee6a999  gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c
+ c990dbb84715f7cae212333d6c10df66  gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c
+ f467d80ae7a5dcb6ae64d06010a6bccd  gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c
+ 068da7e739dbe5d90ada7169c0588ca2  gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c
  ae581c139df3ad068476c3c0011b10df  gcc/testsuite/c-c++-common/guality/Og-dce-1.c
  77dfce37c98a7f3ba9475b987b487300  gcc/testsuite/c-c++-common/guality/Og-dce-2.c
  d8649d74f0435be9dfbda3d78613de4d  gcc/testsuite/c-c++-common/guality/Og-dce-3.c
*************** a3ef49aa5fa035e0eaa1fb23c589fe61  gcc/te
*** 22004,22010 ****
  bbebf12acd88ceeb72fb99bff77e889b  gcc/testsuite/g++.dg/absvect.C
  cb66889e261971e64a6568617bffaeaa  gcc/testsuite/g++.dg/addr_builtin-1.C
  806e88a78438f2d478b5ab1e9caa01f7  gcc/testsuite/g++.dg/alias-checks.C
! 45f080b7b8ebc92ae9b6072bf11d0451  gcc/testsuite/g++.dg/analyzer/analyzer.exp
  0918dccee8951925f7bc4640874a6cd3  gcc/testsuite/g++.dg/analyzer/cstdlib-2.C
  4eff577cfbafc7e71c5a97654882870b  gcc/testsuite/g++.dg/analyzer/cstdlib.C
  7951a855cc080064bcfdf98631e39a2e  gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C
--- 22022,22028 ----
  bbebf12acd88ceeb72fb99bff77e889b  gcc/testsuite/g++.dg/absvect.C
  cb66889e261971e64a6568617bffaeaa  gcc/testsuite/g++.dg/addr_builtin-1.C
  806e88a78438f2d478b5ab1e9caa01f7  gcc/testsuite/g++.dg/alias-checks.C
! a4e65680761446ab7c9db774efcb1ab4  gcc/testsuite/g++.dg/analyzer/analyzer.exp
  0918dccee8951925f7bc4640874a6cd3  gcc/testsuite/g++.dg/analyzer/cstdlib-2.C
  4eff577cfbafc7e71c5a97654882870b  gcc/testsuite/g++.dg/analyzer/cstdlib.C
  7951a855cc080064bcfdf98631e39a2e  gcc/testsuite/g++.dg/analyzer/ctor-dtor-1.C
*************** c53f1ef0c637a90cc988d801af41f460  gcc/te
*** 22036,22044 ****
  3c10867fbf89524c306ea9dc3d94aaa8  gcc/testsuite/g++.dg/analyzer/exception-subclass-2.C
  57d34e2bc9948b3d199616c5c5b66473  gcc/testsuite/g++.dg/analyzer/exception-value-1.C
  eafad55d1edd46129b380a1d3be7e6ed  gcc/testsuite/g++.dg/analyzer/exception-value-2.C
! aee64cbf100dae9efef80e115fe81fa5  gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C
! d48dc772d9d4ad923fd71e1943ad4e74  gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C
! 711125ae12b0d3c94ebb54ad30379ce6  gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C
  e000c1d398eb170979b06c1a5a317727  gcc/testsuite/g++.dg/analyzer/fd-bind-pr107783.C
  acd12a34fb1477ca263e7f38269f40d0  gcc/testsuite/g++.dg/analyzer/fno-exception.C
  5ada15fa323a1043ed8e9454047ae98f  gcc/testsuite/g++.dg/analyzer/infinite-recursion-1.C
--- 22054,22062 ----
  3c10867fbf89524c306ea9dc3d94aaa8  gcc/testsuite/g++.dg/analyzer/exception-subclass-2.C
  57d34e2bc9948b3d199616c5c5b66473  gcc/testsuite/g++.dg/analyzer/exception-value-1.C
  eafad55d1edd46129b380a1d3be7e6ed  gcc/testsuite/g++.dg/analyzer/exception-value-2.C
! 74731006646864393e56deb235ada60e  gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C
! 3ebf8e6e056a90f87637dce4dacdf130  gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C
! 2cf72eec1f43cb24a1e9de6d87368289  gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C
  e000c1d398eb170979b06c1a5a317727  gcc/testsuite/g++.dg/analyzer/fd-bind-pr107783.C
  acd12a34fb1477ca263e7f38269f40d0  gcc/testsuite/g++.dg/analyzer/fno-exception.C
  5ada15fa323a1043ed8e9454047ae98f  gcc/testsuite/g++.dg/analyzer/infinite-recursion-1.C
*************** c12e9b1c9d4173ff464e74ea78ab647e  gcc/te
*** 22070,22080 ****
  a2fd899038ad8292f72a6822b197251e  gcc/testsuite/g++.dg/analyzer/pr93899.C
  eaa9774dd2e5983a606c09705cc0910d  gcc/testsuite/g++.dg/analyzer/pr93950.C
  8be1b2df9cb18eee82a4ec915b0dc6bd  gcc/testsuite/g++.dg/analyzer/pr94011.C
! d51f9849c7606d92789bbe7b3bde78a0  gcc/testsuite/g++.dg/analyzer/pr94028.C
  a4e6ecf8eb5d90837d394182e0f66932  gcc/testsuite/g++.dg/analyzer/pr94503.C
  52afe02bc242a0578da458c6b600f7a9  gcc/testsuite/g++.dg/analyzer/pr94816.C
  6509a360a1cfc8a35798c6570be50e53  gcc/testsuite/g++.dg/analyzer/pr95042.C
! 1f1ca76966db742950e5c41205a0e5c5  gcc/testsuite/g++.dg/analyzer/pr96641.C
  193b3e5ec79d8a574b99f4e8d24f1371  gcc/testsuite/g++.dg/analyzer/pr96643.C
  81f94699d318a0dddde448db3be19c82  gcc/testsuite/g++.dg/analyzer/pr96723.C
  0e3d325deb7c52ea428d98b81934cc8f  gcc/testsuite/g++.dg/analyzer/pr96763.C
--- 22088,22098 ----
  a2fd899038ad8292f72a6822b197251e  gcc/testsuite/g++.dg/analyzer/pr93899.C
  eaa9774dd2e5983a606c09705cc0910d  gcc/testsuite/g++.dg/analyzer/pr93950.C
  8be1b2df9cb18eee82a4ec915b0dc6bd  gcc/testsuite/g++.dg/analyzer/pr94011.C
! 34d0115255b04c3a4bda51b4a395c48e  gcc/testsuite/g++.dg/analyzer/pr94028.C
  a4e6ecf8eb5d90837d394182e0f66932  gcc/testsuite/g++.dg/analyzer/pr94503.C
  52afe02bc242a0578da458c6b600f7a9  gcc/testsuite/g++.dg/analyzer/pr94816.C
  6509a360a1cfc8a35798c6570be50e53  gcc/testsuite/g++.dg/analyzer/pr95042.C
! 4e787b50e4ea41d78310ab04e7ef573b  gcc/testsuite/g++.dg/analyzer/pr96641.C
  193b3e5ec79d8a574b99f4e8d24f1371  gcc/testsuite/g++.dg/analyzer/pr96643.C
  81f94699d318a0dddde448db3be19c82  gcc/testsuite/g++.dg/analyzer/pr96723.C
  0e3d325deb7c52ea428d98b81934cc8f  gcc/testsuite/g++.dg/analyzer/pr96763.C
*************** e64fec6e11d681323560675ce433a296  gcc/te
*** 29344,29350 ****
  9caca590d0b2747d8553259a98ef571f  gcc/testsuite/g++.dg/debug/dwarf2/nested-4.C
  c7ffd1dd0ae40378732be3ac8729a37c  gcc/testsuite/g++.dg/debug/dwarf2/non-virtual-thunk.C
  abe2799d2ba99877ff9ac9491b7f3baf  gcc/testsuite/g++.dg/debug/dwarf2/noreturn-function.C
! b3cbbd79d5ff077a6732280d76b2284e  gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C
  b117227269644a100a7a06bf2bc9bf6f  gcc/testsuite/g++.dg/debug/dwarf2/pr101378.C
  660a2a2e1e89fe3e9cfe2899e7f1e627  gcc/testsuite/g++.dg/debug/dwarf2/pr104407.C
  b43f4d6e4f27dc96c0e870436aa41ff2  gcc/testsuite/g++.dg/debug/dwarf2/pr108716.C
--- 29362,29368 ----
  9caca590d0b2747d8553259a98ef571f  gcc/testsuite/g++.dg/debug/dwarf2/nested-4.C
  c7ffd1dd0ae40378732be3ac8729a37c  gcc/testsuite/g++.dg/debug/dwarf2/non-virtual-thunk.C
  abe2799d2ba99877ff9ac9491b7f3baf  gcc/testsuite/g++.dg/debug/dwarf2/noreturn-function.C
! bb6210157c020f23ddd7ebb126fc5a71  gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C
  b117227269644a100a7a06bf2bc9bf6f  gcc/testsuite/g++.dg/debug/dwarf2/pr101378.C
  660a2a2e1e89fe3e9cfe2899e7f1e627  gcc/testsuite/g++.dg/debug/dwarf2/pr104407.C
  b43f4d6e4f27dc96c0e870436aa41ff2  gcc/testsuite/g++.dg/debug/dwarf2/pr108716.C
*************** ed04365b57dec8b58125996aefe86234  gcc/te
*** 30582,30588 ****
  dc3385dfd74c1bf2c03d4da78571f637  gcc/testsuite/g++.dg/ext/is_constructible5.C
  9553e2b6c2e80320fe1dbc53bb218083  gcc/testsuite/g++.dg/ext/is_constructible6.C
  c98f87283f462df05d8fe236ed206312  gcc/testsuite/g++.dg/ext/is_constructible8.C
! ea992d71ef74179d4456f5da529233cb  gcc/testsuite/g++.dg/ext/is_constructible9.C
  c9c92d18a37f4f8ede2a39a1b3ad62f6  gcc/testsuite/g++.dg/ext/is_convertible1.C
  d84b4e6ad32eec6b47fea11f39244dd7  gcc/testsuite/g++.dg/ext/is_convertible2.C
  5ba6edf25552f47c87c7d5735f634b3c  gcc/testsuite/g++.dg/ext/is_convertible3.C
--- 30600,30606 ----
  dc3385dfd74c1bf2c03d4da78571f637  gcc/testsuite/g++.dg/ext/is_constructible5.C
  9553e2b6c2e80320fe1dbc53bb218083  gcc/testsuite/g++.dg/ext/is_constructible6.C
  c98f87283f462df05d8fe236ed206312  gcc/testsuite/g++.dg/ext/is_constructible8.C
! 788a49bd616fe30f5a120b430e977971  gcc/testsuite/g++.dg/ext/is_constructible9.C
  c9c92d18a37f4f8ede2a39a1b3ad62f6  gcc/testsuite/g++.dg/ext/is_convertible1.C
  d84b4e6ad32eec6b47fea11f39244dd7  gcc/testsuite/g++.dg/ext/is_convertible2.C
  5ba6edf25552f47c87c7d5735f634b3c  gcc/testsuite/g++.dg/ext/is_convertible3.C
*************** a5e156d12a28581babb7f17d06d081b0  gcc/te
*** 31163,31172 ****
  b88c4d2eb787d594ae7d4448ee809655  gcc/testsuite/g++.dg/gomp/atomic-20.C
  791fe553aa8c81aef018b426f29f5e89  gcc/testsuite/g++.dg/gomp/atomic-5.C
  64f007dc7d84cb3393b19e626e175a25  gcc/testsuite/g++.dg/gomp/atomic-6.C
! 17da6394b8c4cdc421956ec182499c05  gcc/testsuite/g++.dg/gomp/attrs-1.C
  dced8c5f71a1723b347c22928b9d1c29  gcc/testsuite/g++.dg/gomp/attrs-10.C
  8aef5bf895140d4ffe19d9abafdb18cb  gcc/testsuite/g++.dg/gomp/attrs-11.C
! 2f120ea276638046a850ac83bd0ea37a  gcc/testsuite/g++.dg/gomp/attrs-12.C
  374abff67695b66d14322ae5a94abae0  gcc/testsuite/g++.dg/gomp/attrs-13.C
  0312393ea50f9742543a50b6b4052785  gcc/testsuite/g++.dg/gomp/attrs-14.C
  27b49f896bb789845232ea5137e30e4b  gcc/testsuite/g++.dg/gomp/attrs-15.C
--- 31181,31190 ----
  b88c4d2eb787d594ae7d4448ee809655  gcc/testsuite/g++.dg/gomp/atomic-20.C
  791fe553aa8c81aef018b426f29f5e89  gcc/testsuite/g++.dg/gomp/atomic-5.C
  64f007dc7d84cb3393b19e626e175a25  gcc/testsuite/g++.dg/gomp/atomic-6.C
! d3ed1f586878457b2fe01df54e2c15e5  gcc/testsuite/g++.dg/gomp/attrs-1.C
  dced8c5f71a1723b347c22928b9d1c29  gcc/testsuite/g++.dg/gomp/attrs-10.C
  8aef5bf895140d4ffe19d9abafdb18cb  gcc/testsuite/g++.dg/gomp/attrs-11.C
! c8feb3ea6f168aec29a1f3c80546b0d6  gcc/testsuite/g++.dg/gomp/attrs-12.C
  374abff67695b66d14322ae5a94abae0  gcc/testsuite/g++.dg/gomp/attrs-13.C
  0312393ea50f9742543a50b6b4052785  gcc/testsuite/g++.dg/gomp/attrs-14.C
  27b49f896bb789845232ea5137e30e4b  gcc/testsuite/g++.dg/gomp/attrs-15.C
*************** ae22cf8f9031f97be08e4ee31a2b0046  gcc/te
*** 31174,31189 ****
  02a84cd7b48b19d2f816a4673451ead5  gcc/testsuite/g++.dg/gomp/attrs-17.C
  718e92975c718d6a8df170b8f637ec0f  gcc/testsuite/g++.dg/gomp/attrs-18.C
  0f0e46efcf61bdd2e85191afc575f78c  gcc/testsuite/g++.dg/gomp/attrs-19.C
! d10183d866c921ee1102edf9ffd437b0  gcc/testsuite/g++.dg/gomp/attrs-2.C
  965283315c2f10741b7faeb5a0a8aaaf  gcc/testsuite/g++.dg/gomp/attrs-20.C
  216c00f775326d2b972b2fba2e4f78bf  gcc/testsuite/g++.dg/gomp/attrs-21.C
  a0d49eb317e2a3fc6166b88527bd7202  gcc/testsuite/g++.dg/gomp/attrs-3.C
! a4b430bf429ba39a09c902c162007710  gcc/testsuite/g++.dg/gomp/attrs-4.C
! 87087766f29fa1ed6f5e1834dc53e8e6  gcc/testsuite/g++.dg/gomp/attrs-5.C
  768e4f024ce850867145580f3410ade0  gcc/testsuite/g++.dg/gomp/attrs-6.C
  7e432872df1fa2926d351f6505b74cf5  gcc/testsuite/g++.dg/gomp/attrs-7.C
  de68616288c62ad9860d6c876e1b7668  gcc/testsuite/g++.dg/gomp/attrs-8.C
! 5789aa804503a25767f6b8f6508f55b9  gcc/testsuite/g++.dg/gomp/attrs-9.C
  198406cbb6b685eb46cdd430bb764765  gcc/testsuite/g++.dg/gomp/attrs-imperfect1.C
  c934a2db60dd428eef745c2a71dc985b  gcc/testsuite/g++.dg/gomp/attrs-imperfect2.C
  facc0feac01669ce68a86b330fcd9db6  gcc/testsuite/g++.dg/gomp/attrs-imperfect3.C
--- 31192,31207 ----
  02a84cd7b48b19d2f816a4673451ead5  gcc/testsuite/g++.dg/gomp/attrs-17.C
  718e92975c718d6a8df170b8f637ec0f  gcc/testsuite/g++.dg/gomp/attrs-18.C
  0f0e46efcf61bdd2e85191afc575f78c  gcc/testsuite/g++.dg/gomp/attrs-19.C
! bc6667f37a411173249302955266c7a7  gcc/testsuite/g++.dg/gomp/attrs-2.C
  965283315c2f10741b7faeb5a0a8aaaf  gcc/testsuite/g++.dg/gomp/attrs-20.C
  216c00f775326d2b972b2fba2e4f78bf  gcc/testsuite/g++.dg/gomp/attrs-21.C
  a0d49eb317e2a3fc6166b88527bd7202  gcc/testsuite/g++.dg/gomp/attrs-3.C
! 579661bf55cbe7fc0088f21eca9308a9  gcc/testsuite/g++.dg/gomp/attrs-4.C
! 2deb4e8e12a006c95dc891ecce74e8ed  gcc/testsuite/g++.dg/gomp/attrs-5.C
  768e4f024ce850867145580f3410ade0  gcc/testsuite/g++.dg/gomp/attrs-6.C
  7e432872df1fa2926d351f6505b74cf5  gcc/testsuite/g++.dg/gomp/attrs-7.C
  de68616288c62ad9860d6c876e1b7668  gcc/testsuite/g++.dg/gomp/attrs-8.C
! dba2017fe7023347daa6a10389700fe4  gcc/testsuite/g++.dg/gomp/attrs-9.C
  198406cbb6b685eb46cdd430bb764765  gcc/testsuite/g++.dg/gomp/attrs-imperfect1.C
  c934a2db60dd428eef745c2a71dc985b  gcc/testsuite/g++.dg/gomp/attrs-imperfect2.C
  facc0feac01669ce68a86b330fcd9db6  gcc/testsuite/g++.dg/gomp/attrs-imperfect3.C
*************** e69b76d336001e3bff0a54bd6620df4a  gcc/te
*** 31202,31225 ****
  46300df04504a396166de2b6167a3364  gcc/testsuite/g++.dg/gomp/bad-array-section-9.C
  28210efb6de9f161ddfddd705210bc01  gcc/testsuite/g++.dg/gomp/barrier-1.C
  4c453c9ea0f47e5cb5f0c015b01aa7c9  gcc/testsuite/g++.dg/gomp/barrier-2.C
! 418aec9a82d0d6ecba7659cc2cbb6dfa  gcc/testsuite/g++.dg/gomp/block-0.C
  b68b8e44bec144fb908749a6399485dc  gcc/testsuite/g++.dg/gomp/block-1.C
! 83bac61e5c1132bd7687cebc5785ce08  gcc/testsuite/g++.dg/gomp/block-10.C
  06bc4bbc09faaebbfe030db4359dba90  gcc/testsuite/g++.dg/gomp/block-11.C
  dd21a5a260cbe7e0fc9b94738fea89c9  gcc/testsuite/g++.dg/gomp/block-2.C
  7410e73e91a3af1eef7217429e3f1e0d  gcc/testsuite/g++.dg/gomp/block-3.C
  09c50aad0519d6f7a79e6985abb70a88  gcc/testsuite/g++.dg/gomp/block-4.C
! abc50547ca3d6feb00042e3a52cff486  gcc/testsuite/g++.dg/gomp/block-5.C
  c3c132c63e769145d5869a1e0c14f686  gcc/testsuite/g++.dg/gomp/block-6.C
  21fde38c324f474c2251280d6cd9a190  gcc/testsuite/g++.dg/gomp/block-7.C
  a2fa0bd0c20ee3b75edbfece640cf607  gcc/testsuite/g++.dg/gomp/block-8.C
! cbb7791c1d34b472a8662c5d203ff28c  gcc/testsuite/g++.dg/gomp/block-9.C
  a734cd9ac4c7933b7e53991e05b0aed5  gcc/testsuite/g++.dg/gomp/cancel-1.C
  1ded075e5504b0cdb4b01214eb33c7af  gcc/testsuite/g++.dg/gomp/cancel-2.C
  4d9ae441343c49335159712e6d78736c  gcc/testsuite/g++.dg/gomp/cancel-3.C
  229a4e7a48a56c0cf19c162f2a33f7f1  gcc/testsuite/g++.dg/gomp/clause-1.C
  58ada034a21b7734739e966345d25fac  gcc/testsuite/g++.dg/gomp/clause-2.C
! 1f4bc230caef2b86cebd77a5c13b474e  gcc/testsuite/g++.dg/gomp/clause-3.C
  235336151b903eded3eeda6e7cf9bf04  gcc/testsuite/g++.dg/gomp/clause-4.C
  fe6047f5ca7e2eac34792a3acc1193c2  gcc/testsuite/g++.dg/gomp/copyin-1.C
  73dc4c4897395dc7c307860e0c371fe1  gcc/testsuite/g++.dg/gomp/critical-1.C
--- 31220,31243 ----
  46300df04504a396166de2b6167a3364  gcc/testsuite/g++.dg/gomp/bad-array-section-9.C
  28210efb6de9f161ddfddd705210bc01  gcc/testsuite/g++.dg/gomp/barrier-1.C
  4c453c9ea0f47e5cb5f0c015b01aa7c9  gcc/testsuite/g++.dg/gomp/barrier-2.C
! 9f5e256803570c2e6b7ed3dda2240a4c  gcc/testsuite/g++.dg/gomp/block-0.C
  b68b8e44bec144fb908749a6399485dc  gcc/testsuite/g++.dg/gomp/block-1.C
! 8fcc14bb9e9ecb1daffaef4ce4fa5e00  gcc/testsuite/g++.dg/gomp/block-10.C
  06bc4bbc09faaebbfe030db4359dba90  gcc/testsuite/g++.dg/gomp/block-11.C
  dd21a5a260cbe7e0fc9b94738fea89c9  gcc/testsuite/g++.dg/gomp/block-2.C
  7410e73e91a3af1eef7217429e3f1e0d  gcc/testsuite/g++.dg/gomp/block-3.C
  09c50aad0519d6f7a79e6985abb70a88  gcc/testsuite/g++.dg/gomp/block-4.C
! e9327704a508cb4368831dd2cae39cbf  gcc/testsuite/g++.dg/gomp/block-5.C
  c3c132c63e769145d5869a1e0c14f686  gcc/testsuite/g++.dg/gomp/block-6.C
  21fde38c324f474c2251280d6cd9a190  gcc/testsuite/g++.dg/gomp/block-7.C
  a2fa0bd0c20ee3b75edbfece640cf607  gcc/testsuite/g++.dg/gomp/block-8.C
! fb4bd5ba16a1247a08193e81bedd4ad7  gcc/testsuite/g++.dg/gomp/block-9.C
  a734cd9ac4c7933b7e53991e05b0aed5  gcc/testsuite/g++.dg/gomp/cancel-1.C
  1ded075e5504b0cdb4b01214eb33c7af  gcc/testsuite/g++.dg/gomp/cancel-2.C
  4d9ae441343c49335159712e6d78736c  gcc/testsuite/g++.dg/gomp/cancel-3.C
  229a4e7a48a56c0cf19c162f2a33f7f1  gcc/testsuite/g++.dg/gomp/clause-1.C
  58ada034a21b7734739e966345d25fac  gcc/testsuite/g++.dg/gomp/clause-2.C
! e5dc869355372d06b9658a83a78f8ac3  gcc/testsuite/g++.dg/gomp/clause-3.C
  235336151b903eded3eeda6e7cf9bf04  gcc/testsuite/g++.dg/gomp/clause-4.C
  fe6047f5ca7e2eac34792a3acc1193c2  gcc/testsuite/g++.dg/gomp/copyin-1.C
  73dc4c4897395dc7c307860e0c371fe1  gcc/testsuite/g++.dg/gomp/critical-1.C
*************** d51c209a538c8e7658a85ca99d8eb17b  gcc/te
*** 31230,31245 ****
  ba4a8a9f66e6db7ad17cae2882bb6ca2  gcc/testsuite/g++.dg/gomp/declare-mapper-3.C
  c33309167faeafe5c8b09666ffbcb15d  gcc/testsuite/g++.dg/gomp/declare-simd-1.C
  6363ff64193eeb8db033202fd0e140f2  gcc/testsuite/g++.dg/gomp/declare-simd-2.C
! 28a86261a1a2a55a8d3a9adc105c5e51  gcc/testsuite/g++.dg/gomp/declare-simd-3.C
! b7abebe5118c972183723125a82bf785  gcc/testsuite/g++.dg/gomp/declare-simd-4.C
  d66c2d955608b28091f45938dce39989  gcc/testsuite/g++.dg/gomp/declare-simd-5.C
! 5a587ac99f134c07ba81955351d61058  gcc/testsuite/g++.dg/gomp/declare-simd-6.C
! c79187a84f6a3652db6de401a3f919eb  gcc/testsuite/g++.dg/gomp/declare-simd-7.C
! 02bf257ed2f303e3b9c8e12dfe76b7e8  gcc/testsuite/g++.dg/gomp/declare-simd-8.C
! 3935c27462840101e805d9321c6b8d56  gcc/testsuite/g++.dg/gomp/declare-target-1.C
! afbb2c51ce08bb72df769bd10e2948b8  gcc/testsuite/g++.dg/gomp/declare-target-2.C
! 9479e2595bf2b81d58fa940437142278  gcc/testsuite/g++.dg/gomp/declare-target-3.C
! 8dd796e15f21bd038ce2a7f7b865f164  gcc/testsuite/g++.dg/gomp/declare-target-indirect-1.C
  661796737d5bdc4f428545f6e32f9ac2  gcc/testsuite/g++.dg/gomp/declare-variant-1.C
  825bbebb080617f8bbb522a6cba06855  gcc/testsuite/g++.dg/gomp/declare-variant-10.C
  8c5c1fb82e121fce4fafd8f8b6d5df86  gcc/testsuite/g++.dg/gomp/declare-variant-11.C
--- 31248,31263 ----
  ba4a8a9f66e6db7ad17cae2882bb6ca2  gcc/testsuite/g++.dg/gomp/declare-mapper-3.C
  c33309167faeafe5c8b09666ffbcb15d  gcc/testsuite/g++.dg/gomp/declare-simd-1.C
  6363ff64193eeb8db033202fd0e140f2  gcc/testsuite/g++.dg/gomp/declare-simd-2.C
! 6103070bd607234bd1604269508e617f  gcc/testsuite/g++.dg/gomp/declare-simd-3.C
! b15195657c065acbe2aeb45e2b69dfa4  gcc/testsuite/g++.dg/gomp/declare-simd-4.C
  d66c2d955608b28091f45938dce39989  gcc/testsuite/g++.dg/gomp/declare-simd-5.C
! 64e75812a2fbc0ebfdb2f6352407c5a4  gcc/testsuite/g++.dg/gomp/declare-simd-6.C
! c0eb5c003c9c70245f87bc6ffd5fbbf7  gcc/testsuite/g++.dg/gomp/declare-simd-7.C
! b127172ebf402eac6c26fd618270f5fd  gcc/testsuite/g++.dg/gomp/declare-simd-8.C
! 33a90dc8f2d6644c3f9df733a94954ce  gcc/testsuite/g++.dg/gomp/declare-target-1.C
! ed9d591f601e3b14678ad7c42a014ec4  gcc/testsuite/g++.dg/gomp/declare-target-2.C
! 2f6e1f7dc32a81daa0fcc5ca5ff97449  gcc/testsuite/g++.dg/gomp/declare-target-3.C
! 29bdf856cc6852671843109148a2993e  gcc/testsuite/g++.dg/gomp/declare-target-indirect-1.C
  661796737d5bdc4f428545f6e32f9ac2  gcc/testsuite/g++.dg/gomp/declare-variant-1.C
  825bbebb080617f8bbb522a6cba06855  gcc/testsuite/g++.dg/gomp/declare-variant-10.C
  8c5c1fb82e121fce4fafd8f8b6d5df86  gcc/testsuite/g++.dg/gomp/declare-variant-11.C
*************** d90d98061bb0827b40e915782c675578  gcc/te
*** 31270,31279 ****
  bddd8d410ed52f2d30633f00da52aa3e  gcc/testsuite/g++.dg/gomp/delim-declare-variant-71.C
  5fde4edb396687302b0769e1000be869  gcc/testsuite/g++.dg/gomp/depend-1.C
  3357bb5c0a70641d769ba11be9547921  gcc/testsuite/g++.dg/gomp/depend-2.C
! fb99d6d7d52ead46e97905bf42cf8877  gcc/testsuite/g++.dg/gomp/depend-iterator-1.C
! 55e3a09904888da975d3d4b76f18d294  gcc/testsuite/g++.dg/gomp/depend-iterator-2.C
  e7b69c86d16171732a1c9ef74218d864  gcc/testsuite/g++.dg/gomp/depend-iterator-3.C
! c88ca9ee83e21423c9398c9f32d372a8  gcc/testsuite/g++.dg/gomp/depobj-1.C
  a93deb73566f880b8420dd06c26750b5  gcc/testsuite/g++.dg/gomp/dispatch-1.C
  6a401190e5aa4ea61651f1080bd57637  gcc/testsuite/g++.dg/gomp/dispatch-2.C
  04a22e19298efac2e169e318609a8961  gcc/testsuite/g++.dg/gomp/dispatch-3.C
--- 31288,31299 ----
  bddd8d410ed52f2d30633f00da52aa3e  gcc/testsuite/g++.dg/gomp/delim-declare-variant-71.C
  5fde4edb396687302b0769e1000be869  gcc/testsuite/g++.dg/gomp/depend-1.C
  3357bb5c0a70641d769ba11be9547921  gcc/testsuite/g++.dg/gomp/depend-2.C
! b4d5297f4327713db403a73581ccccdc  gcc/testsuite/g++.dg/gomp/depend-iterator-1.C
! fa44d88d6fab49c78847c2e58ab2fcb2  gcc/testsuite/g++.dg/gomp/depend-iterator-2.C
  e7b69c86d16171732a1c9ef74218d864  gcc/testsuite/g++.dg/gomp/depend-iterator-3.C
! 740ed0612faf0dcfa1181d65d79b197b  gcc/testsuite/g++.dg/gomp/depobj-1.C
! 877ebdd1bfc2c88bda8ef10ad16748e7  gcc/testsuite/g++.dg/gomp/deprecate-1.C
! d72b55aefb31276fa8a6bd1fcdd9c071  gcc/testsuite/g++.dg/gomp/deprecate-2.C
  a93deb73566f880b8420dd06c26750b5  gcc/testsuite/g++.dg/gomp/dispatch-1.C
  6a401190e5aa4ea61651f1080bd57637  gcc/testsuite/g++.dg/gomp/dispatch-2.C
  04a22e19298efac2e169e318609a8961  gcc/testsuite/g++.dg/gomp/dispatch-3.C
*************** a93deb73566f880b8420dd06c26750b5  gcc/te
*** 31283,31289 ****
  b3f41c0c1381b2bae198c4ab1e38b649  gcc/testsuite/g++.dg/gomp/dispatch-7.C
  4a5e8d5627864d7862c4aef870dd82b1  gcc/testsuite/g++.dg/gomp/dispatch-8.C
  b3a64480fb5bca64c20c44719293a088  gcc/testsuite/g++.dg/gomp/doacross-1.C
! bed93c8af3078a414d71ee17e30cb559  gcc/testsuite/g++.dg/gomp/doacross-2.C
  a641b3c27a53d1c10c399e1d07c6aaba  gcc/testsuite/g++.dg/gomp/error-1.C
  e4901d684aa3fbe52403cc2e9ed392dd  gcc/testsuite/g++.dg/gomp/flush-1.C
  ef2c50dfa26076520b9b148afd7e6d6b  gcc/testsuite/g++.dg/gomp/flush-2.C
--- 31303,31309 ----
  b3f41c0c1381b2bae198c4ab1e38b649  gcc/testsuite/g++.dg/gomp/dispatch-7.C
  4a5e8d5627864d7862c4aef870dd82b1  gcc/testsuite/g++.dg/gomp/dispatch-8.C
  b3a64480fb5bca64c20c44719293a088  gcc/testsuite/g++.dg/gomp/doacross-1.C
! 6fa391aeff5c13e9ee3a8c581e3eee6d  gcc/testsuite/g++.dg/gomp/doacross-2.C
  a641b3c27a53d1c10c399e1d07c6aaba  gcc/testsuite/g++.dg/gomp/error-1.C
  e4901d684aa3fbe52403cc2e9ed392dd  gcc/testsuite/g++.dg/gomp/flush-1.C
  ef2c50dfa26076520b9b148afd7e6d6b  gcc/testsuite/g++.dg/gomp/flush-2.C
*************** ca133d5331151195fe83821418918120  gcc/te
*** 31314,31324 ****
  4efa844f26c381598c7ae2f467f4b430  gcc/testsuite/g++.dg/gomp/ind-base-3.C
  84e8c7f5cf2d79dc03b900128ace9599  gcc/testsuite/g++.dg/gomp/interop-5.C
  eb763d050fd680e1a3302fbda441475d  gcc/testsuite/g++.dg/gomp/lastprivate-1.C
! 7f682781cd88149270eb73eb44f419f7  gcc/testsuite/g++.dg/gomp/linear-1.C
! 2fe09fbd7df28122d262deb35faa2ae9  gcc/testsuite/g++.dg/gomp/linear-2.C
! 735e63b333606d1c27a15969104fc81d  gcc/testsuite/g++.dg/gomp/linear-3.C
  f3752dd58fb20bb921b9e8b74ec7686a  gcc/testsuite/g++.dg/gomp/linear-4.C
! 32594d71748d37014bfb8527472591e5  gcc/testsuite/g++.dg/gomp/linear-5.C
  b233240aa872c73ae04a12a8d81356a7  gcc/testsuite/g++.dg/gomp/loop-1.C
  c220284cfbbe6d86192d110c5d4bcf7a  gcc/testsuite/g++.dg/gomp/loop-2.C
  85a54900b277e797b5dff30d84b7fdaa  gcc/testsuite/g++.dg/gomp/loop-3.C
--- 31334,31344 ----
  4efa844f26c381598c7ae2f467f4b430  gcc/testsuite/g++.dg/gomp/ind-base-3.C
  84e8c7f5cf2d79dc03b900128ace9599  gcc/testsuite/g++.dg/gomp/interop-5.C
  eb763d050fd680e1a3302fbda441475d  gcc/testsuite/g++.dg/gomp/lastprivate-1.C
! aa63e60d6cab6b816600edd48f28205d  gcc/testsuite/g++.dg/gomp/linear-1.C
! a7c423adda8633939bd348c24c3e69f1  gcc/testsuite/g++.dg/gomp/linear-2.C
! bd0d186474492aec1fa5ccfc1514dfd4  gcc/testsuite/g++.dg/gomp/linear-3.C
  f3752dd58fb20bb921b9e8b74ec7686a  gcc/testsuite/g++.dg/gomp/linear-4.C
! 5193b60634231c4dd85a0e5112c9ad00  gcc/testsuite/g++.dg/gomp/linear-5.C
  b233240aa872c73ae04a12a8d81356a7  gcc/testsuite/g++.dg/gomp/loop-1.C
  c220284cfbbe6d86192d110c5d4bcf7a  gcc/testsuite/g++.dg/gomp/loop-2.C
  85a54900b277e797b5dff30d84b7fdaa  gcc/testsuite/g++.dg/gomp/loop-3.C
*************** a4271cf7824f2a837486e7951ee23884  gcc/te
*** 31331,31340 ****
  eabb0107af4ef893414bb3cef506ad03  gcc/testsuite/g++.dg/gomp/macro-2.C
  942f8defe03c25bf08f780cf22c0a1e5  gcc/testsuite/g++.dg/gomp/macro-3.C
  cd9c99991551b9a21416b02b7ae5b5b4  gcc/testsuite/g++.dg/gomp/macro-4.C
! 9aae13bcef421fa550476abd7932cdc4  gcc/testsuite/g++.dg/gomp/map-1.C
  50fbf14e5c93c58c73a95a4f7fbae8d7  gcc/testsuite/g++.dg/gomp/map-2.C
  9dfc87617a82c07e89fab7b80d5eaf22  gcc/testsuite/g++.dg/gomp/map-3.C
  2fd2c913b551d0babeb55eaa546298d3  gcc/testsuite/g++.dg/gomp/map-assignment-1.C
  e12974abf2bb742407d18e9d07505400  gcc/testsuite/g++.dg/gomp/map-inc-1.C
  ebd0af100c738096180052a774559603  gcc/testsuite/g++.dg/gomp/map-lvalue-ref-1.C
  5a9a16b88b96f90ad2b701b96ed0e94f  gcc/testsuite/g++.dg/gomp/map-ptrmem-1.C
--- 31351,31361 ----
  eabb0107af4ef893414bb3cef506ad03  gcc/testsuite/g++.dg/gomp/macro-2.C
  942f8defe03c25bf08f780cf22c0a1e5  gcc/testsuite/g++.dg/gomp/macro-3.C
  cd9c99991551b9a21416b02b7ae5b5b4  gcc/testsuite/g++.dg/gomp/macro-4.C
! e31fb630f800e94353ce49735833ef33  gcc/testsuite/g++.dg/gomp/map-1.C
  50fbf14e5c93c58c73a95a4f7fbae8d7  gcc/testsuite/g++.dg/gomp/map-2.C
  9dfc87617a82c07e89fab7b80d5eaf22  gcc/testsuite/g++.dg/gomp/map-3.C
  2fd2c913b551d0babeb55eaa546298d3  gcc/testsuite/g++.dg/gomp/map-assignment-1.C
+ d95526d6768418b3bfc7b59f1daad476  gcc/testsuite/g++.dg/gomp/map-csm-dep.C
  e12974abf2bb742407d18e9d07505400  gcc/testsuite/g++.dg/gomp/map-inc-1.C
  ebd0af100c738096180052a774559603  gcc/testsuite/g++.dg/gomp/map-lvalue-ref-1.C
  5a9a16b88b96f90ad2b701b96ed0e94f  gcc/testsuite/g++.dg/gomp/map-ptrmem-1.C
*************** ebd0af100c738096180052a774559603  gcc/te
*** 31342,31350 ****
  150dbb1ed7f7addc7f90aa669a7813c5  gcc/testsuite/g++.dg/gomp/map-static-cast-lvalue-1.C
  8f59cb3d015ee89e45d623e205a09a5b  gcc/testsuite/g++.dg/gomp/map-ternary-1.C
  c0b53dcb8d3f8e31c7445987d35c43e7  gcc/testsuite/g++.dg/gomp/masked-1.C
! 9dff449fe2d97c4b3ade07b982e69364  gcc/testsuite/g++.dg/gomp/master-1.C
! c6830eca56ca17885a14ffa21aeb16c4  gcc/testsuite/g++.dg/gomp/master-2.C
! aec913fefeac6132003dfcbe3fd035eb  gcc/testsuite/g++.dg/gomp/master-3.C
  085a17f3b985f087eaa100869e3575b2  gcc/testsuite/g++.dg/gomp/member-1.C
  fc63cfdc56a33b15fa4d063e5ef655b2  gcc/testsuite/g++.dg/gomp/member-2.C
  57b9a2c844df3931aacf1c2702dc3ebe  gcc/testsuite/g++.dg/gomp/member-3.C
--- 31363,31371 ----
  150dbb1ed7f7addc7f90aa669a7813c5  gcc/testsuite/g++.dg/gomp/map-static-cast-lvalue-1.C
  8f59cb3d015ee89e45d623e205a09a5b  gcc/testsuite/g++.dg/gomp/map-ternary-1.C
  c0b53dcb8d3f8e31c7445987d35c43e7  gcc/testsuite/g++.dg/gomp/masked-1.C
! 661056976f2d0b44d6daa1f93de4145c  gcc/testsuite/g++.dg/gomp/master-1.C
! f17944b3d7f5eed17acd1c7b853ebc3d  gcc/testsuite/g++.dg/gomp/master-2.C
! 980028d36c16eb9948462a9b27fbbf42  gcc/testsuite/g++.dg/gomp/master-3.C
  085a17f3b985f087eaa100869e3575b2  gcc/testsuite/g++.dg/gomp/member-1.C
  fc63cfdc56a33b15fa4d063e5ef655b2  gcc/testsuite/g++.dg/gomp/member-2.C
  57b9a2c844df3931aacf1c2702dc3ebe  gcc/testsuite/g++.dg/gomp/member-3.C
*************** b04637997ce93ec04bd981d2cda2f110  gcc/te
*** 31354,31360 ****
  d4182799214f45dabaa5ac64c4ea27b7  gcc/testsuite/g++.dg/gomp/metadirective-condition-class.C
  ba7e10ef037089d1a30c8bf2079be93e  gcc/testsuite/g++.dg/gomp/metadirective-condition-template.C
  ab2ceb1dedc2f10e9f7e407653985ce1  gcc/testsuite/g++.dg/gomp/metadirective-template-1.C
! 40ddfb4cf46a4ea2a28ece501a9d1b2b  gcc/testsuite/g++.dg/gomp/method-1.C
  d829c2c1f9a522a97ec0370c1f67a993  gcc/testsuite/g++.dg/gomp/num-teams-1.C
  ebf6d36088516c323fa66747a975021b  gcc/testsuite/g++.dg/gomp/num-teams-2.C
  7cab62d4597c7508602b2872985c06f6  gcc/testsuite/g++.dg/gomp/omp-constexpr.C
--- 31375,31381 ----
  d4182799214f45dabaa5ac64c4ea27b7  gcc/testsuite/g++.dg/gomp/metadirective-condition-class.C
  ba7e10ef037089d1a30c8bf2079be93e  gcc/testsuite/g++.dg/gomp/metadirective-condition-template.C
  ab2ceb1dedc2f10e9f7e407653985ce1  gcc/testsuite/g++.dg/gomp/metadirective-template-1.C
! 5a715a37b9e594f1836677e4081459f5  gcc/testsuite/g++.dg/gomp/method-1.C
  d829c2c1f9a522a97ec0370c1f67a993  gcc/testsuite/g++.dg/gomp/num-teams-1.C
  ebf6d36088516c323fa66747a975021b  gcc/testsuite/g++.dg/gomp/num-teams-2.C
  7cab62d4597c7508602b2872985c06f6  gcc/testsuite/g++.dg/gomp/omp-constexpr.C
*************** e1073bec80cbc48fb15e02126aebb2b0  gcc/te
*** 31385,31392 ****
  641b551c65455ce91907afab3c572a40  gcc/testsuite/g++.dg/gomp/pr108503.C
  a8cfc657234f5f421b289d2fa6196965  gcc/testsuite/g++.dg/gomp/pr108607.C
  ed2fe9b487c91fe33d6cccf142fa243c  gcc/testsuite/g++.dg/gomp/pr111274.C
! 26a3372fea4c1feb18b0081e1b3f169f  gcc/testsuite/g++.dg/gomp/pr118876.C
! d03592521d487e264b0b5e3ef6f3dfb8  gcc/testsuite/g++.dg/gomp/pr119370.C
  44956ee7048ef4daaa13755b811fe3ca  gcc/testsuite/g++.dg/gomp/pr120180-1.C
  996def323ebaae8304a543404625c64a  gcc/testsuite/g++.dg/gomp/pr121977.C
  539bba6df5330b7a6631eca5665a0899  gcc/testsuite/g++.dg/gomp/pr24849.C
--- 31406,31413 ----
  641b551c65455ce91907afab3c572a40  gcc/testsuite/g++.dg/gomp/pr108503.C
  a8cfc657234f5f421b289d2fa6196965  gcc/testsuite/g++.dg/gomp/pr108607.C
  ed2fe9b487c91fe33d6cccf142fa243c  gcc/testsuite/g++.dg/gomp/pr111274.C
! a224cdf89df755372b414897a4fd0df0  gcc/testsuite/g++.dg/gomp/pr118876.C
! 24de1af738e1de5eade9460de843157d  gcc/testsuite/g++.dg/gomp/pr119370.C
  44956ee7048ef4daaa13755b811fe3ca  gcc/testsuite/g++.dg/gomp/pr120180-1.C
  996def323ebaae8304a543404625c64a  gcc/testsuite/g++.dg/gomp/pr121977.C
  539bba6df5330b7a6631eca5665a0899  gcc/testsuite/g++.dg/gomp/pr24849.C
*************** fa5907459731d5e6a2c5b41146d6a278  gcc/te
*** 31409,31421 ****
  b9a2699c36611930a6cd985b859b64d7  gcc/testsuite/g++.dg/gomp/pr29965-1.C
  5711a0429a614d267b03f59eb88887fe  gcc/testsuite/g++.dg/gomp/pr29965-10.C
  046a92dee9565bc6e805dfba4770a270  gcc/testsuite/g++.dg/gomp/pr29965-2.C
! 2d9f346cbd057f0a16724783281b8d57  gcc/testsuite/g++.dg/gomp/pr29965-3.C
  0e0cb0588880763a82a51504a65aace2  gcc/testsuite/g++.dg/gomp/pr29965-4.C
  ca06637df1998d16f119f8d27a3e6acb  gcc/testsuite/g++.dg/gomp/pr29965-5.C
  e4c52ee517b132b822a6172deff5f31c  gcc/testsuite/g++.dg/gomp/pr29965-6.C
  12f5347965c54d797e22be610798192d  gcc/testsuite/g++.dg/gomp/pr29965-7.C
  6905a61647fa8768928712f5ba22d8da  gcc/testsuite/g++.dg/gomp/pr29965-8.C
! e95b486012b6b3bf86bc7fbb9abc0634  gcc/testsuite/g++.dg/gomp/pr29965-9.C
  e247a2fd72bf51bc657ab556931ea098  gcc/testsuite/g++.dg/gomp/pr30494.C
  1ea0672448f9710d3d1cd0de67af01d2  gcc/testsuite/g++.dg/gomp/pr30558.C
  4c51a32fc519b510f11e6795ca140db1  gcc/testsuite/g++.dg/gomp/pr30696.C
--- 31430,31442 ----
  b9a2699c36611930a6cd985b859b64d7  gcc/testsuite/g++.dg/gomp/pr29965-1.C
  5711a0429a614d267b03f59eb88887fe  gcc/testsuite/g++.dg/gomp/pr29965-10.C
  046a92dee9565bc6e805dfba4770a270  gcc/testsuite/g++.dg/gomp/pr29965-2.C
! aec7dd56061531d1986483ae6738b9e3  gcc/testsuite/g++.dg/gomp/pr29965-3.C
  0e0cb0588880763a82a51504a65aace2  gcc/testsuite/g++.dg/gomp/pr29965-4.C
  ca06637df1998d16f119f8d27a3e6acb  gcc/testsuite/g++.dg/gomp/pr29965-5.C
  e4c52ee517b132b822a6172deff5f31c  gcc/testsuite/g++.dg/gomp/pr29965-6.C
  12f5347965c54d797e22be610798192d  gcc/testsuite/g++.dg/gomp/pr29965-7.C
  6905a61647fa8768928712f5ba22d8da  gcc/testsuite/g++.dg/gomp/pr29965-8.C
! 14aad81a0d0a011369f8308080eceae8  gcc/testsuite/g++.dg/gomp/pr29965-9.C
  e247a2fd72bf51bc657ab556931ea098  gcc/testsuite/g++.dg/gomp/pr30494.C
  1ea0672448f9710d3d1cd0de67af01d2  gcc/testsuite/g++.dg/gomp/pr30558.C
  4c51a32fc519b510f11e6795ca140db1  gcc/testsuite/g++.dg/gomp/pr30696.C
*************** b428c7f93716fb0816637554558e5f4e  gcc/te
*** 31483,31494 ****
  e517132ae674bc848e5ee4b0da030545  gcc/testsuite/g++.dg/gomp/pr78363-1.C
  d525d430781e40ebeb254a8efceedd72  gcc/testsuite/g++.dg/gomp/pr78363-2.C
  f0ca29d7ad7cbea99e20dbbd47fccc3a  gcc/testsuite/g++.dg/gomp/pr78363-3.C
! 8104ca69bf372e3834ba6d63f314e38d  gcc/testsuite/g++.dg/gomp/pr78363-4.C
  919c5bb2ba885e2bd64cfb826248ec85  gcc/testsuite/g++.dg/gomp/pr78363-5.C
! 07a5c3f588f1e61335a990d16052ec53  gcc/testsuite/g++.dg/gomp/pr78363-6.C
  de66b2101b13469eca3715a5cc2415c6  gcc/testsuite/g++.dg/gomp/pr78363-7.C
  b818df42e2e83be27f8843cc160f0681  gcc/testsuite/g++.dg/gomp/pr79429.C
! 03a632d72ed79c2b1b1996781b77b41c  gcc/testsuite/g++.dg/gomp/pr79664.C
  61f6175348fda4d4917305d233417a28  gcc/testsuite/g++.dg/gomp/pr80141.C
  ba547a4dc52e5fa57b7cf7b21dfac263  gcc/testsuite/g++.dg/gomp/pr81011.C
  002e68c629105684ed6e09f1c3c9f806  gcc/testsuite/g++.dg/gomp/pr81154.C
--- 31504,31515 ----
  e517132ae674bc848e5ee4b0da030545  gcc/testsuite/g++.dg/gomp/pr78363-1.C
  d525d430781e40ebeb254a8efceedd72  gcc/testsuite/g++.dg/gomp/pr78363-2.C
  f0ca29d7ad7cbea99e20dbbd47fccc3a  gcc/testsuite/g++.dg/gomp/pr78363-3.C
! 300bd5e349b5367b8b937430eaa206ca  gcc/testsuite/g++.dg/gomp/pr78363-4.C
  919c5bb2ba885e2bd64cfb826248ec85  gcc/testsuite/g++.dg/gomp/pr78363-5.C
! 31991136f9ba2df92066593c98660d8a  gcc/testsuite/g++.dg/gomp/pr78363-6.C
  de66b2101b13469eca3715a5cc2415c6  gcc/testsuite/g++.dg/gomp/pr78363-7.C
  b818df42e2e83be27f8843cc160f0681  gcc/testsuite/g++.dg/gomp/pr79429.C
! d3d051a37d1f886d75c2d4694487c8f3  gcc/testsuite/g++.dg/gomp/pr79664.C
  61f6175348fda4d4917305d233417a28  gcc/testsuite/g++.dg/gomp/pr80141.C
  ba547a4dc52e5fa57b7cf7b21dfac263  gcc/testsuite/g++.dg/gomp/pr81011.C
  002e68c629105684ed6e09f1c3c9f806  gcc/testsuite/g++.dg/gomp/pr81154.C
*************** cd480ac7c6ec75b5c415bce7a22c2d2c  gcc/te
*** 31511,31518 ****
  bc8b7b694dfa419e9a5ac679bb294b77  gcc/testsuite/g++.dg/gomp/pr91118-2.C
  ebf8a1329362091236a2248545e72ed3  gcc/testsuite/g++.dg/gomp/pr92084.C
  32a827a0f114f3ea9fa6a18789870b5a  gcc/testsuite/g++.dg/gomp/pr92504.C
! e80a40859e24951bb463534000ef38b8  gcc/testsuite/g++.dg/gomp/pr94477.C
! 21ac9533c0a9f9aabd2376182901e7ab  gcc/testsuite/g++.dg/gomp/pr94512.C
  ece594bf6d3e6ff699a427e6b710a3e9  gcc/testsuite/g++.dg/gomp/pr95063.C
  7faadc6618faa24df7ab4f7cc242a698  gcc/testsuite/g++.dg/gomp/pr98383.C
  7526d50396828b70db2a5c6c2e0c06f1  gcc/testsuite/g++.dg/gomp/pr99007.C
--- 31532,31539 ----
  bc8b7b694dfa419e9a5ac679bb294b77  gcc/testsuite/g++.dg/gomp/pr91118-2.C
  ebf8a1329362091236a2248545e72ed3  gcc/testsuite/g++.dg/gomp/pr92084.C
  32a827a0f114f3ea9fa6a18789870b5a  gcc/testsuite/g++.dg/gomp/pr92504.C
! dba99723e9085aa4ba9b9a32dd26b895  gcc/testsuite/g++.dg/gomp/pr94477.C
! b9df880726e595cd8ec43ea5d74088fe  gcc/testsuite/g++.dg/gomp/pr94512.C
  ece594bf6d3e6ff699a427e6b710a3e9  gcc/testsuite/g++.dg/gomp/pr95063.C
  7faadc6618faa24df7ab4f7cc242a698  gcc/testsuite/g++.dg/gomp/pr98383.C
  7526d50396828b70db2a5c6c2e0c06f1  gcc/testsuite/g++.dg/gomp/pr99007.C
*************** f97f1706978c263c63bb1cf7a9b02300  gcc/te
*** 31531,31548 ****
  641ac4dd2d2bc4be8797863fb6b5c286  gcc/testsuite/g++.dg/gomp/simd-1.C
  02e91fef2b3e3caf9b1f7f5696c2c507  gcc/testsuite/g++.dg/gomp/simd-2.C
  2b624343bfc79fe101d846a4291f71c8  gcc/testsuite/g++.dg/gomp/simd-3.C
! 459676a4eb36be81f7a549bd53ee45ab  gcc/testsuite/g++.dg/gomp/sink-1.C
! ace106d74abcf8296a991293066c7c51  gcc/testsuite/g++.dg/gomp/sink-2.C
! 4700c4fd7a0a53bd064b879e10cad37f  gcc/testsuite/g++.dg/gomp/sink-3.C
  4541b6dd317dc0f0bacd5159c57858da  gcc/testsuite/g++.dg/gomp/static-component-1.C
  d5056d7847f2753ff16e19275fe96735  gcc/testsuite/g++.dg/gomp/target-1.C
  8c284b2db0213aba2b9a945275ec6d74  gcc/testsuite/g++.dg/gomp/target-2.C
  e9b0e4dd4a2b6b1859c38faf273fc7ed  gcc/testsuite/g++.dg/gomp/target-3.C
  74316308fd39fecd67837ae2b456f6ce  gcc/testsuite/g++.dg/gomp/target-4.C
  1b305722cc5c4a70d422333277766f99  gcc/testsuite/g++.dg/gomp/target-lambda-2.C
! cb5219ee6745fc371bfbb0e484f3205e  gcc/testsuite/g++.dg/gomp/target-simd-clone-1.C
! e033ffcb572e3c374bf58a0eebd43584  gcc/testsuite/g++.dg/gomp/target-simd-clone-2.C
! 2948a42eb9b2368cd175c4e97e1ec30e  gcc/testsuite/g++.dg/gomp/target-teams-1.C
  bcd255e2d0e26acf60901103fc4678cc  gcc/testsuite/g++.dg/gomp/target-this-1.C
  cbbe10902855a271b9728e1fc6174c53  gcc/testsuite/g++.dg/gomp/target-this-2.C
  5dc593c0d06eba306eb52a76763f634f  gcc/testsuite/g++.dg/gomp/target-this-3.C
--- 31552,31569 ----
  641ac4dd2d2bc4be8797863fb6b5c286  gcc/testsuite/g++.dg/gomp/simd-1.C
  02e91fef2b3e3caf9b1f7f5696c2c507  gcc/testsuite/g++.dg/gomp/simd-2.C
  2b624343bfc79fe101d846a4291f71c8  gcc/testsuite/g++.dg/gomp/simd-3.C
! 68ad96e668f005716438fcec8c1799a9  gcc/testsuite/g++.dg/gomp/sink-1.C
! 649ac10618757ff3f1351c40e9f7a121  gcc/testsuite/g++.dg/gomp/sink-2.C
! 2c14e41a59f6a09cc05efdcf1115792d  gcc/testsuite/g++.dg/gomp/sink-3.C
  4541b6dd317dc0f0bacd5159c57858da  gcc/testsuite/g++.dg/gomp/static-component-1.C
  d5056d7847f2753ff16e19275fe96735  gcc/testsuite/g++.dg/gomp/target-1.C
  8c284b2db0213aba2b9a945275ec6d74  gcc/testsuite/g++.dg/gomp/target-2.C
  e9b0e4dd4a2b6b1859c38faf273fc7ed  gcc/testsuite/g++.dg/gomp/target-3.C
  74316308fd39fecd67837ae2b456f6ce  gcc/testsuite/g++.dg/gomp/target-4.C
  1b305722cc5c4a70d422333277766f99  gcc/testsuite/g++.dg/gomp/target-lambda-2.C
! 9fa21a3e4b88a99b545bc3e6df9c1847  gcc/testsuite/g++.dg/gomp/target-simd-clone-1.C
! d4624843e143cfb7f782b33b96c0189c  gcc/testsuite/g++.dg/gomp/target-simd-clone-2.C
! 7002a2623f50a8912526f750d3fa3d1b  gcc/testsuite/g++.dg/gomp/target-teams-1.C
  bcd255e2d0e26acf60901103fc4678cc  gcc/testsuite/g++.dg/gomp/target-this-1.C
  cbbe10902855a271b9728e1fc6174c53  gcc/testsuite/g++.dg/gomp/target-this-2.C
  5dc593c0d06eba306eb52a76763f634f  gcc/testsuite/g++.dg/gomp/target-this-3.C
*************** b057b654090f4695277d8c1866894100  gcc/te
*** 31576,31582 ****
  e201e0a42e3414d0a84df754a2f94528  gcc/testsuite/g++.dg/gomp/tpl-imperfect-gotos.C
  5bd0fdf4e461573f90f966d62514479f  gcc/testsuite/g++.dg/gomp/tpl-imperfect-invalid-scope.C
  28adf9e9fa5e0143101a0890bf7bd18e  gcc/testsuite/g++.dg/gomp/tpl-masked-1.C
! 357c0eef566a98817ab37efc3875adb1  gcc/testsuite/g++.dg/gomp/tpl-master-1.C
  3fe09daf99ddda4ea1fef59c61e34f47  gcc/testsuite/g++.dg/gomp/tpl-parallel-1.C
  d647e97b4f8477aa549f4f2f6eb6daa1  gcc/testsuite/g++.dg/gomp/tpl-parallel-2.C
  9e724e74b65abd98b17d7ce93dd59b9e  gcc/testsuite/g++.dg/gomp/tpl-target-update.C
--- 31597,31603 ----
  e201e0a42e3414d0a84df754a2f94528  gcc/testsuite/g++.dg/gomp/tpl-imperfect-gotos.C
  5bd0fdf4e461573f90f966d62514479f  gcc/testsuite/g++.dg/gomp/tpl-imperfect-invalid-scope.C
  28adf9e9fa5e0143101a0890bf7bd18e  gcc/testsuite/g++.dg/gomp/tpl-masked-1.C
! 489743d00cef4346d898b96260659694  gcc/testsuite/g++.dg/gomp/tpl-master-1.C
  3fe09daf99ddda4ea1fef59c61e34f47  gcc/testsuite/g++.dg/gomp/tpl-parallel-1.C
  d647e97b4f8477aa549f4f2f6eb6daa1  gcc/testsuite/g++.dg/gomp/tpl-parallel-2.C
  9e724e74b65abd98b17d7ce93dd59b9e  gcc/testsuite/g++.dg/gomp/tpl-target-update.C
*************** d647e97b4f8477aa549f4f2f6eb6daa1  gcc/te
*** 31584,31595 ****
  423bd7d1b2c603c3574210f5678ba5bd  gcc/testsuite/g++.dg/gomp/udr-2.C
  8f936f92e4618f6d92d63d32189ab5d4  gcc/testsuite/g++.dg/gomp/udr-3.C
  a10dd83ffd8fea8213e9a3713b91277f  gcc/testsuite/g++.dg/gomp/udr-4.C
! cbb9b7e93953b72bbadec7a3dd5d1de0  gcc/testsuite/g++.dg/gomp/udr-5.C
  432e931e22639a849a7183275e9c7582  gcc/testsuite/g++.dg/gomp/udr-6.C
  f0d6ccb51f8211f0c1ac5d76df91ff55  gcc/testsuite/g++.dg/gomp/unmappable-1.C
  d3840191ee9d2327dc2c3db177e73ca9  gcc/testsuite/g++.dg/gomp/unroll-1.C
  37bc05caa8b8c6ca83c1173ea97e8834  gcc/testsuite/g++.dg/gomp/unroll-2.C
  cb34036a86169db3ce69df129f34b2aa  gcc/testsuite/g++.dg/gomp/unroll-3.C
  10460bd293a45b31d22000255f88f03a  gcc/testsuite/g++.dg/graphite/graphite.exp
  d3199be15373325638c3f80cd3a60955  gcc/testsuite/g++.dg/graphite/id-1.C
  5c6a1178f4fd620e8792644c534c29f8  gcc/testsuite/g++.dg/graphite/pr39447.C
--- 31605,31617 ----
  423bd7d1b2c603c3574210f5678ba5bd  gcc/testsuite/g++.dg/gomp/udr-2.C
  8f936f92e4618f6d92d63d32189ab5d4  gcc/testsuite/g++.dg/gomp/udr-3.C
  a10dd83ffd8fea8213e9a3713b91277f  gcc/testsuite/g++.dg/gomp/udr-4.C
! cdf3c91621626888f451724b65a2d8f7  gcc/testsuite/g++.dg/gomp/udr-5.C
  432e931e22639a849a7183275e9c7582  gcc/testsuite/g++.dg/gomp/udr-6.C
  f0d6ccb51f8211f0c1ac5d76df91ff55  gcc/testsuite/g++.dg/gomp/unmappable-1.C
  d3840191ee9d2327dc2c3db177e73ca9  gcc/testsuite/g++.dg/gomp/unroll-1.C
  37bc05caa8b8c6ca83c1173ea97e8834  gcc/testsuite/g++.dg/gomp/unroll-2.C
  cb34036a86169db3ce69df129f34b2aa  gcc/testsuite/g++.dg/gomp/unroll-3.C
+ 8f5d0753dca3b55af329d67297d6fe2c  gcc/testsuite/g++.dg/gomp/uses_allocators-1.C
  10460bd293a45b31d22000255f88f03a  gcc/testsuite/g++.dg/graphite/graphite.exp
  d3199be15373325638c3f80cd3a60955  gcc/testsuite/g++.dg/graphite/id-1.C
  5c6a1178f4fd620e8792644c534c29f8  gcc/testsuite/g++.dg/graphite/pr39447.C
*************** fa4085de6910c10ab0b36d78605a13ba  gcc/te
*** 32403,32409 ****
  4a5841e7ab7f50a4eb3ea0d8bd6209da  gcc/testsuite/g++.dg/lookup/extern-c-hidden.C
  6d86e0ca8859d2d26e87c6cd14472cd7  gcc/testsuite/g++.dg/lookup/extern-c-redecl.C
  42649607e256c4617aa495101b2c5d8c  gcc/testsuite/g++.dg/lookup/extern-c-redecl2.C
! 5625a0300bd4231d19c3998fc06661ba  gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C
  e11a3ab6dd51269a647930526c6c6eeb  gcc/testsuite/g++.dg/lookup/extern-c-redecl4.C
  a1cbc0febcffce8e0f164e0feb720ea6  gcc/testsuite/g++.dg/lookup/extern-c-redecl5.C
  16a3850e9d48d6307623ac0730522dd5  gcc/testsuite/g++.dg/lookup/extern-c-redecl6.C
--- 32425,32431 ----
  4a5841e7ab7f50a4eb3ea0d8bd6209da  gcc/testsuite/g++.dg/lookup/extern-c-hidden.C
  6d86e0ca8859d2d26e87c6cd14472cd7  gcc/testsuite/g++.dg/lookup/extern-c-redecl.C
  42649607e256c4617aa495101b2c5d8c  gcc/testsuite/g++.dg/lookup/extern-c-redecl2.C
! 183ea73dbd9c84361be2ad1b2fd2203e  gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C
  e11a3ab6dd51269a647930526c6c6eeb  gcc/testsuite/g++.dg/lookup/extern-c-redecl4.C
  a1cbc0febcffce8e0f164e0feb720ea6  gcc/testsuite/g++.dg/lookup/extern-c-redecl5.C
  16a3850e9d48d6307623ac0730522dd5  gcc/testsuite/g++.dg/lookup/extern-c-redecl6.C
*************** cac1beb5973f2ae7f413286aea273726  gcc/te
*** 32872,32877 ****
--- 32894,32900 ----
  c5c8cccc47d1c38c5fcaf0b5019436c6  gcc/testsuite/g++.dg/lto/pr101396_0.C
  f009ccdcd68a9165d7d85f0d1a54ceb1  gcc/testsuite/g++.dg/lto/pr101396_1.C
  57e4a1572912531a0ef7ae5e66a36910  gcc/testsuite/g++.dg/lto/pr105399_0.C
+ cb526e2be6cc4214625ecb19179215f0  gcc/testsuite/g++.dg/lto/pr106409_0.C
  6e7e7fc204b3df6d8de9823aac948376  gcc/testsuite/g++.dg/lto/pr107467_0.C
  0a39d2e9c16962015b5adf8bff3214c8  gcc/testsuite/g++.dg/lto/pr108772_0.C
  f1d9eed0025353353019a54838c87ed9  gcc/testsuite/g++.dg/lto/pr113208.h
*************** f4151476d383dfa58ec57d84af229960  gcc/te
*** 33234,33240 ****
  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
! 8719ea34d29969b3f192a55d6801552e  gcc/testsuite/g++.dg/modules/compile-std1.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
--- 33257,33263 ----
  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
! 7394ff0e66446a47ebd607a85d216c6e  gcc/testsuite/g++.dg/modules/compile-std1.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
*************** b66a905fae26f7efc4eaf3f3c60a6b65  gcc/te
*** 33978,33984 ****
  e83f9a9aca70673da8258ca0631a2125  gcc/testsuite/g++.dg/modules/mod-tpl-1_b.C
  ad9ef329572dab16f2d3d5613538cd3f  gcc/testsuite/g++.dg/modules/mod-tpl-2_a.C
  95ab3577dee99f3d59838a96f1cbf4fc  gcc/testsuite/g++.dg/modules/mod-tpl-2_b.C
! 90a663a8db4b54883dc5b6c38480eec8  gcc/testsuite/g++.dg/modules/modules.exp
  f49c118362c9a45e801940d0725a767d  gcc/testsuite/g++.dg/modules/mutual-friend.ii
  522ea2d0697f7dd4d211f07fa012628f  gcc/testsuite/g++.dg/modules/namespace-10_a.C
  c4e2bef9f271df6507d07f9534e10fc1  gcc/testsuite/g++.dg/modules/namespace-10_b.C
--- 34001,34007 ----
  e83f9a9aca70673da8258ca0631a2125  gcc/testsuite/g++.dg/modules/mod-tpl-1_b.C
  ad9ef329572dab16f2d3d5613538cd3f  gcc/testsuite/g++.dg/modules/mod-tpl-2_a.C
  95ab3577dee99f3d59838a96f1cbf4fc  gcc/testsuite/g++.dg/modules/mod-tpl-2_b.C
! e0c55b8c614fe8a311f8853dc2e65bf7  gcc/testsuite/g++.dg/modules/modules.exp
  f49c118362c9a45e801940d0725a767d  gcc/testsuite/g++.dg/modules/mutual-friend.ii
  522ea2d0697f7dd4d211f07fa012628f  gcc/testsuite/g++.dg/modules/namespace-10_a.C
  c4e2bef9f271df6507d07f9534e10fc1  gcc/testsuite/g++.dg/modules/namespace-10_b.C
*************** b7d97b8f67f65ae1e90b8db3474b6e48  gcc/te
*** 36528,36533 ****
--- 36551,36557 ----
  667e18d65092886bfa6db626eb370e7c  gcc/testsuite/g++.dg/pch/uninst.Hs
  3c027648f765cf5846e0b1be267760f6  gcc/testsuite/g++.dg/pch/wchar-1.C
  67d1ff82e247bea84a92bc888972c000  gcc/testsuite/g++.dg/pch/wchar-1.Hs
+ 708c2f4c123df4c945aaf34b81254832  gcc/testsuite/g++.dg/pid_t-1.C
  bf3ea5727f0cfbee03093d92618c2de5  gcc/testsuite/g++.dg/plugin/attribute_plugin-test-1.C
  c278391c6b14a59edfbbfe24959e4347  gcc/testsuite/g++.dg/plugin/attribute_plugin.cc
  79eca0fcf45122c77f8b1c62b1121ee0  gcc/testsuite/g++.dg/plugin/comment_plugin.cc
*************** a7bf058a51ee7236a37311a73bf15c69  gcc/te
*** 38180,38185 ****
--- 38204,38210 ----
  b3e926a09671bb6d64fb4f63dde975e0  gcc/testsuite/g++.dg/template/scope4.C
  ef990e1f472156561fef3a8840a530bd  gcc/testsuite/g++.dg/template/scope5.C
  0186275439ee5dd117414c26c3ceb2be  gcc/testsuite/g++.dg/template/scope6.C
+ 0372c7fe1503c1ccdde650238ca268fa  gcc/testsuite/g++.dg/template/sfinae-deleted-pr119343.C
  2cd0b64dfe6040cab0c7b4c02fb0ac81  gcc/testsuite/g++.dg/template/sfinae-dr1227.C
  36d5f7006523591a6edce8992d5ed328  gcc/testsuite/g++.dg/template/sfinae-dr657.C
  d4a6fe33f1456d026d068d25f316aa9c  gcc/testsuite/g++.dg/template/sfinae1.C
*************** a7a00125ef903c9e5ba25788e8c60eab  gcc/te
*** 38817,38822 ****
--- 38842,38848 ----
  75b55c517ba9c0f47c83851f084cb294  gcc/testsuite/g++.dg/torture/pr121870.C
  335f20fd55847f9861ff378b9be0f1bc  gcc/testsuite/g++.dg/torture/pr122589.C
  04115c46931023150cac2508ab43b9ff  gcc/testsuite/g++.dg/torture/pr122663.C
+ ca9be1f2aa5374ea9f72ea31bc874ec1  gcc/testsuite/g++.dg/torture/pr123040.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
*************** a311d1ab8635e5105a1bbfc32c26cf9c  gcc/te
*** 39412,39429 ****
  f95e009eb80810faddca573e232d899e  gcc/testsuite/g++.dg/tree-ssa/pr106936.C
  473b75bc40f72c03a042a150d43cb69b  gcc/testsuite/g++.dg/tree-ssa/pr107206.C
  5f9aef2211a5b0981f2a79d22debe366  gcc/testsuite/g++.dg/tree-ssa/pr107876.C
! 5aa48176958fe3f1351032947028928b  gcc/testsuite/g++.dg/tree-ssa/pr109442.C
  f4f07a8666ff936288fa407bf0fed911  gcc/testsuite/g++.dg/tree-ssa/pr109849.C
  4ddff8593905cb178eb50a3ea8c2e777  gcc/testsuite/g++.dg/tree-ssa/pr110137-1.C
  355027cc58503e05e29800bf7c36a1a4  gcc/testsuite/g++.dg/tree-ssa/pr110137-2.C
  dc6a238805ecdc2ab0fc81b61b0d8518  gcc/testsuite/g++.dg/tree-ssa/pr110137-3.C
  9f8efa56edaac04ff0c8319a7ad0f3a7  gcc/testsuite/g++.dg/tree-ssa/pr110137-4.C
! a29ee53ea6083d50477755543cd9a114  gcc/testsuite/g++.dg/tree-ssa/pr110819.C
  a96998418d91d4b5dc3f731cea3de4a2  gcc/testsuite/g++.dg/tree-ssa/pr111150.C
  6251f80b5a27a83b79ac65cc3a6f662b  gcc/testsuite/g++.dg/tree-ssa/pr112711.C
  8e86c1b355d9ed5ad78d7f6211d5f327  gcc/testsuite/g++.dg/tree-ssa/pr114589.C
  1ed2f7f5509c5567092c5b86b727d17e  gcc/testsuite/g++.dg/tree-ssa/pr115275.C
! 1865c2c1e91d7842887b0fbc0a5a8cbc  gcc/testsuite/g++.dg/tree-ssa/pr116868.C
  73c27718ec3b9a0e61a4bcb3fb1a28a3  gcc/testsuite/g++.dg/tree-ssa/pr117123.C
  82fde88840bd9ced80ca703c33fb8d73  gcc/testsuite/g++.dg/tree-ssa/pr117965-1.C
  201851a6bde948fe39368db60e2fedc7  gcc/testsuite/g++.dg/tree-ssa/pr117965-2.C
--- 39438,39455 ----
  f95e009eb80810faddca573e232d899e  gcc/testsuite/g++.dg/tree-ssa/pr106936.C
  473b75bc40f72c03a042a150d43cb69b  gcc/testsuite/g++.dg/tree-ssa/pr107206.C
  5f9aef2211a5b0981f2a79d22debe366  gcc/testsuite/g++.dg/tree-ssa/pr107876.C
! 977c0dee4fe2e95875cc54b06d853373  gcc/testsuite/g++.dg/tree-ssa/pr109442.C
  f4f07a8666ff936288fa407bf0fed911  gcc/testsuite/g++.dg/tree-ssa/pr109849.C
  4ddff8593905cb178eb50a3ea8c2e777  gcc/testsuite/g++.dg/tree-ssa/pr110137-1.C
  355027cc58503e05e29800bf7c36a1a4  gcc/testsuite/g++.dg/tree-ssa/pr110137-2.C
  dc6a238805ecdc2ab0fc81b61b0d8518  gcc/testsuite/g++.dg/tree-ssa/pr110137-3.C
  9f8efa56edaac04ff0c8319a7ad0f3a7  gcc/testsuite/g++.dg/tree-ssa/pr110137-4.C
! 3dc63c00ed79b2950a952a38c0ff927a  gcc/testsuite/g++.dg/tree-ssa/pr110819.C
  a96998418d91d4b5dc3f731cea3de4a2  gcc/testsuite/g++.dg/tree-ssa/pr111150.C
  6251f80b5a27a83b79ac65cc3a6f662b  gcc/testsuite/g++.dg/tree-ssa/pr112711.C
  8e86c1b355d9ed5ad78d7f6211d5f327  gcc/testsuite/g++.dg/tree-ssa/pr114589.C
  1ed2f7f5509c5567092c5b86b727d17e  gcc/testsuite/g++.dg/tree-ssa/pr115275.C
! 0aeecfb1b13af650651c7b02e3cac91a  gcc/testsuite/g++.dg/tree-ssa/pr116868.C
  73c27718ec3b9a0e61a4bcb3fb1a28a3  gcc/testsuite/g++.dg/tree-ssa/pr117123.C
  82fde88840bd9ced80ca703c33fb8d73  gcc/testsuite/g++.dg/tree-ssa/pr117965-1.C
  201851a6bde948fe39368db60e2fedc7  gcc/testsuite/g++.dg/tree-ssa/pr117965-2.C
*************** deec61f943ce8761e57e704eca7387bf  gcc/te
*** 39546,39552 ****
  a82ef6cbe78155176eca6d640870c3a5  gcc/testsuite/g++.dg/tree-ssa/pr54515.C
  593421a5d3ebb23b2a8557b822cdedc8  gcc/testsuite/g++.dg/tree-ssa/pr57380.C
  aede2b8b0e588c69fda0fe198997fde3  gcc/testsuite/g++.dg/tree-ssa/pr58404.C
! a29ee53ea6083d50477755543cd9a114  gcc/testsuite/g++.dg/tree-ssa/pr58483.C
  91a1f7d15ec818113b5e750ce336fdfe  gcc/testsuite/g++.dg/tree-ssa/pr61009.C
  71bb74bb806493b58a3b664f2347b63c  gcc/testsuite/g++.dg/tree-ssa/pr61034.C
  553408007ce5848f01d3beaeaaf68f8f  gcc/testsuite/g++.dg/tree-ssa/pr63841.C
--- 39572,39578 ----
  a82ef6cbe78155176eca6d640870c3a5  gcc/testsuite/g++.dg/tree-ssa/pr54515.C
  593421a5d3ebb23b2a8557b822cdedc8  gcc/testsuite/g++.dg/tree-ssa/pr57380.C
  aede2b8b0e588c69fda0fe198997fde3  gcc/testsuite/g++.dg/tree-ssa/pr58404.C
! 3dc63c00ed79b2950a952a38c0ff927a  gcc/testsuite/g++.dg/tree-ssa/pr58483.C
  91a1f7d15ec818113b5e750ce336fdfe  gcc/testsuite/g++.dg/tree-ssa/pr61009.C
  71bb74bb806493b58a3b664f2347b63c  gcc/testsuite/g++.dg/tree-ssa/pr61034.C
  553408007ce5848f01d3beaeaaf68f8f  gcc/testsuite/g++.dg/tree-ssa/pr63841.C
*************** e3fc8e52e34eeab2a0ee22888a080920  gcc/te
*** 39592,39598 ****
  e00458ee3b348a8ddb1466158e1af7b0  gcc/testsuite/g++.dg/tree-ssa/pr95638.C
  8cb82713ae80f84d454074acf0670135  gcc/testsuite/g++.dg/tree-ssa/pr95649.C
  e53cec97097a9dc8117c2effbf4ea8d5  gcc/testsuite/g++.dg/tree-ssa/pr96930.C
! 877a6ef766f79122bfeafff1d9e68c6e  gcc/testsuite/g++.dg/tree-ssa/pr96945.C
  632b446e932f27efac2329d2234eb487  gcc/testsuite/g++.dg/tree-ssa/pr96979.C
  070d15097a92bcf12a8f98ecaa8b021c  gcc/testsuite/g++.dg/tree-ssa/pr97736.C
  a9b57d67f7b86dda8e925205f9d81b12  gcc/testsuite/g++.dg/tree-ssa/pr98265.C
--- 39618,39624 ----
  e00458ee3b348a8ddb1466158e1af7b0  gcc/testsuite/g++.dg/tree-ssa/pr95638.C
  8cb82713ae80f84d454074acf0670135  gcc/testsuite/g++.dg/tree-ssa/pr95649.C
  e53cec97097a9dc8117c2effbf4ea8d5  gcc/testsuite/g++.dg/tree-ssa/pr96930.C
! 8179fc8d02bf719986af1f5ce19dcda8  gcc/testsuite/g++.dg/tree-ssa/pr96945.C
  632b446e932f27efac2329d2234eb487  gcc/testsuite/g++.dg/tree-ssa/pr96979.C
  070d15097a92bcf12a8f98ecaa8b021c  gcc/testsuite/g++.dg/tree-ssa/pr97736.C
  a9b57d67f7b86dda8e925205f9d81b12  gcc/testsuite/g++.dg/tree-ssa/pr98265.C
*************** b83eac59b493f9c580ee676cf4be54bc  gcc/te
*** 39897,39903 ****
  98d320060b90cb4d7efb2ca7dd9ca6a7  gcc/testsuite/g++.dg/vect/simd-clone-4.cc
  4147d578711be9e486c8907900862fdd  gcc/testsuite/g++.dg/vect/simd-clone-4.h
  8e0a6e22b50986dde8d13d6b07a75bb7  gcc/testsuite/g++.dg/vect/simd-clone-5.cc
! e0f6d3736914a93338f16db9c5870cd0  gcc/testsuite/g++.dg/vect/simd-clone-6.cc
  781254f2b1a514c9ba0f4e29b2e8d1a3  gcc/testsuite/g++.dg/vect/simd-clone-7.cc
  76efe246291fd426ffddd2ad9aba280b  gcc/testsuite/g++.dg/vect/simd-complex-num-null-node.cc
  3bc95c24ca829b61efcb7f80670d3ab5  gcc/testsuite/g++.dg/vect/simd-mask-store-bool.cc
--- 39923,39929 ----
  98d320060b90cb4d7efb2ca7dd9ca6a7  gcc/testsuite/g++.dg/vect/simd-clone-4.cc
  4147d578711be9e486c8907900862fdd  gcc/testsuite/g++.dg/vect/simd-clone-4.h
  8e0a6e22b50986dde8d13d6b07a75bb7  gcc/testsuite/g++.dg/vect/simd-clone-5.cc
! 5bad2c02e3b9d6339a702112e758d35c  gcc/testsuite/g++.dg/vect/simd-clone-6.cc
  781254f2b1a514c9ba0f4e29b2e8d1a3  gcc/testsuite/g++.dg/vect/simd-clone-7.cc
  76efe246291fd426ffddd2ad9aba280b  gcc/testsuite/g++.dg/vect/simd-complex-num-null-node.cc
  3bc95c24ca829b61efcb7f80670d3ab5  gcc/testsuite/g++.dg/vect/simd-mask-store-bool.cc
*************** f6b082767289902da5b51e2ea99eaec8  gcc/te
*** 44312,44317 ****
--- 44338,44344 ----
  8839c0294dd9b4f02061f7ccec0155d0  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/set3_2.C
  f948ce0d4740d47197d2a7ecac1ef831  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/set4_1.C
  ecb3597f101e2673e21ba02eaa395815  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/set4_2.C
+ 9e5989e0799379420871cda7518a9146  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/svbool_ternary.C
  fa5e83f89b6f2a3c984c9481e39db16c  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/svcount_1.C
  7b6a008db87cc2f429ad09a2de9f0001  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/type_redef_1.c
  5638adba83295d016410bd89da9975c8  gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/type_redef_10.c
*************** c8c24d88b9d93938e4018923d3db0ce3  gcc/te
*** 44716,44728 ****
  8df5f1183de744dc2a3a0c11278caec6  gcc/testsuite/g++.target/loongarch/atomic-cas-int.C
  f8bc85022b7adc985d76ed2766575abb  gcc/testsuite/g++.target/loongarch/bstrins-compile.C
  3d24eccefdd318d1bf2770dde9f60a08  gcc/testsuite/g++.target/loongarch/bstrins-run.C
! 580dcc09db78d63c393f7d3c75b38ada  gcc/testsuite/g++.target/loongarch/bytepick.C
  3e98c3e373244fc322de192a26daa1fc  gcc/testsuite/g++.target/loongarch/cmodel-extreme-mi-thunk-1.C
  1569918169b163a9e6e0ed19b0336f2e  gcc/testsuite/g++.target/loongarch/cmodel-extreme-mi-thunk-2.C
  dfaa547e8fb7df38c4d964cefef4b708  gcc/testsuite/g++.target/loongarch/cmodel-extreme-mi-thunk-3.C
  5a04ec9c381363b4fb2fb2f2d3fc61ab  gcc/testsuite/g++.target/loongarch/crc-scan.C
  068f4d2aa43f4cb0f840066ea19bc476  gcc/testsuite/g++.target/loongarch/crc.C
! 5214c6c826b3d987e041fc28a0ba7a29  gcc/testsuite/g++.target/loongarch/got-load.C
  868a134a1623856acf8457d0e3e79317  gcc/testsuite/g++.target/loongarch/loongarch.exp
  3ca321fec4f8a0fe6d220d0669db80a4  gcc/testsuite/g++.target/loongarch/mv-symbols1.C
  4f24154ce83c15998949b612c0307178  gcc/testsuite/g++.target/loongarch/mv-symbols2.C
--- 44743,44755 ----
  8df5f1183de744dc2a3a0c11278caec6  gcc/testsuite/g++.target/loongarch/atomic-cas-int.C
  f8bc85022b7adc985d76ed2766575abb  gcc/testsuite/g++.target/loongarch/bstrins-compile.C
  3d24eccefdd318d1bf2770dde9f60a08  gcc/testsuite/g++.target/loongarch/bstrins-run.C
! 5748e06a0fe23938095b8e334b5b0d1b  gcc/testsuite/g++.target/loongarch/bytepick.C
  3e98c3e373244fc322de192a26daa1fc  gcc/testsuite/g++.target/loongarch/cmodel-extreme-mi-thunk-1.C
  1569918169b163a9e6e0ed19b0336f2e  gcc/testsuite/g++.target/loongarch/cmodel-extreme-mi-thunk-2.C
  dfaa547e8fb7df38c4d964cefef4b708  gcc/testsuite/g++.target/loongarch/cmodel-extreme-mi-thunk-3.C
  5a04ec9c381363b4fb2fb2f2d3fc61ab  gcc/testsuite/g++.target/loongarch/crc-scan.C
  068f4d2aa43f4cb0f840066ea19bc476  gcc/testsuite/g++.target/loongarch/crc.C
! 3647cef85ffdc7143f3bc44908265e99  gcc/testsuite/g++.target/loongarch/got-load.C
  868a134a1623856acf8457d0e3e79317  gcc/testsuite/g++.target/loongarch/loongarch.exp
  3ca321fec4f8a0fe6d220d0669db80a4  gcc/testsuite/g++.target/loongarch/mv-symbols1.C
  4f24154ce83c15998949b612c0307178  gcc/testsuite/g++.target/loongarch/mv-symbols2.C
*************** dfaa547e8fb7df38c4d964cefef4b708  gcc/te
*** 44736,44743 ****
  c79154d30246903274765e2b9d7c357f  gcc/testsuite/g++.target/loongarch/mvc-symbols4.C
  24bcd366c1f73bbdb2384bbd350965f1  gcc/testsuite/g++.target/loongarch/mvc-symbols5.C
  3e379ce66f2b5fd83481c50aad661033  gcc/testsuite/g++.target/loongarch/pr106096.C
! 91c50652b11a6f7dde25e6d7bba552c9  gcc/testsuite/g++.target/loongarch/pr106828.C
! 70627fc5a9aed381933cfeb46e0cafe1  gcc/testsuite/g++.target/loongarch/vect-ashr-lshr.C
  f13d97450413e73ef42096f6d86f33b9  gcc/testsuite/g++.target/loongarch/vect-copysign-negconst-run.C
  20d9436c682a4415acafb5c98046ba99  gcc/testsuite/g++.target/loongarch/vect-copysign-negconst.C
  e955a58000d134cabde59ec691f4da15  gcc/testsuite/g++.target/m68k/m68k.exp
--- 44763,44770 ----
  c79154d30246903274765e2b9d7c357f  gcc/testsuite/g++.target/loongarch/mvc-symbols4.C
  24bcd366c1f73bbdb2384bbd350965f1  gcc/testsuite/g++.target/loongarch/mvc-symbols5.C
  3e379ce66f2b5fd83481c50aad661033  gcc/testsuite/g++.target/loongarch/pr106096.C
! ea39586991aa764e867af747da8c3d65  gcc/testsuite/g++.target/loongarch/pr106828.C
! ad61712893b927ca473f6020f822e9e2  gcc/testsuite/g++.target/loongarch/vect-ashr-lshr.C
  f13d97450413e73ef42096f6d86f33b9  gcc/testsuite/g++.target/loongarch/vect-copysign-negconst-run.C
  20d9436c682a4415acafb5c98046ba99  gcc/testsuite/g++.target/loongarch/vect-copysign-negconst.C
  e955a58000d134cabde59ec691f4da15  gcc/testsuite/g++.target/m68k/m68k.exp
*************** bbffb78a05c981886c82c4d7bb1ab46a  gcc/te
*** 44895,44900 ****
--- 44922,44928 ----
  7744443172f2d7cb1157b8661f646acc  gcc/testsuite/g++.target/riscv/rvv/autovec/pr116595.C
  65e822c3566d2be95d4e4a1852d2d11e  gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C
  e0fcda19753adb81a996dcb37c1e40f0  gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C
+ 5cf8aba8614b6e7a77dd44f21cedac0c  gcc/testsuite/g++.target/riscv/rvv/autovec/pr123074.C
  b073f099736b28c243e723ac86cb8fd5  gcc/testsuite/g++.target/riscv/rvv/base/attribute-riscv_vector_cc-error.C
  1b1bc5039f56e1bab95c9773c435167c  gcc/testsuite/g++.target/riscv/rvv/base/bug-1.C
  23e072f75d6f4f14b994051bd34559a4  gcc/testsuite/g++.target/riscv/rvv/base/bug-10.C
*************** c358c32e7ca409abcc867a3b5248f5bd  gcc/te
*** 44931,44936 ****
--- 44959,44965 ----
  4a3be4db135c0350e87b0abdf4ca1ca8  gcc/testsuite/g++.target/riscv/rvv/rvv.exp
  0f6d3519b642a314a2ed539fd0c405c3  gcc/testsuite/g++.target/riscv/rvv/xtheadvector/pr116593.C
  737eebb4901981753937ddcc65184708  gcc/testsuite/g++.target/s390/atomic-align-1.C
+ a4ea51c05f73fa50108f4536f172c84a  gcc/testsuite/g++.target/s390/builtin-array-arg-1.C
  74f02d12b4213817c3460e1eebfa9eae  gcc/testsuite/g++.target/s390/mi-thunk.C
  93b786c04aacd9a92606e85c55410461  gcc/testsuite/g++.target/s390/pr100281-1.C
  4b5a44a1819e9404a2b1305798c19846  gcc/testsuite/g++.target/s390/pr100281-2.C
*************** ae878ea349c8f9f2a197bf59dcff9d3a  gcc/te
*** 46072,46077 ****
--- 46101,46107 ----
  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
+ 9696537bbd1354b5d13d3e674cf11570  gcc/testsuite/gcc.c-torture/compile/pr123069.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
*************** b3869c9bd68bb9659f230f48bf56f83c  gcc/te
*** 49896,49910 ****
  f69e8cd9fd4e56cc65e71a4dfef997a4  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue-2.c
  1a5f9e3123194efaadd5fb7ab38396df  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c
  86d6d6ec23a415364e5fca0ca3cc5e2e  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-minimal.c
! 78a5d2ec1775604f51f65022cb368643  gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c
  4656af16261a46b3b0a549b8e725fb72  gcc/testsuite/gcc.dg/analyzer/SARD-tc1909-stack_overflow_loop.c
  05d3112c6482099e76531347972f0253  gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c
  d396ac30a4549605a8b91e88fb32d4e3  gcc/testsuite/gcc.dg/analyzer/SARD-tc841-basic-00182-min.c
! ae69c46005567e7d1eb865066adcb226  gcc/testsuite/gcc.dg/analyzer/abs-1.c
  2fbe7c43718aa946f2698455261a0c9f  gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
  ec878e263cce5a120872d1d5af92099c  gcc/testsuite/gcc.dg/analyzer/allocation-size-multiline-4.c
! b777059ff5ea7cd45e730f84caf49208  gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h
! bb69f65fee7b59150ff696d1052e9897  gcc/testsuite/gcc.dg/analyzer/analyzer.exp
  c8fea92fbe2674fd004d27f275db2d9f  gcc/testsuite/gcc.dg/analyzer/asm-x86-dyndbg-1.c
  d780518e28005b87079c2be1a96dab0e  gcc/testsuite/gcc.dg/analyzer/asm-x86-lp64-1.c
  0dedf67a08edba5166d29489ccfd969c  gcc/testsuite/gcc.dg/analyzer/atomic-builtins-1.c
--- 49926,49940 ----
  f69e8cd9fd4e56cc65e71a4dfef997a4  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue-2.c
  1a5f9e3123194efaadd5fb7ab38396df  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-dedupe-issue.c
  86d6d6ec23a415364e5fca0ca3cc5e2e  gcc/testsuite/gcc.dg/analyzer/CVE-2005-1689-minimal.c
! b38d1686617d8aa1933236608c29d4c8  gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c
  4656af16261a46b3b0a549b8e725fb72  gcc/testsuite/gcc.dg/analyzer/SARD-tc1909-stack_overflow_loop.c
  05d3112c6482099e76531347972f0253  gcc/testsuite/gcc.dg/analyzer/SARD-tc293-basic-00045-min.c
  d396ac30a4549605a8b91e88fb32d4e3  gcc/testsuite/gcc.dg/analyzer/SARD-tc841-basic-00182-min.c
! 90d9154a7bf843287e4e70facbd3622b  gcc/testsuite/gcc.dg/analyzer/abs-1.c
  2fbe7c43718aa946f2698455261a0c9f  gcc/testsuite/gcc.dg/analyzer/allocation-size-5.c
  ec878e263cce5a120872d1d5af92099c  gcc/testsuite/gcc.dg/analyzer/allocation-size-multiline-4.c
! f1a4d668b7cdedcf120b9151c47abb67  gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h
! bd61c5d507efad60c5af82c1195cb58e  gcc/testsuite/gcc.dg/analyzer/analyzer.exp
  c8fea92fbe2674fd004d27f275db2d9f  gcc/testsuite/gcc.dg/analyzer/asm-x86-dyndbg-1.c
  d780518e28005b87079c2be1a96dab0e  gcc/testsuite/gcc.dg/analyzer/asm-x86-lp64-1.c
  0dedf67a08edba5166d29489ccfd969c  gcc/testsuite/gcc.dg/analyzer/atomic-builtins-1.c
*************** e335d916bb1026d6d9d508119e1eb9e8  gcc/te
*** 49915,49969 ****
  9424116fb3a7804ff0f4eac8cf131a38  gcc/testsuite/gcc.dg/analyzer/attr-nonnull-pr106325.c
  c480119897bf409501913cf24fea555c  gcc/testsuite/gcc.dg/analyzer/attribute-nonnull.c
  215f65c0f414779a43cca081e7a96b0b  gcc/testsuite/gcc.dg/analyzer/bitfields-1.c
! ca380f35a64a019f903bd8407f96ece4  gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c
  b079556a417329a74b2a9c1f780cc54d  gcc/testsuite/gcc.dg/analyzer/builtins-pr107565.c
  de1c3d5d0b46c866fdd4ebeca363175b  gcc/testsuite/gcc.dg/analyzer/bzero-1.c
! 929911e4a102bf1cb165411be8d2c77e  gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c
  6958986d14e5b5d82a6e5d8d1a4253fe  gcc/testsuite/gcc.dg/analyzer/call-summaries-errno.c
  48f9ab28bf911414a190e81a25e1b72b  gcc/testsuite/gcc.dg/analyzer/call-summaries-pr107072.c
  e26be91157108de0adb52b0969803be1  gcc/testsuite/gcc.dg/analyzer/call-summaries-pr114473.c
  cdf915de6aa445e00b8a320d8b7b09dc  gcc/testsuite/gcc.dg/analyzer/clobbers-2.c
! 2faef601592f61931a6a0fa8bf058245  gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c
! a60083781c2444fc0afb93119adde9cd  gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c
! ea761a32a87e7dd14f7f4d83472c0e79  gcc/testsuite/gcc.dg/analyzer/compound-assignment-3.c
  35edd75cc1b9d2fe7a9c53aeed561185  gcc/testsuite/gcc.dg/analyzer/computed-goto-pr110529.c
! a9211e3f54bc8dd31aed70c7c3f9b905  gcc/testsuite/gcc.dg/analyzer/conditionals-3.c
  1c0a20304d7da2a80255211819446599  gcc/testsuite/gcc.dg/analyzer/conditionals-notrans.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! 5a80a69ad88fabd8a766dfa2bcbc0313  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  01dd89f886f8267655367177e67d8a7f  gcc/testsuite/gcc.dg/analyzer/data-model-13.c
! 1360165d72546f0514e05f720ac9fe62  gcc/testsuite/gcc.dg/analyzer/data-model-15.c
  8985d4acdbaec3ea42e821c7cd37e427  gcc/testsuite/gcc.dg/analyzer/data-model-16.c
! 2dd1b0e38379c6d256ce6fb601769518  gcc/testsuite/gcc.dg/analyzer/data-model-17.c
  7eb55f055f46c9020d8e30ecaf87a8ec  gcc/testsuite/gcc.dg/analyzer/data-model-19.c
! 371eec1ad04a75769d9181344d71fa85  gcc/testsuite/gcc.dg/analyzer/data-model-20a.c
  60c1562137794e4c7d5ca3e93f330449  gcc/testsuite/gcc.dg/analyzer/data-model-23.c
  ade163ad8a14198b85331977b5253cb5  gcc/testsuite/gcc.dg/analyzer/data-model-5.c
  4454d6816eb4badc35b979ebcd97c9bb  gcc/testsuite/gcc.dg/analyzer/data-model-5b.c
  959e489bac0fbc6a3703b019a52e5825  gcc/testsuite/gcc.dg/analyzer/data-model-5c.c
! be7aafbe051db1d04fdb6dda26644e29  gcc/testsuite/gcc.dg/analyzer/data-model-7.c
  2c7de07861c307654f6b81f8ba0df5ff  gcc/testsuite/gcc.dg/analyzer/data-model-9.c
  7cecbe3ff8f0a8faf72f48437253394d  gcc/testsuite/gcc.dg/analyzer/deref-before-check-1.c
  2b005f545877795663ba55a328aa9b60  gcc/testsuite/gcc.dg/analyzer/deref-before-check-macro.c
  452ca8a442483b2507962d0dd1d5efdc  gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
  64840faa76375f58a4f02239bbee2133  gcc/testsuite/gcc.dg/analyzer/describe-1.c
! c6d390a6ed3129e4137ef35e430de0fa  gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c
! e06553b08f3bbcc4d5c771278bf35853  gcc/testsuite/gcc.dg/analyzer/doom-s_sound-pr108867.c
  0ec3d38b15165ad7732c142bfbb0329f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-a.c
  5da5e08e5a3b9fac183936207016118f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-b.c
  9bd730005568e90798a30108ba063dd2  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1.h
! 83e8dbac3cd269425993b4f899d4c990  gcc/testsuite/gcc.dg/analyzer/edges-1.c
! f72a12c23bbd71391c3777d721ec95a8  gcc/testsuite/gcc.dg/analyzer/error-1.c
  959242e188dc1726d5f00627897522c2  gcc/testsuite/gcc.dg/analyzer/error-2.c
  0a00c8290d653a2fbc3a892b2d4adeca  gcc/testsuite/gcc.dg/analyzer/event-links-ascii.c
  a88abb3e8857bf920a4e7c428e97db2d  gcc/testsuite/gcc.dg/analyzer/event-links-color.c
  e6bc4fed874db05f3443af4850c6afe2  gcc/testsuite/gcc.dg/analyzer/event-links-disabled.c
  1a591c30c1046ec5f0fabf382eb15991  gcc/testsuite/gcc.dg/analyzer/event-links-unicode.c
! fb6027da0380d31038644ba5db02fce8  gcc/testsuite/gcc.dg/analyzer/explode-1.c
! 10d31dc45c3f21fbd96aa46492473138  gcc/testsuite/gcc.dg/analyzer/explode-2.c
  6e0e82d3dccb93752bd0cdb45f686bd1  gcc/testsuite/gcc.dg/analyzer/explode-2a.c
! e42c67081cc782a2fbf78edf4ad1187f  gcc/testsuite/gcc.dg/analyzer/explode-3.c
  8f62b5cf7a905c691d35760f70585093  gcc/testsuite/gcc.dg/analyzer/explode-4.c
  2389d74c6edc9a181e7bb75a5f9b3f82  gcc/testsuite/gcc.dg/analyzer/fd-4.c
  eb732176063553022105ab04a11a5ed8  gcc/testsuite/gcc.dg/analyzer/fd-accept.c
--- 49945,49999 ----
  9424116fb3a7804ff0f4eac8cf131a38  gcc/testsuite/gcc.dg/analyzer/attr-nonnull-pr106325.c
  c480119897bf409501913cf24fea555c  gcc/testsuite/gcc.dg/analyzer/attribute-nonnull.c
  215f65c0f414779a43cca081e7a96b0b  gcc/testsuite/gcc.dg/analyzer/bitfields-1.c
! 547d14b64da11d27560966f1bedbc1c6  gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c
  b079556a417329a74b2a9c1f780cc54d  gcc/testsuite/gcc.dg/analyzer/builtins-pr107565.c
  de1c3d5d0b46c866fdd4ebeca363175b  gcc/testsuite/gcc.dg/analyzer/bzero-1.c
! 03f5f86c202ab62fa009d75e763887f3  gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c
  6958986d14e5b5d82a6e5d8d1a4253fe  gcc/testsuite/gcc.dg/analyzer/call-summaries-errno.c
  48f9ab28bf911414a190e81a25e1b72b  gcc/testsuite/gcc.dg/analyzer/call-summaries-pr107072.c
  e26be91157108de0adb52b0969803be1  gcc/testsuite/gcc.dg/analyzer/call-summaries-pr114473.c
  cdf915de6aa445e00b8a320d8b7b09dc  gcc/testsuite/gcc.dg/analyzer/clobbers-2.c
! 26b574d596cd0be2bea5774f51bc82e1  gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c
! 2b09ee8231ba0be571cf18e5142dc07a  gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c
! 44715ed46e4acd3c40da90b86159714e  gcc/testsuite/gcc.dg/analyzer/compound-assignment-3.c
  35edd75cc1b9d2fe7a9c53aeed561185  gcc/testsuite/gcc.dg/analyzer/computed-goto-pr110529.c
! d21405ff7bef57360e2a0ce49f7b6578  gcc/testsuite/gcc.dg/analyzer/conditionals-3.c
  1c0a20304d7da2a80255211819446599  gcc/testsuite/gcc.dg/analyzer/conditionals-notrans.c
  8cfdc88c0b5a96aa0b303a5409085dfc  gcc/testsuite/gcc.dg/analyzer/conditionals-trans.c
! 02e8435d1a63fcd0c0bb3a83f8aa5f5d  gcc/testsuite/gcc.dg/analyzer/data-model-1.c
  fbf171c2475c36b54306b4fa689eee97  gcc/testsuite/gcc.dg/analyzer/data-model-10.c
  01dd89f886f8267655367177e67d8a7f  gcc/testsuite/gcc.dg/analyzer/data-model-13.c
! 337c9beb072c81d3286e3a687c8e0abf  gcc/testsuite/gcc.dg/analyzer/data-model-15.c
  8985d4acdbaec3ea42e821c7cd37e427  gcc/testsuite/gcc.dg/analyzer/data-model-16.c
! 49aacc1687b6817491235bcae185bac3  gcc/testsuite/gcc.dg/analyzer/data-model-17.c
  7eb55f055f46c9020d8e30ecaf87a8ec  gcc/testsuite/gcc.dg/analyzer/data-model-19.c
! 0f8af0a865b7a39c3ac04eeb934ede71  gcc/testsuite/gcc.dg/analyzer/data-model-20a.c
  60c1562137794e4c7d5ca3e93f330449  gcc/testsuite/gcc.dg/analyzer/data-model-23.c
  ade163ad8a14198b85331977b5253cb5  gcc/testsuite/gcc.dg/analyzer/data-model-5.c
  4454d6816eb4badc35b979ebcd97c9bb  gcc/testsuite/gcc.dg/analyzer/data-model-5b.c
  959e489bac0fbc6a3703b019a52e5825  gcc/testsuite/gcc.dg/analyzer/data-model-5c.c
! fd6b9c1ae3833951eb92de84a938f778  gcc/testsuite/gcc.dg/analyzer/data-model-7.c
  2c7de07861c307654f6b81f8ba0df5ff  gcc/testsuite/gcc.dg/analyzer/data-model-9.c
  7cecbe3ff8f0a8faf72f48437253394d  gcc/testsuite/gcc.dg/analyzer/deref-before-check-1.c
  2b005f545877795663ba55a328aa9b60  gcc/testsuite/gcc.dg/analyzer/deref-before-check-macro.c
  452ca8a442483b2507962d0dd1d5efdc  gcc/testsuite/gcc.dg/analyzer/deref-before-check-pr113253.c
  64840faa76375f58a4f02239bbee2133  gcc/testsuite/gcc.dg/analyzer/describe-1.c
! e76763ed8df9a3e765e4bd7f146e823b  gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c
! 60ee6abfbc9b8a834263465dbfa1757b  gcc/testsuite/gcc.dg/analyzer/doom-s_sound-pr108867.c
  0ec3d38b15165ad7732c142bfbb0329f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-a.c
  5da5e08e5a3b9fac183936207016118f  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1-b.c
  9bd730005568e90798a30108ba063dd2  gcc/testsuite/gcc.dg/analyzer/double-free-lto-1.h
! 4e5e050f1dbeb0767a0aea2f11ed4576  gcc/testsuite/gcc.dg/analyzer/edges-1.c
! e4f5f0f12f1e7e036e34e445b543a149  gcc/testsuite/gcc.dg/analyzer/error-1.c
  959242e188dc1726d5f00627897522c2  gcc/testsuite/gcc.dg/analyzer/error-2.c
  0a00c8290d653a2fbc3a892b2d4adeca  gcc/testsuite/gcc.dg/analyzer/event-links-ascii.c
  a88abb3e8857bf920a4e7c428e97db2d  gcc/testsuite/gcc.dg/analyzer/event-links-color.c
  e6bc4fed874db05f3443af4850c6afe2  gcc/testsuite/gcc.dg/analyzer/event-links-disabled.c
  1a591c30c1046ec5f0fabf382eb15991  gcc/testsuite/gcc.dg/analyzer/event-links-unicode.c
! ff72443bf2e662f8008604b236bcb901  gcc/testsuite/gcc.dg/analyzer/explode-1.c
! 521af64119d2db5f3e14c297cb177b2a  gcc/testsuite/gcc.dg/analyzer/explode-2.c
  6e0e82d3dccb93752bd0cdb45f686bd1  gcc/testsuite/gcc.dg/analyzer/explode-2a.c
! 9e318b6725be489d6ffa48842f71ae89  gcc/testsuite/gcc.dg/analyzer/explode-3.c
  8f62b5cf7a905c691d35760f70585093  gcc/testsuite/gcc.dg/analyzer/explode-4.c
  2389d74c6edc9a181e7bb75a5f9b3f82  gcc/testsuite/gcc.dg/analyzer/fd-4.c
  eb732176063553022105ab04a11a5ed8  gcc/testsuite/gcc.dg/analyzer/fd-accept.c
*************** bc582825362c52d624022049329ae632  gcc/te
*** 49973,49981 ****
  e0d317f9564c9d7710b164d6bc0c000f  gcc/testsuite/gcc.dg/analyzer/fd-bind-pr107783.c
  8b8d424acc5a75744eb578979a50851e  gcc/testsuite/gcc.dg/analyzer/fd-bind.c
  1ce706255384902da6b0d763f37ba1be  gcc/testsuite/gcc.dg/analyzer/fd-connect.c
! a1c3193ee692d0cd360e69c2c3b706b2  gcc/testsuite/gcc.dg/analyzer/fd-datagram-socket.c
  827dcc603f79b7aa5453b7b4dfba4665  gcc/testsuite/gcc.dg/analyzer/fd-dup-1.c
! efc81058ea92b79e379abeca1e290ab2  gcc/testsuite/gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c
  294212571841a3f55e9a889a083d28d1  gcc/testsuite/gcc.dg/analyzer/fd-glibc-datagram-client.c
  e68d45a98a5c9f2419bc2200bddf6f57  gcc/testsuite/gcc.dg/analyzer/fd-glibc-datagram-socket.c
  983aa8eb3b385c301b0f38e058072ad2  gcc/testsuite/gcc.dg/analyzer/fd-glibc-make_named_socket.h
--- 50003,50011 ----
  e0d317f9564c9d7710b164d6bc0c000f  gcc/testsuite/gcc.dg/analyzer/fd-bind-pr107783.c
  8b8d424acc5a75744eb578979a50851e  gcc/testsuite/gcc.dg/analyzer/fd-bind.c
  1ce706255384902da6b0d763f37ba1be  gcc/testsuite/gcc.dg/analyzer/fd-connect.c
! 7930bc99b9bbe3d847b7cc860fe52715  gcc/testsuite/gcc.dg/analyzer/fd-datagram-socket.c
  827dcc603f79b7aa5453b7b4dfba4665  gcc/testsuite/gcc.dg/analyzer/fd-dup-1.c
! ed8eba52dd7f1eb134584f4495efc229  gcc/testsuite/gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c
  294212571841a3f55e9a889a083d28d1  gcc/testsuite/gcc.dg/analyzer/fd-glibc-datagram-client.c
  e68d45a98a5c9f2419bc2200bddf6f57  gcc/testsuite/gcc.dg/analyzer/fd-glibc-datagram-socket.c
  983aa8eb3b385c301b0f38e058072ad2  gcc/testsuite/gcc.dg/analyzer/fd-glibc-make_named_socket.h
*************** a6c2c6cbd200de5abc7c929fe49fe265  gcc/te
*** 49985,49991 ****
  ebabbb9693ff5ff6e0081d269f719eeb  gcc/testsuite/gcc.dg/analyzer/fd-socket-misuse.c
  733c0a2c7f420da2e8b9bf01f57cbf4a  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket-active-open.c
  07f34eebab8484e5762c26b69d53c6cb  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket-passive-open.c
! 95d86f305b7a5284ec095700a6efc4a8  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket.c
  0fec3e8bbcc3a193f4e6d57c5f2d57b5  gcc/testsuite/gcc.dg/analyzer/fdump-analyzer-1.c
  1761d210a631bde55c4d4207134fd68c  gcc/testsuite/gcc.dg/analyzer/feasibility-pr107582-1.c
  e3febbf18f1dc3e8c6dbca7b8d1ca64a  gcc/testsuite/gcc.dg/analyzer/feasibility-pr107582-2.c
--- 50015,50021 ----
  ebabbb9693ff5ff6e0081d269f719eeb  gcc/testsuite/gcc.dg/analyzer/fd-socket-misuse.c
  733c0a2c7f420da2e8b9bf01f57cbf4a  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket-active-open.c
  07f34eebab8484e5762c26b69d53c6cb  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket-passive-open.c
! 9682511ec5d108fa033c68ee43d722a5  gcc/testsuite/gcc.dg/analyzer/fd-stream-socket.c
  0fec3e8bbcc3a193f4e6d57c5f2d57b5  gcc/testsuite/gcc.dg/analyzer/fdump-analyzer-1.c
  1761d210a631bde55c4d4207134fd68c  gcc/testsuite/gcc.dg/analyzer/feasibility-pr107582-1.c
  e3febbf18f1dc3e8c6dbca7b8d1ca64a  gcc/testsuite/gcc.dg/analyzer/feasibility-pr107582-2.c
*************** b29483f2758f47b95759473be5a64ba6  gcc/te
*** 49995,50001 ****
  75f588a8b419118a7d616febe28e31d0  gcc/testsuite/gcc.dg/analyzer/file-pr58237.c
  9b3a1447e7bea99cf8e166ae40a1809a  gcc/testsuite/gcc.dg/analyzer/fopen-1.c
  155a92eb05a1d79d891ec61b021a400d  gcc/testsuite/gcc.dg/analyzer/infinite-loop-1.c
! 336ac9df29867210512a658abd35e646  gcc/testsuite/gcc.dg/analyzer/malloc-1.c
  ad7c2c590985fadaba524fa5f6d48979  gcc/testsuite/gcc.dg/analyzer/malloc-4.c
  865e5f8c81482626d2e9eae5344bcf6e  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-13.c
  f0aff4423fc2056f3172a11bb1c0157f  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-double-free.c
--- 50025,50031 ----
  75f588a8b419118a7d616febe28e31d0  gcc/testsuite/gcc.dg/analyzer/file-pr58237.c
  9b3a1447e7bea99cf8e166ae40a1809a  gcc/testsuite/gcc.dg/analyzer/fopen-1.c
  155a92eb05a1d79d891ec61b021a400d  gcc/testsuite/gcc.dg/analyzer/infinite-loop-1.c
! 6656f307410ce53b848c53694a60327b  gcc/testsuite/gcc.dg/analyzer/malloc-1.c
  ad7c2c590985fadaba524fa5f6d48979  gcc/testsuite/gcc.dg/analyzer/malloc-4.c
  865e5f8c81482626d2e9eae5344bcf6e  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-13.c
  f0aff4423fc2056f3172a11bb1c0157f  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-double-free.c
*************** f4e3e9fe67ce001d0a4d83f475ee2e1e  gcc/te
*** 50004,50025 ****
  8046594199f747ea766d853de506a64d  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-lto-c.c
  fe31474c1de3fcecf8fc2126e5d77be5  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-lto.h
  445025d0a8e54231442bf13a76943047  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-unchecked.c
! c70af2073448635855d144cc02268df7  gcc/testsuite/gcc.dg/analyzer/malloc-many-paths-2.c
! 8d7ccfbc02f689c8b6b79362b9c9cf06  gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c
  eb32855db8ce74c6ae3cd2497c4c7908  gcc/testsuite/gcc.dg/analyzer/malloc-paths-9.c
  4e1f867b8b324692ba44394ad4676874  gcc/testsuite/gcc.dg/analyzer/malloc-reuse.c
! 79dc7e451e8ed0274f282b8d09979e95  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c
  ac65547952c25ba221985e37016c6fb2  gcc/testsuite/gcc.dg/analyzer/memcpy-1.c
  9c02a73028cac042acd872f0880e838c  gcc/testsuite/gcc.dg/analyzer/memmove-1.c
! 3a40f2fbe201a2ed74b291bb546e345d  gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c
  5c81fadcddee7a5b13a23be5cad6701d  gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c
  249e92fa7bb08b66f184515348adf910  gcc/testsuite/gcc.dg/analyzer/named-constants-via-command-line.c
  0605ec7df17825d30fe4f6374f77bbe9  gcc/testsuite/gcc.dg/analyzer/named-constants-via-enum-and-macro.c
  2452e15cec3740876b29d1965e9493ef  gcc/testsuite/gcc.dg/analyzer/named-constants-via-enum.c
  48af698d604d6cf95b9b6eef5ebccf8c  gcc/testsuite/gcc.dg/analyzer/named-constants-via-macros-gc.c
  213c59cf6fda65fb41294c9ac6b79be6  gcc/testsuite/gcc.dg/analyzer/named-constants-via-macros.c
! f6eca473e81f5ce33bb1b762a1b81570  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c
! ce2df64c56f969befe08b42840c421cb  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c
  b49e62432626c0897551e05e4bc5b647  gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c
  5c1afdb0e8d48de62c20901771c1c269  gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
--- 50034,50055 ----
  8046594199f747ea766d853de506a64d  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-lto-c.c
  fe31474c1de3fcecf8fc2126e5d77be5  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-lto.h
  445025d0a8e54231442bf13a76943047  gcc/testsuite/gcc.dg/analyzer/malloc-ipa-8-unchecked.c
! 71d387b818b7a10bc90fce2d4c3853a3  gcc/testsuite/gcc.dg/analyzer/malloc-many-paths-2.c
! d1ece36e95143a9c5cc008adb38c3524  gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c
  eb32855db8ce74c6ae3cd2497c4c7908  gcc/testsuite/gcc.dg/analyzer/malloc-paths-9.c
  4e1f867b8b324692ba44394ad4676874  gcc/testsuite/gcc.dg/analyzer/malloc-reuse.c
! bfcaf2a6892cf4c91bc0dac810231fdb  gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c
  ac65547952c25ba221985e37016c6fb2  gcc/testsuite/gcc.dg/analyzer/memcpy-1.c
  9c02a73028cac042acd872f0880e838c  gcc/testsuite/gcc.dg/analyzer/memmove-1.c
! acc662379756e41ce6873fb8ee91f0b1  gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c
  5c81fadcddee7a5b13a23be5cad6701d  gcc/testsuite/gcc.dg/analyzer/named-constants-Wunused-macros.c
  249e92fa7bb08b66f184515348adf910  gcc/testsuite/gcc.dg/analyzer/named-constants-via-command-line.c
  0605ec7df17825d30fe4f6374f77bbe9  gcc/testsuite/gcc.dg/analyzer/named-constants-via-enum-and-macro.c
  2452e15cec3740876b29d1965e9493ef  gcc/testsuite/gcc.dg/analyzer/named-constants-via-enum.c
  48af698d604d6cf95b9b6eef5ebccf8c  gcc/testsuite/gcc.dg/analyzer/named-constants-via-macros-gc.c
  213c59cf6fda65fb41294c9ac6b79be6  gcc/testsuite/gcc.dg/analyzer/named-constants-via-macros.c
! 2120bf0a3275d6e161ffd6b3b7cf271e  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c
! 9cd6217b9db63b38bbf530921833bcee  gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c
  b49e62432626c0897551e05e4bc5b647  gcc/testsuite/gcc.dg/analyzer/null-deref-pr105755.c
  5c1afdb0e8d48de62c20901771c1c269  gcc/testsuite/gcc.dg/analyzer/null-terminated-strings-1.c
  aaddc4b9a407ce80be75f1c757af9df4  gcc/testsuite/gcc.dg/analyzer/operations.c
*************** faa7ff928bbead8437bd5382e61c0356  gcc/te
*** 50059,50078 ****
  9da3ee312a53989520c6f6fd2a0a2e2a  gcc/testsuite/gcc.dg/analyzer/pipe-void-return.c
  2a2f495dec7f278925ae67dee036fcc1  gcc/testsuite/gcc.dg/analyzer/pipe2-1.c
  3f583dbde80b3efe12b65cefa6758f9f  gcc/testsuite/gcc.dg/analyzer/pr100011.c
! 62c29c74bff34938d246ad62ccf4f5ac  gcc/testsuite/gcc.dg/analyzer/pr101143.c
  71129fa06e1b067223c303245054200a  gcc/testsuite/gcc.dg/analyzer/pr101547.c
! 5bfcb45d166e8b77e269dc76c9015767  gcc/testsuite/gcc.dg/analyzer/pr101837.c
  8e41b138580137917cf3c8483f35abbb  gcc/testsuite/gcc.dg/analyzer/pr101875.c
  60b2a5e408979c204812ee09c755be9d  gcc/testsuite/gcc.dg/analyzer/pr101983-main.c
! 9af3fc4e1a3e5925599c434e4d8ec749  gcc/testsuite/gcc.dg/analyzer/pr101983-not-main.c
! 7138137bac372bfd3b7fd1aacfa6cd73  gcc/testsuite/gcc.dg/analyzer/pr103892.c
  15fc590ce739292d51fb1d190f57dc81  gcc/testsuite/gcc.dg/analyzer/pr104224-split.c
! df5dee0e0e92ecf4b97f80a2aff5b9de  gcc/testsuite/gcc.dg/analyzer/pr104224.c
  3958e5b363cc2d23a66c560293b47837  gcc/testsuite/gcc.dg/analyzer/pr104369-1.c
  0e7003703b36e6f081ce012e161cf5e3  gcc/testsuite/gcc.dg/analyzer/pr104369-2.c
  193bbc40b5d1663602f78ebcf3ec7d09  gcc/testsuite/gcc.dg/analyzer/pr104417.c
  740583ce32547a8d87a3cd63946b90f2  gcc/testsuite/gcc.dg/analyzer/pr104434-const.c
! bd08c3118e654f97ec8726f35f798dfe  gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c
  0eae8bc57da919ca1bbfbe4b5652153e  gcc/testsuite/gcc.dg/analyzer/pr104434.h
  9f88d9ad0d5d0c458ae8f1fe6079c8f5  gcc/testsuite/gcc.dg/analyzer/pr104560-1.c
  20851e8be3d1f3da1cf23c165c453e68  gcc/testsuite/gcc.dg/analyzer/pr105074.c
--- 50089,50108 ----
  9da3ee312a53989520c6f6fd2a0a2e2a  gcc/testsuite/gcc.dg/analyzer/pipe-void-return.c
  2a2f495dec7f278925ae67dee036fcc1  gcc/testsuite/gcc.dg/analyzer/pipe2-1.c
  3f583dbde80b3efe12b65cefa6758f9f  gcc/testsuite/gcc.dg/analyzer/pr100011.c
! bb03496c89ed9ec6826c435e06d59526  gcc/testsuite/gcc.dg/analyzer/pr101143.c
  71129fa06e1b067223c303245054200a  gcc/testsuite/gcc.dg/analyzer/pr101547.c
! ede03965a2ca65a678aa4cf597d81f7e  gcc/testsuite/gcc.dg/analyzer/pr101837.c
  8e41b138580137917cf3c8483f35abbb  gcc/testsuite/gcc.dg/analyzer/pr101875.c
  60b2a5e408979c204812ee09c755be9d  gcc/testsuite/gcc.dg/analyzer/pr101983-main.c
! e4ed56e29fb65b00154fe0693e9ac3a3  gcc/testsuite/gcc.dg/analyzer/pr101983-not-main.c
! 7cef3bb0037082099722a9661bd22d03  gcc/testsuite/gcc.dg/analyzer/pr103892.c
  15fc590ce739292d51fb1d190f57dc81  gcc/testsuite/gcc.dg/analyzer/pr104224-split.c
! 3c81db62c0f7d4f9f9f6415119ec40a6  gcc/testsuite/gcc.dg/analyzer/pr104224.c
  3958e5b363cc2d23a66c560293b47837  gcc/testsuite/gcc.dg/analyzer/pr104369-1.c
  0e7003703b36e6f081ce012e161cf5e3  gcc/testsuite/gcc.dg/analyzer/pr104369-2.c
  193bbc40b5d1663602f78ebcf3ec7d09  gcc/testsuite/gcc.dg/analyzer/pr104417.c
  740583ce32547a8d87a3cd63946b90f2  gcc/testsuite/gcc.dg/analyzer/pr104434-const.c
! 49036e6da8e7c685ba2ee2069a132beb  gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c
  0eae8bc57da919ca1bbfbe4b5652153e  gcc/testsuite/gcc.dg/analyzer/pr104434.h
  9f88d9ad0d5d0c458ae8f1fe6079c8f5  gcc/testsuite/gcc.dg/analyzer/pr104560-1.c
  20851e8be3d1f3da1cf23c165c453e68  gcc/testsuite/gcc.dg/analyzer/pr105074.c
*************** c5aaf610718cba5c59ae6937f43eb7db  gcc/te
*** 50084,50098 ****
  12cfe5485a3c7938cc01216a44d4866e  gcc/testsuite/gcc.dg/analyzer/pr110882.c
  64c9d1e955b493cfb0d775e89b36b0d6  gcc/testsuite/gcc.dg/analyzer/pr113505.c
  d69ed87a55d888352718347a2a8941ed  gcc/testsuite/gcc.dg/analyzer/pr61861.c
! f05661ae53ad21f734f847c2376cac51  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c
! 0610ebeeaa663c5f4caa9cff3d1948b5  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c
! 08d223b73454ba39d78dde2d881e87c2  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c
  f89e5ecde804b807979bb260986f6283  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility.c
! b3398b69050f63db2f31393433360469  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c
  28bffa1aa880310d0b489566f5e5ed3c  gcc/testsuite/gcc.dg/analyzer/pr93375.c
  021f43de56975850b127f298839bb9f5  gcc/testsuite/gcc.dg/analyzer/pr93382.c
  e5b15ee45fe6adafc7624ced3274120b  gcc/testsuite/gcc.dg/analyzer/pr94458.c
! 92ed6522f4d8b7a542dd38a2a929c2e4  gcc/testsuite/gcc.dg/analyzer/pr94579.c
  7306644baea64e11ac3966e765e05738  gcc/testsuite/gcc.dg/analyzer/pr94688.c
  746bbf11842faa157eaa0c33fef10249  gcc/testsuite/gcc.dg/analyzer/pr94689.c
  0026c538f0e20f37842630fe25b7d4c0  gcc/testsuite/gcc.dg/analyzer/pr94754.c
--- 50114,50128 ----
  12cfe5485a3c7938cc01216a44d4866e  gcc/testsuite/gcc.dg/analyzer/pr110882.c
  64c9d1e955b493cfb0d775e89b36b0d6  gcc/testsuite/gcc.dg/analyzer/pr113505.c
  d69ed87a55d888352718347a2a8941ed  gcc/testsuite/gcc.dg/analyzer/pr61861.c
! 55d0467249f5ef62758368bddf750f0e  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c
! 8cc3898af0a69e855c7e410e054bcdc7  gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c
! cc4f1b774a13c67a9f8bbca94a00ad9f  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c
  f89e5ecde804b807979bb260986f6283  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility.c
! 8782b454f5b8ff380e7f855a686943c3  gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c
  28bffa1aa880310d0b489566f5e5ed3c  gcc/testsuite/gcc.dg/analyzer/pr93375.c
  021f43de56975850b127f298839bb9f5  gcc/testsuite/gcc.dg/analyzer/pr93382.c
  e5b15ee45fe6adafc7624ced3274120b  gcc/testsuite/gcc.dg/analyzer/pr94458.c
! 062e75d5b97243b2b5a71f3f2225ffa9  gcc/testsuite/gcc.dg/analyzer/pr94579.c
  7306644baea64e11ac3966e765e05738  gcc/testsuite/gcc.dg/analyzer/pr94688.c
  746bbf11842faa157eaa0c33fef10249  gcc/testsuite/gcc.dg/analyzer/pr94689.c
  0026c538f0e20f37842630fe25b7d4c0  gcc/testsuite/gcc.dg/analyzer/pr94754.c
*************** cc34da4a6b5eb3ea00a6b83e365e3c54  gcc/te
*** 50105,50122 ****
  e1cc82ec2de0b3a6c6717f542456a7f7  gcc/testsuite/gcc.dg/analyzer/pr96651-2.c
  78c898bb617df573bb4a638f1a5c61ea  gcc/testsuite/gcc.dg/analyzer/pr96860-1.c
  31a9bfe2d10d9507c3d3caf182f7947b  gcc/testsuite/gcc.dg/analyzer/pr98293.c
! e30ab4cce96a744448409fe77f3c5efa  gcc/testsuite/gcc.dg/analyzer/pr98599-a.c
  b8dedb68ebd6efc83061dc56ccf05a12  gcc/testsuite/gcc.dg/analyzer/pr98599-b.c
  11ed5b2e2254591f0a152015c2b66245  gcc/testsuite/gcc.dg/analyzer/pr99042.c
  db49279a7bbbbb8a7993d65e3a0ed602  gcc/testsuite/gcc.dg/analyzer/pr99044-1.c
  78974bca049e6fe858c117ebc2ed130b  gcc/testsuite/gcc.dg/analyzer/pr99193-1.c
  dc948ef5af4dbb9b2512860f38fde8ed  gcc/testsuite/gcc.dg/analyzer/pr99269.c
! cbb6adcc2621ebf0e7bda4537a8d8250  gcc/testsuite/gcc.dg/analyzer/pr99771-1.c
! eed361a309e3745bd4ef7b47ad455045  gcc/testsuite/gcc.dg/analyzer/pr99774-2.c
  999daf76457c2842454c315884e1181c  gcc/testsuite/gcc.dg/analyzer/pr99886.c
  ee83b0853d986fe0890fb91652c83334  gcc/testsuite/gcc.dg/analyzer/putenv-1.c
  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
--- 50135,50152 ----
  e1cc82ec2de0b3a6c6717f542456a7f7  gcc/testsuite/gcc.dg/analyzer/pr96651-2.c
  78c898bb617df573bb4a638f1a5c61ea  gcc/testsuite/gcc.dg/analyzer/pr96860-1.c
  31a9bfe2d10d9507c3d3caf182f7947b  gcc/testsuite/gcc.dg/analyzer/pr98293.c
! 9bad64c281c6e35ff43fffc72c382a93  gcc/testsuite/gcc.dg/analyzer/pr98599-a.c
  b8dedb68ebd6efc83061dc56ccf05a12  gcc/testsuite/gcc.dg/analyzer/pr98599-b.c
  11ed5b2e2254591f0a152015c2b66245  gcc/testsuite/gcc.dg/analyzer/pr99042.c
  db49279a7bbbbb8a7993d65e3a0ed602  gcc/testsuite/gcc.dg/analyzer/pr99044-1.c
  78974bca049e6fe858c117ebc2ed130b  gcc/testsuite/gcc.dg/analyzer/pr99193-1.c
  dc948ef5af4dbb9b2512860f38fde8ed  gcc/testsuite/gcc.dg/analyzer/pr99269.c
! 760d282773b2d4d98456bf3a594f1ae0  gcc/testsuite/gcc.dg/analyzer/pr99771-1.c
! a55a4fe03e6a80771f12fb4644fcc8b4  gcc/testsuite/gcc.dg/analyzer/pr99774-2.c
  999daf76457c2842454c315884e1181c  gcc/testsuite/gcc.dg/analyzer/pr99886.c
  ee83b0853d986fe0890fb91652c83334  gcc/testsuite/gcc.dg/analyzer/putenv-1.c
  ee803c3283890e05fed6552fbff9532c  gcc/testsuite/gcc.dg/analyzer/read-pr108661.c
! e6c03cf9f77085ecc39468b65564f91b  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
*************** c3d6877dc6b6aaf933b97e6748b315cc  gcc/te
*** 50139,50145 ****
  8959874363aade3ab965125e11d3ded5  gcc/testsuite/gcc.dg/analyzer/sigsetjmp-6.c
  041939ea34c3dd2bdd2d95257e5520ad  gcc/testsuite/gcc.dg/analyzer/single-field.c
  7c5d373abe7dc75a1f4304f4d2e0548b  gcc/testsuite/gcc.dg/analyzer/sprintf-1.c
! 9a8cb3bd3a4d25c31e39e0e1ad9ece93  gcc/testsuite/gcc.dg/analyzer/state-diagram-1-sarif.py
  d1b457374dc0f96c3cd72b2fa5b156ac  gcc/testsuite/gcc.dg/analyzer/state-diagram-1.c
  abde205c5f5c45914abf04811fbb5c2a  gcc/testsuite/gcc.dg/analyzer/state-diagram-2.c
  2d1c3f36c5428e3dc3a66a4baf126291  gcc/testsuite/gcc.dg/analyzer/state-diagram-3.c
--- 50169,50175 ----
  8959874363aade3ab965125e11d3ded5  gcc/testsuite/gcc.dg/analyzer/sigsetjmp-6.c
  041939ea34c3dd2bdd2d95257e5520ad  gcc/testsuite/gcc.dg/analyzer/single-field.c
  7c5d373abe7dc75a1f4304f4d2e0548b  gcc/testsuite/gcc.dg/analyzer/sprintf-1.c
! bd01d7652844027b55001e0ebb2e652a  gcc/testsuite/gcc.dg/analyzer/state-diagram-1-sarif.py
  d1b457374dc0f96c3cd72b2fa5b156ac  gcc/testsuite/gcc.dg/analyzer/state-diagram-1.c
  abde205c5f5c45914abf04811fbb5c2a  gcc/testsuite/gcc.dg/analyzer/state-diagram-2.c
  2d1c3f36c5428e3dc3a66a4baf126291  gcc/testsuite/gcc.dg/analyzer/state-diagram-3.c
*************** fb663b32ae2101d0ee651ad8022f76a9  gcc/te
*** 50150,50156 ****
  a410a16c7b6b05d515b138647c81c4d0  gcc/testsuite/gcc.dg/analyzer/state-diagram-5-sarif.py
  5c72aedcce8177798415d32e0a8bf938  gcc/testsuite/gcc.dg/analyzer/stdarg-1-ms_abi.c
  ae7b0d56b5a779d9be16f41d3efb6e03  gcc/testsuite/gcc.dg/analyzer/stdarg-1-sysv_abi.c
! 83eea51c7616c3097a43f056ac9be295  gcc/testsuite/gcc.dg/analyzer/stdarg-1.c
  1b2f767530b25f94b104129c38517103  gcc/testsuite/gcc.dg/analyzer/stdarg-2.c
  18157b6be7cfe6d468cac095357f27e1  gcc/testsuite/gcc.dg/analyzer/stdarg-3.c
  b76452713c6522655217df51194d0da5  gcc/testsuite/gcc.dg/analyzer/stdarg-fmtstring-1.c
--- 50180,50186 ----
  a410a16c7b6b05d515b138647c81c4d0  gcc/testsuite/gcc.dg/analyzer/state-diagram-5-sarif.py
  5c72aedcce8177798415d32e0a8bf938  gcc/testsuite/gcc.dg/analyzer/stdarg-1-ms_abi.c
  ae7b0d56b5a779d9be16f41d3efb6e03  gcc/testsuite/gcc.dg/analyzer/stdarg-1-sysv_abi.c
! 96ab304152a6a2ac9edc9d12be105e41  gcc/testsuite/gcc.dg/analyzer/stdarg-1.c
  1b2f767530b25f94b104129c38517103  gcc/testsuite/gcc.dg/analyzer/stdarg-2.c
  18157b6be7cfe6d468cac095357f27e1  gcc/testsuite/gcc.dg/analyzer/stdarg-3.c
  b76452713c6522655217df51194d0da5  gcc/testsuite/gcc.dg/analyzer/stdarg-fmtstring-1.c
*************** b76452713c6522655217df51194d0da5  gcc/te
*** 50160,50167 ****
  7c34f9a3c92ba106a890f78970e8464a  gcc/testsuite/gcc.dg/analyzer/stdarg-types-1.c
  72744cf5b7689b54300874e863c831d8  gcc/testsuite/gcc.dg/analyzer/strcat-1.c
  134423fe242d5fcd6c70f9d027d95bbc  gcc/testsuite/gcc.dg/analyzer/strchr-1.c
! 5c824937a2b8b50d8d983130fccd4e81  gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
! e60a87e3a024c5578ef6e9aceae4ee4c  gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
  6e61416a1a965596212f4c4d92797b7c  gcc/testsuite/gcc.dg/analyzer/strcpy-3.c
  e5ebb4cb43a0185a3db0a087bcc84310  gcc/testsuite/gcc.dg/analyzer/strcpy-4.c
  939f0764862017a61847c1022904c655  gcc/testsuite/gcc.dg/analyzer/strdup-1.c
--- 50190,50197 ----
  7c34f9a3c92ba106a890f78970e8464a  gcc/testsuite/gcc.dg/analyzer/stdarg-types-1.c
  72744cf5b7689b54300874e863c831d8  gcc/testsuite/gcc.dg/analyzer/strcat-1.c
  134423fe242d5fcd6c70f9d027d95bbc  gcc/testsuite/gcc.dg/analyzer/strchr-1.c
! 73f2d5778cc33feca3cbd46c97af6cb3  gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
! 6289f2890ad200c3237f37dcb304fbd0  gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
  6e61416a1a965596212f4c4d92797b7c  gcc/testsuite/gcc.dg/analyzer/strcpy-3.c
  e5ebb4cb43a0185a3db0a087bcc84310  gcc/testsuite/gcc.dg/analyzer/strcpy-4.c
  939f0764862017a61847c1022904c655  gcc/testsuite/gcc.dg/analyzer/strdup-1.c
*************** f0210a810518059661764eb58e636dbe  gcc/te
*** 50170,50179 ****
  776c83102066dafdfd4919f6bee676e7  gcc/testsuite/gcc.dg/analyzer/strndup-pr108252.c
  23c8551e7b91e875fc63b06d0ee8ebee  gcc/testsuite/gcc.dg/analyzer/switch-enum-1.c
  53337379f22adbe0c556208521ce5a99  gcc/testsuite/gcc.dg/analyzer/switch-enum-2.c
! 1bfea655cf31477f91fa6063725b00da  gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c
  1ae41d6ad8432356289b35c29e394269  gcc/testsuite/gcc.dg/analyzer/switch-no-short-enum-1.c
  e6d9f21a20d9f28508aa4f4b6b10ddec  gcc/testsuite/gcc.dg/analyzer/switch-short-enum-1.c
! 94d50b44acb880793de0436efdd4b8a5  gcc/testsuite/gcc.dg/analyzer/switch.c
  c8bc6833de96ea946301995b38dec3db  gcc/testsuite/gcc.dg/analyzer/symbolic-9.c
  1662916a25de3947c746e0bb53b4b717  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2011-2210-1.c
  d3672c86889d469bbd43ac562f0ca1a4  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-1.c
--- 50200,50209 ----
  776c83102066dafdfd4919f6bee676e7  gcc/testsuite/gcc.dg/analyzer/strndup-pr108252.c
  23c8551e7b91e875fc63b06d0ee8ebee  gcc/testsuite/gcc.dg/analyzer/switch-enum-1.c
  53337379f22adbe0c556208521ce5a99  gcc/testsuite/gcc.dg/analyzer/switch-enum-2.c
! e44623257313453be5fa88b090f28d06  gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c
  1ae41d6ad8432356289b35c29e394269  gcc/testsuite/gcc.dg/analyzer/switch-no-short-enum-1.c
  e6d9f21a20d9f28508aa4f4b6b10ddec  gcc/testsuite/gcc.dg/analyzer/switch-short-enum-1.c
! 0d80adcc7ac75b99c877dd383ee692a5  gcc/testsuite/gcc.dg/analyzer/switch.c
  c8bc6833de96ea946301995b38dec3db  gcc/testsuite/gcc.dg/analyzer/symbolic-9.c
  1662916a25de3947c746e0bb53b4b717  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2011-2210-1.c
  d3672c86889d469bbd43ac562f0ca1a4  gcc/testsuite/gcc.dg/analyzer/taint-CVE-2020-13143-1.c
*************** d573cbba3ca2a25fc89d2a7473c5f423  gcc/te
*** 50185,50204 ****
  fc3cb70c2399af08002b58c02ec7dc52  gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c
  71e14b0eb6517785cd3528d5ac0105a8  gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c
  790595ae06a5a0381144fc786922f71e  gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c
! 3151c42d285ada08441b98096e4cb487  gcc/testsuite/gcc.dg/analyzer/taint-assert.c
  94a5f5322aa801cf745282a4cb42bfc9  gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
  df0366e06e6b9d19dce5a23691e50271  gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c
  720d8a76446c424458c3556aa734ee7e  gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c
  78e4b1ed06f4e63bcfa3802ec15ad857  gcc/testsuite/gcc.dg/analyzer/taint-size-1.c
  693f55ef817f864e0343827ad154c880  gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c
  507a86fc44de383ae22b8933825e4bd0  gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c
! 922f4476faefdb4c464bb41571cd3305  gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c
  5c37a718a5792e1d46f1e4ed86dbc98a  gcc/testsuite/gcc.dg/analyzer/test-alloca.h
  486419cac8d180eb2b80b19e520f0727  gcc/testsuite/gcc.dg/analyzer/test-assert.h
  bd601748927d5c75feb46ce9e4546e5e  gcc/testsuite/gcc.dg/analyzer/test-setjmp.h
  c4ea4a7111cad6e2223b4b4e23b1fd95  gcc/testsuite/gcc.dg/analyzer/test-uaccess.h
  1044a7408c5d7630501b02b9726d7b8b  gcc/testsuite/gcc.dg/analyzer/torture/20060625-1.c
! aa426e1e52fbd54c771ff312c25b2f4d  gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp
  ab8b5fe6003e8ef4d2d1b26e247a6207  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-array_index_mask_nospec.c
  9e0121dee23fed15f762b03898392c8a  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-cpuid-paravirt-1.c
  144d9ec1f7cc82583ee9bca4b319b24c  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-cpuid-paravirt-2.c
--- 50215,50234 ----
  fc3cb70c2399af08002b58c02ec7dc52  gcc/testsuite/gcc.dg/analyzer/taint-alloc-5.c
  71e14b0eb6517785cd3528d5ac0105a8  gcc/testsuite/gcc.dg/analyzer/taint-assert-macro-expansion.c
  790595ae06a5a0381144fc786922f71e  gcc/testsuite/gcc.dg/analyzer/taint-assert-system-header.c
! 7228d7b34c4f6867f77fda68257e26e2  gcc/testsuite/gcc.dg/analyzer/taint-assert.c
  94a5f5322aa801cf745282a4cb42bfc9  gcc/testsuite/gcc.dg/analyzer/taint-divisor-1.c
  df0366e06e6b9d19dce5a23691e50271  gcc/testsuite/gcc.dg/analyzer/taint-read-index-1.c
  720d8a76446c424458c3556aa734ee7e  gcc/testsuite/gcc.dg/analyzer/taint-read-offset-1.c
  78e4b1ed06f4e63bcfa3802ec15ad857  gcc/testsuite/gcc.dg/analyzer/taint-size-1.c
  693f55ef817f864e0343827ad154c880  gcc/testsuite/gcc.dg/analyzer/taint-size-access-attr-1.c
  507a86fc44de383ae22b8933825e4bd0  gcc/testsuite/gcc.dg/analyzer/taint-write-index-1.c
! 1fb46abadcd32472f1c507019f21e3c4  gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c
  5c37a718a5792e1d46f1e4ed86dbc98a  gcc/testsuite/gcc.dg/analyzer/test-alloca.h
  486419cac8d180eb2b80b19e520f0727  gcc/testsuite/gcc.dg/analyzer/test-assert.h
  bd601748927d5c75feb46ce9e4546e5e  gcc/testsuite/gcc.dg/analyzer/test-setjmp.h
  c4ea4a7111cad6e2223b4b4e23b1fd95  gcc/testsuite/gcc.dg/analyzer/test-uaccess.h
  1044a7408c5d7630501b02b9726d7b8b  gcc/testsuite/gcc.dg/analyzer/torture/20060625-1.c
! 5b199b842f98ee1eee09df240f8b1950  gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp
  ab8b5fe6003e8ef4d2d1b26e247a6207  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-array_index_mask_nospec.c
  9e0121dee23fed15f762b03898392c8a  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-cpuid-paravirt-1.c
  144d9ec1f7cc82583ee9bca4b319b24c  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-cpuid-paravirt-2.c
*************** adcdfc937d1369e1864074215a1cd12c  gcc/te
*** 50208,50226 ****
  39a8fcab847d51fb725151bf5e3edb92  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-wfx_get_ps_timeout-full.c
  8953ab993ff3c153bc51dfb30b99bf7e  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-wfx_get_ps_timeout-reduced.c
  85b99739a5a3b9e52c0675cb96b6e1bd  gcc/testsuite/gcc.dg/analyzer/torture/boxed-int-1.c
! 15fbb57b4e698f5e11d27a7072dec72f  gcc/testsuite/gcc.dg/analyzer/torture/boxed-ptr-1.c
  6600a700d9c3d03886029438e22848f6  gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c
  f51fae0e8d61e76c5a00d9a7a8e4a3f3  gcc/testsuite/gcc.dg/analyzer/torture/conftest-1.c
  e85d83557fa692d7016e4622b85ca975  gcc/testsuite/gcc.dg/analyzer/torture/empty-struct-1.c
! 8d709abc006dc3a0451121f9d45c50b3  gcc/testsuite/gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c
  2a944db68262f05280b26c9c165685c9  gcc/testsuite/gcc.dg/analyzer/torture/intptr_t.c
  fbd2e05a9e1bee211c5fd03bb02f863a  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-1.c
  8f5b6da995738b027bfc202c0abfeb53  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-2.c
! fe447f16fa32a6662b71d48cefafbccc  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c
  b8568508a8d8d6b0005149ac11f93783  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-2.c
  707a0e095b5e167db1cb6f2fa2cad4da  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-3.c
  52faf878195ceb4ad78e8c760c4f86f4  gcc/testsuite/gcc.dg/analyzer/torture/poc.c
! 01f1ac31cf3854d0ce20abbf6cc01ad2  gcc/testsuite/gcc.dg/analyzer/torture/pr102225.c
  12eb1f6a5793f5099b6673deaf8f4c08  gcc/testsuite/gcc.dg/analyzer/torture/pr102692.c
  f220df257b7652557308a81a18da555f  gcc/testsuite/gcc.dg/analyzer/torture/pr103685.c
  4a16b16700d3ee75097ab63f73ac9c6c  gcc/testsuite/gcc.dg/analyzer/torture/pr104159.c
--- 50238,50256 ----
  39a8fcab847d51fb725151bf5e3edb92  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-wfx_get_ps_timeout-full.c
  8953ab993ff3c153bc51dfb30b99bf7e  gcc/testsuite/gcc.dg/analyzer/torture/asm-x86-linux-wfx_get_ps_timeout-reduced.c
  85b99739a5a3b9e52c0675cb96b6e1bd  gcc/testsuite/gcc.dg/analyzer/torture/boxed-int-1.c
! d31cd9527a48524e11069281c92681ad  gcc/testsuite/gcc.dg/analyzer/torture/boxed-ptr-1.c
  6600a700d9c3d03886029438e22848f6  gcc/testsuite/gcc.dg/analyzer/torture/conditionals-2.c
  f51fae0e8d61e76c5a00d9a7a8e4a3f3  gcc/testsuite/gcc.dg/analyzer/torture/conftest-1.c
  e85d83557fa692d7016e4622b85ca975  gcc/testsuite/gcc.dg/analyzer/torture/empty-struct-1.c
! 2542099bfd1e3067fad9b5ea97b355cb  gcc/testsuite/gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c
  2a944db68262f05280b26c9c165685c9  gcc/testsuite/gcc.dg/analyzer/torture/intptr_t.c
  fbd2e05a9e1bee211c5fd03bb02f863a  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-1.c
  8f5b6da995738b027bfc202c0abfeb53  gcc/testsuite/gcc.dg/analyzer/torture/leak-pr102308-2.c
! 29222b50dba34b5607f2adde855674d4  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c
  b8568508a8d8d6b0005149ac11f93783  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-2.c
  707a0e095b5e167db1cb6f2fa2cad4da  gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-3.c
  52faf878195ceb4ad78e8c760c4f86f4  gcc/testsuite/gcc.dg/analyzer/torture/poc.c
! 0d56f5d634627a58d134043d4ba07770  gcc/testsuite/gcc.dg/analyzer/torture/pr102225.c
  12eb1f6a5793f5099b6673deaf8f4c08  gcc/testsuite/gcc.dg/analyzer/torture/pr102692.c
  f220df257b7652557308a81a18da555f  gcc/testsuite/gcc.dg/analyzer/torture/pr103685.c
  4a16b16700d3ee75097ab63f73ac9c6c  gcc/testsuite/gcc.dg/analyzer/torture/pr104159.c
*************** caf07d8cfdac2dc0343b0db220cb61e8  gcc/te
*** 50233,50239 ****
  2a78ac6277fe064dd23c3f8e05c58092  gcc/testsuite/gcc.dg/analyzer/torture/pr93373.c
  29510929c207c18e72e3098e56473e27  gcc/testsuite/gcc.dg/analyzer/torture/pr93374.c
  80be356bca9c329740dc2d87d8c74c76  gcc/testsuite/gcc.dg/analyzer/torture/pr93379-2.c
! 767ca691132ff87cb30f787a3ebbcf72  gcc/testsuite/gcc.dg/analyzer/torture/pr93379.c
  9b48e1c683a3576d5b6aeaae504b75d0  gcc/testsuite/gcc.dg/analyzer/torture/pr93438-2.c
  d0497e5c33b1ac1c4a394d71fab98cc8  gcc/testsuite/gcc.dg/analyzer/torture/pr93438.c
  46baa544a269e09c2b193d9afa13e792  gcc/testsuite/gcc.dg/analyzer/torture/pr93450.c
--- 50263,50269 ----
  2a78ac6277fe064dd23c3f8e05c58092  gcc/testsuite/gcc.dg/analyzer/torture/pr93373.c
  29510929c207c18e72e3098e56473e27  gcc/testsuite/gcc.dg/analyzer/torture/pr93374.c
  80be356bca9c329740dc2d87d8c74c76  gcc/testsuite/gcc.dg/analyzer/torture/pr93379-2.c
! c8abd94324b28485afc08856e6e02be1  gcc/testsuite/gcc.dg/analyzer/torture/pr93379.c
  9b48e1c683a3576d5b6aeaae504b75d0  gcc/testsuite/gcc.dg/analyzer/torture/pr93438-2.c
  d0497e5c33b1ac1c4a394d71fab98cc8  gcc/testsuite/gcc.dg/analyzer/torture/pr93438.c
  46baa544a269e09c2b193d9afa13e792  gcc/testsuite/gcc.dg/analyzer/torture/pr93450.c
*************** edff473b255c0dea0c18477a32ff789c  gcc/te
*** 50242,50248 ****
  c20da04ddcafb9fcbaf63d68a963fc64  gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c
  32a48f1dc8e9a869a6baba13956aa4aa  gcc/testsuite/gcc.dg/analyzer/torture/pr93649.c
  049209558c45a95b2d1cfb0369c75138  gcc/testsuite/gcc.dg/analyzer/torture/pr93947.c
! 33cfe031089e835f2fd40516d6f10e97  gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c
  9ad091485049c3474ef15f305054d030  gcc/testsuite/gcc.dg/analyzer/torture/switch-2.c
  25003174501570b799d3e3a948c66f5f  gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c
  395de16f08102a554c60112d9f79a4ac  gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c
--- 50272,50278 ----
  c20da04ddcafb9fcbaf63d68a963fc64  gcc/testsuite/gcc.dg/analyzer/torture/pr93647.c
  32a48f1dc8e9a869a6baba13956aa4aa  gcc/testsuite/gcc.dg/analyzer/torture/pr93649.c
  049209558c45a95b2d1cfb0369c75138  gcc/testsuite/gcc.dg/analyzer/torture/pr93947.c
! 7826650ea8491ff0996ddb84facdd55e  gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c
  9ad091485049c3474ef15f305054d030  gcc/testsuite/gcc.dg/analyzer/torture/switch-2.c
  25003174501570b799d3e3a948c66f5f  gcc/testsuite/gcc.dg/analyzer/torture/switch-3.c
  395de16f08102a554c60112d9f79a4ac  gcc/testsuite/gcc.dg/analyzer/torture/switch-4.c
*************** cc641b4453a1b743c66c43ea1c92e357  gcc/te
*** 50268,50282 ****
  8c87a229f0dd190ba422467801b8229b  gcc/testsuite/gcc.dg/analyzer/uninit-7.c
  541b34b1ad44afd6ca6d0a768db2946a  gcc/testsuite/gcc.dg/analyzer/uninit-CWE-457-examples.c
  b06ba7887a4ece7ea7f11a9caf8e97b4  gcc/testsuite/gcc.dg/analyzer/unknown-fns.c
! 087460b24b93f2716c1d11c02d30965e  gcc/testsuite/gcc.dg/analyzer/untracked-1.c
! f38862cc1b9a2bfc4028d7aaf8b1e0eb  gcc/testsuite/gcc.dg/analyzer/use-after-free.c
  328944439dc2fafc8d890d246e441f93  gcc/testsuite/gcc.dg/analyzer/vla-1.c
  fb819ef6855781fb4db0ecfb14c5998d  gcc/testsuite/gcc.dg/analyzer/warning-emoji.c
  d23060d9617d607793c74626be7479fe  gcc/testsuite/gcc.dg/analyzer/write-to-const-2.c
  1fa3c19e4371898a9f78cb50d95028b8  gcc/testsuite/gcc.dg/analyzer/write-to-function-1.c
  6ec959b42308e02f8a893a9efaf86d98  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-2.c
  57fc075c8dbac107e616b70295049b4b  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-3.c
! 4ad6acd95f4f163ad0a0d3d4599de6ee  gcc/testsuite/gcc.dg/analyzer/zlib-3.c
  f879ebf85b514c5e20431d11da89e21f  gcc/testsuite/gcc.dg/analyzer/zlib-6.c
  82d2d50559f8da5c45335800f5d3273e  gcc/testsuite/gcc.dg/analyzer/zlib-6a.c
  9a236d4e4079496d64daed78574cc006  gcc/testsuite/gcc.dg/and-1.c
--- 50298,50312 ----
  8c87a229f0dd190ba422467801b8229b  gcc/testsuite/gcc.dg/analyzer/uninit-7.c
  541b34b1ad44afd6ca6d0a768db2946a  gcc/testsuite/gcc.dg/analyzer/uninit-CWE-457-examples.c
  b06ba7887a4ece7ea7f11a9caf8e97b4  gcc/testsuite/gcc.dg/analyzer/unknown-fns.c
! eeaca85322ad838dd4a816b8b9922442  gcc/testsuite/gcc.dg/analyzer/untracked-1.c
! dfddc8d0ab7498760be0e921b1d2dd88  gcc/testsuite/gcc.dg/analyzer/use-after-free.c
  328944439dc2fafc8d890d246e441f93  gcc/testsuite/gcc.dg/analyzer/vla-1.c
  fb819ef6855781fb4db0ecfb14c5998d  gcc/testsuite/gcc.dg/analyzer/warning-emoji.c
  d23060d9617d607793c74626be7479fe  gcc/testsuite/gcc.dg/analyzer/write-to-const-2.c
  1fa3c19e4371898a9f78cb50d95028b8  gcc/testsuite/gcc.dg/analyzer/write-to-function-1.c
  6ec959b42308e02f8a893a9efaf86d98  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-2.c
  57fc075c8dbac107e616b70295049b4b  gcc/testsuite/gcc.dg/analyzer/write-to-string-literal-3.c
! b92747001f0c33cd573e848e3814d495  gcc/testsuite/gcc.dg/analyzer/zlib-3.c
  f879ebf85b514c5e20431d11da89e21f  gcc/testsuite/gcc.dg/analyzer/zlib-6.c
  82d2d50559f8da5c45335800f5d3273e  gcc/testsuite/gcc.dg/analyzer/zlib-6a.c
  9a236d4e4079496d64daed78574cc006  gcc/testsuite/gcc.dg/and-1.c
*************** e2f52a89972160427f649396e34b1d0c  gcc/te
*** 53215,53221 ****
  4e1fecf5ecf52fb6fb5fda7ea3f6eda7  gcc/testsuite/gcc.dg/debug/dwarf2/nested_fun.c
  edee97b42c75ecf594a2c63a31f4c416  gcc/testsuite/gcc.dg/debug/dwarf2/noreturn-function-attribute.c
  cbcc356a35e8a8665137c7ae64ec5914  gcc/testsuite/gcc.dg/debug/dwarf2/noreturn-function-keyword.c
! 937e8a07b611d24efb44f969833a3cb8  gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c
  65c779aa27fde2981a8fd2eb1b54c195  gcc/testsuite/gcc.dg/debug/dwarf2/pr100515.c
  54b366032eed667161eee7783123c310  gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c
  88466c37a4317f483dad470b7d9a7949  gcc/testsuite/gcc.dg/debug/dwarf2/pr111080.c
--- 53245,53251 ----
  4e1fecf5ecf52fb6fb5fda7ea3f6eda7  gcc/testsuite/gcc.dg/debug/dwarf2/nested_fun.c
  edee97b42c75ecf594a2c63a31f4c416  gcc/testsuite/gcc.dg/debug/dwarf2/noreturn-function-attribute.c
  cbcc356a35e8a8665137c7ae64ec5914  gcc/testsuite/gcc.dg/debug/dwarf2/noreturn-function-keyword.c
! 1e5b1f52a31f16f937cd807e0a2b5045  gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c
  65c779aa27fde2981a8fd2eb1b54c195  gcc/testsuite/gcc.dg/debug/dwarf2/pr100515.c
  54b366032eed667161eee7783123c310  gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c
  88466c37a4317f483dad470b7d9a7949  gcc/testsuite/gcc.dg/debug/dwarf2/pr111080.c
*************** dfc82995e2790a51a71b8e0c0dce494a  gcc/te
*** 54315,54321 ****
  fbd470b5c744eb8ede5a6dfbf5191602  gcc/testsuite/gcc.dg/gomp/append-args-1.c
  2f3333af08b8042445e79536694a34b4  gcc/testsuite/gcc.dg/gomp/appendix-a/a.1.1.c
  885f61f4895f1224def50fcf707b2f2e  gcc/testsuite/gcc.dg/gomp/appendix-a/a.10.1.c
! c8cf5f6a748356f3bcea8e2dbb2e4196  gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c
  9f6b029b44fcf2bb92347a23a181f157  gcc/testsuite/gcc.dg/gomp/appendix-a/a.13.1.c
  77a66b53ecd95069a709e8111dfa6b14  gcc/testsuite/gcc.dg/gomp/appendix-a/a.14.1.c
  a0d4ed79bdccaf93384583be0da5f955  gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.1.c
--- 54345,54351 ----
  fbd470b5c744eb8ede5a6dfbf5191602  gcc/testsuite/gcc.dg/gomp/append-args-1.c
  2f3333af08b8042445e79536694a34b4  gcc/testsuite/gcc.dg/gomp/appendix-a/a.1.1.c
  885f61f4895f1224def50fcf707b2f2e  gcc/testsuite/gcc.dg/gomp/appendix-a/a.10.1.c
! 974b0bd66cd8a1ea44253c3763f37f25  gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c
  9f6b029b44fcf2bb92347a23a181f157  gcc/testsuite/gcc.dg/gomp/appendix-a/a.13.1.c
  77a66b53ecd95069a709e8111dfa6b14  gcc/testsuite/gcc.dg/gomp/appendix-a/a.14.1.c
  a0d4ed79bdccaf93384583be0da5f955  gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.1.c
*************** c26b1bfa8b2fd75cff129c324e36de96  gcc/te
*** 54334,54340 ****
  1a0cfd09bdf1c79167af51d9578dea2f  gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.2.c
  0fa6b16fbeac1ad260538a69d9904f2d  gcc/testsuite/gcc.dg/gomp/appendix-a/a.32.1.c
  fc7a4eb85d3bfa6815fe4eaf8a6a82ab  gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.1.c
! 82c17d2f324664ac666facf1f9c9857b  gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c
  f042c1ea359c6163e90c08ec6a8ce159  gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.1.c
  128d64b60414894b162f19ab71d5d2c3  gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.2.c
  25be279d4a4ad1581f1c7ee08b4ec035  gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.1.c
--- 54364,54370 ----
  1a0cfd09bdf1c79167af51d9578dea2f  gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.2.c
  0fa6b16fbeac1ad260538a69d9904f2d  gcc/testsuite/gcc.dg/gomp/appendix-a/a.32.1.c
  fc7a4eb85d3bfa6815fe4eaf8a6a82ab  gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.1.c
! 05fe856f4e1bede0a5550556fbe628f1  gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c
  f042c1ea359c6163e90c08ec6a8ce159  gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.1.c
  128d64b60414894b162f19ab71d5d2c3  gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.2.c
  25be279d4a4ad1581f1c7ee08b4ec035  gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.1.c
*************** acb5ff1fe34bdf360b3e8e1e27057c7c  gcc/te
*** 54350,54359 ****
  83fc5a160131e46d52401ed9a0270d52  gcc/testsuite/gcc.dg/gomp/asm-1.c
  c621352105a88501ea8e5c4fc6e9fcba  gcc/testsuite/gcc.dg/gomp/atomic-5.c
  22d57060102bd3c8f22f99655931b078  gcc/testsuite/gcc.dg/gomp/atomic-6.c
! 9d5e328cfe678cb16eabf676b756fc19  gcc/testsuite/gcc.dg/gomp/attrs-1.c
  59f5d245f76bec29ae3b105889cee234  gcc/testsuite/gcc.dg/gomp/attrs-10.c
  376224e439fd43dc8fa95175058f50bc  gcc/testsuite/gcc.dg/gomp/attrs-11.c
! e8b616706b9c40849f964ad4a202b00e  gcc/testsuite/gcc.dg/gomp/attrs-12.c
  084158cc52f11341a8fbb96431709d68  gcc/testsuite/gcc.dg/gomp/attrs-13.c
  66527d497a633f14d7da5a413d20e745  gcc/testsuite/gcc.dg/gomp/attrs-14.c
  aa260eb274881fa02bada2bc687fdf65  gcc/testsuite/gcc.dg/gomp/attrs-15.c
--- 54380,54389 ----
  83fc5a160131e46d52401ed9a0270d52  gcc/testsuite/gcc.dg/gomp/asm-1.c
  c621352105a88501ea8e5c4fc6e9fcba  gcc/testsuite/gcc.dg/gomp/atomic-5.c
  22d57060102bd3c8f22f99655931b078  gcc/testsuite/gcc.dg/gomp/atomic-6.c
! f2627dd496e5491c43423befc896bc76  gcc/testsuite/gcc.dg/gomp/attrs-1.c
  59f5d245f76bec29ae3b105889cee234  gcc/testsuite/gcc.dg/gomp/attrs-10.c
  376224e439fd43dc8fa95175058f50bc  gcc/testsuite/gcc.dg/gomp/attrs-11.c
! 10471f1fe55a09d9cc36bc88bc9355a4  gcc/testsuite/gcc.dg/gomp/attrs-12.c
  084158cc52f11341a8fbb96431709d68  gcc/testsuite/gcc.dg/gomp/attrs-13.c
  66527d497a633f14d7da5a413d20e745  gcc/testsuite/gcc.dg/gomp/attrs-14.c
  aa260eb274881fa02bada2bc687fdf65  gcc/testsuite/gcc.dg/gomp/attrs-15.c
*************** e340eb07b9f188f317bb98a5577daa45  gcc/te
*** 54361,54376 ****
  744a1509f5ab693bd510c6b74a4cff45  gcc/testsuite/gcc.dg/gomp/attrs-17.c
  9bbc6b1d4ebe68b61a8f02c75f95fb66  gcc/testsuite/gcc.dg/gomp/attrs-18.c
  7be94eac97d57b71b671b087cef568fd  gcc/testsuite/gcc.dg/gomp/attrs-19.c
! 6cf7c4e12e7f64fccfb4c93f58b4d231  gcc/testsuite/gcc.dg/gomp/attrs-2.c
  700c53aad0d5d269bea023972e23cbb0  gcc/testsuite/gcc.dg/gomp/attrs-20.c
  da25de872fdf30520a92c5a7efdc5eb8  gcc/testsuite/gcc.dg/gomp/attrs-21.c
  629438b394352352fe98ddd89e17dafb  gcc/testsuite/gcc.dg/gomp/attrs-3.c
! 10f52bcfaf0fc71d9940804770c4deb7  gcc/testsuite/gcc.dg/gomp/attrs-4.c
! 0b57ff1b2127d619ccf510193a878649  gcc/testsuite/gcc.dg/gomp/attrs-5.c
  4669e031a30201a11db7f113d3edfb12  gcc/testsuite/gcc.dg/gomp/attrs-6.c
  18fb56e85095c83341d35f60dfc31a81  gcc/testsuite/gcc.dg/gomp/attrs-7.c
  803d262323a774183d3eae0af96fee8d  gcc/testsuite/gcc.dg/gomp/attrs-8.c
! 948a086fc4c6d2178ab6e46fcdc486c3  gcc/testsuite/gcc.dg/gomp/attrs-9.c
  a1f891c5f0f993b065eb9127f4ee7b48  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-1.c
  80778aa54c71da9bdae48d0379f97195  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-2.c
  60b339df3891e877c545e9053ad60cf5  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-3.c
--- 54391,54406 ----
  744a1509f5ab693bd510c6b74a4cff45  gcc/testsuite/gcc.dg/gomp/attrs-17.c
  9bbc6b1d4ebe68b61a8f02c75f95fb66  gcc/testsuite/gcc.dg/gomp/attrs-18.c
  7be94eac97d57b71b671b087cef568fd  gcc/testsuite/gcc.dg/gomp/attrs-19.c
! 0de5b9714799967f289505473a33b77e  gcc/testsuite/gcc.dg/gomp/attrs-2.c
  700c53aad0d5d269bea023972e23cbb0  gcc/testsuite/gcc.dg/gomp/attrs-20.c
  da25de872fdf30520a92c5a7efdc5eb8  gcc/testsuite/gcc.dg/gomp/attrs-21.c
  629438b394352352fe98ddd89e17dafb  gcc/testsuite/gcc.dg/gomp/attrs-3.c
! c94e9a88056536f4eb182b39e59b69d5  gcc/testsuite/gcc.dg/gomp/attrs-4.c
! e93da1c9ddd7cc63369ecd94a0e78259  gcc/testsuite/gcc.dg/gomp/attrs-5.c
  4669e031a30201a11db7f113d3edfb12  gcc/testsuite/gcc.dg/gomp/attrs-6.c
  18fb56e85095c83341d35f60dfc31a81  gcc/testsuite/gcc.dg/gomp/attrs-7.c
  803d262323a774183d3eae0af96fee8d  gcc/testsuite/gcc.dg/gomp/attrs-8.c
! 86969d7192961246d9b23f31e26d0001  gcc/testsuite/gcc.dg/gomp/attrs-9.c
  a1f891c5f0f993b065eb9127f4ee7b48  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-1.c
  80778aa54c71da9bdae48d0379f97195  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-2.c
  60b339df3891e877c545e9053ad60cf5  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-3.c
*************** eb3d22faee81e2f045c308cb5d0e684b  gcc/te
*** 54382,54399 ****
  5bdf2d77d1853d97a643ac387a3d4898  gcc/testsuite/gcc.dg/gomp/barrier-1.c
  4cc557fc04cdc32100defee25270433a  gcc/testsuite/gcc.dg/gomp/barrier-2.c
  23825024eeec4f1d1ec2539c8661d97f  gcc/testsuite/gcc.dg/gomp/block-1.c
! 24937ceae4814ecb18d438678ba39fba  gcc/testsuite/gcc.dg/gomp/block-10.c
  64de75e0ae05fb493c94bd4478f76721  gcc/testsuite/gcc.dg/gomp/block-11.c
  74cfed5ed15ed35dda1f905c2d4d4352  gcc/testsuite/gcc.dg/gomp/block-2.c
  7e23367a32ca91b0c3aaf931300e581c  gcc/testsuite/gcc.dg/gomp/block-3.c
  546fc61745b9a7596ccf9ae67da7be8b  gcc/testsuite/gcc.dg/gomp/block-4.c
! 7d48803787049e31369b0f411af741c7  gcc/testsuite/gcc.dg/gomp/block-5.c
  836974bc19e48b4ba237e9be1404d281  gcc/testsuite/gcc.dg/gomp/block-6.c
  b6791d2dc8bbcd1cde186bf6d48381b1  gcc/testsuite/gcc.dg/gomp/block-7.c
  9d8e30eba0019473bc7e43fcdc6b48c1  gcc/testsuite/gcc.dg/gomp/block-8.c
! 79682352a0c94e668e3de0e2a7fa1c22  gcc/testsuite/gcc.dg/gomp/block-9.c
  4910624b952a49e6626cc2f12abebbbf  gcc/testsuite/gcc.dg/gomp/cancel-1.c
! 5c863da63bc2a44607b745b56d4373e8  gcc/testsuite/gcc.dg/gomp/clause-1.c
  c7d834ccfdd2998d05058b9180e9a6e9  gcc/testsuite/gcc.dg/gomp/clause-2.c
  35f32eab0b4f5b2fd922d3d1706043d6  gcc/testsuite/gcc.dg/gomp/collapse-1.c
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/gomp/combined-1.c
--- 54412,54429 ----
  5bdf2d77d1853d97a643ac387a3d4898  gcc/testsuite/gcc.dg/gomp/barrier-1.c
  4cc557fc04cdc32100defee25270433a  gcc/testsuite/gcc.dg/gomp/barrier-2.c
  23825024eeec4f1d1ec2539c8661d97f  gcc/testsuite/gcc.dg/gomp/block-1.c
! 6c8bd39765cc2b3f677aefe68eb00ab1  gcc/testsuite/gcc.dg/gomp/block-10.c
  64de75e0ae05fb493c94bd4478f76721  gcc/testsuite/gcc.dg/gomp/block-11.c
  74cfed5ed15ed35dda1f905c2d4d4352  gcc/testsuite/gcc.dg/gomp/block-2.c
  7e23367a32ca91b0c3aaf931300e581c  gcc/testsuite/gcc.dg/gomp/block-3.c
  546fc61745b9a7596ccf9ae67da7be8b  gcc/testsuite/gcc.dg/gomp/block-4.c
! 6b4cdb863ee97db6dcf84a0ba8acd1e1  gcc/testsuite/gcc.dg/gomp/block-5.c
  836974bc19e48b4ba237e9be1404d281  gcc/testsuite/gcc.dg/gomp/block-6.c
  b6791d2dc8bbcd1cde186bf6d48381b1  gcc/testsuite/gcc.dg/gomp/block-7.c
  9d8e30eba0019473bc7e43fcdc6b48c1  gcc/testsuite/gcc.dg/gomp/block-8.c
! 613aad86ea0efe67ed061400b388cb92  gcc/testsuite/gcc.dg/gomp/block-9.c
  4910624b952a49e6626cc2f12abebbbf  gcc/testsuite/gcc.dg/gomp/cancel-1.c
! 33cc69d683f6197768c3d727603a421e  gcc/testsuite/gcc.dg/gomp/clause-1.c
  c7d834ccfdd2998d05058b9180e9a6e9  gcc/testsuite/gcc.dg/gomp/clause-2.c
  35f32eab0b4f5b2fd922d3d1706043d6  gcc/testsuite/gcc.dg/gomp/collapse-1.c
  d41d8cd98f00b204e9800998ecf8427e  gcc/testsuite/gcc.dg/gomp/combined-1.c
*************** f8f36c2928f3dc4295a92789d3d12a13  gcc/te
*** 54408,54419 ****
  352a35f47290ab485f720463b95f6818  gcc/testsuite/gcc.dg/gomp/declare-mapper-13.c
  9855504c29153e58227e4911a1d26e10  gcc/testsuite/gcc.dg/gomp/declare-simd-1.c
  dbf4fad9a516a5e21a83632a1bc47d48  gcc/testsuite/gcc.dg/gomp/declare-simd-2.c
! eaf20ce005642d7f04c4f181f7d0e142  gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
  8ad7fd6bf872bcd397b6264c4199830e  gcc/testsuite/gcc.dg/gomp/declare-simd-4.c
  c95154d0c0580392aee19257bfc2e9e4  gcc/testsuite/gcc.dg/gomp/declare-simd-5.c
  d9fdf9f47a3764723441a571868d9cba  gcc/testsuite/gcc.dg/gomp/declare-variant-1.c
  51d79415450b7870aadd4c879fb233d4  gcc/testsuite/gcc.dg/gomp/declare-variant-2.c
  152a743c8e1c85299fd27e5eb3a7af96  gcc/testsuite/gcc.dg/gomp/declare-variant-3.c
  40f2ea44239995df51ac3b38a7133338  gcc/testsuite/gcc.dg/gomp/dispatch-1.c
  8d3b27b739488aeb8d5cef6a8ede902f  gcc/testsuite/gcc.dg/gomp/dispatch-2.c
  daf23047f461270ab705201d4069235e  gcc/testsuite/gcc.dg/gomp/dispatch-3.c
--- 54438,54451 ----
  352a35f47290ab485f720463b95f6818  gcc/testsuite/gcc.dg/gomp/declare-mapper-13.c
  9855504c29153e58227e4911a1d26e10  gcc/testsuite/gcc.dg/gomp/declare-simd-1.c
  dbf4fad9a516a5e21a83632a1bc47d48  gcc/testsuite/gcc.dg/gomp/declare-simd-2.c
! c55b2e6efe68494c18d8c4156c6b12b6  gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
  8ad7fd6bf872bcd397b6264c4199830e  gcc/testsuite/gcc.dg/gomp/declare-simd-4.c
  c95154d0c0580392aee19257bfc2e9e4  gcc/testsuite/gcc.dg/gomp/declare-simd-5.c
  d9fdf9f47a3764723441a571868d9cba  gcc/testsuite/gcc.dg/gomp/declare-variant-1.c
  51d79415450b7870aadd4c879fb233d4  gcc/testsuite/gcc.dg/gomp/declare-variant-2.c
  152a743c8e1c85299fd27e5eb3a7af96  gcc/testsuite/gcc.dg/gomp/declare-variant-3.c
+ ccce92068aaec4ffe8e3c1817beae292  gcc/testsuite/gcc.dg/gomp/deprecate-1.c
+ d72b55aefb31276fa8a6bd1fcdd9c071  gcc/testsuite/gcc.dg/gomp/deprecate-2.c
  40f2ea44239995df51ac3b38a7133338  gcc/testsuite/gcc.dg/gomp/dispatch-1.c
  8d3b27b739488aeb8d5cef6a8ede902f  gcc/testsuite/gcc.dg/gomp/dispatch-2.c
  daf23047f461270ab705201d4069235e  gcc/testsuite/gcc.dg/gomp/dispatch-3.c
*************** d04c18e8518877b08e0371599b6643ed  gcc/te
*** 54450,54471 ****
  d9604d99f8b1a6974afc5a3cab2765b3  gcc/testsuite/gcc.dg/gomp/for-8.c
  34eb86e893e0bd796aad8d236b5bc215  gcc/testsuite/gcc.dg/gomp/for-9.c
  8b04fc2a06faaa7581be43ad80531e99  gcc/testsuite/gcc.dg/gomp/gomp.exp
! f23a4bf5a986b8f5c098e677d3a78a11  gcc/testsuite/gcc.dg/gomp/linear-1.c
  11c71eb5733cf2b2fd8236737c95dfad  gcc/testsuite/gcc.dg/gomp/loop-1.c
  110dfd4b42962d803dd77ce77900455c  gcc/testsuite/gcc.dg/gomp/loop-2.c
  a4271cf7824f2a837486e7951ee23884  gcc/testsuite/gcc.dg/gomp/macro-1.c
  eabb0107af4ef893414bb3cef506ad03  gcc/testsuite/gcc.dg/gomp/macro-2.c
  0d468ea6d8d3343f4663748bf3bf83ac  gcc/testsuite/gcc.dg/gomp/macro-3.c
  706fb6a671ca86d26b60cc558688ef85  gcc/testsuite/gcc.dg/gomp/macro-4.c
! 9dff449fe2d97c4b3ade07b982e69364  gcc/testsuite/gcc.dg/gomp/master-1.c
! e3d4511cf0643d031beaecffa7d44be0  gcc/testsuite/gcc.dg/gomp/master-2.c
! 12980af7dd41b122fc335c0ef4ba07ed  gcc/testsuite/gcc.dg/gomp/master-3.c
  8ec8b9b7973df31c9332b5f69c4e940d  gcc/testsuite/gcc.dg/gomp/max_vf-1.c
! a730b346d0a30f7e8ed5be192633579a  gcc/testsuite/gcc.dg/gomp/metadirective-1.c
  27c67e32fd4b098003d0d0b5b9322420  gcc/testsuite/gcc.dg/gomp/named-loops-1.c
  243b5765e9ba584cad4ab49b8d11f2c4  gcc/testsuite/gcc.dg/gomp/named-loops-2.c
  2d3a1739d0f68eb616c52754dd6292ae  gcc/testsuite/gcc.dg/gomp/nestedfn-1.c
! 13f30c2066a7cf4479908d3d67d32fe3  gcc/testsuite/gcc.dg/gomp/nesting-1.c
  b8a262a38fc2393baa245eefd42cb523  gcc/testsuite/gcc.dg/gomp/notify-new-function-2.c
  42242e5f88e1b5f1a49c9fb6ca8bd64a  gcc/testsuite/gcc.dg/gomp/notify-new-function-3.c
  33fdbcf36749189e365ff8da25f16925  gcc/testsuite/gcc.dg/gomp/notify-new-function.c
--- 54482,54504 ----
  d9604d99f8b1a6974afc5a3cab2765b3  gcc/testsuite/gcc.dg/gomp/for-8.c
  34eb86e893e0bd796aad8d236b5bc215  gcc/testsuite/gcc.dg/gomp/for-9.c
  8b04fc2a06faaa7581be43ad80531e99  gcc/testsuite/gcc.dg/gomp/gomp.exp
! ebbc854baa805bfd34a95a315f2fec38  gcc/testsuite/gcc.dg/gomp/linear-1.c
  11c71eb5733cf2b2fd8236737c95dfad  gcc/testsuite/gcc.dg/gomp/loop-1.c
  110dfd4b42962d803dd77ce77900455c  gcc/testsuite/gcc.dg/gomp/loop-2.c
  a4271cf7824f2a837486e7951ee23884  gcc/testsuite/gcc.dg/gomp/macro-1.c
  eabb0107af4ef893414bb3cef506ad03  gcc/testsuite/gcc.dg/gomp/macro-2.c
  0d468ea6d8d3343f4663748bf3bf83ac  gcc/testsuite/gcc.dg/gomp/macro-3.c
  706fb6a671ca86d26b60cc558688ef85  gcc/testsuite/gcc.dg/gomp/macro-4.c
! abe9cc810a50c25d083acf1f31acb657  gcc/testsuite/gcc.dg/gomp/map-csm-dep.c
! 5c8b0bdcf46581b6d311c7c9f2c7e6a4  gcc/testsuite/gcc.dg/gomp/master-1.c
! 87fd0cb2d893aee0d5e5833dba0b5f3d  gcc/testsuite/gcc.dg/gomp/master-2.c
! dd514aae0118659f75fd79ba54dffbc9  gcc/testsuite/gcc.dg/gomp/master-3.c
  8ec8b9b7973df31c9332b5f69c4e940d  gcc/testsuite/gcc.dg/gomp/max_vf-1.c
! 1109ad1c64c1e236bb22f8c492a6c3dd  gcc/testsuite/gcc.dg/gomp/metadirective-1.c
  27c67e32fd4b098003d0d0b5b9322420  gcc/testsuite/gcc.dg/gomp/named-loops-1.c
  243b5765e9ba584cad4ab49b8d11f2c4  gcc/testsuite/gcc.dg/gomp/named-loops-2.c
  2d3a1739d0f68eb616c52754dd6292ae  gcc/testsuite/gcc.dg/gomp/nestedfn-1.c
! ba4a4b612fe2da8d0104b8f992d036bc  gcc/testsuite/gcc.dg/gomp/nesting-1.c
  b8a262a38fc2393baa245eefd42cb523  gcc/testsuite/gcc.dg/gomp/notify-new-function-2.c
  42242e5f88e1b5f1a49c9fb6ca8bd64a  gcc/testsuite/gcc.dg/gomp/notify-new-function-3.c
  33fdbcf36749189e365ff8da25f16925  gcc/testsuite/gcc.dg/gomp/notify-new-function.c
*************** d7769c446568c18d557180c850cf3b4a  gcc/te
*** 54481,54489 ****
  f711435274df71049aa71808a78fc7a5  gcc/testsuite/gcc.dg/gomp/parallel-3.c
  d9a1f43ca6ac2a073e22bbbf243f300b  gcc/testsuite/gcc.dg/gomp/parallel-4.c
  0f7ac2e81ae2d400d52c34aa1c0b379a  gcc/testsuite/gcc.dg/gomp/pr100508.c
! 886891c0b0bbb38214a01a9e71882530  gcc/testsuite/gcc.dg/gomp/pr104517.c
  cd38ec3195ea21395e6d6950ff620410  gcc/testsuite/gcc.dg/gomp/pr104532.c
! 0c8d7b49664fa54dbd4054b13e8a3133  gcc/testsuite/gcc.dg/gomp/pr104757.c
  a633f425b4fdde0a7b6f0aa6aa2f2754  gcc/testsuite/gcc.dg/gomp/pr108435.c
  e3e4142185603ce8e378d6382feeb5b4  gcc/testsuite/gcc.dg/gomp/pr110485.c
  7d1b62adb42c340855e993cf480a19ec  gcc/testsuite/gcc.dg/gomp/pr114075.c
--- 54514,54522 ----
  f711435274df71049aa71808a78fc7a5  gcc/testsuite/gcc.dg/gomp/parallel-3.c
  d9a1f43ca6ac2a073e22bbbf243f300b  gcc/testsuite/gcc.dg/gomp/parallel-4.c
  0f7ac2e81ae2d400d52c34aa1c0b379a  gcc/testsuite/gcc.dg/gomp/pr100508.c
! b1214c5a563a503de27f1a26efe2c8d5  gcc/testsuite/gcc.dg/gomp/pr104517.c
  cd38ec3195ea21395e6d6950ff620410  gcc/testsuite/gcc.dg/gomp/pr104532.c
! 4353955ae562044ee8f04ce54dcc72d6  gcc/testsuite/gcc.dg/gomp/pr104757.c
  a633f425b4fdde0a7b6f0aa6aa2f2754  gcc/testsuite/gcc.dg/gomp/pr108435.c
  e3e4142185603ce8e378d6382feeb5b4  gcc/testsuite/gcc.dg/gomp/pr110485.c
  7d1b62adb42c340855e993cf480a19ec  gcc/testsuite/gcc.dg/gomp/pr114075.c
*************** d7b0a14ad2e9881fe4ffe9b30f36c3a8  gcc/te
*** 54505,54511 ****
  5cc6c0ce1caf9ae58fd5942e57a40a0b  gcc/testsuite/gcc.dg/gomp/pr29955.c
  c5ee594378ac792cf2fff87af7a358ea  gcc/testsuite/gcc.dg/gomp/pr29965-1.c
  884b807214b7af5973de23b25df484e2  gcc/testsuite/gcc.dg/gomp/pr29965-2.c
! 6098040ee2b261719e67beb1cd7d79b4  gcc/testsuite/gcc.dg/gomp/pr29965-3.c
  8e42dd5f80e8bc2ea521bfc0f4632d64  gcc/testsuite/gcc.dg/gomp/pr29965-4.c
  caf3f8d640964957534f8b2c392515a6  gcc/testsuite/gcc.dg/gomp/pr29965-5.c
  35ff646abf77150705de53d2e8018b6b  gcc/testsuite/gcc.dg/gomp/pr29965-6.c
--- 54538,54544 ----
  5cc6c0ce1caf9ae58fd5942e57a40a0b  gcc/testsuite/gcc.dg/gomp/pr29955.c
  c5ee594378ac792cf2fff87af7a358ea  gcc/testsuite/gcc.dg/gomp/pr29965-1.c
  884b807214b7af5973de23b25df484e2  gcc/testsuite/gcc.dg/gomp/pr29965-2.c
! ac19277214a5bb3ef428488d44668aa7  gcc/testsuite/gcc.dg/gomp/pr29965-3.c
  8e42dd5f80e8bc2ea521bfc0f4632d64  gcc/testsuite/gcc.dg/gomp/pr29965-4.c
  caf3f8d640964957534f8b2c392515a6  gcc/testsuite/gcc.dg/gomp/pr29965-5.c
  35ff646abf77150705de53d2e8018b6b  gcc/testsuite/gcc.dg/gomp/pr29965-6.c
*************** cc8041c6e88604cf0785123c6ef16e67  gcc/te
*** 54523,54529 ****
  0f030aafac8100358252c6446ec01a30  gcc/testsuite/gcc.dg/gomp/pr35738-2.c
  99adef961edcdf5b725c34919712904a  gcc/testsuite/gcc.dg/gomp/pr35738.c
  e1692d27d5d26cefebe4fc393c15fddb  gcc/testsuite/gcc.dg/gomp/pr35751.c
! ca3e6f1780ac0a60027cbe93e57cbbf1  gcc/testsuite/gcc.dg/gomp/pr35818.c
  69a2450c0fa691c572e271fe41d1b4e7  gcc/testsuite/gcc.dg/gomp/pr36790.c
  66a71e605a69356e168b6840b1cfe6f1  gcc/testsuite/gcc.dg/gomp/pr38633.c
  514cd6cfd6d72a935e5dbc2d1b3609f4  gcc/testsuite/gcc.dg/gomp/pr38676.c
--- 54556,54562 ----
  0f030aafac8100358252c6446ec01a30  gcc/testsuite/gcc.dg/gomp/pr35738-2.c
  99adef961edcdf5b725c34919712904a  gcc/testsuite/gcc.dg/gomp/pr35738.c
  e1692d27d5d26cefebe4fc393c15fddb  gcc/testsuite/gcc.dg/gomp/pr35751.c
! 9c64e09d966dc737ab1881e2c3bf0ca8  gcc/testsuite/gcc.dg/gomp/pr35818.c
  69a2450c0fa691c572e271fe41d1b4e7  gcc/testsuite/gcc.dg/gomp/pr36790.c
  66a71e605a69356e168b6840b1cfe6f1  gcc/testsuite/gcc.dg/gomp/pr38633.c
  514cd6cfd6d72a935e5dbc2d1b3609f4  gcc/testsuite/gcc.dg/gomp/pr38676.c
*************** ef3626bfd9a01c1b3e4b0d6ca7d55c1a  gcc/te
*** 54577,54583 ****
  37d75bd2c93a4769c375069e84c59ff3  gcc/testsuite/gcc.dg/gomp/pr90637.c
  7b7c5619e17caf4ff7de95c0ea515fde  gcc/testsuite/gcc.dg/gomp/pr90900.c
  05d60743092504cb97cd1b69bc287d30  gcc/testsuite/gcc.dg/gomp/pr91063.c
! ed760ac8f4b74b9e23f9f524135a1729  gcc/testsuite/gcc.dg/gomp/pr91216.c
  c5e93f26d77634fb8db0acbd556b6ce8  gcc/testsuite/gcc.dg/gomp/pr92557.c
  d3c061d3fd7dc8cf903b23054af3c7ea  gcc/testsuite/gcc.dg/gomp/pr95108.c
  da512b545678729b0d7bcd5bacb007b4  gcc/testsuite/gcc.dg/gomp/pr95315-2.c
--- 54610,54616 ----
  37d75bd2c93a4769c375069e84c59ff3  gcc/testsuite/gcc.dg/gomp/pr90637.c
  7b7c5619e17caf4ff7de95c0ea515fde  gcc/testsuite/gcc.dg/gomp/pr90900.c
  05d60743092504cb97cd1b69bc287d30  gcc/testsuite/gcc.dg/gomp/pr91063.c
! 62a91c16c4027e5bb2fa4bc829e57754  gcc/testsuite/gcc.dg/gomp/pr91216.c
  c5e93f26d77634fb8db0acbd556b6ce8  gcc/testsuite/gcc.dg/gomp/pr92557.c
  d3c061d3fd7dc8cf903b23054af3c7ea  gcc/testsuite/gcc.dg/gomp/pr95108.c
  da512b545678729b0d7bcd5bacb007b4  gcc/testsuite/gcc.dg/gomp/pr95315-2.c
*************** f027428463eb3710e7fbcd6d2994dcdc  gcc/te
*** 54598,54604 ****
  b72fe99f861779472bd3b1cf3587d478  gcc/testsuite/gcc.dg/gomp/sections-3.c
  9f60edc949854690c68fa7fb1e8b3157  gcc/testsuite/gcc.dg/gomp/sections-4.c
  3204cae0e47462621115d4cebb22d26d  gcc/testsuite/gcc.dg/gomp/sharing-1.c
! a7ac9c7250e12a3e2fa3681701b90c4f  gcc/testsuite/gcc.dg/gomp/sharing-2.c
  883a70127feb584b7b7699b066cd3ee5  gcc/testsuite/gcc.dg/gomp/sharing-3.c
  5202c32cea52b95c1af73171cd56c299  gcc/testsuite/gcc.dg/gomp/simd-1.c
  126d0fa445584b17786d97ff1868b4b2  gcc/testsuite/gcc.dg/gomp/simd-2.c
--- 54631,54637 ----
  b72fe99f861779472bd3b1cf3587d478  gcc/testsuite/gcc.dg/gomp/sections-3.c
  9f60edc949854690c68fa7fb1e8b3157  gcc/testsuite/gcc.dg/gomp/sections-4.c
  3204cae0e47462621115d4cebb22d26d  gcc/testsuite/gcc.dg/gomp/sharing-1.c
! cc9c3bf36a2258391cc3f744beab5e1f  gcc/testsuite/gcc.dg/gomp/sharing-2.c
  883a70127feb584b7b7699b066cd3ee5  gcc/testsuite/gcc.dg/gomp/sharing-3.c
  5202c32cea52b95c1af73171cd56c299  gcc/testsuite/gcc.dg/gomp/simd-1.c
  126d0fa445584b17786d97ff1868b4b2  gcc/testsuite/gcc.dg/gomp/simd-2.c
*************** c14634a323696079f49ec83c65002f01  gcc/te
*** 54611,54632 ****
  023f3c9c4c4f7d67c03b1c86eda70575  gcc/testsuite/gcc.dg/gomp/simd-clones-6.c
  90f7f3e44bd1941943388065f07a1305  gcc/testsuite/gcc.dg/gomp/simd-clones-7.c
  43a43e391e5a008c72102e34d3be01af  gcc/testsuite/gcc.dg/gomp/simd-clones-8.c
! 1965f5f6d216fb5427034f0bbe0f9f1d  gcc/testsuite/gcc.dg/gomp/sink-fold-1.c
! ad6a9027ae49be1e64cb9dd3311b1b94  gcc/testsuite/gcc.dg/gomp/sink-fold-2.c
! 9757c1f87d89d2e9c51fea96018a8f64  gcc/testsuite/gcc.dg/gomp/sink-fold-3.c
  2c7c35d918725944cf4998bb474f579d  gcc/testsuite/gcc.dg/gomp/static-chunk-size-one.c
  871d2afbf0f76e5d008f733eaf14a059  gcc/testsuite/gcc.dg/gomp/static.c
  0e4b88bcdaea3e0ec538494446e27cde  gcc/testsuite/gcc.dg/gomp/target-1.c
  3dbda1e12ff1651f658704d415f7e84f  gcc/testsuite/gcc.dg/gomp/target-2.c
  f4db87341b852ee623c705e71718a425  gcc/testsuite/gcc.dg/gomp/target-3.c
! 75d44dfc9bd2f54678db46f137d93851  gcc/testsuite/gcc.dg/gomp/target-simd-clone-1.c
! 790750059a6e05605748d80ed13b2533  gcc/testsuite/gcc.dg/gomp/target-simd-clone-2.c
! 197a8cb4f6ec466d5b1a893b782ca807  gcc/testsuite/gcc.dg/gomp/target-simd-clone-3.c
! 2001adac7fd0443995c870d016dc942c  gcc/testsuite/gcc.dg/gomp/target-simd-clone-4.c
! 3fbd6734676ad4d7e53588b62f00ad50  gcc/testsuite/gcc.dg/gomp/target-simd-clone-5.c
! a7bf6ee9fa703ae99b4686c9b2f89e6a  gcc/testsuite/gcc.dg/gomp/target-simd-clone-6.c
! 519a7ee0f368b6e5458c6dc8e908c57d  gcc/testsuite/gcc.dg/gomp/target-simd-clone-7.c
! 4194b833734d9667d0af0a863e2a97a3  gcc/testsuite/gcc.dg/gomp/target-simd-clone-8.c
  f2e9b1993ad0ade2480d28889a6b9b76  gcc/testsuite/gcc.dg/gomp/task-detach-1.c
  4741c3d5f20c56daf5979276c5b6f618  gcc/testsuite/gcc.dg/gomp/taskgroup-1.c
  b98a2bc5c4eb574a9dd2efa360dc67c3  gcc/testsuite/gcc.dg/gomp/teams-1.c
--- 54644,54665 ----
  023f3c9c4c4f7d67c03b1c86eda70575  gcc/testsuite/gcc.dg/gomp/simd-clones-6.c
  90f7f3e44bd1941943388065f07a1305  gcc/testsuite/gcc.dg/gomp/simd-clones-7.c
  43a43e391e5a008c72102e34d3be01af  gcc/testsuite/gcc.dg/gomp/simd-clones-8.c
! 98dbbd197e8c7c832cd21e157df3bf0e  gcc/testsuite/gcc.dg/gomp/sink-fold-1.c
! 30b3501cdbf4af67a36f7003998e9d4b  gcc/testsuite/gcc.dg/gomp/sink-fold-2.c
! 606fbcb4bc3e953e4f15ee070118b30f  gcc/testsuite/gcc.dg/gomp/sink-fold-3.c
  2c7c35d918725944cf4998bb474f579d  gcc/testsuite/gcc.dg/gomp/static-chunk-size-one.c
  871d2afbf0f76e5d008f733eaf14a059  gcc/testsuite/gcc.dg/gomp/static.c
  0e4b88bcdaea3e0ec538494446e27cde  gcc/testsuite/gcc.dg/gomp/target-1.c
  3dbda1e12ff1651f658704d415f7e84f  gcc/testsuite/gcc.dg/gomp/target-2.c
  f4db87341b852ee623c705e71718a425  gcc/testsuite/gcc.dg/gomp/target-3.c
! e8502240a53ed3691cccc3dfbd31284c  gcc/testsuite/gcc.dg/gomp/target-simd-clone-1.c
! 6bec24e1f2fb1a11acdc41a081184974  gcc/testsuite/gcc.dg/gomp/target-simd-clone-2.c
! 0cf064bf89a3e78761424f019fe51930  gcc/testsuite/gcc.dg/gomp/target-simd-clone-3.c
! 60e08c424f42790add8c9ca492896b3b  gcc/testsuite/gcc.dg/gomp/target-simd-clone-4.c
! 9f03362a6c45246370042a9c83e1b5e3  gcc/testsuite/gcc.dg/gomp/target-simd-clone-5.c
! b1358972fe2a10fb26da61e7d1eb740f  gcc/testsuite/gcc.dg/gomp/target-simd-clone-6.c
! 1fcb9f31332b993a1244cbb24cc39abf  gcc/testsuite/gcc.dg/gomp/target-simd-clone-7.c
! 4c762abb1d209e8caf3d872571b59130  gcc/testsuite/gcc.dg/gomp/target-simd-clone-8.c
  f2e9b1993ad0ade2480d28889a6b9b76  gcc/testsuite/gcc.dg/gomp/task-detach-1.c
  4741c3d5f20c56daf5979276c5b6f618  gcc/testsuite/gcc.dg/gomp/taskgroup-1.c
  b98a2bc5c4eb574a9dd2efa360dc67c3  gcc/testsuite/gcc.dg/gomp/teams-1.c
*************** cfedaaddfeda77968993663f7e37987f  gcc/te
*** 54693,54702 ****
  2938bd0a5bdc45475d35a26d96c71ca6  gcc/testsuite/gcc.dg/gomp/workshare-reduction-52.c
  4e398d4d5909351ef9752a02f04b6f71  gcc/testsuite/gcc.dg/gomp/workshare-reduction-53.c
  19ae01668faaef04b6a995fddccb377b  gcc/testsuite/gcc.dg/gomp/workshare-reduction-54.c
! fa859d3c8dc0edd7717a5700534778a1  gcc/testsuite/gcc.dg/gomp/workshare-reduction-55.c
! dbdd021233f94e550403b75f2bdf6dd1  gcc/testsuite/gcc.dg/gomp/workshare-reduction-56.c
! de49b65eb2b8668c892c47f076f60c68  gcc/testsuite/gcc.dg/gomp/workshare-reduction-57.c
! 081e8310d38bea80390bae918c6ca77f  gcc/testsuite/gcc.dg/gomp/workshare-reduction-58.c
  aba8a8e26f208ee83ae63af77603e8c1  gcc/testsuite/gcc.dg/gomp/workshare-reduction-6.c
  b835bdff50415240205741c1ff82e34c  gcc/testsuite/gcc.dg/gomp/workshare-reduction-7.c
  c5bb6915ffe79aed2ac1d1472ee37b04  gcc/testsuite/gcc.dg/gomp/workshare-reduction-8.c
--- 54726,54735 ----
  2938bd0a5bdc45475d35a26d96c71ca6  gcc/testsuite/gcc.dg/gomp/workshare-reduction-52.c
  4e398d4d5909351ef9752a02f04b6f71  gcc/testsuite/gcc.dg/gomp/workshare-reduction-53.c
  19ae01668faaef04b6a995fddccb377b  gcc/testsuite/gcc.dg/gomp/workshare-reduction-54.c
! 747c4362af917b0027514e6d0ad5bd7b  gcc/testsuite/gcc.dg/gomp/workshare-reduction-55.c
! 78251ec49e1fd8aeac2d19dc9fe148aa  gcc/testsuite/gcc.dg/gomp/workshare-reduction-56.c
! 5baba9399f3982d1ef2ee525754b6260  gcc/testsuite/gcc.dg/gomp/workshare-reduction-57.c
! e4de04760de37e3677079032387c18e5  gcc/testsuite/gcc.dg/gomp/workshare-reduction-58.c
  aba8a8e26f208ee83ae63af77603e8c1  gcc/testsuite/gcc.dg/gomp/workshare-reduction-6.c
  b835bdff50415240205741c1ff82e34c  gcc/testsuite/gcc.dg/gomp/workshare-reduction-7.c
  c5bb6915ffe79aed2ac1d1472ee37b04  gcc/testsuite/gcc.dg/gomp/workshare-reduction-8.c
*************** f46dce055fca6bcb88a60d11a0bb710b  gcc/te
*** 55137,55143 ****
  3fcd24000493dccbffcab8d7f571db16  gcc/testsuite/gcc.dg/ifcvt-1.c
  788cdc139607df186471194c57393d9b  gcc/testsuite/gcc.dg/ifcvt-2.c
  1406d8ef80fc3e9a51abb05637775214  gcc/testsuite/gcc.dg/ifcvt-3.c
! 477601966a7000b0005de128c522827e  gcc/testsuite/gcc.dg/ifcvt-4.c
  851af7bdf70bdcebc1bbfe12c989a445  gcc/testsuite/gcc.dg/ifcvt-5.c
  18c54e879b05c8aed2d3ad8ec198fe6d  gcc/testsuite/gcc.dg/ifcvt-fabs-1.c
  9311fcd9326988cb15b467fa70d1a0de  gcc/testsuite/gcc.dg/ifelse-1.c
--- 55170,55176 ----
  3fcd24000493dccbffcab8d7f571db16  gcc/testsuite/gcc.dg/ifcvt-1.c
  788cdc139607df186471194c57393d9b  gcc/testsuite/gcc.dg/ifcvt-2.c
  1406d8ef80fc3e9a51abb05637775214  gcc/testsuite/gcc.dg/ifcvt-3.c
! be46d80022e13a076753467f8f1afcb4  gcc/testsuite/gcc.dg/ifcvt-4.c
  851af7bdf70bdcebc1bbfe12c989a445  gcc/testsuite/gcc.dg/ifcvt-5.c
  18c54e879b05c8aed2d3ad8ec198fe6d  gcc/testsuite/gcc.dg/ifcvt-fabs-1.c
  9311fcd9326988cb15b467fa70d1a0de  gcc/testsuite/gcc.dg/ifelse-1.c
*************** e7f8739287177652901843bb49b729db  gcc/te
*** 56449,56454 ****
--- 56482,56488 ----
  3fb15b43f77e2c2c948a15f8437476e4  gcc/testsuite/gcc.dg/pic-3.c
  08d8bf606d2349825433d688bb7b8259  gcc/testsuite/gcc.dg/pic-4.c
  1310eec5a596f6f3f1034c18543936a3  gcc/testsuite/gcc.dg/pic-macro-define.c
+ b64f1adf308cadbde122769c24e1f10a  gcc/testsuite/gcc.dg/pid_t-1.c
  de302da8d7737a4e96d474e241080339  gcc/testsuite/gcc.dg/pie-1.c
  d3b785ef540cb4e67cd67fada4080a39  gcc/testsuite/gcc.dg/pie-2.c
  a1104a3ff24cf683d1a597e325c9f573  gcc/testsuite/gcc.dg/pie-3.c
*************** d9f2439f176b4f73afa0c30baa468855  gcc/te
*** 56459,56466 ****
  72712f41dcc921ba1827000fc0809a9c  gcc/testsuite/gcc.dg/pie-link.c
  000d3a6c8dca7e54f5be771190d10f29  gcc/testsuite/gcc.dg/pie-static-1.c
  be052bceddbf752586b645bc9e048e9c  gcc/testsuite/gcc.dg/pie-static-2.c
! 154b6155768b0baf7501f9edb8cf71f3  gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc
! ac8e52344745ed81a70289dfea4373ae  gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc
  8450397c6942c5205a8e265937e9346e  gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc
  8ba86f09885dba8323cde7c0af6947b2  gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc
  cb4eac35bee8576a953631c035c2ff66  gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c
--- 56493,56500 ----
  72712f41dcc921ba1827000fc0809a9c  gcc/testsuite/gcc.dg/pie-link.c
  000d3a6c8dca7e54f5be771190d10f29  gcc/testsuite/gcc.dg/pie-static-1.c
  be052bceddbf752586b645bc9e048e9c  gcc/testsuite/gcc.dg/pie-static-2.c
! 43d34642a14f5834377992b8d9379c96  gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc
! d0bd650c73d5175e37c91cc539731331  gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc
  8450397c6942c5205a8e265937e9346e  gcc/testsuite/gcc.dg/plugin/analyzer_kernel_plugin.cc
  8ba86f09885dba8323cde7c0af6947b2  gcc/testsuite/gcc.dg/plugin/analyzer_known_fns_plugin.cc
  cb4eac35bee8576a953631c035c2ff66  gcc/testsuite/gcc.dg/plugin/copy_from_user-1.c
*************** c1994b3e108cc9c7befbc1b7c93a70ff  gcc/te
*** 56572,56581 ****
  753ce59b3b9a821c8c22798923a3318b  gcc/testsuite/gcc.dg/plugin/infoleak-1.c
  aa4d22479edd9960ca259055206dfce9  gcc/testsuite/gcc.dg/plugin/infoleak-2.c
  1696da0ec083332fc30ee3ce442eb320  gcc/testsuite/gcc.dg/plugin/infoleak-3.c
! d97822eab6d3cec4a429124e0ebf4dad  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c
! bbcd0beb988096a6d621125f04655e2b  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c
  8c9984262c9a8cd64eaa5696bad121c3  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2014-1446-1.c
! b05ae8584845daeb59ab2a2d859880ad  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c
  5778f2611e7404e19c858b6e099759b1  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18550-1.c
  1bf6e41b018b4dbc083435bfec8eca81  gcc/testsuite/gcc.dg/plugin/infoleak-antipatterns-1.c
  f22c386d32e16704e73e0ad284bf1ad1  gcc/testsuite/gcc.dg/plugin/infoleak-fixit-1.c
--- 56606,56615 ----
  753ce59b3b9a821c8c22798923a3318b  gcc/testsuite/gcc.dg/plugin/infoleak-1.c
  aa4d22479edd9960ca259055206dfce9  gcc/testsuite/gcc.dg/plugin/infoleak-2.c
  1696da0ec083332fc30ee3ce442eb320  gcc/testsuite/gcc.dg/plugin/infoleak-3.c
! d5c6dcb1b5f5d52db1a286f730305c8e  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c
! 08631c1ce9adb711aecccccca9a2fe20  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c
  8c9984262c9a8cd64eaa5696bad121c3  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2014-1446-1.c
! 3a6523c02c168e01602a18a3b7fda221  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c
  5778f2611e7404e19c858b6e099759b1  gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18550-1.c
  1bf6e41b018b4dbc083435bfec8eca81  gcc/testsuite/gcc.dg/plugin/infoleak-antipatterns-1.c
  f22c386d32e16704e73e0ad284bf1ad1  gcc/testsuite/gcc.dg/plugin/infoleak-fixit-1.c
*************** ae7c56102b7bab6c5480c80a081567d9  gcc/te
*** 56680,56685 ****
--- 56714,56720 ----
  cb2a225c4939c4a047c2574e784b9149  gcc/testsuite/gcc.dg/pointer-counted-by-7.c
  bf966c5170e7d5a196dbbed9b62c61d6  gcc/testsuite/gcc.dg/pointer-counted-by-8.c
  60dd9bdbbdf292a0cb9bf8d4a0cadb6a  gcc/testsuite/gcc.dg/pointer-counted-by-9.c
+ d181d80816e4d3b133dc856fe8132a79  gcc/testsuite/gcc.dg/pointer-counted-by-pr122982.c
  fab3b399e4fdba4426e862fa979f170a  gcc/testsuite/gcc.dg/pointer-counted-by.c
  098a9eb0b304a107d7e16d34e57694dd  gcc/testsuite/gcc.dg/pointer-range-check-1.c
  f5883b8a2323e7318237e3750e037d52  gcc/testsuite/gcc.dg/pointer-range-check-2.c
*************** c43dd17628b8fb1f84264b202bffe1c1  gcc/te
*** 57318,57323 ****
--- 57353,57359 ----
  a0e82361440276cacba8161b406fa08c  gcc/testsuite/gcc.dg/pr121619.c
  4a0b062157a946d90ff3c34224ea0c66  gcc/testsuite/gcc.dg/pr121663.c
  596e137d1ef1fc5f142c61692ba512ae  gcc/testsuite/gcc.dg/pr121678.c
+ bf675da3de2d4a46664269703dd05797  gcc/testsuite/gcc.dg/pr121852.c
  6fcab1257c633aee2384f0d8fa3854e0  gcc/testsuite/gcc.dg/pr121921-1.c
  1268172e76401131acc77ad9fccb845f  gcc/testsuite/gcc.dg/pr121987.c
  3675df2622072bf0e5cccbf94e93a50f  gcc/testsuite/gcc.dg/pr122126_vextr.c
*************** afbbdc9160c7bbb463b8a9a0ccecc1ec  gcc/te
*** 57328,57333 ****
--- 57364,57370 ----
  7344e7d40edaaaf0a7feba4fc50f3e85  gcc/testsuite/gcc.dg/pr122898.c
  acdecc3711a0a56635d3de4e2064206c  gcc/testsuite/gcc.dg/pr122947.c
  9f4094b7196b5eab8c79608995a96efc  gcc/testsuite/gcc.dg/pr122991.c
+ 9fcb8913b9a18055b2a811284d59780e  gcc/testsuite/gcc.dg/pr123018.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** a9069345cbc40d488766c1fbf34c5555  gcc/te
*** 59523,59528 ****
--- 59560,59566 ----
  15525cb0069579146b25b83c9e5e7bcb  gcc/testsuite/gcc.dg/rtl/i386/vector_eq-3.c
  0fad692089013e1244e2ad3e5560e613  gcc/testsuite/gcc.dg/rtl/powerpc/move_compare_peephole_32.c
  67d911dae09d634dcf74fac029f1d2e6  gcc/testsuite/gcc.dg/rtl/powerpc/move_compare_peephole_64.c
+ 663a7efc837a7d07fae71898812629fa  gcc/testsuite/gcc.dg/rtl/powerpc/test-frame-related.c
  99f400c18a1446b31c6ca0a7cb30c35c  gcc/testsuite/gcc.dg/rtl/rtl.exp
  75dd0c3d9daa8abdd58a0d0eaf55bd9e  gcc/testsuite/gcc.dg/rtl/test.c
  555898d2432906a81b3aa66cb112a450  gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c
*************** e177bd4a7f3cb433b33b2c59e4e0af3d  gcc/te
*** 59608,59614 ****
  3294e4a5b74b99e369aaf413c51c9d9a  gcc/testsuite/gcc.dg/sibcall-1.c
  85669fc6c7689b5f5969e64fcf9cfade  gcc/testsuite/gcc.dg/sibcall-10.c
  2c3c94a61ed7b9f075ac496625f3df59  gcc/testsuite/gcc.dg/sibcall-11.c
! ac450aef065e56a1638882d4941fdb1f  gcc/testsuite/gcc.dg/sibcall-12.c
  4475ace1c55af8932ec4fb580e690e52  gcc/testsuite/gcc.dg/sibcall-2.c
  9271d47e06ad7cb2c71a2e4edebb514c  gcc/testsuite/gcc.dg/sibcall-3.c
  19ab1b11d16d0636c8e134bc34b747b7  gcc/testsuite/gcc.dg/sibcall-4.c
--- 59646,59652 ----
  3294e4a5b74b99e369aaf413c51c9d9a  gcc/testsuite/gcc.dg/sibcall-1.c
  85669fc6c7689b5f5969e64fcf9cfade  gcc/testsuite/gcc.dg/sibcall-10.c
  2c3c94a61ed7b9f075ac496625f3df59  gcc/testsuite/gcc.dg/sibcall-11.c
! 32fa26d1e66fffb29d5b6d0e97431379  gcc/testsuite/gcc.dg/sibcall-12.c
  4475ace1c55af8932ec4fb580e690e52  gcc/testsuite/gcc.dg/sibcall-2.c
  9271d47e06ad7cb2c71a2e4edebb514c  gcc/testsuite/gcc.dg/sibcall-3.c
  19ab1b11d16d0636c8e134bc34b747b7  gcc/testsuite/gcc.dg/sibcall-4.c
*************** a4e7912ba45315f15f41a05f18653c74  gcc/te
*** 59844,59850 ****
  3eb20a070e129b9f71ad84ec481fe8df  gcc/testsuite/gcc.dg/stack-layout-1.c
  d5355400a72402c33417096b04dc2a5d  gcc/testsuite/gcc.dg/stack-layout-2.c
  07e6a63f5ceb593a5ec396e028fd341c  gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c
! d7d96c96eae9d4af4a4b119c7717045a  gcc/testsuite/gcc.dg/stack-usage-1.c
  198c846924d490e8eba17829d0caf626  gcc/testsuite/gcc.dg/stack-usage-2.c
  abeae7e4a2120581a50d5eb7cbe3929d  gcc/testsuite/gcc.dg/stackprotectexplicit1.c
  6e9664759f9a2a278adb8639495ec2e1  gcc/testsuite/gcc.dg/stdckdint-1.c
--- 59882,59888 ----
  3eb20a070e129b9f71ad84ec481fe8df  gcc/testsuite/gcc.dg/stack-layout-1.c
  d5355400a72402c33417096b04dc2a5d  gcc/testsuite/gcc.dg/stack-layout-2.c
  07e6a63f5ceb593a5ec396e028fd341c  gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c
! 2fc7a54e6e7a910c04f974413edfe394  gcc/testsuite/gcc.dg/stack-usage-1.c
  198c846924d490e8eba17829d0caf626  gcc/testsuite/gcc.dg/stack-usage-2.c
  abeae7e4a2120581a50d5eb7cbe3929d  gcc/testsuite/gcc.dg/stackprotectexplicit1.c
  6e9664759f9a2a278adb8639495ec2e1  gcc/testsuite/gcc.dg/stdckdint-1.c
*************** ac2cd2a457dc103b2a7239970846ea88  gcc/te
*** 60078,60083 ****
--- 60116,60122 ----
  9407bf5ea124fe12c7b85eb64edd26d4  gcc/testsuite/gcc.dg/tls/alias-1.c
  d3ba9e4ca8835a4c881d04331bc19e75  gcc/testsuite/gcc.dg/tls/alpha-1.c
  1cc4a80c9088f4e403b8d48504f712c5  gcc/testsuite/gcc.dg/tls/asm-1.c
+ 94c282565479205ba758284ad8a37be1  gcc/testsuite/gcc.dg/tls/data-sections-1.c
  b05b43d75435d93d400ab9deb87b4827  gcc/testsuite/gcc.dg/tls/debug-1.c
  afbcc1fa79a9ce40765e7481e29d01d6  gcc/testsuite/gcc.dg/tls/diag-1.c
  00fa7425da9b4f106f06d9cd99291179  gcc/testsuite/gcc.dg/tls/diag-2.c
*************** a25e6d22e39772bf36ad7e281b7e57e8  gcc/te
*** 60126,60131 ****
--- 60165,60171 ----
  796d5642fd9a5bf2871955a7f51a2b2c  gcc/testsuite/gcc.dg/tls/section-1.c
  b6230b3887f6b80a34081478f9506950  gcc/testsuite/gcc.dg/tls/section-2.c
  bd750cfcc2981be8695d1ba87cf4e02d  gcc/testsuite/gcc.dg/tls/struct-1.c
+ ba73729a8d83a7b4b93fafded221f84a  gcc/testsuite/gcc.dg/tls/struct-2.c
  3ab1a16951cdbfaf172055375ee208b1  gcc/testsuite/gcc.dg/tls/thr-cse-1.c
  f9dca9ba3163a454b601045eb9567803  gcc/testsuite/gcc.dg/tls/thr-init-1.c
  622c1bed70cf0fe0a74c0a5ed3602602  gcc/testsuite/gcc.dg/tls/thr-init-2.c
*************** d9ab318bf88df260c040cad6b5bc8c90  gcc/te
*** 61128,61133 ****
--- 61168,61174 ----
  5cd6652f199c6a2d791cf78271bf9229  gcc/testsuite/gcc.dg/torture/pr122835.c
  61ae03371e683338d99762a97b9f10f9  gcc/testsuite/gcc.dg/torture/pr122847-1.c
  599ac258574b276ce3335b78a5a77da0  gcc/testsuite/gcc.dg/torture/pr122873.c
+ a72ae7e01256a00a4331a97695f441c8  gcc/testsuite/gcc.dg/torture/pr123027.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
*************** d4bd7cdc56a7f6df1ca2ea46658dbe95  gcc/te
*** 62373,62379 ****
  d31ad70bfc8235ce558d9b39802564f2  gcc/testsuite/gcc.dg/tree-ssa/20030709-2.c
  93087ac0d910d293b637cf74a4a2b224  gcc/testsuite/gcc.dg/tree-ssa/20030709-3.c
  f7a8f7e4a08e75da7f6f7a2bfe2e4ed0  gcc/testsuite/gcc.dg/tree-ssa/20030710-1.c
! 0ab9a4766e3bc780ff3e0625c20f44b9  gcc/testsuite/gcc.dg/tree-ssa/20030711-1.c
  8830cb1b7a830fcc3295a366e8f2ba8e  gcc/testsuite/gcc.dg/tree-ssa/20030711-2.c
  3597da21280192db51467fc03a0b5b40  gcc/testsuite/gcc.dg/tree-ssa/20030711-3.c
  9a91376ce1eac25ac0ccda70ab261e49  gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c
--- 62414,62420 ----
  d31ad70bfc8235ce558d9b39802564f2  gcc/testsuite/gcc.dg/tree-ssa/20030709-2.c
  93087ac0d910d293b637cf74a4a2b224  gcc/testsuite/gcc.dg/tree-ssa/20030709-3.c
  f7a8f7e4a08e75da7f6f7a2bfe2e4ed0  gcc/testsuite/gcc.dg/tree-ssa/20030710-1.c
! 55fa56b378ccbab7eb7cd3de2748f29c  gcc/testsuite/gcc.dg/tree-ssa/20030711-1.c
  8830cb1b7a830fcc3295a366e8f2ba8e  gcc/testsuite/gcc.dg/tree-ssa/20030711-2.c
  3597da21280192db51467fc03a0b5b40  gcc/testsuite/gcc.dg/tree-ssa/20030711-3.c
  9a91376ce1eac25ac0ccda70ab261e49  gcc/testsuite/gcc.dg/tree-ssa/20030714-1.c
*************** c51305b57b6a71a526e50a8fb191e467  gcc/te
*** 62763,62768 ****
--- 62804,62812 ----
  bb2f1b58a2e661687f29e9f7ec18614c  gcc/testsuite/gcc.dg/tree-ssa/cond-1.c
  f337209daba5d33fb4d0b55313bfde9e  gcc/testsuite/gcc.dg/tree-ssa/cond-bool-1.c
  3710303b0c1ebb142a604fa3af23f1af  gcc/testsuite/gcc.dg/tree-ssa/cond-bool-2.c
+ bc009876b7c6d6631a4147b81b3e22f8  gcc/testsuite/gcc.dg/tree-ssa/copy-headers-10.c
+ 8fd4daab6dbf8eb1cfcd8fd48f789cbb  gcc/testsuite/gcc.dg/tree-ssa/copy-headers-11.c
+ 278320fc185c5d86fc66245701a90aa2  gcc/testsuite/gcc.dg/tree-ssa/copy-headers-12.c
  0cf82fedd0523d48a3c11ee74277d669  gcc/testsuite/gcc.dg/tree-ssa/copy-headers-2.c
  363d3e4ac12b479eddce56ba34c2afd4  gcc/testsuite/gcc.dg/tree-ssa/copy-headers-3.c
  a0f533cf1734bcf6ffb5fc5a84378862  gcc/testsuite/gcc.dg/tree-ssa/copy-headers-4.c
*************** a0fbf3c748cab32ce67837bafd594ee5  gcc/te
*** 62929,62936 ****
  92c19b6c66be5177d45c3de598c5ce47  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c
  c4778a5d167ea622bf99df287c4bd701  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11b.c
  c177f823491b23ed671dd72cae6bdd38  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11c.c
! 981ec8a8f9969e2f4fb9ade9b962de95  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c
! 5ae2c5d6d98bb28c830c4edfe000bf66  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c
  90512bbeacddcca66fd3984243eb5137  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c
  1243b1220ad3e805f667b23dcb37b04a  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
  05e95b989cfdf6357a178aa625f98417  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c
--- 62973,62980 ----
  92c19b6c66be5177d45c3de598c5ce47  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11a.c
  c4778a5d167ea622bf99df287c4bd701  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11b.c
  c177f823491b23ed671dd72cae6bdd38  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11c.c
! 5831c731ed57952618b9e96fb519e5c8  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c
! db4cf86d4c6944262e0e00dd03b29ace  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c
  90512bbeacddcca66fd3984243eb5137  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c
  1243b1220ad3e805f667b23dcb37b04a  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
  05e95b989cfdf6357a178aa625f98417  gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c
*************** a2fced1270cbdc50e78585c0f2078558  gcc/te
*** 63696,63701 ****
--- 63740,63746 ----
  e229772ee53d3e2888b309d217fc8ce6  gcc/testsuite/gcc.dg/tree-ssa/pr45397.c
  592ff825eb1ae28f2cc9fc5efa4063f8  gcc/testsuite/gcc.dg/tree-ssa/pr45427.c
  ef6ec480a985cb16007d515286369fd3  gcc/testsuite/gcc.dg/tree-ssa/pr46076.c
+ 46c4d3001ec488a2e9991465465c8c84  gcc/testsuite/gcc.dg/tree-ssa/pr46555.c
  2dee61dac00605930a2ca04d021577af  gcc/testsuite/gcc.dg/tree-ssa/pr47059.c
  e79e571a7bf87c1c43e941c3999280f2  gcc/testsuite/gcc.dg/tree-ssa/pr47286.c
  97fe9c848e0059a42c793036887ac8ec  gcc/testsuite/gcc.dg/tree-ssa/pr47392.c
*************** dbb3bd52ee698a572581470fc02636bb  gcc/te
*** 63887,63894 ****
  6b2bacdf2b2223684a18611dbdc1db7f  gcc/testsuite/gcc.dg/tree-ssa/pr83141.c
  54094f112bf7286fa8dbc811329e939e  gcc/testsuite/gcc.dg/tree-ssa/pr83198.c
  8477b237f09dca3e7328e74d93078e60  gcc/testsuite/gcc.dg/tree-ssa/pr83329.c
! 8652ed1033966113cc8205b0a18d9462  gcc/testsuite/gcc.dg/tree-ssa/pr83403-1.c
! 1b9a59818728456c21d559793ead15f3  gcc/testsuite/gcc.dg/tree-ssa/pr83403-2.c
  5b03cd4f2ede1565fa5509924793e88f  gcc/testsuite/gcc.dg/tree-ssa/pr83403.h
  47d8a98b2d47b4961be0d43f9a0310fb  gcc/testsuite/gcc.dg/tree-ssa/pr83501.c
  c95f9346fdf91a2af21b609136ce6e2b  gcc/testsuite/gcc.dg/tree-ssa/pr83648-2.c
--- 63932,63939 ----
  6b2bacdf2b2223684a18611dbdc1db7f  gcc/testsuite/gcc.dg/tree-ssa/pr83141.c
  54094f112bf7286fa8dbc811329e939e  gcc/testsuite/gcc.dg/tree-ssa/pr83198.c
  8477b237f09dca3e7328e74d93078e60  gcc/testsuite/gcc.dg/tree-ssa/pr83329.c
! b748edd5e869748f3b23d39b8ae877ce  gcc/testsuite/gcc.dg/tree-ssa/pr83403-1.c
! 20996473f72513c3694d0eb8ee4560ea  gcc/testsuite/gcc.dg/tree-ssa/pr83403-2.c
  5b03cd4f2ede1565fa5509924793e88f  gcc/testsuite/gcc.dg/tree-ssa/pr83403.h
  47d8a98b2d47b4961be0d43f9a0310fb  gcc/testsuite/gcc.dg/tree-ssa/pr83501.c
  c95f9346fdf91a2af21b609136ce6e2b  gcc/testsuite/gcc.dg/tree-ssa/pr83648-2.c
*************** d2b36be7e59029cef1dd2fecf866de62  gcc/te
*** 65994,65999 ****
--- 66039,66045 ----
  72763d9273f88d0ae6d2adb1c7239efb  gcc/testsuite/gcc.dg/vect/pr122850.c
  ae7dd7b535828dd877ea453ce08b1b4b  gcc/testsuite/gcc.dg/vect/pr122855.c
  13a0e19b576c184d6a3d2a5e046b1d77  gcc/testsuite/gcc.dg/vect/pr122969.c
+ 1a89666cdf0f2352dc6a3b60a35d5526  gcc/testsuite/gcc.dg/vect/pr123038.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
*************** e86e5429216f0575dccdbd37b55c1d2f  gcc/te
*** 66694,66700 ****
  b88f0d8217846f39fb7138984d5ddf24  gcc/testsuite/gcc.dg/vect/vect-11a.c
  e84f9b903393cfff2edd99b358cb865a  gcc/testsuite/gcc.dg/vect/vect-12.c
  95f25cab76044b57a520d91c3ba37cff  gcc/testsuite/gcc.dg/vect/vect-120.c
! 266369f9048f1fb1639742a63dff3a04  gcc/testsuite/gcc.dg/vect/vect-121.c
  431235f3577c15265e729e9e747c2bf1  gcc/testsuite/gcc.dg/vect/vect-122.c
  eb957e8021e48e5316de303f90acf93d  gcc/testsuite/gcc.dg/vect/vect-123.c
  17e1fd733b776ac37fe82aa4e0e672c7  gcc/testsuite/gcc.dg/vect/vect-124.c
--- 66740,66746 ----
  b88f0d8217846f39fb7138984d5ddf24  gcc/testsuite/gcc.dg/vect/vect-11a.c
  e84f9b903393cfff2edd99b358cb865a  gcc/testsuite/gcc.dg/vect/vect-12.c
  95f25cab76044b57a520d91c3ba37cff  gcc/testsuite/gcc.dg/vect/vect-120.c
! 4e7def8503d10451991de80aa9396935  gcc/testsuite/gcc.dg/vect/vect-121.c
  431235f3577c15265e729e9e747c2bf1  gcc/testsuite/gcc.dg/vect/vect-122.c
  eb957e8021e48e5316de303f90acf93d  gcc/testsuite/gcc.dg/vect/vect-123.c
  17e1fd733b776ac37fe82aa4e0e672c7  gcc/testsuite/gcc.dg/vect/vect-124.c
*************** e15c9b03d8e1d3a7a5ee1c79b19ba163  gcc/te
*** 67500,67506 ****
  d8b650e8ad6c5d4182b48acc7bced0d5  gcc/testsuite/gcc.dg/vect/vect-simd-clone-12a.c
  60af91149238db9ff77ec6956d1e63e8  gcc/testsuite/gcc.dg/vect/vect-simd-clone-13.c
  a81a97f4a56c119cab9c8d7bdf895b21  gcc/testsuite/gcc.dg/vect/vect-simd-clone-14.c
! 17860616151d9700d7693707e8b6be2b  gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c
  b0cb1e21e14035b1194c4f3f4e68becc  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
  c36c3ad97cfbf1be43ad8307f7b3eba0  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16b.c
  235df25db312428ee0327cc99566c491  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c
--- 67546,67552 ----
  d8b650e8ad6c5d4182b48acc7bced0d5  gcc/testsuite/gcc.dg/vect/vect-simd-clone-12a.c
  60af91149238db9ff77ec6956d1e63e8  gcc/testsuite/gcc.dg/vect/vect-simd-clone-13.c
  a81a97f4a56c119cab9c8d7bdf895b21  gcc/testsuite/gcc.dg/vect/vect-simd-clone-14.c
! 30e6b39032aa9fdb4085633c47d10d22  gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c
  b0cb1e21e14035b1194c4f3f4e68becc  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16.c
  c36c3ad97cfbf1be43ad8307f7b3eba0  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16b.c
  235df25db312428ee0327cc99566c491  gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c
*************** fd8128a2ace2daef0e57c5d400699061  gcc/te
*** 69825,69830 ****
--- 69871,69877 ----
  00a887e152d5697873b564b81bde2621  gcc/testsuite/gcc.target/aarch64/pr122190.c
  79403b7eced8101bc36bd5d2168fe88b  gcc/testsuite/gcc.target/aarch64/pr122675-1.c
  43f64e2ecaed3e7e114e33394cdb9066  gcc/testsuite/gcc.target/aarch64/pr122763.c
+ b15614b849a2403ba76800ef1356aab5  gcc/testsuite/gcc.target/aarch64/pr123026.c
  9adb42733d9f5e2b1f2dbb364b62100d  gcc/testsuite/gcc.target/aarch64/pr37780_1.c
  e668fb9e0d32efadd671247467dc90db  gcc/testsuite/gcc.target/aarch64/pr58460.c
  9023f817c07ddec673c5b546525fc184  gcc/testsuite/gcc.target/aarch64/pr60034.c
*************** dd3e101cb045787be845e9304a8e7712  gcc/te
*** 74641,74647 ****
  4926ec7d3490e08069b61317f82b1b8a  gcc/testsuite/gcc.target/aarch64/sve/pfalse-reduction.c
  3814331ee6720cedc5a8dfcac60d00cd  gcc/testsuite/gcc.target/aarch64/sve/pfalse-reduction_wide.c
  f39127ce179dc24aa6d22b4e592f8aea  gcc/testsuite/gcc.target/aarch64/sve/pfalse-shift_right_imm.c
! c8a2e98f22c98163c6c8effa275cae7c  gcc/testsuite/gcc.target/aarch64/sve/pfalse-store.c
  21411e023bc24bbb15125db9398cebfb  gcc/testsuite/gcc.target/aarch64/sve/pfalse-store_scatter_index.c
  f07c3cdd899cd5b59fde4f3d94e83812  gcc/testsuite/gcc.target/aarch64/sve/pfalse-store_scatter_offset.c
  d599ad800782107a46820288dae6e455  gcc/testsuite/gcc.target/aarch64/sve/pfalse-storexn.c
--- 74688,74694 ----
  4926ec7d3490e08069b61317f82b1b8a  gcc/testsuite/gcc.target/aarch64/sve/pfalse-reduction.c
  3814331ee6720cedc5a8dfcac60d00cd  gcc/testsuite/gcc.target/aarch64/sve/pfalse-reduction_wide.c
  f39127ce179dc24aa6d22b4e592f8aea  gcc/testsuite/gcc.target/aarch64/sve/pfalse-shift_right_imm.c
! a0ddefef0f204efc6871d2d019fd2905  gcc/testsuite/gcc.target/aarch64/sve/pfalse-store.c
  21411e023bc24bbb15125db9398cebfb  gcc/testsuite/gcc.target/aarch64/sve/pfalse-store_scatter_index.c
  f07c3cdd899cd5b59fde4f3d94e83812  gcc/testsuite/gcc.target/aarch64/sve/pfalse-store_scatter_offset.c
  d599ad800782107a46820288dae6e455  gcc/testsuite/gcc.target/aarch64/sve/pfalse-storexn.c
*************** fc947f34726683e647d69ddeb686b4f9  gcc/te
*** 83486,83492 ****
  565bf3b608d46ffa478cea7f71da94ce  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtb-2.c
  c17a573d014dc354a740be9a96f48947  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtd-1.c
  ad6db12610471bd4d5ac8d7b1b90b967  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtd-2.c
! 529dcc4c431a68f336d274cae9671b49  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c
  4adf23c504409e09a11479940c07d0e8  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-2.c
  493a948add64fe46ddf03688cf9a2468  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtw-1.c
  c36ee3dc66e482b82a15cc57b299140d  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtw-2.c
--- 83533,83539 ----
  565bf3b608d46ffa478cea7f71da94ce  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtb-2.c
  c17a573d014dc354a740be9a96f48947  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtd-1.c
  ad6db12610471bd4d5ac8d7b1b90b967  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtd-2.c
! c8ff8ee1fa8018e49f3fe244068310eb  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c
  4adf23c504409e09a11479940c07d0e8  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-2.c
  493a948add64fe46ddf03688cf9a2468  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtw-1.c
  c36ee3dc66e482b82a15cc57b299140d  gcc/testsuite/gcc.target/i386/avx2-vpcmpgtw-2.c
*************** d2234ab09253f045697088ae34493c42  gcc/te
*** 87309,87315 ****
  5a3d613b241b3e2c5bec4225d8e6060a  gcc/testsuite/gcc.target/i386/large-frame.c
  4a38b7116c2a109e1be6a1dc98e10a3e  gcc/testsuite/gcc.target/i386/large-size-array-3.c
  0b8a2da369539507851e8622ecfe9930  gcc/testsuite/gcc.target/i386/lea-2.c
! 0116a6e322fe7211c03b04170bb1214b  gcc/testsuite/gcc.target/i386/lea-3.c
  770c226bef6f53eea20210a705e96ef4  gcc/testsuite/gcc.target/i386/lea.c
  3e916468dde4fcc2483713703f478fcb  gcc/testsuite/gcc.target/i386/libcall-1.c
  b7a45b4fc6c8c2589a7335cf26c2170c  gcc/testsuite/gcc.target/i386/local.c
--- 87356,87363 ----
  5a3d613b241b3e2c5bec4225d8e6060a  gcc/testsuite/gcc.target/i386/large-frame.c
  4a38b7116c2a109e1be6a1dc98e10a3e  gcc/testsuite/gcc.target/i386/large-size-array-3.c
  0b8a2da369539507851e8622ecfe9930  gcc/testsuite/gcc.target/i386/lea-2.c
! f4ed896bb9835e6df92207441148aba1  gcc/testsuite/gcc.target/i386/lea-3.c
! b22058fee49c4505dbfaaa8e44f8eb56  gcc/testsuite/gcc.target/i386/lea-4.c
  770c226bef6f53eea20210a705e96ef4  gcc/testsuite/gcc.target/i386/lea.c
  3e916468dde4fcc2483713703f478fcb  gcc/testsuite/gcc.target/i386/libcall-1.c
  b7a45b4fc6c8c2589a7335cf26c2170c  gcc/testsuite/gcc.target/i386/local.c
*************** bbd4316e9550f452c0b86cf4e3ecf4a8  gcc/te
*** 88087,88094 ****
  324d64685ac24a3673ae04df4a898f6b  gcc/testsuite/gcc.target/i386/pr106038-1.c
  e1526b4760d054549a455444c35997de  gcc/testsuite/gcc.target/i386/pr106053.c
  40ab3593bfaa70f993c029ce56e9ae68  gcc/testsuite/gcc.target/i386/pr106060-1.c
! 555bdd6c2a5c496c9428574a2fae4506  gcc/testsuite/gcc.target/i386/pr106060-2.c
! 1d4aae923c5c6623353e71f7fd126355  gcc/testsuite/gcc.target/i386/pr106060-3.c
  a81b000946ef8fad4e273c7209987f99  gcc/testsuite/gcc.target/i386/pr106095.c
  7cb073c67b48920056a7708378cc97d8  gcc/testsuite/gcc.target/i386/pr106122.c
  2d54c8c3f54676aee89848132817019f  gcc/testsuite/gcc.target/i386/pr106231-1.c
--- 88135,88142 ----
  324d64685ac24a3673ae04df4a898f6b  gcc/testsuite/gcc.target/i386/pr106038-1.c
  e1526b4760d054549a455444c35997de  gcc/testsuite/gcc.target/i386/pr106053.c
  40ab3593bfaa70f993c029ce56e9ae68  gcc/testsuite/gcc.target/i386/pr106060-1.c
! db4c0429f3849e92a97358dd999effe6  gcc/testsuite/gcc.target/i386/pr106060-2.c
! 4d6040b4efe9721902384beb5e0ce209  gcc/testsuite/gcc.target/i386/pr106060-3.c
  a81b000946ef8fad4e273c7209987f99  gcc/testsuite/gcc.target/i386/pr106095.c
  7cb073c67b48920056a7708378cc97d8  gcc/testsuite/gcc.target/i386/pr106122.c
  2d54c8c3f54676aee89848132817019f  gcc/testsuite/gcc.target/i386/pr106231-1.c
*************** ea3bd3c87f1bfab3ecd4b10938603f3e  gcc/te
*** 88565,88570 ****
--- 88613,88619 ----
  26d68c5cba57817989670af4634fe936  gcc/testsuite/gcc.target/i386/pr121208-2b.c
  d4ebe08b4cb963582547d8bb5712e712  gcc/testsuite/gcc.target/i386/pr121208-3a.c
  5064c3ab2b92e2f20dcd604d557d738c  gcc/testsuite/gcc.target/i386/pr121208-3b.c
+ 321ee1eab147503f464757be23aa19a6  gcc/testsuite/gcc.target/i386/pr121230.c
  12e796120a8d76792772ddd159f57f3f  gcc/testsuite/gcc.target/i386/pr121274.c
  9e5e7825e0736b7812bd1fc447f5443f  gcc/testsuite/gcc.target/i386/pr121303.c
  d776a3b50c6898b016b55e83ce09a8f1  gcc/testsuite/gcc.target/i386/pr121410.c
*************** b5fef8fb540e17f32442a50d6ee40f1e  gcc/te
*** 88636,88641 ****
--- 88685,88691 ----
  93c2651b636b33af98942b4d04ed3a85  gcc/testsuite/gcc.target/i386/pr122534.c
  609faa828d84f786709fd1c4f7c03431  gcc/testsuite/gcc.target/i386/pr122598.c
  21f548f1c28eff738ee89a3a4e6abaa0  gcc/testsuite/gcc.target/i386/pr122675-1.c
+ 68c5cb935b4b7d76ed31899761e6b756  gcc/testsuite/gcc.target/i386/pr123027.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
*************** a04043a4ea34632928d0e9f94e464533  gcc/te
*** 91629,91635 ****
  75207fad1f58c73a9ea0045ffa247e39  gcc/testsuite/gcc.target/i386/vect-reduc-1.c
  0f9fc194c0bd731306645fe06259feae  gcc/testsuite/gcc.target/i386/vect-reduc-2.c
  a82a9d393bb05c8976c4e48d693bd432  gcc/testsuite/gcc.target/i386/vect-shiftv4qi-2.c
! 2157d69bf76021bc632167bbef232467  gcc/testsuite/gcc.target/i386/vect-shiftv4qi.c
  100510265df3e2a89528c0ac304256ad  gcc/testsuite/gcc.target/i386/vect-shiftv8qi-2.c
  a07d241b6e589c70ab350c7f9a3cd2f4  gcc/testsuite/gcc.target/i386/vect-shiftv8qi.c
  de36035a6b74d9e9cabfaa8cfb15f288  gcc/testsuite/gcc.target/i386/vect-signbitf.c
--- 91679,91685 ----
  75207fad1f58c73a9ea0045ffa247e39  gcc/testsuite/gcc.target/i386/vect-reduc-1.c
  0f9fc194c0bd731306645fe06259feae  gcc/testsuite/gcc.target/i386/vect-reduc-2.c
  a82a9d393bb05c8976c4e48d693bd432  gcc/testsuite/gcc.target/i386/vect-shiftv4qi-2.c
! 70ce09136c23f60572b9e937e5bdcdcb  gcc/testsuite/gcc.target/i386/vect-shiftv4qi.c
  100510265df3e2a89528c0ac304256ad  gcc/testsuite/gcc.target/i386/vect-shiftv8qi-2.c
  a07d241b6e589c70ab350c7f9a3cd2f4  gcc/testsuite/gcc.target/i386/vect-shiftv8qi.c
  de36035a6b74d9e9cabfaa8cfb15f288  gcc/testsuite/gcc.target/i386/vect-signbitf.c
*************** e7cfcf35d3576cc348fad814806318e1  gcc/te
*** 91881,91894 ****
  2191695e83896188ccba1a223f3a204c  gcc/testsuite/gcc.target/ia64/versionid-2.c
  5976d0923571b4543887e7a4b23c0414  gcc/testsuite/gcc.target/ia64/visibility-1.c
  ab4a753420c7cc112326b8711285358c  gcc/testsuite/gcc.target/ia64/visibility-2.c
- fdc09cb25851254e708f2d7b35b30157  gcc/testsuite/gcc.target/loongarch/abd-lasx.c
- 9c9daf846165a43b8331181f335522dc  gcc/testsuite/gcc.target/loongarch/abd-lsx.c
- 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
  eff69bc35d048fa62601a9d8fcef96e4  gcc/testsuite/gcc.target/loongarch/attr-check-error-message.c
  6614f3555f96772a1c779329ac2439da  gcc/testsuite/gcc.target/loongarch/attr-check-error-message1.c
  5530609893948652dbab8e030453c29d  gcc/testsuite/gcc.target/loongarch/attr-check-error-message2.c
--- 91931,91936 ----
*************** f0bc17028b5d7e0015e6c97765168468  gcc/te
*** 91899,92119 ****
  b802a624eca3aa681adda2c112397671  gcc/testsuite/gcc.target/loongarch/attr-check-error-message7.c
  7c6f1e4fec786dd470ff9c2e2d00b6c7  gcc/testsuite/gcc.target/loongarch/attr-check-error-message8.c
  0b172e8801591f3d7a57c5fe320ca949  gcc/testsuite/gcc.target/loongarch/attr-check-error-message9.c
- 9f6a0067cf273ede4ba33d3824d023ff  gcc/testsuite/gcc.target/loongarch/attr-model-1.c
- 432baf56ded24535d315bd2e867a8be3  gcc/testsuite/gcc.target/loongarch/attr-model-2.c
- a7210513dd89b8e683a00184ee4478a4  gcc/testsuite/gcc.target/loongarch/attr-model-3.c
- 9d4f972a3175f736a746ae031fb25e7a  gcc/testsuite/gcc.target/loongarch/attr-model-4.c
- 02f1973aec4f57a84c09f2b6bc6eaf79  gcc/testsuite/gcc.target/loongarch/attr-model-5.c
- f9bd26f98b04e99789925370214a2a06  gcc/testsuite/gcc.target/loongarch/attr-model-diag.c
- b0da33fc443024e77c7b605056bff4ae  gcc/testsuite/gcc.target/loongarch/attr-model-test.c
- 10a58b0c68aafdaa8704cc0ab8a37e3c  gcc/testsuite/gcc.target/loongarch/avg-ceil-lasx.c
- e6be30166471664309a52d26e4caaad6  gcc/testsuite/gcc.target/loongarch/avg-ceil-lsx.c
- 38e4e62393ad811f1092ea45b0c52b77  gcc/testsuite/gcc.target/loongarch/avg-floor-lasx.c
- a85403ab7a61ba6f56d2c3150b9f8bcb  gcc/testsuite/gcc.target/loongarch/avg-floor-lsx.c
- cd00ceeea45683383cf6ab2205253ad0  gcc/testsuite/gcc.target/loongarch/bitint-alignments.c
- 0b03847758e3e66860da475d2ea3e525  gcc/testsuite/gcc.target/loongarch/bitint-args.c
- 301277270ef16c20c5a857394b26d4e3  gcc/testsuite/gcc.target/loongarch/bitint-sizes.c
  dd4cbc8672952e717ba1b8b556dd0b49  gcc/testsuite/gcc.target/loongarch/bitwise-shift-reassoc-clobber.c
- e21ed5cafc7ccdbe2f139e72a1f702e1  gcc/testsuite/gcc.target/loongarch/bitwise-shift-reassoc.c
- 414d78d00363c1e5dd854d23224b39d7  gcc/testsuite/gcc.target/loongarch/bitwise_extend.c
- 3c95ec617ab685105bc31c59fb62dd42  gcc/testsuite/gcc.target/loongarch/bstrins-1.c
- 0ef8c999aed72455a824deb73e462b46  gcc/testsuite/gcc.target/loongarch/bstrins-2.c
- 5e8c1d5ca86d29f8a0ee54ea74388ce1  gcc/testsuite/gcc.target/loongarch/bstrins-3.c
- 70325dffd4df0df0528c85bd49dbc2f8  gcc/testsuite/gcc.target/loongarch/bstrins-4.c
  83cf2c4fac5fe267840ffbd21284e610  gcc/testsuite/gcc.target/loongarch/bstrins-5.c
  413e1e730a03ef2e6fbdbc5826f0b0b0  gcc/testsuite/gcc.target/loongarch/bstrins-6.c
- d6d72f67d9c86c49fe483871b08cc2c0  gcc/testsuite/gcc.target/loongarch/bstrpick_alsl_paired.c
  ca8ab2fdd097231be9dd3f7bfdcebb7b  gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c
- 9c31e2b0b719536d37a3b720ea2be5ad  gcc/testsuite/gcc.target/loongarch/bytepick_combine.c
- 828a53a834899f6cac56d99b1ec04d3b  gcc/testsuite/gcc.target/loongarch/bytepick_shift_128.c
- 40d027f26b529d9286fbb712ca2a7342  gcc/testsuite/gcc.target/loongarch/can_inline_1.c
- 7c4687586877a635387320076067d17b  gcc/testsuite/gcc.target/loongarch/can_inline_2.c
- a1db2bbf996d48ba701c8efc582dad3d  gcc/testsuite/gcc.target/loongarch/can_inline_3.c
- a1783fd9344ba40d5aa08ba39ced7efb  gcc/testsuite/gcc.target/loongarch/can_inline_4.c
- e7871060f6568ccbaf0d8c13ef970b0e  gcc/testsuite/gcc.target/loongarch/can_inline_5.c
- bde7ba2405e4971efe4fb79faf6333ec  gcc/testsuite/gcc.target/loongarch/can_inline_6.c
  00fd27046cb10694212b8b3aa9811204  gcc/testsuite/gcc.target/loongarch/cas-acquire.c
- 866599c9e8b38ceef59bdaefc066abd5  gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
- 69239f6c22a4bce44a4b781091a5a1dc  gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c
- d984aef61afc8f09af4c880507f6c6e6  gcc/testsuite/gcc.target/loongarch/cmodel-func-attr-1.c
- 50ab91c6f8ea866c2cdb3d64e26052d2  gcc/testsuite/gcc.target/loongarch/cmodel-pragma-attr-1.c
- 6c4891b18c6bd1154b7ea8237dc05a30  gcc/testsuite/gcc.target/loongarch/cmov_ii.c
- 9efb1cedf311f58b73a175fae939dc78  gcc/testsuite/gcc.target/loongarch/compare-both-non-zero.c
- 1faf96722faacc0ff389b62bf83b34ea  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c
- 9f48ac8201f97bdbd1ec5edcd8f2984e  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c
- 5f9e7145f8a500557b5629f8d93ad860  gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c
- d714312bcf2901d8e4e91206a319c6bb  gcc/testsuite/gcc.target/loongarch/const-double-zero-stx.c
- c794f526430241ad83fd3ca5415524f0  gcc/testsuite/gcc.target/loongarch/crc-sext.c
- 2ea39544bfe26567ec668ca7a33a8a5e  gcc/testsuite/gcc.target/loongarch/direct-extern-1.c
  b4c0f3fd4670da4309e2a028316c3c4c  gcc/testsuite/gcc.target/loongarch/direct-extern-2.c
  1dfea9ab319ea08d9da234c41d4b88e7  gcc/testsuite/gcc.target/loongarch/div-1.c
  82faab3f51217ce0561916dde4f4f801  gcc/testsuite/gcc.target/loongarch/div-2.c
  7247cc240dabb3c9514ba4b0a07278c5  gcc/testsuite/gcc.target/loongarch/div-3.c
  adc95e9ab59294f8040ec17904b73569  gcc/testsuite/gcc.target/loongarch/div-4.c
- 190971c88d51a5f97fe7426a50068cb5  gcc/testsuite/gcc.target/loongarch/div-div32.c
- a8652f3f7c02977b31b644cea4e31481  gcc/testsuite/gcc.target/loongarch/div-no-div32.c
- 6e5197f221248d28ac06cac538a2363d  gcc/testsuite/gcc.target/loongarch/divf.c
  40042c7bbd496ecf64b96ae4ff1f8fdc  gcc/testsuite/gcc.target/loongarch/eh_return-normal-return.c
- 1ae9338e5985e5f9077cdebb9c2bb358  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c
- 21b95a5d0d6bd05f5d9790ef4a88439e  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-lto.c
- 1c89c7fbe655876c33ea49ba08f726d6  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c
- 5f992d8bcd502efa354f5ce03c484ef6  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c
- bdaf93b46f27a28e6b3cb3969710f26d  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-no-anchor.c
- bb6ab9b0cdb20096c989643240d23a65  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store.c
- 34306a7899f2b0f1cb8e0ca52c24dcfe  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c
- a0974c41c2d76b1294fb1d2efc48bd2f  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c
- 45ece568055adcf16495ad5a85ce6044  gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-le-ie.c
- 692c2e25f06c20d20bed12d9a727afdf  gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-auto-tls-ld-gd.c
- 4ff34634e3c8d0e461fe9d3c5047e953  gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c
- 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
! e37813bf5456a9a963e9baeb8753628b  gcc/testsuite/gcc.target/loongarch/float-load.c
! 256bb0a8b0fff1f225a70fa39849ccd6  gcc/testsuite/gcc.target/loongarch/flogb.c
! c9d08bb72896d9b4861ce4073ec5e57f  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-1.c
! 6d758f852068391aa189ac79c376aa60  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-2.c
! f72ce6aeb8beb0eff27354c07ef71cd1  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-3.c
! ab6db876a44193a92b0a1625c65eb4e7  gcc/testsuite/gcc.target/loongarch/flt-abi-isa-4.c
  aaaf53a882a8a0ae0583d851021e03cc  gcc/testsuite/gcc.target/loongarch/fmax-fmin.c
- ba1f9cd7776de398eabc15fb6f7d523b  gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c
- fee1bedd25e7db9b4e91f3ede9e05608  gcc/testsuite/gcc.target/loongarch/frint.c
- 2f79a7482d38a9632f39b484c09a8f2f  gcc/testsuite/gcc.target/loongarch/fscaleb.c
- 40d69683116e216d2295e4600c830736  gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c
- 0f9dff1aa6e85e49a03dbcbdf4658c96  gcc/testsuite/gcc.target/loongarch/ftint.c
- ad86dc957e0557262d3e3b556956b2a0  gcc/testsuite/gcc.target/loongarch/func-call-1.c
- 6555886ed6fbe8f4e24de3a291a45553  gcc/testsuite/gcc.target/loongarch/func-call-2.c
- 5dbc11856d74098fe100931eb49438cb  gcc/testsuite/gcc.target/loongarch/func-call-3.c
- 6e7acd767b1c4bd09452cd99a2adea72  gcc/testsuite/gcc.target/loongarch/func-call-4.c
- 9e65a4490117f796bf975aa39588fccb  gcc/testsuite/gcc.target/loongarch/func-call-5.c
- f4006ce8b6051f06f10f9d4f5591b9ee  gcc/testsuite/gcc.target/loongarch/func-call-6.c
- ff8685804997300a25a532b1f5c17e96  gcc/testsuite/gcc.target/loongarch/func-call-7.c
- decd98512ab21ae74a09e32a6abfc080  gcc/testsuite/gcc.target/loongarch/func-call-8.c
- 28eaa615b63650546298adaaa97138fb  gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
- abc2b0838f859cb5034e6b9c9d18c92e  gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
- eb2a26811e189c046efddce2a403655a  gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
- 53f7e2bf828ce03ea819bf054c3f5246  gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
- ff0e2aebfb4d1d5589a93141d243ada3  gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c
- 4dfba11663b761b721dae15e3da8b055  gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c
- 2a224d8ac2c945f49aabfa8e72480cdc  gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c
- 1969f1afb76a1ee1a23042d919bcb99f  gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c
- 92de0fba3a1e22e6d72202e7355e66b0  gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c
- 688abdafec41a13b5ed3e398a95c59a6  gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c
- 88d4d9f38daa1da73fd5c65a4d728df4  gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c
- 0821cc90410456526313b711771dd54e  gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c
- 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
! 6a73e078ae4dd205f6bf24d6d465a6ae  gcc/testsuite/gcc.target/loongarch/larch-builtin.c
! 98ef5580c4aefc9fc806240653123084  gcc/testsuite/gcc.target/loongarch/larch-frecipe-builtin.c
! 707da34d54e7998fc65722528a071870  gcc/testsuite/gcc.target/loongarch/larch-frecipe-intrinsic.c
! bf8d7c32de15ac1b6b15d33f4c0730e8  gcc/testsuite/gcc.target/loongarch/lasx-andn-iorn.c
! 422b961441dba2c6db58a57ace03db0d  gcc/testsuite/gcc.target/loongarch/lasx-extract-even_odd-opt.c
! 580cbd76e6364fdb160e63e4aace9a97  gcc/testsuite/gcc.target/loongarch/lasx-func-attr-1.c
! dd89cf931606852d264a068d0da89f48  gcc/testsuite/gcc.target/loongarch/lasx-func-attr-2.c
! 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
- 08ecc6d7a6749ae690a432b527687be9  gcc/testsuite/gcc.target/loongarch/lsx-func-attr-2.c
- 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
- cae8b3c3dd5f2d63f52f320672dc070b  gcc/testsuite/gcc.target/loongarch/popcount.c
  d6f2200e900b3d85d0a491db3bfa13bc  gcc/testsuite/gcc.target/loongarch/pr106459.c
  087dab2b9c082de756b93456f039cdb7  gcc/testsuite/gcc.target/loongarch/pr107713-1.c
  dfafc65f0a89ca5ee45ebec52ceac527  gcc/testsuite/gcc.target/loongarch/pr107713-2.c
  ee611d581d29c00b7178ec95c3dc6e82  gcc/testsuite/gcc.target/loongarch/pr107731.c
- 251e6e0daf2f383d861cd4cc3d6dbab7  gcc/testsuite/gcc.target/loongarch/pr109465-1.c
- 0be0571edd267d6daa792723973599b0  gcc/testsuite/gcc.target/loongarch/pr109465-2.c
- 6e2aba711dd54f39182efa0211e7c661  gcc/testsuite/gcc.target/loongarch/pr109465-3.c
  28cb26eb126183368e892a65835d3354  gcc/testsuite/gcc.target/loongarch/pr111334.c
! ec09b6aa0ae7b7a9eac9fb924e19c04c  gcc/testsuite/gcc.target/loongarch/pr112476-1.c
! a9d4722a275cd3486436322291f39c73  gcc/testsuite/gcc.target/loongarch/pr112476-2.c
! 015955305b62cb203ef217c6e29fe08a  gcc/testsuite/gcc.target/loongarch/pr112476-3.c
! 6c1f996e20dd99168f1dd9b6c6f40b00  gcc/testsuite/gcc.target/loongarch/pr112476-4.c
! 9b9319e8de39dcffbe873584b20d35a5  gcc/testsuite/gcc.target/loongarch/pr113033.c
! b4671c279162dd2c1fd844929bdbbc6b  gcc/testsuite/gcc.target/loongarch/pr113148.c
! 25f1f19f59d10bccef4e82021564ba66  gcc/testsuite/gcc.target/loongarch/pr114861.c
! 9ad6397c4344b9805128cce24404b86a  gcc/testsuite/gcc.target/loongarch/pr115752.c
! 1709ea55f48beb189a29c30f090ace12  gcc/testsuite/gcc.target/loongarch/pr118561.c
! c6044525076dd7327380db8ab6c79150  gcc/testsuite/gcc.target/loongarch/pr118828-2.c
! d9d14da72bb9c30da6076a724cdf6fa0  gcc/testsuite/gcc.target/loongarch/pr118828-3.c
! b651e2531d68e2147b152deacbe8ad11  gcc/testsuite/gcc.target/loongarch/pr118828-4.c
! a7ba2e5c68834495ccecdd75f123f220  gcc/testsuite/gcc.target/loongarch/pr118828.c
! 31e639d66ad61d9aa6ddaa05d8baeb5d  gcc/testsuite/gcc.target/loongarch/pr118843.c
! dbfbd76701c5c3e6c8ed37ced1ba9cc7  gcc/testsuite/gcc.target/loongarch/pr119084.c
! bfebec3a4dbfa9680a4285589498905c  gcc/testsuite/gcc.target/loongarch/pr119127.c
  dde2cba27bc4292492e4c0dd492a70e0  gcc/testsuite/gcc.target/loongarch/pr119408.c
- 359760e5160f4b52d2fa349806589a0d  gcc/testsuite/gcc.target/loongarch/pr121064.c
- acf1fac916847c2064b8d2bbb6535828  gcc/testsuite/gcc.target/loongarch/pr121542.c
- 754f11f1533603a4d550b593afc0c673  gcc/testsuite/gcc.target/loongarch/pr121634.c
- d1eee63ffd26f53d2b788cb0eb55f5a6  gcc/testsuite/gcc.target/loongarch/pr121875.c
  1dd25b33f6fd8d4c4dc750865d86f404  gcc/testsuite/gcc.target/loongarch/pr121906.c
- 4fb67de6ceaa4d3d0dfff318541b470b  gcc/testsuite/gcc.target/loongarch/pr122097.c
  0626ac54385b7d00394be7a0b09850a1  gcc/testsuite/gcc.target/loongarch/pr122695-1.c
  fb640df1e5eb969859e5c360f608dec4  gcc/testsuite/gcc.target/loongarch/pr122695-2.c
  d8ba98681e844aa3cab41dadb293ad62  gcc/testsuite/gcc.target/loongarch/pragma-la64V1_1-2.c
  94f43e2ce509bac58eba454a85dd7a33  gcc/testsuite/gcc.target/loongarch/pragma-la64V1_1.c
- 1eac553341d725c6e59615b593aedb0d  gcc/testsuite/gcc.target/loongarch/pragma-push-pop.c
- 3adba2a8ae6f671eb22ec8228777c1ac  gcc/testsuite/gcc.target/loongarch/prolog-opt.c
- 1bfa30f99dc5f04f569fbff68640ab19  gcc/testsuite/gcc.target/loongarch/recip-divf.c
- dfa82d46bae04856dd91309f03684574  gcc/testsuite/gcc.target/loongarch/recip-sqrtf.c
  596c5238ab0cc321a3b51db7071941d8  gcc/testsuite/gcc.target/loongarch/regname-float-abi.c
  1eb5918b9e848616f17c8675b198b827  gcc/testsuite/gcc.target/loongarch/regname-fp-s9.c
- 1075563283e6d2ab3492f10a46a844ad  gcc/testsuite/gcc.target/loongarch/relocs-symbol-noaddend.c
- b25665b969e5ff79a774f344cd8f02c0  gcc/testsuite/gcc.target/loongarch/revb.c
- b6b376728d20351c33b093f21d54677e  gcc/testsuite/gcc.target/loongarch/rotl-with-rotr.c
- 2ddebd413eaa67833fbe9045727d296a  gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-b.c
- b4792704ae2560835ce2844ab052bd96  gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-d.c
- 0f0929ffb430681fa30b2b435c3a1aea  gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-h.c
- 741a56f765e9ca1db0263f22cf381eb7  gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-w.c
- 7dc4a61c0b96fca5ec769fe35befac24  gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-b.c
- 280f9daaa9214e2c695cd02105bca31e  gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-d.c
- 83a5f2fef9371e8f93530c6cba35f019  gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-h.c
- caf6ff4ee29f7a81608a744d8b8bf49e  gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-w.c
- 3443535afd7371e731be6ab37b74d55a  gcc/testsuite/gcc.target/loongarch/rotrw.c
- 6d04fd6ea7131893bf5730d8748cd0df  gcc/testsuite/gcc.target/loongarch/sad-lasx.c
- da965754e87b0f0ce1cc22b3fbb7298a  gcc/testsuite/gcc.target/loongarch/sad-lsx.c
  46f4e137231cac38e7e10152e3340365  gcc/testsuite/gcc.target/loongarch/short-circuit.c
  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
  53085da424a3a210284c337760b5fe5d  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-3.c
--- 91941,92147 ----
  b802a624eca3aa681adda2c112397671  gcc/testsuite/gcc.target/loongarch/attr-check-error-message7.c
  7c6f1e4fec786dd470ff9c2e2d00b6c7  gcc/testsuite/gcc.target/loongarch/attr-check-error-message8.c
  0b172e8801591f3d7a57c5fe320ca949  gcc/testsuite/gcc.target/loongarch/attr-check-error-message9.c
  dd4cbc8672952e717ba1b8b556dd0b49  gcc/testsuite/gcc.target/loongarch/bitwise-shift-reassoc-clobber.c
  83cf2c4fac5fe267840ffbd21284e610  gcc/testsuite/gcc.target/loongarch/bstrins-5.c
  413e1e730a03ef2e6fbdbc5826f0b0b0  gcc/testsuite/gcc.target/loongarch/bstrins-6.c
  ca8ab2fdd097231be9dd3f7bfdcebb7b  gcc/testsuite/gcc.target/loongarch/builtin_thread_pointer.c
  00fd27046cb10694212b8b3aa9811204  gcc/testsuite/gcc.target/loongarch/cas-acquire.c
  b4c0f3fd4670da4309e2a028316c3c4c  gcc/testsuite/gcc.target/loongarch/direct-extern-2.c
  1dfea9ab319ea08d9da234c41d4b88e7  gcc/testsuite/gcc.target/loongarch/div-1.c
  82faab3f51217ce0561916dde4f4f801  gcc/testsuite/gcc.target/loongarch/div-2.c
  7247cc240dabb3c9514ba4b0a07278c5  gcc/testsuite/gcc.target/loongarch/div-3.c
  adc95e9ab59294f8040ec17904b73569  gcc/testsuite/gcc.target/loongarch/div-4.c
  40042c7bbd496ecf64b96ae4ff1f8fdc  gcc/testsuite/gcc.target/loongarch/eh_return-normal-return.c
  ddf9ecd0daf6d14ef98de40e7fd68f34  gcc/testsuite/gcc.target/loongarch/fcopysign.c
! b91ffe240e28453bec3b93f2dfadd5a4  gcc/testsuite/gcc.target/loongarch/float-load.c
  aaaf53a882a8a0ae0583d851021e03cc  gcc/testsuite/gcc.target/loongarch/fmax-fmin.c
  5ba70284a6a6ec5af264e116cc217292  gcc/testsuite/gcc.target/loongarch/jump-table-annotate.c
! b0834d84380fe1ed2bc2a69bb9b939c9  gcc/testsuite/gcc.target/loongarch/la32/and.c
! 71c48294464790fa3a2c21bb163053fd  gcc/testsuite/gcc.target/loongarch/la32/la32.exp
! de5d3d8a8aa9df887548104cbac9d373  gcc/testsuite/gcc.target/loongarch/la32/memcpy.c
! 0135e8dc8789ca56e6592d26d3bcbb95  gcc/testsuite/gcc.target/loongarch/la32/trunc_int_for_mode.c
! a6d76184ab8ab5eabc181a864d04aac5  gcc/testsuite/gcc.target/loongarch/la64/add-const.c
! 50a420804148a8a49953e00f95110c7d  gcc/testsuite/gcc.target/loongarch/la64/alsl-cost.c
! c16fea0d740f8946249d8d3ff6230152  gcc/testsuite/gcc.target/loongarch/la64/alsl_wu.c
! 15ee798ecf70fcf1ff54f0779a16f074  gcc/testsuite/gcc.target/loongarch/la64/and-large-immediate-opt.c
! 78d4e82afd447d6a8daeacd48e58bc86  gcc/testsuite/gcc.target/loongarch/la64/arch-func-attr-1.c
! 09e65435c71217bb197e267e1389d15f  gcc/testsuite/gcc.target/loongarch/la64/arch-pragma-attr-1.c
! 9f6a0067cf273ede4ba33d3824d023ff  gcc/testsuite/gcc.target/loongarch/la64/attr-model-1.c
! 432baf56ded24535d315bd2e867a8be3  gcc/testsuite/gcc.target/loongarch/la64/attr-model-2.c
! a7210513dd89b8e683a00184ee4478a4  gcc/testsuite/gcc.target/loongarch/la64/attr-model-3.c
! 9d4f972a3175f736a746ae031fb25e7a  gcc/testsuite/gcc.target/loongarch/la64/attr-model-4.c
! 02f1973aec4f57a84c09f2b6bc6eaf79  gcc/testsuite/gcc.target/loongarch/la64/attr-model-5.c
! f9bd26f98b04e99789925370214a2a06  gcc/testsuite/gcc.target/loongarch/la64/attr-model-diag.c
! b0da33fc443024e77c7b605056bff4ae  gcc/testsuite/gcc.target/loongarch/la64/attr-model-test.c
! cd00ceeea45683383cf6ab2205253ad0  gcc/testsuite/gcc.target/loongarch/la64/bitint-alignments.c
! 5c715c6d7b8151a147fb4a6fb41b3be0  gcc/testsuite/gcc.target/loongarch/la64/bitint-args.c
! 301277270ef16c20c5a857394b26d4e3  gcc/testsuite/gcc.target/loongarch/la64/bitint-sizes.c
! e21ed5cafc7ccdbe2f139e72a1f702e1  gcc/testsuite/gcc.target/loongarch/la64/bitwise-shift-reassoc.c
! 414d78d00363c1e5dd854d23224b39d7  gcc/testsuite/gcc.target/loongarch/la64/bitwise_extend.c
! 3c95ec617ab685105bc31c59fb62dd42  gcc/testsuite/gcc.target/loongarch/la64/bstrins-1.c
! 0ef8c999aed72455a824deb73e462b46  gcc/testsuite/gcc.target/loongarch/la64/bstrins-2.c
! 5e8c1d5ca86d29f8a0ee54ea74388ce1  gcc/testsuite/gcc.target/loongarch/la64/bstrins-3.c
! 70325dffd4df0df0528c85bd49dbc2f8  gcc/testsuite/gcc.target/loongarch/la64/bstrins-4.c
! d6d72f67d9c86c49fe483871b08cc2c0  gcc/testsuite/gcc.target/loongarch/la64/bstrpick_alsl_paired.c
! 9c31e2b0b719536d37a3b720ea2be5ad  gcc/testsuite/gcc.target/loongarch/la64/bytepick_combine.c
! 828a53a834899f6cac56d99b1ec04d3b  gcc/testsuite/gcc.target/loongarch/la64/bytepick_shift_128.c
! 40d027f26b529d9286fbb712ca2a7342  gcc/testsuite/gcc.target/loongarch/la64/can_inline_1.c
! 7c4687586877a635387320076067d17b  gcc/testsuite/gcc.target/loongarch/la64/can_inline_2.c
! a1db2bbf996d48ba701c8efc582dad3d  gcc/testsuite/gcc.target/loongarch/la64/can_inline_3.c
! a1783fd9344ba40d5aa08ba39ced7efb  gcc/testsuite/gcc.target/loongarch/la64/can_inline_4.c
! e7871060f6568ccbaf0d8c13ef970b0e  gcc/testsuite/gcc.target/loongarch/la64/can_inline_5.c
! bde7ba2405e4971efe4fb79faf6333ec  gcc/testsuite/gcc.target/loongarch/la64/can_inline_6.c
! 866599c9e8b38ceef59bdaefc066abd5  gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-1.c
! 69239f6c22a4bce44a4b781091a5a1dc  gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-2.c
! d984aef61afc8f09af4c880507f6c6e6  gcc/testsuite/gcc.target/loongarch/la64/cmodel-func-attr-1.c
! 50ab91c6f8ea866c2cdb3d64e26052d2  gcc/testsuite/gcc.target/loongarch/la64/cmodel-pragma-attr-1.c
! 6c4891b18c6bd1154b7ea8237dc05a30  gcc/testsuite/gcc.target/loongarch/la64/cmov_ii.c
! 9efb1cedf311f58b73a175fae939dc78  gcc/testsuite/gcc.target/loongarch/la64/compare-both-non-zero.c
! 1faf96722faacc0ff389b62bf83b34ea  gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-1.c
! 9f48ac8201f97bdbd1ec5edcd8f2984e  gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-2.c
! 5f9e7145f8a500557b5629f8d93ad860  gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-3.c
! d714312bcf2901d8e4e91206a319c6bb  gcc/testsuite/gcc.target/loongarch/la64/const-double-zero-stx.c
! c794f526430241ad83fd3ca5415524f0  gcc/testsuite/gcc.target/loongarch/la64/crc-sext.c
! 2ea39544bfe26567ec668ca7a33a8a5e  gcc/testsuite/gcc.target/loongarch/la64/direct-extern-1.c
! 190971c88d51a5f97fe7426a50068cb5  gcc/testsuite/gcc.target/loongarch/la64/div-div32.c
! a8652f3f7c02977b31b644cea4e31481  gcc/testsuite/gcc.target/loongarch/la64/div-no-div32.c
! 6e5197f221248d28ac06cac538a2363d  gcc/testsuite/gcc.target/loongarch/la64/divf.c
! 1ae9338e5985e5f9077cdebb9c2bb358  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-extreme-tls-desc.c
! 21b95a5d0d6bd05f5d9790ef4a88439e  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-lto.c
! 1c89c7fbe655876c33ea49ba08f726d6  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-2.c
! 5f992d8bcd502efa354f5ce03c484ef6  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-3.c
! bdaf93b46f27a28e6b3cb3969710f26d  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-no-anchor.c
! bb6ab9b0cdb20096c989643240d23a65  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store.c
! 34306a7899f2b0f1cb8e0ca52c24dcfe  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-desc.c
! a0974c41c2d76b1294fb1d2efc48bd2f  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-ld-gd.c
! 45ece568055adcf16495ad5a85ce6044  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-le-ie.c
! 692c2e25f06c20d20bed12d9a727afdf  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-auto-tls-ld-gd.c
! 4ff34634e3c8d0e461fe9d3c5047e953  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-tls-desc.c
! b90d585b99c59a2e3f6f7cce1bac5d6a  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-auto-tls-ld-gd.c
! aaabc24a35d397c6567d048e65a87c90  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-call36-auto-tls-ld-gd.c
! ad5117326114603de5f0e93ecd058244  gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-tls-desc.c
! b3b1176da6306a0ff9bbd0410c4995b3  gcc/testsuite/gcc.target/loongarch/la64/extendsidi2-combine.c
! 119ee122b14ed99349ce1179d5100a0e  gcc/testsuite/gcc.target/loongarch/la64/fclass-compile.c
! 2adb5c2fba43850d5c2b753f7a75ef1b  gcc/testsuite/gcc.target/loongarch/la64/fclass-run.c
! 256bb0a8b0fff1f225a70fa39849ccd6  gcc/testsuite/gcc.target/loongarch/la64/flogb.c
! c9d08bb72896d9b4861ce4073ec5e57f  gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-1.c
! 6d758f852068391aa189ac79c376aa60  gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-2.c
! f72ce6aeb8beb0eff27354c07ef71cd1  gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-3.c
! ab6db876a44193a92b0a1625c65eb4e7  gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-4.c
! fee1bedd25e7db9b4e91f3ede9e05608  gcc/testsuite/gcc.target/loongarch/la64/frint.c
! 2f79a7482d38a9632f39b484c09a8f2f  gcc/testsuite/gcc.target/loongarch/la64/fscaleb.c
! 40d69683116e216d2295e4600c830736  gcc/testsuite/gcc.target/loongarch/la64/ftint-no-inexact.c
! 0f9dff1aa6e85e49a03dbcbdf4658c96  gcc/testsuite/gcc.target/loongarch/la64/ftint.c
! ad86dc957e0557262d3e3b556956b2a0  gcc/testsuite/gcc.target/loongarch/la64/func-call-1.c
! 6555886ed6fbe8f4e24de3a291a45553  gcc/testsuite/gcc.target/loongarch/la64/func-call-2.c
! 5dbc11856d74098fe100931eb49438cb  gcc/testsuite/gcc.target/loongarch/la64/func-call-3.c
! 6e7acd767b1c4bd09452cd99a2adea72  gcc/testsuite/gcc.target/loongarch/la64/func-call-4.c
! 9e65a4490117f796bf975aa39588fccb  gcc/testsuite/gcc.target/loongarch/la64/func-call-5.c
! f4006ce8b6051f06f10f9d4f5591b9ee  gcc/testsuite/gcc.target/loongarch/la64/func-call-6.c
! ff8685804997300a25a532b1f5c17e96  gcc/testsuite/gcc.target/loongarch/la64/func-call-7.c
! decd98512ab21ae74a09e32a6abfc080  gcc/testsuite/gcc.target/loongarch/la64/func-call-8.c
! 28eaa615b63650546298adaaa97138fb  gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-1.c
! abc2b0838f859cb5034e6b9c9d18c92e  gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-2.c
! eb2a26811e189c046efddce2a403655a  gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-3.c
! 53f7e2bf828ce03ea819bf054c3f5246  gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-4.c
! ff0e2aebfb4d1d5589a93141d243ada3  gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-5.c
! 4dfba11663b761b721dae15e3da8b055  gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-6.c
! 2a224d8ac2c945f49aabfa8e72480cdc  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-1.c
! 1969f1afb76a1ee1a23042d919bcb99f  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-2.c
! 92de0fba3a1e22e6d72202e7355e66b0  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-3.c
! 688abdafec41a13b5ed3e398a95c59a6  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-5.c
! 88d4d9f38daa1da73fd5c65a4d728df4  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-6.c
! 0821cc90410456526313b711771dd54e  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-7.c
! 6649897103ef58074cf4038c9f752b73  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-8.c
! 6ab9f24cca6a9ec8103e6ba80f494143  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36-1.c
! b9e59385233aedda5e9e3d95bfa2f29c  gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36.c
! 1ca3c467f8697ea29a6e96864e967c97  gcc/testsuite/gcc.target/loongarch/la64/imm-load.c
! d7a3a4b5e884b4ba96b4ba493eb19316  gcc/testsuite/gcc.target/loongarch/la64/imm-load1.c
! c74ac6255a37860200cb087c773ff537  gcc/testsuite/gcc.target/loongarch/la64/invariant-recip.c
! 6f9f40c5c027df3f23335521ab1ef851  gcc/testsuite/gcc.target/loongarch/la64/la64.exp
! 98ef5580c4aefc9fc806240653123084  gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-builtin.c
! 707da34d54e7998fc65722528a071870  gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-intrinsic.c
! 580cbd76e6364fdb160e63e4aace9a97  gcc/testsuite/gcc.target/loongarch/la64/lasx-func-attr-1.c
! 50e5afd436ad3b4f977fbbe4b5538229  gcc/testsuite/gcc.target/loongarch/la64/lasx-pragma-attr-1.c
! 4000dc14b31fce222ef708b8954c6b31  gcc/testsuite/gcc.target/loongarch/la64/lsx-func-attr-1.c
! 7fcb4a95a2d9dce2bbad3443335383e2  gcc/testsuite/gcc.target/loongarch/la64/lsx-pragma-attr-1.c
! 6fd3a91ad4fcbff919f3f7121bd94819  gcc/testsuite/gcc.target/loongarch/la64/math-float-128.c
! 6c85cdc89871ad17739456446ddcbeab  gcc/testsuite/gcc.target/loongarch/la64/mem-and-mask-opt.c
! 9fb3b8610b37b8332c61ea243a7f7eef  gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-1.c
! f8e85c0fabedb15da4e203ea4c1d6792  gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-2.c
! 9bdb8bae55f19f1a7d359c4bf87a4ba8  gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-3.c
! 99b1919a6979934ee049264960691fb7  gcc/testsuite/gcc.target/loongarch/la64/mode-tieable-opt.c
! e26420568eb59260ac109ca747ecbf46  gcc/testsuite/gcc.target/loongarch/la64/mov-zero-2.c
! 4931eef8fe508d14b75d3631fe8bbafc  gcc/testsuite/gcc.target/loongarch/la64/movcf2gr-via-fr.c
! bb6ea01b244f2c3e617730a44580a7bc  gcc/testsuite/gcc.target/loongarch/la64/movcf2gr.c
! d23b33973d13d263ab78b5b4e0b94ef3  gcc/testsuite/gcc.target/loongarch/la64/mul-const-reduction.c
! a81bb88e2af3a8501ccdfe54556bf467  gcc/testsuite/gcc.target/loongarch/la64/mulh_wu.c
! ab8d85a261f0846c278e2d6db2c6ab77  gcc/testsuite/gcc.target/loongarch/la64/mulw_d_w.c
! a82bd0c91438f0a8e295e7cb52d0c28d  gcc/testsuite/gcc.target/loongarch/la64/mulw_d_wu.c
! 251e6e0daf2f383d861cd4cc3d6dbab7  gcc/testsuite/gcc.target/loongarch/la64/pr109465-1.c
! 0be0571edd267d6daa792723973599b0  gcc/testsuite/gcc.target/loongarch/la64/pr109465-2.c
! 6e2aba711dd54f39182efa0211e7c661  gcc/testsuite/gcc.target/loongarch/la64/pr109465-3.c
! b4671c279162dd2c1fd844929bdbbc6b  gcc/testsuite/gcc.target/loongarch/la64/pr113148.c
! 25f1f19f59d10bccef4e82021564ba66  gcc/testsuite/gcc.target/loongarch/la64/pr114861.c
! 1709ea55f48beb189a29c30f090ace12  gcc/testsuite/gcc.target/loongarch/la64/pr118561.c
! c6044525076dd7327380db8ab6c79150  gcc/testsuite/gcc.target/loongarch/la64/pr118828-2.c
! d9d14da72bb9c30da6076a724cdf6fa0  gcc/testsuite/gcc.target/loongarch/la64/pr118828-3.c
! b651e2531d68e2147b152deacbe8ad11  gcc/testsuite/gcc.target/loongarch/la64/pr118828-4.c
! a7ba2e5c68834495ccecdd75f123f220  gcc/testsuite/gcc.target/loongarch/la64/pr118828.c
! 31e639d66ad61d9aa6ddaa05d8baeb5d  gcc/testsuite/gcc.target/loongarch/la64/pr118843.c
! bfebec3a4dbfa9680a4285589498905c  gcc/testsuite/gcc.target/loongarch/la64/pr119127.c
! acf1fac916847c2064b8d2bbb6535828  gcc/testsuite/gcc.target/loongarch/la64/pr121542.c
! 754f11f1533603a4d550b593afc0c673  gcc/testsuite/gcc.target/loongarch/la64/pr121634.c
! d1eee63ffd26f53d2b788cb0eb55f5a6  gcc/testsuite/gcc.target/loongarch/la64/pr121875.c
! 3adba2a8ae6f671eb22ec8228777c1ac  gcc/testsuite/gcc.target/loongarch/la64/prolog-opt.c
! 1bfa30f99dc5f04f569fbff68640ab19  gcc/testsuite/gcc.target/loongarch/la64/recip-divf.c
! dfa82d46bae04856dd91309f03684574  gcc/testsuite/gcc.target/loongarch/la64/recip-sqrtf.c
! 1075563283e6d2ab3492f10a46a844ad  gcc/testsuite/gcc.target/loongarch/la64/relocs-symbol-noaddend.c
! b25665b969e5ff79a774f344cd8f02c0  gcc/testsuite/gcc.target/loongarch/la64/revb.c
! b6b376728d20351c33b093f21d54677e  gcc/testsuite/gcc.target/loongarch/la64/rotl-with-rotr.c
! 3443535afd7371e731be6ab37b74d55a  gcc/testsuite/gcc.target/loongarch/la64/rotrw.c
! 294f8a20e4eec5c0c40de71226677399  gcc/testsuite/gcc.target/loongarch/la64/sign-extend-1.c
! ff53d68fc0f97e1b389fbdfc6b733d9e  gcc/testsuite/gcc.target/loongarch/la64/sign-extend-2.c
! 3205391a09a9ea1564d339b7462d3608  gcc/testsuite/gcc.target/loongarch/la64/sign-extend-3.c
! 6368cb5faa231e38fa7ec80586084a64  gcc/testsuite/gcc.target/loongarch/la64/sign-extend-4.c
! 32bfdab51a9d5ec46f98aa105f20cad2  gcc/testsuite/gcc.target/loongarch/la64/sign-extend-5.c
! 91be18c4ce300ca642ff3c3d69ce4acc  gcc/testsuite/gcc.target/loongarch/la64/sign-extend-6.c
! 503978ebbda9df9f9d2896d9898ab7b0  gcc/testsuite/gcc.target/loongarch/la64/sign-extend-bitwise.c
! 6f84ea4a3d11d3be47a589d544ec42f5  gcc/testsuite/gcc.target/loongarch/la64/sign_extend_ashift.c
! 969f8c63d5313b0ef2802d00df27886a  gcc/testsuite/gcc.target/loongarch/la64/slt-sign-extend.c
! bf64f97d74ef11f20bfde63932d56667  gcc/testsuite/gcc.target/loongarch/la64/smuldi3_highpart.c
! 2f74f2f5fe892da58b8f6baf6aa297c8  gcc/testsuite/gcc.target/loongarch/la64/spill-less.c
! 803ffb89ba4bbdbdb90c999bf781d4cc  gcc/testsuite/gcc.target/loongarch/la64/sqrtf.c
! 5c59a0f71afe5e1247603961548ac0fc  gcc/testsuite/gcc.target/loongarch/la64/switch-qi.c
! 1ac501cd30db722f9955c498127b25bf  gcc/testsuite/gcc.target/loongarch/la64/tls-extreme-macro.c
! d764570a061f9e358a8c312e0f52b532  gcc/testsuite/gcc.target/loongarch/la64/tls-gd-noplt.c
! d3511a1f030e8253dbf6b20c73d33105  gcc/testsuite/gcc.target/loongarch/la64/tls-ie-extreme.c
! 59f8afcb4e93c86d7da2ab3c90529db3  gcc/testsuite/gcc.target/loongarch/la64/tls-ie-norelax.c
! 2a0b997731ed1ae360413e97d22d1e5c  gcc/testsuite/gcc.target/loongarch/la64/tls-ie-relax.c
! 273aefb7dcb812b056ec4f65efdd49ff  gcc/testsuite/gcc.target/loongarch/la64/tls-le-relax.c
! da307b3ed6f25b19b64faf3b5b9c456e  gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-signed.c
! 85b7855a23d37a98585aa5df332a0722  gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-unsigned.c
! daa985dfac90c17791ed0549fd2b0181  gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-pass.c
! c5a3a773bb277e1c1071f9d892d1ed48  gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-ret.c
! 7b7aa24ffb57990b688042ea2b1dafa1  gcc/testsuite/gcc.target/loongarch/larch-builtin.c
  dc97748644c9f046ca9df34db59dd8fc  gcc/testsuite/gcc.target/loongarch/loongarch.exp
  d6f2200e900b3d85d0a491db3bfa13bc  gcc/testsuite/gcc.target/loongarch/pr106459.c
  087dab2b9c082de756b93456f039cdb7  gcc/testsuite/gcc.target/loongarch/pr107713-1.c
  dfafc65f0a89ca5ee45ebec52ceac527  gcc/testsuite/gcc.target/loongarch/pr107713-2.c
  ee611d581d29c00b7178ec95c3dc6e82  gcc/testsuite/gcc.target/loongarch/pr107731.c
  28cb26eb126183368e892a65835d3354  gcc/testsuite/gcc.target/loongarch/pr111334.c
! 2e6b9ab7fc5c12acdd68bc4887db082e  gcc/testsuite/gcc.target/loongarch/pr115752.c
  dde2cba27bc4292492e4c0dd492a70e0  gcc/testsuite/gcc.target/loongarch/pr119408.c
  1dd25b33f6fd8d4c4dc750865d86f404  gcc/testsuite/gcc.target/loongarch/pr121906.c
  0626ac54385b7d00394be7a0b09850a1  gcc/testsuite/gcc.target/loongarch/pr122695-1.c
  fb640df1e5eb969859e5c360f608dec4  gcc/testsuite/gcc.target/loongarch/pr122695-2.c
  d8ba98681e844aa3cab41dadb293ad62  gcc/testsuite/gcc.target/loongarch/pragma-la64V1_1-2.c
  94f43e2ce509bac58eba454a85dd7a33  gcc/testsuite/gcc.target/loongarch/pragma-la64V1_1.c
  596c5238ab0cc321a3b51db7071941d8  gcc/testsuite/gcc.target/loongarch/regname-float-abi.c
  1eb5918b9e848616f17c8675b198b827  gcc/testsuite/gcc.target/loongarch/regname-fp-s9.c
  46f4e137231cac38e7e10152e3340365  gcc/testsuite/gcc.target/loongarch/short-circuit.c
  f46bb4d68c80f94cd959f7aefc8389e4  gcc/testsuite/gcc.target/loongarch/shrink-wrap.c
  e1615ec0889043a33798fc33df9c0c5e  gcc/testsuite/gcc.target/loongarch/smulsi3_highpart.c
  3df56316dc4cc5cf945f0b9f6e4238db  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-1.c
  7b5305d29424075188fad0ef59ab43f4  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-2.c
  53085da424a3a210284c337760b5fe5d  gcc/testsuite/gcc.target/loongarch/stack-check-alloca-3.c
*************** b0d8451f1600fb7ed044bb4afac6c54e  gcc/te
*** 92131,92179 ****
  9ddc825310e2f1207621093040d11658  gcc/testsuite/gcc.target/loongarch/stack-check-prologue-6.c
  835c129cffc725b50f77270d00d701aa  gcc/testsuite/gcc.target/loongarch/stack-check-prologue-7.c
  6cc96f2ff91ce012328dc2190416bdf3  gcc/testsuite/gcc.target/loongarch/stack-check-prologue.h
- 18e238abfacb1352fe7e95b0b7b889f2  gcc/testsuite/gcc.target/loongarch/strict-align.c
  30535602e187c3ae98d047f10b9f0250  gcc/testsuite/gcc.target/loongarch/strict_align-func-attr-1.c
  76a7944d46976eb4dd703365ee671143  gcc/testsuite/gcc.target/loongarch/strict_align-func-attr-2.c
  1108f8672f288039b76dd7b0b71e7261  gcc/testsuite/gcc.target/loongarch/strict_align-pragma-attr-1.c
  c3b9c79f87c4206d38cd6acc05f5be9f  gcc/testsuite/gcc.target/loongarch/strict_align-pragma-attr-2.c
- 5c59a0f71afe5e1247603961548ac0fc  gcc/testsuite/gcc.target/loongarch/switch-qi.c
- 1ac501cd30db722f9955c498127b25bf  gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c
- d764570a061f9e358a8c312e0f52b532  gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c
- d3511a1f030e8253dbf6b20c73d33105  gcc/testsuite/gcc.target/loongarch/tls-ie-extreme.c
- 59f8afcb4e93c86d7da2ab3c90529db3  gcc/testsuite/gcc.target/loongarch/tls-ie-norelax.c
- 2a0b997731ed1ae360413e97d22d1e5c  gcc/testsuite/gcc.target/loongarch/tls-ie-relax.c
- 273aefb7dcb812b056ec4f65efdd49ff  gcc/testsuite/gcc.target/loongarch/tls-le-relax.c
  5476461186e33f60cdf514b4363e881a  gcc/testsuite/gcc.target/loongarch/trap-1.c
  75db51c40cf15cf674f98cd2664252bd  gcc/testsuite/gcc.target/loongarch/trap-default.c
  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
! 112af8185d79088b4a51d1c2a0ce64cc  gcc/testsuite/gcc.target/loongarch/vec_reduc_half.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
! c73656f986e7e0217bc13b99a227b4b3  gcc/testsuite/gcc.target/loongarch/vect-shift-imm-round.c
! 0a2e2eac72cfcca97984627c1e764927  gcc/testsuite/gcc.target/loongarch/vect-shuf-fp.c
! 42bb88d1ea7d5aa2572afc7cb9d13bff  gcc/testsuite/gcc.target/loongarch/vect-slp-two-operator.c
! 453da6047ce09c69691270feaa485c69  gcc/testsuite/gcc.target/loongarch/vect-widen-add.c
! c4a5bf3904159f6c4f6e17ee0da90889  gcc/testsuite/gcc.target/loongarch/vect-widen-mul.c
! 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
  ff04753758847e0200cd4aee08b80f4a  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
  26416d3a1315b205e74061b5b07e84ec  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-recip-sqrtf.c
  ec4196a5693a2d78e09e090c4cfa571d  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-recip.c
  a063d665153ff8caea1f55d2d763456e  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-rsqrt.c
  3f0598d49446f929c98c1ebc8637dad6  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-shift-sameimm-vec.c
  775b8d8b29c403d9447185837f4a85a9  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-sqrtf.c
--- 92159,92187 ----
  9ddc825310e2f1207621093040d11658  gcc/testsuite/gcc.target/loongarch/stack-check-prologue-6.c
  835c129cffc725b50f77270d00d701aa  gcc/testsuite/gcc.target/loongarch/stack-check-prologue-7.c
  6cc96f2ff91ce012328dc2190416bdf3  gcc/testsuite/gcc.target/loongarch/stack-check-prologue.h
  30535602e187c3ae98d047f10b9f0250  gcc/testsuite/gcc.target/loongarch/strict_align-func-attr-1.c
  76a7944d46976eb4dd703365ee671143  gcc/testsuite/gcc.target/loongarch/strict_align-func-attr-2.c
  1108f8672f288039b76dd7b0b71e7261  gcc/testsuite/gcc.target/loongarch/strict_align-pragma-attr-1.c
  c3b9c79f87c4206d38cd6acc05f5be9f  gcc/testsuite/gcc.target/loongarch/strict_align-pragma-attr-2.c
  5476461186e33f60cdf514b4363e881a  gcc/testsuite/gcc.target/loongarch/trap-1.c
  75db51c40cf15cf674f98cd2664252bd  gcc/testsuite/gcc.target/loongarch/trap-default.c
  bb57d24452eb2fea309f990edfa5de1c  gcc/testsuite/gcc.target/loongarch/umulsi3_highpart.c
  20592e6b1e8a0f3b8742b7beb0f51ae2  gcc/testsuite/gcc.target/loongarch/va_arg.c
! fdc09cb25851254e708f2d7b35b30157  gcc/testsuite/gcc.target/loongarch/vector/lasx/abd-lasx.c
! 10a58b0c68aafdaa8704cc0ab8a37e3c  gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-ceil-lasx.c
! 38e4e62393ad811f1092ea45b0c52b77  gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-floor-lasx.c
! ba1f9cd7776de398eabc15fb6f7d523b  gcc/testsuite/gcc.target/loongarch/vector/lasx/fnmam4-vec.c
! 310196e47529f6c726239009748a1dc8  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-andn-iorn.c
  ff04753758847e0200cd4aee08b80f4a  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-builtin.c
  fe6faa6ba0306efed8c468b31f250333  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-divf.c
+ 422b961441dba2c6db58a57ace03db0d  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-extract-even_odd-opt.c
  63c0a41070b08339598b12401f6f0275  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-frecipe-builtin.c
+ dd89cf931606852d264a068d0da89f48  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-func-attr-2.c
+ 906d80bea4f1077ff428fa3626503bcb  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-pragma-attr-2.c
  269e58b3141de7803fd2da2ee4583a7c  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-recip-divf.c
  26416d3a1315b205e74061b5b07e84ec  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-recip-sqrtf.c
  ec4196a5693a2d78e09e090c4cfa571d  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-recip.c
+ de06cc3da65946f38baaa81bb163fca6  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-reduc-1.c
  a063d665153ff8caea1f55d2d763456e  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-rsqrt.c
  3f0598d49446f929c98c1ebc8637dad6  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-shift-sameimm-vec.c
  775b8d8b29c403d9447185837f4a85a9  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-sqrtf.c
*************** e6d073e359cda464e138b1b808209a07  gcc/te
*** 92320,92325 ****
--- 92328,92334 ----
  d8e031a7672d551daeb9c0343f196b90  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpackev.c
  1d2659e78407c128a3305bd53e7d8751  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpackod.c
  c6091d6b4d13af307c56751cc58f5e22  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpcnt.c
+ 253049b59bb1e2fdd28eb33f646c488d  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q-opt.c
  30a0eb65ea8739a2ebc0d73f416eb624  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q.c
  b5d94eacfaeb18df1a5ba78a6988a18d  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpickev.c
  5bedc8766d3982d413dc2aae27eb52cf  gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpickod.c
*************** eb7720d1ee0f7dde86471e1b8ad3b82f  gcc/te
*** 92389,92406 ****
  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
  6a9047e8dd670a2f365e1b54d968da7b  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-builtin.c
  a8ab1fe3de13920929161ff744d0be79  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-divf.c
  3ca33073dc5707d30e1c86e7cff80a83  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-frecipe-builtin.c
  7fd4b4d80ef3b95b73b71b66d9e6cd92  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-mov-1.c
  21062258537eee99097cccdc4b7c1956  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-recip-divf.c
  2549c56a693f1d0960c7cc8ba86e0067  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-recip-sqrtf.c
  fb3c160369677c07483fb4dc63539faa  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-recip.c
--- 92398,92452 ----
  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
+ de83bbcbb03e37b7d3c3619033b6882e  gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-2.c
+ 178cabcb86491ff3ad0921dced4838d3  gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-4.c
+ 9b9319e8de39dcffbe873584b20d35a5  gcc/testsuite/gcc.target/loongarch/vector/lasx/pr113033.c
+ 1eac553341d725c6e59615b593aedb0d  gcc/testsuite/gcc.target/loongarch/vector/lasx/pragma-push-pop.c
+ 7c1d85beb3eaf3489d693d57eb51dcd2  gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-b.c
+ e3b0049caf475cc1fdd98f6d52e6c7ae  gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-d.c
+ cecd9f8159d8c4d5b14c7d7037f45906  gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-h.c
+ 8c146b452afb556897e11012fd5851ed  gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-w.c
+ 6d04fd6ea7131893bf5730d8748cd0df  gcc/testsuite/gcc.target/loongarch/vector/lasx/sad-lasx.c
+ 18e238abfacb1352fe7e95b0b7b889f2  gcc/testsuite/gcc.target/loongarch/vector/lasx/strict-align.c
+ 70483635c3588614c2e0a2041be7876c  gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_pack_unpack_256.c
+ 112af8185d79088b4a51d1c2a0ce64cc  gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_reduc_half.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
+ 13cec58c7391a5cef41368197f850947  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract.c
+ e938ebb81df2ed0b44e7fabc3afc2107  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint-no-inexact.c
+ 179412aced110fd38bdd89629658990a  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint.c
+ 2edf870f7beff0da25d59180ebfb5e0c  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint-no-inexact.c
+ f6f3d1bdc697b2c550948539a48d2ed4  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint.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
! e174ae75eabb1baa10e7ef9e75e93275  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ld-st-imm12.c
! 537c2448576790bc3b9448c2a930f5f0  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-muh.c
! 1f7b7228148fe23bb98c9ae0d151646c  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-rotr.c
! 0a2e2eac72cfcca97984627c1e764927  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-shuf-fp.c
! 42bb88d1ea7d5aa2572afc7cb9d13bff  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-slp-two-operator.c
! 453da6047ce09c69691270feaa485c69  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-add.c
! c4a5bf3904159f6c4f6e17ee0da90889  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-mul.c
! 3ed720b4bc387e4269bf3226dd3fdfe5  gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-sub.c
! 10ddd292b7613ff19e60e7031e01d5b7  gcc/testsuite/gcc.target/loongarch/vector/lasx/vfmax-vfmin.c
! dc2394fc2f65e2df2041cf81f93decfe  gcc/testsuite/gcc.target/loongarch/vector/lasx/vrepli.c
! a005b26aa548eee07a39a18e458d0abc  gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-1.c
! c1d9bd83ec7fb2ffe482949572f2b0d3  gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-2.c
! 5fa559c98e0a76dc9bf4159c33983127  gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-d.c
! d606d6c0d753daa5c9b1f46734a96bbf  gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-f.c
! 63bc47beebd60f21381bc00a983f4b49  gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp
! 9c9daf846165a43b8331181f335522dc  gcc/testsuite/gcc.target/loongarch/vector/lsx/abd-lsx.c
! e6be30166471664309a52d26e4caaad6  gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-ceil-lsx.c
! a85403ab7a61ba6f56d2c3150b9f8bcb  gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-floor-lsx.c
  5d55305c4d66b32dd004f424d4a0a0fb  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-abs.c
+ d4c4c9d0b9ae0369cd930c837d2425b7  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-andn-iorn.c
  6a9047e8dd670a2f365e1b54d968da7b  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-builtin.c
  a8ab1fe3de13920929161ff744d0be79  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-divf.c
  3ca33073dc5707d30e1c86e7cff80a83  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-frecipe-builtin.c
+ 08ecc6d7a6749ae690a432b527687be9  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-func-attr-2.c
  7fd4b4d80ef3b95b73b71b66d9e6cd92  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-mov-1.c
+ 2ff50940f45f70c1c0e511eeb9f27d97  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-pragma-attr-2.c
  21062258537eee99097cccdc4b7c1956  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-recip-divf.c
  2549c56a693f1d0960c7cc8ba86e0067  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-recip-sqrtf.c
  fb3c160369677c07483fb4dc63539faa  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-recip.c
*************** d9ab49aa7d7730596242bed46b4c7bed  gcc/te
*** 92607,92627 ****
  87366d24b56b7a97edbfcb4983a57a52  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vxori.c
  5c8f61426f6c4882be1e61b33f277961  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-xorsign-run.c
  ee9aafb340a5c2597a6f656ccbd8a374  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-xorsign.c
  70005d5f6a26c8e3f8e5afe7cdc53bbf  gcc/testsuite/gcc.target/loongarch/vector/simd_correctness_check.h
- 32fede0d9373ef10c92cbfd15cda3c85  gcc/testsuite/gcc.target/loongarch/vfcmp-d.c
- c08e307370de6dd5122f517ca9b88bd3  gcc/testsuite/gcc.target/loongarch/vfcmp-f.c
- 10ddd292b7613ff19e60e7031e01d5b7  gcc/testsuite/gcc.target/loongarch/vfmax-vfmin.c
- dc2394fc2f65e2df2041cf81f93decfe  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
- 390ebfd9588a71fef795823e622f6c10  gcc/testsuite/gcc.target/loongarch/xvfcmp-d.c
- 3bce0fc3b123701a83000672e3455ccc  gcc/testsuite/gcc.target/loongarch/xvfcmp-f.c
- daa985dfac90c17791ed0549fd2b0181  gcc/testsuite/gcc.target/loongarch/zero-size-field-pass.c
- c5a3a773bb277e1c1071f9d892d1ed48  gcc/testsuite/gcc.target/loongarch/zero-size-field-ret.c
  ce7c3a66fa22a36825ef82d61a779479  gcc/testsuite/gcc.target/m68k/20090709-1.c
  366076939f40b4ef2fa5cb784e47bf39  gcc/testsuite/gcc.target/m68k/20100512-1.c
  a1f87586261b97dd617335d52e79f0e1  gcc/testsuite/gcc.target/m68k/crash1.c
--- 92653,92682 ----
  87366d24b56b7a97edbfcb4983a57a52  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vxori.c
  5c8f61426f6c4882be1e61b33f277961  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-xorsign-run.c
  ee9aafb340a5c2597a6f656ccbd8a374  gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-xorsign.c
+ 99145c3f37b9ab131e0ed0ffe3cb707d  gcc/testsuite/gcc.target/loongarch/vector/lsx/mov-zero-1.c
+ fd0c004c00698c398646c63b4784aec2  gcc/testsuite/gcc.target/loongarch/vector/lsx/popcnt.c
+ cae8b3c3dd5f2d63f52f320672dc070b  gcc/testsuite/gcc.target/loongarch/vector/lsx/popcount.c
+ ec09b6aa0ae7b7a9eac9fb924e19c04c  gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-1.c
+ 015955305b62cb203ef217c6e29fe08a  gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-3.c
+ dbfbd76701c5c3e6c8ed37ced1ba9cc7  gcc/testsuite/gcc.target/loongarch/vector/lsx/pr119084.c
+ 359760e5160f4b52d2fa349806589a0d  gcc/testsuite/gcc.target/loongarch/vector/lsx/pr121064.c
+ 4fb67de6ceaa4d3d0dfff318541b470b  gcc/testsuite/gcc.target/loongarch/vector/lsx/pr122097.c
+ 2ddebd413eaa67833fbe9045727d296a  gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-b.c
+ b4792704ae2560835ce2844ab052bd96  gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-d.c
+ 0f0929ffb430681fa30b2b435c3a1aea  gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-h.c
+ 741a56f765e9ca1db0263f22cf381eb7  gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-w.c
+ da965754e87b0f0ce1cc22b3fbb7298a  gcc/testsuite/gcc.target/loongarch/vector/lsx/sad-lsx.c
+ bbbc51cc2b6669a160c181fc1ab12412  gcc/testsuite/gcc.target/loongarch/vector/lsx/vec_pack_unpack_128.c
+ 28d0cf4f00f5bdd8404d0daedaac3307  gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar-no-inexact.c
+ a065ef972535f71ed1b7b9d5a37c43be  gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar.c
+ c73656f986e7e0217bc13b99a227b4b3  gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-shift-imm-round.c
+ a78d6c1fd79f5c1d8a67aa38a8dc8943  gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-func-attr-1.c
+ 58826efcc90333c707edc8514608dfc0  gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-pragma-attr-1.c
+ 32fede0d9373ef10c92cbfd15cda3c85  gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-d.c
+ c08e307370de6dd5122f517ca9b88bd3  gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-f.c
+ 10ce9c8f9619651c9d46b51e45ae26da  gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign-run.c
+ 9b099d473b8bfb835da7cb656ac3e3f3  gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign.c
  70005d5f6a26c8e3f8e5afe7cdc53bbf  gcc/testsuite/gcc.target/loongarch/vector/simd_correctness_check.h
  ce7c3a66fa22a36825ef82d61a779479  gcc/testsuite/gcc.target/m68k/20090709-1.c
  366076939f40b4ef2fa5cb784e47bf39  gcc/testsuite/gcc.target/m68k/20100512-1.c
  a1f87586261b97dd617335d52e79f0e1  gcc/testsuite/gcc.target/m68k/crash1.c
*************** a601d3174509557affb7c56b0d7f0a1b  gcc/te
*** 94749,94755 ****
  4c6f03055e2ddbe219023e09eca004cc  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-5.c
  e3ac9d23d3105ffce0715cceec069e4d  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-6.c
  90299726efa4c409d45c5b105a896f89  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-7.c
! 3f454efb851b4ffeb827d687e08a56ed  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c
  6edce6a791cdbade4a7d5c4e46d8e90f  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-1.c
  3d8e128315c701984cca5647c4002f7b  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-2.c
  6684496deefa50081491a6995956bc24  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-3.c
--- 94804,94810 ----
  4c6f03055e2ddbe219023e09eca004cc  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-5.c
  e3ac9d23d3105ffce0715cceec069e4d  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-6.c
  90299726efa4c409d45c5b105a896f89  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-7.c
! e0f12a19e3dcc476fc7733857e9cb437  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c
  6edce6a791cdbade4a7d5c4e46d8e90f  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-1.c
  3d8e128315c701984cca5647c4002f7b  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-2.c
  6684496deefa50081491a6995956bc24  gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-run-3.c
*************** f95453a04d25316c015010a3d66699b8  gcc/te
*** 97629,97634 ****
--- 97684,97691 ----
  4a09604ef4cdb81da6aaf6179b4347d1  gcc/testsuite/gcc.target/riscv/pr96759.c
  f8e1480c639bcda238e3c7485f51f85e  gcc/testsuite/gcc.target/riscv/pr98777.c
  576ffdec066d69c35af0753463b174ae  gcc/testsuite/gcc.target/riscv/pr99702.c
+ 20010a916485eb48b91e76fab90ee728  gcc/testsuite/gcc.target/riscv/pragma-target-1.c
+ 894e5b67455a0ab27e45ff41f549c1e7  gcc/testsuite/gcc.target/riscv/pragma-target-2.c
  bb889ee3b43ef8822238d2da82a18b9b  gcc/testsuite/gcc.target/riscv/predef-1.c
  631c168c77a9af0c773050bef4b8943f  gcc/testsuite/gcc.target/riscv/predef-10.c
  318dab274ae6db996cba3a94694e749d  gcc/testsuite/gcc.target/riscv/predef-11.c
*************** d90ca4ab32f893e58362b7afbe85e6fd  gcc/te
*** 98286,98291 ****
--- 98343,98350 ----
  107743a69f58f28cf14e8a598bd333e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-1.c
  c1274e3ee15699a124ca1ff4e24fd55b  gcc/testsuite/gcc.target/riscv/rvv/autovec/gather-scatter/strided_store_run-2.c
  c1779350d6b08b51c352226f6a13ffb2  gcc/testsuite/gcc.target/riscv/rvv/autovec/madd-split2-1.c
+ f7a8ba49de6d1e5b275e35f45edbf009  gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-1.c
+ 2b66681c6de1c53f888f788a0ccfb6da  gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-2.c
  03b6c6282f299ea1ba67e487d39d0d18  gcc/testsuite/gcc.target/riscv/rvv/autovec/no-segment.c
  968af9929dcdb9ff769f561707bd3e36  gcc/testsuite/gcc.target/riscv/rvv/autovec/param-autovec-mode.c
  7da5b354874f99fde1d14c20b0fa76e7  gcc/testsuite/gcc.target/riscv/rvv/autovec/partial/gimple_fold-1.c
*************** e69ac673a560685af831869d72b01154  gcc/te
*** 98476,98481 ****
--- 98535,98544 ----
  e990c042b373d09f16b69f4b30f0ac20  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122321.c
  a46c21828339f41cac3054a662eefb70  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122445.c
  9e392034c9515123dd44a7ee88bd8905  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122627.c
+ f282bbefbf97b6d53a628679bbaa73c0  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-1.c
+ b2dd0767e7d7daf54047f6721f5c4fc5  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-2.c
+ 4c249548c54ca3fd544c8943a9d28b77  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022-2.c
+ 159ba529f2ab9b94d86dd9c7121d5aec  gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022.c
  ee8bcba5f6876f2027f0f263f81465aa  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-1.c
  7ff884bfa2e6cf9bc4c6172466538515  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-10.c
  b2792e9264dcd6fa2e88f495d51677e6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/extract_last-11.c
*************** fa602ac5a67a9bd2f41190760f8ee254  gcc/te
*** 98514,98519 ****
--- 98577,98598 ----
  f830bc7889b5d1360c2788743d753f7f  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-7.c
  8896cc2ec1b579581ca3e02c0ee09430  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-8.c
  14ed314f7535c6f005f8429685917cd5  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-9.c
+ 7240802c32f17783ff1c02ece2399973  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1-run.c
+ 9d0bff7b30611d272f690f55d8030e43  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1.c
+ d724ef67b180c1b786cad51d65abeb29  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2-run.c
+ 2ba4b5ab6d8b64d15f84327b9560a409  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2.c
+ 11e3ab9d83a30a8dc296eb27ad6d3902  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3-run.c
+ d098d941c205bdae59bd07f3c659f9ac  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3.c
+ dedff2f33dc910fa1f68ea2a759ad721  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4-run.c
+ 70b1d49be3930f6a21d04fdc3cd973af  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4.c
+ 9e6018d99e8d759517c5c266afc69b55  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5-run.c
+ 8ead926e14b74baa62521239370c5e1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5.c
+ f3cb8c2e919250c1c5c535cb784f8f70  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6-run.c
+ 820e3fa20253fa4808232a3ff4c7296c  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6.c
+ b364ca1981818cecbb13465b70c23ba6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7-run.c
+ c100cc3fd611725f78312c4408148650  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7.c
+ c1b7c74a0e70531cef7519721e5e9ff6  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8-run.c
+ e6cd9ea69c640eb0a252e4da30d07f39  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8.c
  f43dfb7397c7a585e908a5efd48027ab  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_call-1.c
  8215a8ab8bf66854039bf4418480c6bf  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_call-2.c
  8ec94a8edb2e1640af133cf4c2af742f  gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc_call-3.c
*************** f1ef6fa13c480640b814506c7de90cc4  gcc/te
*** 100078,100103 ****
  5d4615048131f4bf8808b05375d398e8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f32.c
  06ed78876e2ec7112f61e7ad4d7ca9ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f16.c
  8964a9709f073f1429277aa175e9ac29  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f32.c
! 2b0974e13a773f3cf747b8a2d2f3afcd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
! 3cc64f46a34aa329dbea077958740ea1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
! 5abc996ed751a1e6e84c659eb10eefa1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
! e4c71ab3d3e69a58113214544774fa5c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
  4201a95f317ea67a928f4dca981cf53d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
  5d2d85231d5430e4ca8d0b4541fef926  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
  a2c745b379bb71844eec6d8d84ea3e92  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
  6ae549569e2b28be78d6ea7dd482a3ba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
! a25062a79631dd8f99adeea2d6c9559c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
! 1e78e7111069a6111a93f3e7828d8d33  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
! ea9e9332005c3febee88eada951565e8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
! 92c63b211f99c185f82d40600533888f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
  89dd7d1d5a260205e52c4ff6a3d24208  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
  ab0b8bbb618d9753eb92f7dc4b9034ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
  a7b9826bc0a50ed1d82760400b61445e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
  261945c13159d1684c3979807ec51589  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
! 722ec752e3bf1a61188c3fe68367a78d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
! 85bcdcef366c1e9ee29671acc8804145  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
! 194310aa8da0bc58a4efcb6cd7084a9d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
! 6bf65042498323e4eb7312041f1d3cc6  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
  bc98a83b126842531e6902eb3716ff1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
  69b4b8946f9ac7bf86dbee7681dab65e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
  c2efca1365ac54d122ff83ae2aefd81b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
--- 100157,100182 ----
  5d4615048131f4bf8808b05375d398e8  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-1-f32.c
  06ed78876e2ec7112f61e7ad4d7ca9ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f16.c
  8964a9709f073f1429277aa175e9ac29  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vf_vfwsub-run-2-f32.c
! c588550ddb15f80b017d2c332910752b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
! d6776d81d30cc50aab86cdff3bf86592  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
! 42bbf76e4625c99754b7532dee819929  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
! 5d99730c4d83fa83ad427a9845284a5e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
  4201a95f317ea67a928f4dca981cf53d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
  5d2d85231d5430e4ca8d0b4541fef926  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
  a2c745b379bb71844eec6d8d84ea3e92  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
  6ae549569e2b28be78d6ea7dd482a3ba  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
! b13bb596c708ea6fb9ab3881149e2c03  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
! 76fec68f4d36c39839ecdfd1dc02a225  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
! bd15578e69f21a028ed6ed939d6fd8f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
! cc97ac8a2b8817a7574f3957cf3c1fb2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
  89dd7d1d5a260205e52c4ff6a3d24208  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u16.c
  ab0b8bbb618d9753eb92f7dc4b9034ed  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u32.c
  a7b9826bc0a50ed1d82760400b61445e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u64.c
  261945c13159d1684c3979807ec51589  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-u8.c
! deacfb6035d0882d9d6c11eef8fdb9cd  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
! ef05c5bfef88f9925e898f5a734d452d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
! 9745bb796b9d72851eb9952421f50466  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
! 7afa02934fc3433840cbe479f70b3198  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
  bc98a83b126842531e6902eb3716ff1f  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u16.c
  69b4b8946f9ac7bf86dbee7681dab65e  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u32.c
  c2efca1365ac54d122ff83ae2aefd81b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-u64.c
*************** ee4d762425ee9fa02262080e983ca873  gcc/te
*** 100147,100154 ****
  d0716e3befd7d8676e3f95ddfc26cf11  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i32.c
  68f38cf2fee3b275e68ad7b4c0590852  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i64.c
  a668be35e3b0365efdcb1644b843f8f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i8.c
! fc09dfd992febbc2bf439a2287f9ff3d  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! 1427199499af08efd4b94c1ae836c581  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  847718238428fcf0d191c5e8f66f2c60  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary.h
  0ac4abbac6b69050fc3b142e914fe58c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary_data.h
--- 100226,100233 ----
  d0716e3befd7d8676e3f95ddfc26cf11  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i32.c
  68f38cf2fee3b275e68ad7b4c0590852  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i64.c
  a668be35e3b0365efdcb1644b843f8f7  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-merge-3-i8.c
! cd46932af49215b943e12c56a9dec0e2  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
! e94b1ce21cd68647545e6dcfbee56506  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
  ccb9cff4438796fd5c2c015df2204a55  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_run.h
  847718238428fcf0d191c5e8f66f2c60  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary.h
  0ac4abbac6b69050fc3b142e914fe58c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_ternary_data.h
*************** af39bb531df9d78fb100a8bc074d5527  gcc/te
*** 100253,100258 ****
--- 100332,100341 ----
  8a062701030c2179b34b5cdbe2e5affb  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmseq-run-1-u32.c
  066197fc9e9481f3a6397992b977191b  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmseq-run-1-u64.c
  cfeabedcaa487c67a2318497a6bd3a39  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmseq-run-1-u8.c
+ feb1c042565686ae5320d1f85f40d64c  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i16.c
+ eba89c257c6a48dfedc0a0d2549e4755  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i32.c
+ a3fa1a1070feaa2a16a19d13968894f1  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i64.c
+ b993c90b209864deb26293adbcbf4d47  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i8.c
  443e3e725a8805539e6f6f0707e24e23  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsltu-run-1-u16.c
  de0be748ebac41beb791e67a7e969c93  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsltu-run-1-u32.c
  5c700fdc87c3f4d8d98a4b5d5de51597  gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmsltu-run-1-u64.c
*************** e89e24e20f008ad8effa9e3f2fd9d042  gcc/te
*** 103468,103473 ****
--- 103551,103557 ----
  cdfaf0f556535d7f3ffb05c59924a233  gcc/testsuite/gcc.target/s390/bitint-4.c
  381808a4590567090c1e800f04ae55f5  gcc/testsuite/gcc.target/s390/bswap-1.c
  2750052bc05f059828b76c05a2a7da2e  gcc/testsuite/gcc.target/s390/bswaphi-1.c
+ b1e7540142373435ec864919ea80e8c4  gcc/testsuite/gcc.target/s390/builtin-array-arg-1.c
  6837d1a6d1d448c21031e10330351313  gcc/testsuite/gcc.target/s390/builtin-constant-p-threading.c
  37f41f2d3820a5ed3bd75f1c2a0da697  gcc/testsuite/gcc.target/s390/call-z10-pic-nodatarel.c
  cece0b36a531ed987691ab943d51fa1a  gcc/testsuite/gcc.target/s390/call-z10-pic.c
*************** da2b0654320e4a3e4253428041d8edf9  gcc/te
*** 105345,105351 ****
  42d3851d5f369d7a3feb436c0b56019c  gcc/testsuite/gdc.dg/Wmismatched_enum.d
  ba3ec121536606fdf9d34aff37b9da35  gcc/testsuite/gdc.dg/Wpadded.d
  9bc103c321c35752bcd99c0bd239f20b  gcc/testsuite/gdc.dg/Wunused_value.d
! ea194c46ba387864ef4256a4e2b426b7  gcc/testsuite/gdc.dg/analyzer/analyzer.exp
  63318cc46d15d60fe163e071e030c6d8  gcc/testsuite/gdc.dg/analyzer/pr111537.d
  684da8abc6d44a02e6b361d163e350c1  gcc/testsuite/gdc.dg/array1.d
  9d9dbce6300ee987eb0563a9ff28485e  gcc/testsuite/gdc.dg/asan/asan.exp
--- 105429,105435 ----
  42d3851d5f369d7a3feb436c0b56019c  gcc/testsuite/gdc.dg/Wmismatched_enum.d
  ba3ec121536606fdf9d34aff37b9da35  gcc/testsuite/gdc.dg/Wpadded.d
  9bc103c321c35752bcd99c0bd239f20b  gcc/testsuite/gdc.dg/Wunused_value.d
! 8ab04eea013f56ab2d200544934c4d7c  gcc/testsuite/gdc.dg/analyzer/analyzer.exp
  63318cc46d15d60fe163e071e030c6d8  gcc/testsuite/gdc.dg/analyzer/pr111537.d
  684da8abc6d44a02e6b361d163e350c1  gcc/testsuite/gdc.dg/array1.d
  9d9dbce6300ee987eb0563a9ff28485e  gcc/testsuite/gdc.dg/asan/asan.exp
*************** eae1c01e9cd07e06f5b2053c9c8e8d0c  gcc/te
*** 109975,109981 ****
  407349fe5dc0dd80df43de2e773a4cab  gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90
  4a2d243fa69596ed5111843ecb20b347  gcc/testsuite/gfortran.dg/ambiguous_specific_1.f90
  44a13c6b4d7ef49b6173c7e5be97aeba  gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90
! 81dae631d062a8a8ccb31024f732892f  gcc/testsuite/gfortran.dg/analyzer/analyzer.exp
  2f368a8d04f58e4d6d300980282f68ea  gcc/testsuite/gfortran.dg/analyzer/deferred_character_25.f90
  d73a0bb9f41cc644e39e6ef9cb47095f  gcc/testsuite/gfortran.dg/analyzer/malloc-example.f90
  456395eb94ed204b99bab7e77b4c01de  gcc/testsuite/gfortran.dg/analyzer/malloc.f90
--- 110059,110065 ----
  407349fe5dc0dd80df43de2e773a4cab  gcc/testsuite/gfortran.dg/ambiguous_reference_2.f90
  4a2d243fa69596ed5111843ecb20b347  gcc/testsuite/gfortran.dg/ambiguous_specific_1.f90
  44a13c6b4d7ef49b6173c7e5be97aeba  gcc/testsuite/gfortran.dg/ambiguous_specific_2.f90
! 195d13988aea81f1cd232ff1d6ea8e56  gcc/testsuite/gfortran.dg/analyzer/analyzer.exp
  2f368a8d04f58e4d6d300980282f68ea  gcc/testsuite/gfortran.dg/analyzer/deferred_character_25.f90
  d73a0bb9f41cc644e39e6ef9cb47095f  gcc/testsuite/gfortran.dg/analyzer/malloc-example.f90
  456395eb94ed204b99bab7e77b4c01de  gcc/testsuite/gfortran.dg/analyzer/malloc.f90
*************** e1cea00268c9eb57abc50ee584fd93aa  gcc/te
*** 109988,109994 ****
  c6556ebb6443566c88e0551ae2f19d60  gcc/testsuite/gfortran.dg/analyzer/pr93993.f90
  6569bd8079beec5c6b5b0f599d0af012  gcc/testsuite/gfortran.dg/analyzer/pr96949.f90
  38a12134549120c872485b2894677eec  gcc/testsuite/gfortran.dg/analyzer/pr97668.f
! 3c6755fb31e8694ecc7b0bdcbfed1016  gcc/testsuite/gfortran.dg/analyzer/uninit-pr63311.f90
  b9a4dd9ce1dc5ec1be98f33811c4eba8  gcc/testsuite/gfortran.dg/and_or_xor.f90
  fb1c5569f69a4b48d53284a6e6fe1b9e  gcc/testsuite/gfortran.dg/anint_1.f90
  f19486a23086c5de84ef69f54a0e6794  gcc/testsuite/gfortran.dg/any_all_1.f90
--- 110072,110078 ----
  c6556ebb6443566c88e0551ae2f19d60  gcc/testsuite/gfortran.dg/analyzer/pr93993.f90
  6569bd8079beec5c6b5b0f599d0af012  gcc/testsuite/gfortran.dg/analyzer/pr96949.f90
  38a12134549120c872485b2894677eec  gcc/testsuite/gfortran.dg/analyzer/pr97668.f
! a4157de7774b799fee4fb7f5ea55c8de  gcc/testsuite/gfortran.dg/analyzer/uninit-pr63311.f90
  b9a4dd9ce1dc5ec1be98f33811c4eba8  gcc/testsuite/gfortran.dg/and_or_xor.f90
  fb1c5569f69a4b48d53284a6e6fe1b9e  gcc/testsuite/gfortran.dg/anint_1.f90
  f19486a23086c5de84ef69f54a0e6794  gcc/testsuite/gfortran.dg/any_all_1.f90
*************** cf71c08bba011121c789ca925ca3d13b  gcc/te
*** 110300,110306 ****
  6376d7ef6f137372a501dd7c8547864d  gcc/testsuite/gfortran.dg/associative_1.f90
  04280cc7719e51d18a6ad4510745c528  gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90
  e41613f37c052bf20cb9d34a7bb40da1  gcc/testsuite/gfortran.dg/assumed_charlen_arg_2.f90
! f1b97532f52bd477910c18b834c07594  gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90
  79be251ea13580f77617d862fabdf3e8  gcc/testsuite/gfortran.dg/assumed_charlen_function_1.f90
  f484c374c6a3a4d7adab5922c2c33aec  gcc/testsuite/gfortran.dg/assumed_charlen_function_2.f90
  3e7ad4729a2eede254b95374bf8409c8  gcc/testsuite/gfortran.dg/assumed_charlen_function_3.f90
--- 110384,110390 ----
  6376d7ef6f137372a501dd7c8547864d  gcc/testsuite/gfortran.dg/associative_1.f90
  04280cc7719e51d18a6ad4510745c528  gcc/testsuite/gfortran.dg/assumed_charlen_arg_1.f90
  e41613f37c052bf20cb9d34a7bb40da1  gcc/testsuite/gfortran.dg/assumed_charlen_arg_2.f90
! ff3363838b35dd694a367379e4bc573b  gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90
  79be251ea13580f77617d862fabdf3e8  gcc/testsuite/gfortran.dg/assumed_charlen_function_1.f90
  f484c374c6a3a4d7adab5922c2c33aec  gcc/testsuite/gfortran.dg/assumed_charlen_function_2.f90
  3e7ad4729a2eede254b95374bf8409c8  gcc/testsuite/gfortran.dg/assumed_charlen_function_3.f90
*************** c4b15a25aeb90adb2fe3894279378ec7  gcc/te
*** 110408,110414 ****
  31e9278c6f1c25f6970f1455223ed3c0  gcc/testsuite/gfortran.dg/auto_save_1.f90
  1a947433e8a63996953999f840b27565  gcc/testsuite/gfortran.dg/auto_save_2.f90
  bfe48b30aaf214bae7afa7bb0bbc78bf  gcc/testsuite/gfortran.dg/automatic_1.f90
! b347390b63a364594179b619dec33a75  gcc/testsuite/gfortran.dg/automatic_char_len_1.f90
  0bb10fbdd251207409a82e8715768a6e  gcc/testsuite/gfortran.dg/automatic_char_len_2.f90
  c8b2f59a74a35af78ffe04eabc9fc9e5  gcc/testsuite/gfortran.dg/automatic_default_init_1.f90
  73d6e8707024d85b939354155ff259a3  gcc/testsuite/gfortran.dg/automatic_module_variable.f90
--- 110492,110498 ----
  31e9278c6f1c25f6970f1455223ed3c0  gcc/testsuite/gfortran.dg/auto_save_1.f90
  1a947433e8a63996953999f840b27565  gcc/testsuite/gfortran.dg/auto_save_2.f90
  bfe48b30aaf214bae7afa7bb0bbc78bf  gcc/testsuite/gfortran.dg/automatic_1.f90
! 0c5e0340b282071ce6aa790d53b89d10  gcc/testsuite/gfortran.dg/automatic_char_len_1.f90
  0bb10fbdd251207409a82e8715768a6e  gcc/testsuite/gfortran.dg/automatic_char_len_2.f90
  c8b2f59a74a35af78ffe04eabc9fc9e5  gcc/testsuite/gfortran.dg/automatic_default_init_1.f90
  73d6e8707024d85b939354155ff259a3  gcc/testsuite/gfortran.dg/automatic_module_variable.f90
*************** e3f2e306122ba2b82d99fcdcf38a388f  gcc/te
*** 111558,111566 ****
  1b3c7a86b8ef34e232357cb1e76b8755  gcc/testsuite/gfortran.dg/coarray_lib_token_4.f90
  2d0699c77682dc9d6a0ceba649b61a15  gcc/testsuite/gfortran.dg/coarray_lock_1.f90
  f7a47ce438683c4f8c5566d174e4525b  gcc/testsuite/gfortran.dg/coarray_lock_2.f90
! bb8d56d19a9b76a2194076b6f5de055f  gcc/testsuite/gfortran.dg/coarray_lock_3.f90
! c132dbfa1738d526e8055c025c1641e0  gcc/testsuite/gfortran.dg/coarray_lock_4.f90
! 074eddb0df81baa8fa98afe087fec459  gcc/testsuite/gfortran.dg/coarray_lock_5.f90
  5a1674540bf58193c6febb71d5f4b58b  gcc/testsuite/gfortran.dg/coarray_lock_6.f90
  23b8603e7d1d4aaf27f154ffeffe5241  gcc/testsuite/gfortran.dg/coarray_lock_7.f90
  363f712216477dd98bef29eaa7b022e7  gcc/testsuite/gfortran.dg/coarray_poly_1.f90
--- 111642,111650 ----
  1b3c7a86b8ef34e232357cb1e76b8755  gcc/testsuite/gfortran.dg/coarray_lib_token_4.f90
  2d0699c77682dc9d6a0ceba649b61a15  gcc/testsuite/gfortran.dg/coarray_lock_1.f90
  f7a47ce438683c4f8c5566d174e4525b  gcc/testsuite/gfortran.dg/coarray_lock_2.f90
! 83bf59c0d8e4ecf8510b94d23cfb1069  gcc/testsuite/gfortran.dg/coarray_lock_3.f90
! 5b662516b0846930a9822c5d11db3acb  gcc/testsuite/gfortran.dg/coarray_lock_4.f90
! a61646c8d2a54bc1972126b81acf1cef  gcc/testsuite/gfortran.dg/coarray_lock_5.f90
  5a1674540bf58193c6febb71d5f4b58b  gcc/testsuite/gfortran.dg/coarray_lock_6.f90
  23b8603e7d1d4aaf27f154ffeffe5241  gcc/testsuite/gfortran.dg/coarray_lock_7.f90
  363f712216477dd98bef29eaa7b022e7  gcc/testsuite/gfortran.dg/coarray_poly_1.f90
*************** dde6c08dab677880bb894b2143cf090b  gcc/te
*** 112387,112393 ****
  df7fd6f7581d27330f0013f9a3246e99  gcc/testsuite/gfortran.dg/entry_20.f90
  72628f114c4fb8fab6905f4a0f29e09f  gcc/testsuite/gfortran.dg/entry_21.f90
  37e5c5438d0e0514b44e64686d3843da  gcc/testsuite/gfortran.dg/entry_22.f90
! 0db0be3b4ced16a50d8129fd0aa3d8fa  gcc/testsuite/gfortran.dg/entry_23.f
  736b641c8447236bf4ebf1806522d583  gcc/testsuite/gfortran.dg/entry_24.f90
  6b39a2792de2f424e5fca65e4dd34f47  gcc/testsuite/gfortran.dg/entry_25.f90
  e58384fbdf9d19ad690ac1eae7664064  gcc/testsuite/gfortran.dg/entry_26.f90
--- 112471,112477 ----
  df7fd6f7581d27330f0013f9a3246e99  gcc/testsuite/gfortran.dg/entry_20.f90
  72628f114c4fb8fab6905f4a0f29e09f  gcc/testsuite/gfortran.dg/entry_21.f90
  37e5c5438d0e0514b44e64686d3843da  gcc/testsuite/gfortran.dg/entry_22.f90
! ff3ba925448e5c5b221fdec03f58d4dd  gcc/testsuite/gfortran.dg/entry_23.f
  736b641c8447236bf4ebf1806522d583  gcc/testsuite/gfortran.dg/entry_24.f90
  6b39a2792de2f424e5fca65e4dd34f47  gcc/testsuite/gfortran.dg/entry_25.f90
  e58384fbdf9d19ad690ac1eae7664064  gcc/testsuite/gfortran.dg/entry_26.f90
*************** e3f8979302c39ffbf6c7c03d08fc1562  gcc/te
*** 112607,112613 ****
  4a82b3bd0b6fd8d978b3278deeaf8249  gcc/testsuite/gfortran.dg/finalize_56.f90
  9d1fdf3e8a1de7a8307fa3520fa3dbfd  gcc/testsuite/gfortran.dg/finalize_57.f90
  51b8bf932be238b91e30f73f65cbee55  gcc/testsuite/gfortran.dg/finalize_58.f90
! 273d9e21ad8fadbf6d2705e86315b2a3  gcc/testsuite/gfortran.dg/finalize_59.f90
  00394d3b18b9e094a6751225fef04a51  gcc/testsuite/gfortran.dg/finalize_6.f90
  cccfd4eb98b07f30fc6a43462ae1078b  gcc/testsuite/gfortran.dg/finalize_60.f90
  520ae6cd723f43e02411aa72bb807bb5  gcc/testsuite/gfortran.dg/finalize_7.f03
--- 112691,112697 ----
  4a82b3bd0b6fd8d978b3278deeaf8249  gcc/testsuite/gfortran.dg/finalize_56.f90
  9d1fdf3e8a1de7a8307fa3520fa3dbfd  gcc/testsuite/gfortran.dg/finalize_57.f90
  51b8bf932be238b91e30f73f65cbee55  gcc/testsuite/gfortran.dg/finalize_58.f90
! 717a66306d43d34d3fede84fdb402762  gcc/testsuite/gfortran.dg/finalize_59.f90
  00394d3b18b9e094a6751225fef04a51  gcc/testsuite/gfortran.dg/finalize_6.f90
  cccfd4eb98b07f30fc6a43462ae1078b  gcc/testsuite/gfortran.dg/finalize_60.f90
  520ae6cd723f43e02411aa72bb807bb5  gcc/testsuite/gfortran.dg/finalize_7.f03
*************** f1d77276e2ca62dd595339541550c132  gcc/te
*** 112900,112908 ****
  32479de579e3888726f7f547da56f9ea  gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f
  5b655890765cdfb06e030a7724cfe91a  gcc/testsuite/gfortran.dg/g77/f77-edit-t-out.f
  a6c4b2bec854cf2b1e63b754044a60d3  gcc/testsuite/gfortran.dg/g77/f77-edit-x-out.f
! f102f6b3f117e1d429d467dd7060671d  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-bit.f
! c9f51fa26c0f0863989933fd1d01bf0b  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-mathematical.f
! 37963d283a33f8defd75b40ec2e76306  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-numeric.f
  96977883421b175b67be1118b794bd56  gcc/testsuite/gfortran.dg/g77/ffixed-form-1.f
  29ff9a4381ca8c02a6e5817b0a713d27  gcc/testsuite/gfortran.dg/g77/ffixed-form-2.f
  57194471031e9d956071d8b5b26dad72  gcc/testsuite/gfortran.dg/g77/ffixed-line-length-0.f
--- 112984,112992 ----
  32479de579e3888726f7f547da56f9ea  gcc/testsuite/gfortran.dg/g77/f77-edit-t-in.f
  5b655890765cdfb06e030a7724cfe91a  gcc/testsuite/gfortran.dg/g77/f77-edit-t-out.f
  a6c4b2bec854cf2b1e63b754044a60d3  gcc/testsuite/gfortran.dg/g77/f77-edit-x-out.f
! abb61e626ce951319f5e7f7e0fd21a23  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-bit.f
! c27e718f93faccd2080492d4b4f8052b  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-mathematical.f
! 9e0651de1d1f5c62e85c06b246b7140a  gcc/testsuite/gfortran.dg/g77/f90-intrinsic-numeric.f
  96977883421b175b67be1118b794bd56  gcc/testsuite/gfortran.dg/g77/ffixed-form-1.f
  29ff9a4381ca8c02a6e5817b0a713d27  gcc/testsuite/gfortran.dg/g77/ffixed-form-2.f
  57194471031e9d956071d8b5b26dad72  gcc/testsuite/gfortran.dg/g77/ffixed-line-length-0.f
*************** c34f0338bfd38cc5789eae9ef9b39d98  gcc/te
*** 112915,112922 ****
  b76273e7af403caabc68f7f1973b211c  gcc/testsuite/gfortran.dg/g77/fno-underscoring.f
  51a2c0c69a512565c359338191e9e39e  gcc/testsuite/gfortran.dg/g77/funderscoring.f
  38ab98bd5d8549b0b5d1751e0a010433  gcc/testsuite/gfortran.dg/g77/int8421.f
! 338eb90af5e7e87b307a46204faa4341  gcc/testsuite/gfortran.dg/g77/intrinsic-unix-bessel.f
! ae88a47a36ff81768bbc94c2fccb750c  gcc/testsuite/gfortran.dg/g77/intrinsic-unix-erf.f
  b95bed0058de43a18f0b95b0a13babee  gcc/testsuite/gfortran.dg/g77/labug1.f
  5cd5db2f5585dc7595a6f6ad12e9e45d  gcc/testsuite/gfortran.dg/g77/large_vec.f
  7ebb2b647b7391d93f548e6b083eeb94  gcc/testsuite/gfortran.dg/g77/le.f
--- 112999,113006 ----
  b76273e7af403caabc68f7f1973b211c  gcc/testsuite/gfortran.dg/g77/fno-underscoring.f
  51a2c0c69a512565c359338191e9e39e  gcc/testsuite/gfortran.dg/g77/funderscoring.f
  38ab98bd5d8549b0b5d1751e0a010433  gcc/testsuite/gfortran.dg/g77/int8421.f
! 8e584f0b8d96bd9db19bec53647eabff  gcc/testsuite/gfortran.dg/g77/intrinsic-unix-bessel.f
! a76baa91eff149189d47776cee94ee55  gcc/testsuite/gfortran.dg/g77/intrinsic-unix-erf.f
  b95bed0058de43a18f0b95b0a13babee  gcc/testsuite/gfortran.dg/g77/labug1.f
  5cd5db2f5585dc7595a6f6ad12e9e45d  gcc/testsuite/gfortran.dg/g77/large_vec.f
  7ebb2b647b7391d93f548e6b083eeb94  gcc/testsuite/gfortran.dg/g77/le.f
*************** cdbe16382c20ff02d5be2370ef235ffd  gcc/te
*** 112989,112995 ****
  1a47a5d775b89e7ea35bb88b047004a6  gcc/testsuite/gfortran.dg/goacc-gomp/free-1.f90
  111903c327dd54e41500683d65fa43ad  gcc/testsuite/gfortran.dg/goacc-gomp/goacc-gomp.exp
  66b451ac1ef6dc37e41acf5ef7d3a7f8  gcc/testsuite/gfortran.dg/goacc-gomp/mixed-1.f
! 2f5688fd6d13ef335191539fb816b1e8  gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90
  ca804f2df22c482ff1ff6d8e4e966c95  gcc/testsuite/gfortran.dg/goacc/acc-wait-1.f90
  623dd259c1089424ad39ce48ecf7872f  gcc/testsuite/gfortran.dg/goacc/acc_on_device-1.f95
  1bb13022cfc4df10f7b288df9b2ceaa7  gcc/testsuite/gfortran.dg/goacc/acc_on_device-2-off.f95
--- 113073,113079 ----
  1a47a5d775b89e7ea35bb88b047004a6  gcc/testsuite/gfortran.dg/goacc-gomp/free-1.f90
  111903c327dd54e41500683d65fa43ad  gcc/testsuite/gfortran.dg/goacc-gomp/goacc-gomp.exp
  66b451ac1ef6dc37e41acf5ef7d3a7f8  gcc/testsuite/gfortran.dg/goacc-gomp/mixed-1.f
! f062d49184fa5ca95a859017d0ac7c8d  gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90
  ca804f2df22c482ff1ff6d8e4e966c95  gcc/testsuite/gfortran.dg/goacc/acc-wait-1.f90
  623dd259c1089424ad39ce48ecf7872f  gcc/testsuite/gfortran.dg/goacc/acc_on_device-1.f95
  1bb13022cfc4df10f7b288df9b2ceaa7  gcc/testsuite/gfortran.dg/goacc/acc_on_device-2-off.f95
*************** fff3ef606b07a0c12c2323afa6fe446d  gcc/te
*** 113159,113165 ****
  8b11b5d3280af265110281a0a77e18f9  gcc/testsuite/gfortran.dg/goacc/pr85879.f90
  1e6397cc1e2bf821ff497ca3cb5b4aa3  gcc/testsuite/gfortran.dg/goacc/pr89773.f90
  3560a9d0030a3f7e3afe0047fa5f072e  gcc/testsuite/gfortran.dg/goacc/pr92793-1.f90
! 1d35dffa84f295d1e3711b5a61d9779d  gcc/testsuite/gfortran.dg/goacc/pr93329.f90
  f456cdcfbddab6f8bef5a32a8ae942c7  gcc/testsuite/gfortran.dg/goacc/pr93463.f90
  53e5e05b763f714373036ee3c31c7f01  gcc/testsuite/gfortran.dg/goacc/pr93464-2.f90
  75656a375a89cf61af800fc27b130ac1  gcc/testsuite/gfortran.dg/goacc/pr93464.f90
--- 113243,113249 ----
  8b11b5d3280af265110281a0a77e18f9  gcc/testsuite/gfortran.dg/goacc/pr85879.f90
  1e6397cc1e2bf821ff497ca3cb5b4aa3  gcc/testsuite/gfortran.dg/goacc/pr89773.f90
  3560a9d0030a3f7e3afe0047fa5f072e  gcc/testsuite/gfortran.dg/goacc/pr92793-1.f90
! d4ec9e424a21673404e2e7df3d1701c5  gcc/testsuite/gfortran.dg/goacc/pr93329.f90
  f456cdcfbddab6f8bef5a32a8ae942c7  gcc/testsuite/gfortran.dg/goacc/pr93463.f90
  53e5e05b763f714373036ee3c31c7f01  gcc/testsuite/gfortran.dg/goacc/pr93464-2.f90
  75656a375a89cf61af800fc27b130ac1  gcc/testsuite/gfortran.dg/goacc/pr93464.f90
*************** e5de83f3c72df9c91e2516026a10fd5c  gcc/te
*** 113234,113241 ****
  e9972505e1a87fdeda00b94d99cf711b  gcc/testsuite/gfortran.dg/goacc/vector_length.f90
  d09b6d0bd3c55d3b99ebe64fe2ee3d04  gcc/testsuite/gfortran.dg/goacc/wait.f90
  4792d309290210831c4f3cd01453f237  gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90
  ca08846090699b11a20208a800d4cf04  gcc/testsuite/gfortran.dg/gomp/adjust-args-1.f90
! 27c53e9d9da4a677a470776faf701455  gcc/testsuite/gfortran.dg/gomp/adjust-args-10.f90
  0221e6598b37e7bceb19dc705f66e3a5  gcc/testsuite/gfortran.dg/gomp/adjust-args-11.f90
  71a8d09b919831f501b73b2f68ba89e6  gcc/testsuite/gfortran.dg/gomp/adjust-args-12.f90
  51fb1aec508b12a91061167a8f71deed  gcc/testsuite/gfortran.dg/gomp/adjust-args-13.f90
--- 113318,113326 ----
  e9972505e1a87fdeda00b94d99cf711b  gcc/testsuite/gfortran.dg/goacc/vector_length.f90
  d09b6d0bd3c55d3b99ebe64fe2ee3d04  gcc/testsuite/gfortran.dg/goacc/wait.f90
  4792d309290210831c4f3cd01453f237  gcc/testsuite/gfortran.dg/goacc/warn_truncated.f90
+ 5e630960049f800f3953c07494d16c2a  gcc/testsuite/gfortran.dg/gomp/52-deps.f90
  ca08846090699b11a20208a800d4cf04  gcc/testsuite/gfortran.dg/gomp/adjust-args-1.f90
! 76b2ebce9597635baaba14b561380adc  gcc/testsuite/gfortran.dg/gomp/adjust-args-10.f90
  0221e6598b37e7bceb19dc705f66e3a5  gcc/testsuite/gfortran.dg/gomp/adjust-args-11.f90
  71a8d09b919831f501b73b2f68ba89e6  gcc/testsuite/gfortran.dg/gomp/adjust-args-12.f90
  51fb1aec508b12a91061167a8f71deed  gcc/testsuite/gfortran.dg/gomp/adjust-args-13.f90
*************** baf9504f9deb0d762ee67843795c34ad  gcc/te
*** 113250,113256 ****
  be34af17efc15c3908af24a39ba0b826  gcc/testsuite/gfortran.dg/gomp/adjust-args-7.f90
  ab50c2fe7bdcd4e02f3aa6489695f17d  gcc/testsuite/gfortran.dg/gomp/adjust-args-8.f90
  08306d08a3f2086ceda24b3218c4ed12  gcc/testsuite/gfortran.dg/gomp/adjust-args-9.f90
! 911e262e498830097ca8c02694f76c13  gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
  aa2f129bf735477d206c1fc34f102b17  gcc/testsuite/gfortran.dg/gomp/affinity-clause-1.f90
  3242eb8cd0e2489c3dcfa485f3b75d28  gcc/testsuite/gfortran.dg/gomp/affinity-clause-2.f90
  e417d854c53b75c2ba1bf99e780e44f9  gcc/testsuite/gfortran.dg/gomp/affinity-clause-3.f90
--- 113335,113341 ----
  be34af17efc15c3908af24a39ba0b826  gcc/testsuite/gfortran.dg/gomp/adjust-args-7.f90
  ab50c2fe7bdcd4e02f3aa6489695f17d  gcc/testsuite/gfortran.dg/gomp/adjust-args-8.f90
  08306d08a3f2086ceda24b3218c4ed12  gcc/testsuite/gfortran.dg/gomp/adjust-args-9.f90
! 94e0b1a391c6ba6a3db4cd88eaf08340  gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
  aa2f129bf735477d206c1fc34f102b17  gcc/testsuite/gfortran.dg/gomp/affinity-clause-1.f90
  3242eb8cd0e2489c3dcfa485f3b75d28  gcc/testsuite/gfortran.dg/gomp/affinity-clause-2.f90
  e417d854c53b75c2ba1bf99e780e44f9  gcc/testsuite/gfortran.dg/gomp/affinity-clause-3.f90
*************** c20c9f1e0f2b7f6bc763a7e20b0857ef  gcc/te
*** 113268,113291 ****
  8594f381e1344c5f1587ee1f8c22ed77  gcc/testsuite/gfortran.dg/gomp/allocate-12.f90
  a0f40b3f2545e1ffe3ba1eb23a11fa60  gcc/testsuite/gfortran.dg/gomp/allocate-13.f90
  ff6d377128556e0e1848678ee32b2b30  gcc/testsuite/gfortran.dg/gomp/allocate-13a.f90
! bced023ca1f5f691682542e7502655fc  gcc/testsuite/gfortran.dg/gomp/allocate-14.f90
  4502284686c6bf4f4967dbf067276b5a  gcc/testsuite/gfortran.dg/gomp/allocate-15.f90
! 15deb2c55ce0d1fede6ac3896447cff5  gcc/testsuite/gfortran.dg/gomp/allocate-16.f90
  f599914502cce400a69c7df0fd407965  gcc/testsuite/gfortran.dg/gomp/allocate-2.f90
  16e9d68b7804e4ecd40f3bd6702cf3c5  gcc/testsuite/gfortran.dg/gomp/allocate-3.f90
  3bdac730a5748360ce01b4b1d4550b1b  gcc/testsuite/gfortran.dg/gomp/allocate-4.f90
! 86b069fbddb056ff7978ad41d287817a  gcc/testsuite/gfortran.dg/gomp/allocate-5.f90
! ce790eea2adbcda8e976c78d6a836960  gcc/testsuite/gfortran.dg/gomp/allocate-6.f90
! dd7547673ddf4a2f989646d7721de8f7  gcc/testsuite/gfortran.dg/gomp/allocate-7.f90
  db9a9c9e9be7de239493d5f606d71961  gcc/testsuite/gfortran.dg/gomp/allocate-8.f90
  77868d12d537788c591fbb0f45ff5bbd  gcc/testsuite/gfortran.dg/gomp/allocate-9.f90
! c42b03521b42af31a3ca803d226ba241  gcc/testsuite/gfortran.dg/gomp/allocate-clause.f90
  1fafa7d4d833eb325754164f72bc4809  gcc/testsuite/gfortran.dg/gomp/allocate-pinned-1.f90
  7ffef7d2c60bb7fd7f09fb3731cdfd4c  gcc/testsuite/gfortran.dg/gomp/allocate-static-2.f90
  e98b64bfaca60de48d18e4479c7bacf7  gcc/testsuite/gfortran.dg/gomp/allocate-static-3.f90
  fdba6887e6e07e9db7286a8aa1e260ed  gcc/testsuite/gfortran.dg/gomp/allocators-1.f90
  de1aa465fd55a6b4c24514982405ff85  gcc/testsuite/gfortran.dg/gomp/allocators-2.f90
! dc598e53285474c71e357ec100b2489b  gcc/testsuite/gfortran.dg/gomp/allocators-3.f90
  ac6870964ba16f9c08fce6ee73023537  gcc/testsuite/gfortran.dg/gomp/allocators-4.f90
  2c46b1e169c6854da53c30fe0524733b  gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
  c46ee3001e6c3fe9109f03db804703a3  gcc/testsuite/gfortran.dg/gomp/append_args-1.f90
--- 113353,113376 ----
  8594f381e1344c5f1587ee1f8c22ed77  gcc/testsuite/gfortran.dg/gomp/allocate-12.f90
  a0f40b3f2545e1ffe3ba1eb23a11fa60  gcc/testsuite/gfortran.dg/gomp/allocate-13.f90
  ff6d377128556e0e1848678ee32b2b30  gcc/testsuite/gfortran.dg/gomp/allocate-13a.f90
! 1427e63cdfa6a6ee32467781b3cdc26a  gcc/testsuite/gfortran.dg/gomp/allocate-14.f90
  4502284686c6bf4f4967dbf067276b5a  gcc/testsuite/gfortran.dg/gomp/allocate-15.f90
! 32066313030d772ed76eb71e1b3b3625  gcc/testsuite/gfortran.dg/gomp/allocate-16.f90
  f599914502cce400a69c7df0fd407965  gcc/testsuite/gfortran.dg/gomp/allocate-2.f90
  16e9d68b7804e4ecd40f3bd6702cf3c5  gcc/testsuite/gfortran.dg/gomp/allocate-3.f90
  3bdac730a5748360ce01b4b1d4550b1b  gcc/testsuite/gfortran.dg/gomp/allocate-4.f90
! 8332d54a8612efaffd56b742ccc46420  gcc/testsuite/gfortran.dg/gomp/allocate-5.f90
! 8c46487581140059e2ecbcffbb0495a4  gcc/testsuite/gfortran.dg/gomp/allocate-6.f90
! ec8293d35d2af0891574bfa038e7d749  gcc/testsuite/gfortran.dg/gomp/allocate-7.f90
  db9a9c9e9be7de239493d5f606d71961  gcc/testsuite/gfortran.dg/gomp/allocate-8.f90
  77868d12d537788c591fbb0f45ff5bbd  gcc/testsuite/gfortran.dg/gomp/allocate-9.f90
! 4acd7d30dbb157b399ab53244bf88e88  gcc/testsuite/gfortran.dg/gomp/allocate-clause.f90
  1fafa7d4d833eb325754164f72bc4809  gcc/testsuite/gfortran.dg/gomp/allocate-pinned-1.f90
  7ffef7d2c60bb7fd7f09fb3731cdfd4c  gcc/testsuite/gfortran.dg/gomp/allocate-static-2.f90
  e98b64bfaca60de48d18e4479c7bacf7  gcc/testsuite/gfortran.dg/gomp/allocate-static-3.f90
  fdba6887e6e07e9db7286a8aa1e260ed  gcc/testsuite/gfortran.dg/gomp/allocators-1.f90
  de1aa465fd55a6b4c24514982405ff85  gcc/testsuite/gfortran.dg/gomp/allocators-2.f90
! bfb655d90e0515502b27574637d7ae99  gcc/testsuite/gfortran.dg/gomp/allocators-3.f90
  ac6870964ba16f9c08fce6ee73023537  gcc/testsuite/gfortran.dg/gomp/allocators-4.f90
  2c46b1e169c6854da53c30fe0524733b  gcc/testsuite/gfortran.dg/gomp/append-args-interop.f90
  c46ee3001e6c3fe9109f03db804703a3  gcc/testsuite/gfortran.dg/gomp/append_args-1.f90
*************** be2dfd843076b56ef43acf3c66d28133  gcc/te
*** 113300,113306 ****
  55c5aae303b2f414fe109487e76782b1  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.5.f90
  278fa02dc8d4218d856eb17c980f99c5  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.6.f90
  90986eca2e190029a1be567e9d9846da  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.7.f90
! 413c067e7423e6fc7b582856bea3ee0e  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.12.1.f90
  7a87a14d2d66fd2a9e2fe2d04374165f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.13.1.f90
  c57b8b6fdd416d7fcfb528ec1563cd6e  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.14.1.f90
  8e79d45a1a7efedc931e5b6e6dcd2cfc  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.17.1.f90
--- 113385,113391 ----
  55c5aae303b2f414fe109487e76782b1  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.5.f90
  278fa02dc8d4218d856eb17c980f99c5  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.6.f90
  90986eca2e190029a1be567e9d9846da  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.11.7.f90
! 620b87073ad85a0d0f7c1f7296a1f6ed  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.12.1.f90
  7a87a14d2d66fd2a9e2fe2d04374165f  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.13.1.f90
  c57b8b6fdd416d7fcfb528ec1563cd6e  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.14.1.f90
  8e79d45a1a7efedc931e5b6e6dcd2cfc  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.17.1.f90
*************** e892480f878db9fb2d75388365b0d38f  gcc/te
*** 113327,113333 ****
  99ee5875ce6758020fa75de42d1b90b0  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90
  182731c8064c6ef83beb1d10cd03700b  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.32.1.f90
  157bb81ef8b8706d56531116aacc2653  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.1.f90
! 4ab99a44c0b5a623c5d27396d9bd8a6b  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.2.f90
  13e7971a3ccc5154115ae4400e728436  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.4.f90
  9dcaa38074193fce881c5e333df03933  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.34.1.f90
  c26a8d31ffc0f840e7afe8c4ba17c2cb  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.34.2.f90
--- 113412,113418 ----
  99ee5875ce6758020fa75de42d1b90b0  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90
  182731c8064c6ef83beb1d10cd03700b  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.32.1.f90
  157bb81ef8b8706d56531116aacc2653  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.1.f90
! eb450683759701b48961ff9454fda9ba  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.2.f90
  13e7971a3ccc5154115ae4400e728436  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.4.f90
  9dcaa38074193fce881c5e333df03933  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.34.1.f90
  c26a8d31ffc0f840e7afe8c4ba17c2cb  gcc/testsuite/gfortran.dg/gomp/appendix-a/a.34.2.f90
*************** f23f31e3aab2957fab88d7b7ca1212de  gcc/te
*** 113373,113381 ****
  2c61c6d91bbeab8332c3c329ee9f8d12  gcc/testsuite/gfortran.dg/gomp/atomic-28.f90
  2627f4c7f22f907c1019851b2ae1c79f  gcc/testsuite/gfortran.dg/gomp/atomic.f90
  bab96c8ce5beeb0e7d9e4dae2fd0ea5f  gcc/testsuite/gfortran.dg/gomp/block-1.f90
! cdeec4fa3718656bb266e0931e5ea9fb  gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_20.f90
! c54c9f00f1ab04f0a3eca118ed8aded7  gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_21.f90
! 065c8d5b071a3096774849b90c0341dd  gcc/testsuite/gfortran.dg/gomp/cancel-1.f90
  6240d21497a94815867abd53e7fcfe68  gcc/testsuite/gfortran.dg/gomp/cancel-2.f90
  c2875e99b414fbced20c5c41d21b04c4  gcc/testsuite/gfortran.dg/gomp/cancel-3.f90
  08ea5c242fb3441982cd27d2f7c57be0  gcc/testsuite/gfortran.dg/gomp/cancel-4.f90
--- 113458,113466 ----
  2c61c6d91bbeab8332c3c329ee9f8d12  gcc/testsuite/gfortran.dg/gomp/atomic-28.f90
  2627f4c7f22f907c1019851b2ae1c79f  gcc/testsuite/gfortran.dg/gomp/atomic.f90
  bab96c8ce5beeb0e7d9e4dae2fd0ea5f  gcc/testsuite/gfortran.dg/gomp/block-1.f90
! d0b0d25288015346fe70bbdd2a17a0fd  gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_20.f90
! 9b34858cc418b77000523bdcf058231d  gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_21.f90
! e127562a3cc3cd2a0f5fc205fb43115e  gcc/testsuite/gfortran.dg/gomp/cancel-1.f90
  6240d21497a94815867abd53e7fcfe68  gcc/testsuite/gfortran.dg/gomp/cancel-2.f90
  c2875e99b414fbced20c5c41d21b04c4  gcc/testsuite/gfortran.dg/gomp/cancel-3.f90
  08ea5c242fb3441982cd27d2f7c57be0  gcc/testsuite/gfortran.dg/gomp/cancel-4.f90
*************** c2875e99b414fbced20c5c41d21b04c4  gcc/te
*** 113385,113391 ****
  00da5110c651c599834b4c04bf8015d5  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-2.f90
  8dbac5414be8ed46decf2134d6ea91fc  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-3.f90
  a8f0294a171f1359d6f5abd04324e891  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-4.f90
! b04d01c8918c4b0e4cfbbca2ac07c3a9  gcc/testsuite/gfortran.dg/gomp/clauses-1.f90
  bd13412ef41ad9bb27fc856062b6ee6c  gcc/testsuite/gfortran.dg/gomp/collapse1.f90
  17fe5ffccf79b4cae3361dc0b3b52283  gcc/testsuite/gfortran.dg/gomp/collapse2.f90
  36990c2a4b5e499e3cd93ef78508f038  gcc/testsuite/gfortran.dg/gomp/combined-if.f90
--- 113470,113476 ----
  00da5110c651c599834b4c04bf8015d5  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-2.f90
  8dbac5414be8ed46decf2134d6ea91fc  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-3.f90
  a8f0294a171f1359d6f5abd04324e891  gcc/testsuite/gfortran.dg/gomp/class-firstprivate-4.f90
! bb8d17daa736763480ede1e386d49311  gcc/testsuite/gfortran.dg/gomp/clauses-1.f90
  bd13412ef41ad9bb27fc856062b6ee6c  gcc/testsuite/gfortran.dg/gomp/collapse1.f90
  17fe5ffccf79b4cae3361dc0b3b52283  gcc/testsuite/gfortran.dg/gomp/collapse2.f90
  36990c2a4b5e499e3cd93ef78508f038  gcc/testsuite/gfortran.dg/gomp/combined-if.f90
*************** fa862d5202e8a9940ce10e5de251b964  gcc/te
*** 113397,113417 ****
  1c6644a88dc4bee98beb52bb4342fee9  gcc/testsuite/gfortran.dg/gomp/crayptr4.f90
  4a434ccf995f8c325ad483ae77b66d9f  gcc/testsuite/gfortran.dg/gomp/crayptr5.f90
  f771e918155eed02d90e026b9c163449  gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
! 10b7fa8c03c3dfc00eb7345f9e992ad6  gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90
  2a1d11803d89a25e412300a0b880260f  gcc/testsuite/gfortran.dg/gomp/declare-simd-3.f90
  28aceea38e0468eae02d0b21b6326b34  gcc/testsuite/gfortran.dg/gomp/declare-simd-4.f90
  7ad1e2a95d3e303d0d364e2ebe69c5c9  gcc/testsuite/gfortran.dg/gomp/declare-simd-5.f90
! a10e905c3b5e37a46edf6f7918dd2815  gcc/testsuite/gfortran.dg/gomp/declare-simd-6.f90
  cea31a6d0391b4b71427da07ff8d34f1  gcc/testsuite/gfortran.dg/gomp/declare-simd-coarray-lib.f90
! 3efc7a1651bd3761d7b6f4bbc264313a  gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90
! b9504a78205e95a6ba42c42656e6ec42  gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90
! f167400afd0135e616e9dec13b6d5db2  gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90
! d3d170208bbaa8afd0ae284256d6f4db  gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90
  96e45ce07429c6c7461942f584032013  gcc/testsuite/gfortran.dg/gomp/declare-target-6.f90
! 8c222b6e3da0201a7de8711e7767db6a  gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-1.f90
! 80cefd4abfaa15b787fe45d47397a6f0  gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-2.f90
! 80d23bb6d3ed681a8870b4b33017b4c4  gcc/testsuite/gfortran.dg/gomp/declare-variant-1.f90
! 522fe2656a7fec833d733a2f3ce7a313  gcc/testsuite/gfortran.dg/gomp/declare-variant-10.f90
  a8e2326b18924669735487037483af94  gcc/testsuite/gfortran.dg/gomp/declare-variant-11.f90
  374f8f008908a7d2e05efea82785afa7  gcc/testsuite/gfortran.dg/gomp/declare-variant-12.f90
  b35ad41711bd8e3aa3e44dc216133117  gcc/testsuite/gfortran.dg/gomp/declare-variant-13.f90
--- 113482,113502 ----
  1c6644a88dc4bee98beb52bb4342fee9  gcc/testsuite/gfortran.dg/gomp/crayptr4.f90
  4a434ccf995f8c325ad483ae77b66d9f  gcc/testsuite/gfortran.dg/gomp/crayptr5.f90
  f771e918155eed02d90e026b9c163449  gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
! 57864e06c09c2a6cc2c1d34d921c8d24  gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90
  2a1d11803d89a25e412300a0b880260f  gcc/testsuite/gfortran.dg/gomp/declare-simd-3.f90
  28aceea38e0468eae02d0b21b6326b34  gcc/testsuite/gfortran.dg/gomp/declare-simd-4.f90
  7ad1e2a95d3e303d0d364e2ebe69c5c9  gcc/testsuite/gfortran.dg/gomp/declare-simd-5.f90
! 89255e5c450a7fda37edb4af83a554ba  gcc/testsuite/gfortran.dg/gomp/declare-simd-6.f90
  cea31a6d0391b4b71427da07ff8d34f1  gcc/testsuite/gfortran.dg/gomp/declare-simd-coarray-lib.f90
! e337894451585edf7ae71841ac449bab  gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90
! a70b5cf1419864009b8f60fd08fc07bb  gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90
! a50cb4db8f9af6c4ba00e5bf9eaa0bbd  gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90
! cad618a3903f5ad965051d8bd30274eb  gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90
  96e45ce07429c6c7461942f584032013  gcc/testsuite/gfortran.dg/gomp/declare-target-6.f90
! fb64490f245057ee339d9ce9f0fcf876  gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-1.f90
! ff8c3bb21c311c8ba15ff9e5247ebee0  gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-2.f90
! 7a36bcfb523b9374c112d74f398a2272  gcc/testsuite/gfortran.dg/gomp/declare-variant-1.f90
! f2d2f518ceca8e61af1653ad69b92c92  gcc/testsuite/gfortran.dg/gomp/declare-variant-10.f90
  a8e2326b18924669735487037483af94  gcc/testsuite/gfortran.dg/gomp/declare-variant-11.f90
  374f8f008908a7d2e05efea82785afa7  gcc/testsuite/gfortran.dg/gomp/declare-variant-12.f90
  b35ad41711bd8e3aa3e44dc216133117  gcc/testsuite/gfortran.dg/gomp/declare-variant-13.f90
*************** de62088b28e5d20862eda347ec06e79d  gcc/te
*** 113431,113437 ****
  c8be345342a9412b0fcfce5b1ef75494  gcc/testsuite/gfortran.dg/gomp/declare-variant-5.f90
  d0221c0a07a1622d8aebae5c15babc51  gcc/testsuite/gfortran.dg/gomp/declare-variant-6.f90
  313233de6d1e14ff4f3adbc5a9887e75  gcc/testsuite/gfortran.dg/gomp/declare-variant-7.f90
! cf5d63139fcd723bfc1b391e1b37f674  gcc/testsuite/gfortran.dg/gomp/declare-variant-8.f90
  b7df3800cfa2bb625883068360e00886  gcc/testsuite/gfortran.dg/gomp/declare-variant-9.f90
  3f81f735c2115b4cefadd4cf7ff4230c  gcc/testsuite/gfortran.dg/gomp/declare-variant-any.f90
  7f11d290afc794356750594e8201dd1e  gcc/testsuite/gfortran.dg/gomp/declare-variant-duplicates.f90
--- 113516,113522 ----
  c8be345342a9412b0fcfce5b1ef75494  gcc/testsuite/gfortran.dg/gomp/declare-variant-5.f90
  d0221c0a07a1622d8aebae5c15babc51  gcc/testsuite/gfortran.dg/gomp/declare-variant-6.f90
  313233de6d1e14ff4f3adbc5a9887e75  gcc/testsuite/gfortran.dg/gomp/declare-variant-7.f90
! 13973259f6a5a98a9fddf5cea3b62ac9  gcc/testsuite/gfortran.dg/gomp/declare-variant-8.f90
  b7df3800cfa2bb625883068360e00886  gcc/testsuite/gfortran.dg/gomp/declare-variant-9.f90
  3f81f735c2115b4cefadd4cf7ff4230c  gcc/testsuite/gfortran.dg/gomp/declare-variant-any.f90
  7f11d290afc794356750594e8201dd1e  gcc/testsuite/gfortran.dg/gomp/declare-variant-duplicates.f90
*************** fa41d6dd0ec4bc45beb3cbce04bf821d  gcc/te
*** 113452,113459 ****
  b925235365ea6a6930ecc74136916763  gcc/testsuite/gfortran.dg/gomp/depend-4.f90
  c8d298cef2970ce3ead77751bfa3b24b  gcc/testsuite/gfortran.dg/gomp/depend-5.f90
  149b6cbd5ca01b24f687f2b432729419  gcc/testsuite/gfortran.dg/gomp/depend-6.f90
! fcda5a12452ac185d1c306d0e8222556  gcc/testsuite/gfortran.dg/gomp/depend-iterator-1.f90
! 55c61de7187ed22caab746d7474c5e93  gcc/testsuite/gfortran.dg/gomp/depend-iterator-2.f90
  8559f178a456958c370535d4d838c9d7  gcc/testsuite/gfortran.dg/gomp/depend-iterator-3.f90
  1531f847e56d02d5d23beb0a2ff5cd9c  gcc/testsuite/gfortran.dg/gomp/depobj-1.f90
  1db04c92916620d84c79364d4cc275b9  gcc/testsuite/gfortran.dg/gomp/depobj-2.f90
--- 113537,113544 ----
  b925235365ea6a6930ecc74136916763  gcc/testsuite/gfortran.dg/gomp/depend-4.f90
  c8d298cef2970ce3ead77751bfa3b24b  gcc/testsuite/gfortran.dg/gomp/depend-5.f90
  149b6cbd5ca01b24f687f2b432729419  gcc/testsuite/gfortran.dg/gomp/depend-6.f90
! 74775590a88c2132d92954e571525719  gcc/testsuite/gfortran.dg/gomp/depend-iterator-1.f90
! 277094a6bf85ed9fd5befd812cd95bc9  gcc/testsuite/gfortran.dg/gomp/depend-iterator-2.f90
  8559f178a456958c370535d4d838c9d7  gcc/testsuite/gfortran.dg/gomp/depend-iterator-3.f90
  1531f847e56d02d5d23beb0a2ff5cd9c  gcc/testsuite/gfortran.dg/gomp/depobj-1.f90
  1db04c92916620d84c79364d4cc275b9  gcc/testsuite/gfortran.dg/gomp/depobj-2.f90
*************** afc521c98a39e0e1821f895f702c9cd1  gcc/te
*** 113486,113495 ****
  b7bb651884d39c2e5dce7d57d46f40a5  gcc/testsuite/gfortran.dg/gomp/free-2.f90
  e23f542becaa21fb3b2d7341b9f74512  gcc/testsuite/gfortran.dg/gomp/gomp.exp
  4596e2a628e7e659918b641b180c4f60  gcc/testsuite/gfortran.dg/gomp/groupprivate-1.f90
! 526d5bbffdb8d984ab97b4951b8977ee  gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90
  800607f306915139c76b86d502781a09  gcc/testsuite/gfortran.dg/gomp/groupprivate-3.f90
  735d4ebc81a65de8f72c7d9d65d67944  gcc/testsuite/gfortran.dg/gomp/groupprivate-4.f90
! 9d7497e6995ec07bb3e22bb448914e6e  gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90
  afb216949e2a1cacdc194412ee75e6f7  gcc/testsuite/gfortran.dg/gomp/groupprivate-6.f90
  c81f6e5f96d44ff4d4332116923c4ba7  gcc/testsuite/gfortran.dg/gomp/if-1.f90
  d9e691abc51124a315a9fe8d1bd3a04e  gcc/testsuite/gfortran.dg/gomp/imperfect-gotos.f90
--- 113571,113580 ----
  b7bb651884d39c2e5dce7d57d46f40a5  gcc/testsuite/gfortran.dg/gomp/free-2.f90
  e23f542becaa21fb3b2d7341b9f74512  gcc/testsuite/gfortran.dg/gomp/gomp.exp
  4596e2a628e7e659918b641b180c4f60  gcc/testsuite/gfortran.dg/gomp/groupprivate-1.f90
! 9cc4abb07953d1d269daa8692f797fa8  gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90
  800607f306915139c76b86d502781a09  gcc/testsuite/gfortran.dg/gomp/groupprivate-3.f90
  735d4ebc81a65de8f72c7d9d65d67944  gcc/testsuite/gfortran.dg/gomp/groupprivate-4.f90
! 6f39af90d777638e20c319ab947b7236  gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90
  afb216949e2a1cacdc194412ee75e6f7  gcc/testsuite/gfortran.dg/gomp/groupprivate-6.f90
  c81f6e5f96d44ff4d4332116923c4ba7  gcc/testsuite/gfortran.dg/gomp/if-1.f90
  d9e691abc51124a315a9fe8d1bd3a04e  gcc/testsuite/gfortran.dg/gomp/imperfect-gotos.f90
*************** bab74adf4eb79eb22ea45dc4908e7686  gcc/te
*** 113499,113505 ****
  dd8eb14846f7f04270cbe1aa6c76b6d5  gcc/testsuite/gfortran.dg/gomp/imperfect3.f90
  2c3dad51a1302b32e7e17c9fa25832fd  gcc/testsuite/gfortran.dg/gomp/imperfect4.f90
  8412a3b549c1235c04041ce37c52246c  gcc/testsuite/gfortran.dg/gomp/imperfect5.f90
! c20118617178c3c6359815c5134a798a  gcc/testsuite/gfortran.dg/gomp/implicit-save.f90
  336652c36c7d7ce2f34ced505acc64c9  gcc/testsuite/gfortran.dg/gomp/include_1.f
  1fe1ad5080374d9a506a842e10eb64cf  gcc/testsuite/gfortran.dg/gomp/include_1.inc
  c9c12b39090e7fc13f17ab5f3914978a  gcc/testsuite/gfortran.dg/gomp/include_2.f90
--- 113584,113590 ----
  dd8eb14846f7f04270cbe1aa6c76b6d5  gcc/testsuite/gfortran.dg/gomp/imperfect3.f90
  2c3dad51a1302b32e7e17c9fa25832fd  gcc/testsuite/gfortran.dg/gomp/imperfect4.f90
  8412a3b549c1235c04041ce37c52246c  gcc/testsuite/gfortran.dg/gomp/imperfect5.f90
! a400fe9e2f90ccec8d1035d1c0c68ec7  gcc/testsuite/gfortran.dg/gomp/implicit-save.f90
  336652c36c7d7ce2f34ced505acc64c9  gcc/testsuite/gfortran.dg/gomp/include_1.f
  1fe1ad5080374d9a506a842e10eb64cf  gcc/testsuite/gfortran.dg/gomp/include_1.inc
  c9c12b39090e7fc13f17ab5f3914978a  gcc/testsuite/gfortran.dg/gomp/include_2.f90
*************** fd8beb621042a5dfb3a9cdfcd84fba1e  gcc/te
*** 113512,113550 ****
  902f4ad31cdbc96d2097e70485091287  gcc/testsuite/gfortran.dg/gomp/interop-4.f90
  6433233c250101a45d0275a0b1f0ebc3  gcc/testsuite/gfortran.dg/gomp/interop-5.f90
  266910204668b7c0adbd548abc5acad5  gcc/testsuite/gfortran.dg/gomp/intrinsic_pack_7.f90
! 8c74ac45276055114e691c8cd534fc8a  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90
! 56ffb73ae6f2ea9f30c7d45ab815247c  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90
! 7063482a995ea63c55b568e5a94be6fa  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-3.f90
! 4dd4181b247ac3f79a6523a11f774cdc  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90
  af04268cd1ba9085e47cbae173428261  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-2.f90
  8da702190ab885b30f172e950f2352c7  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-3.f90
  18ac4502ea33e5ec7eb9987e4f08464a  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-4.f90
  0324d1aeff2c9703006e512f071b9b0f  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-5.f90
! fcfec1b14709740892410ae1c647ba42  gcc/testsuite/gfortran.dg/gomp/linear-1.f90
! 6371b71518c3bb790af2e59601569454  gcc/testsuite/gfortran.dg/gomp/linear-2.f90
! bfeddbad49017a5997209b1c1ce90c42  gcc/testsuite/gfortran.dg/gomp/linear-3.f90
! 710df3527ce9a75d9c8e3893dc293417  gcc/testsuite/gfortran.dg/gomp/linear-4.f90
  7ac1c4413579cb25270f7dceaccbea46  gcc/testsuite/gfortran.dg/gomp/linear-5.f90
! f2a3c11754d246dbe83f8e48b00ea061  gcc/testsuite/gfortran.dg/gomp/linear-6.f90
  a4e7ef5926daf8429df01accd234ddc2  gcc/testsuite/gfortran.dg/gomp/linear-7.f90
  8b81f69306667f7ab92ce3e8cd7a31cf  gcc/testsuite/gfortran.dg/gomp/linear-8.f90
  1bf1a25963d70f206f6b9615dd00b4a3  gcc/testsuite/gfortran.dg/gomp/loop-1.f90
  5d73b1ef8bdead30a661e4167a05e72c  gcc/testsuite/gfortran.dg/gomp/loop-2.f90
  9fc7632ae864eb649dcb18b7f8cab32c  gcc/testsuite/gfortran.dg/gomp/loop-3.f90
! d9fb1de547303f6296a47031238a2a91  gcc/testsuite/gfortran.dg/gomp/loop-4.f90
  f9ef443961a79bdf37522ed835fb9343  gcc/testsuite/gfortran.dg/gomp/loop-5.f90
! 30f19939f66f9036dd94e47a44d71909  gcc/testsuite/gfortran.dg/gomp/loop-exit.f90
  dec560a080ae2757b0acb2325c3aafab  gcc/testsuite/gfortran.dg/gomp/map-1.f90
  11c284b49207de0bcded24256310f939  gcc/testsuite/gfortran.dg/gomp/map-10.f90
  4fc3198a0e28b8286278dfad0e0e1315  gcc/testsuite/gfortran.dg/gomp/map-11.f90
! 8d37da92969529c86d4aefed77de6d7a  gcc/testsuite/gfortran.dg/gomp/map-12.f90
  43569bbc57024a10628df3c4be381f2a  gcc/testsuite/gfortran.dg/gomp/map-2.f90
! c2d8019d8ca18a09c79c939c0a1030f0  gcc/testsuite/gfortran.dg/gomp/map-3.f90
  cd9740173b89307e8f51dcf62b1f0874  gcc/testsuite/gfortran.dg/gomp/map-4.f90
  b76492fcf2fb1505fe0530d8302d7581  gcc/testsuite/gfortran.dg/gomp/map-5.f90
! d9692272c0b81e1742bb5a587d004640  gcc/testsuite/gfortran.dg/gomp/map-6.f90
! 22cb7336223857b6a2075fbcf16640bc  gcc/testsuite/gfortran.dg/gomp/map-7.f90
! 7db1e7040e830b05cbfea84dfdadc88c  gcc/testsuite/gfortran.dg/gomp/map-8.f90
  e4611087ccbe2da89ff845309c4f0a28  gcc/testsuite/gfortran.dg/gomp/map-9.f90
  76e8b638cea123405704916f0d8d15c5  gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90
  45a30924a96af3f4dc17367d65b8aa30  gcc/testsuite/gfortran.dg/gomp/map-subarray-2.f90
--- 113597,113635 ----
  902f4ad31cdbc96d2097e70485091287  gcc/testsuite/gfortran.dg/gomp/interop-4.f90
  6433233c250101a45d0275a0b1f0ebc3  gcc/testsuite/gfortran.dg/gomp/interop-5.f90
  266910204668b7c0adbd548abc5acad5  gcc/testsuite/gfortran.dg/gomp/intrinsic_pack_7.f90
! cde9d29b769dbd004139a1e72ec40746  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90
! fc9274d85ec1319f74d45c9f5ea0f5cd  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90
! 40b788b2ec8eac9c2223ee5e8426b7f2  gcc/testsuite/gfortran.dg/gomp/is_device_ptr-3.f90
! 251838e2adcdabdf8d2e9f7a9765f511  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90
  af04268cd1ba9085e47cbae173428261  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-2.f90
  8da702190ab885b30f172e950f2352c7  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-3.f90
  18ac4502ea33e5ec7eb9987e4f08464a  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-4.f90
  0324d1aeff2c9703006e512f071b9b0f  gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-5.f90
! 0bb217e47cd795cc64f29735e243e326  gcc/testsuite/gfortran.dg/gomp/linear-1.f90
! 07c54677f6cc8aabb333b680b26484f0  gcc/testsuite/gfortran.dg/gomp/linear-2.f90
! f4b439cb265e7f1ce2f6ddea1b686593  gcc/testsuite/gfortran.dg/gomp/linear-3.f90
! 47a0fa4d14d4d34af376c43849c915f6  gcc/testsuite/gfortran.dg/gomp/linear-4.f90
  7ac1c4413579cb25270f7dceaccbea46  gcc/testsuite/gfortran.dg/gomp/linear-5.f90
! 817d822e49d968d77d12bb49db59b8ac  gcc/testsuite/gfortran.dg/gomp/linear-6.f90
  a4e7ef5926daf8429df01accd234ddc2  gcc/testsuite/gfortran.dg/gomp/linear-7.f90
  8b81f69306667f7ab92ce3e8cd7a31cf  gcc/testsuite/gfortran.dg/gomp/linear-8.f90
  1bf1a25963d70f206f6b9615dd00b4a3  gcc/testsuite/gfortran.dg/gomp/loop-1.f90
  5d73b1ef8bdead30a661e4167a05e72c  gcc/testsuite/gfortran.dg/gomp/loop-2.f90
  9fc7632ae864eb649dcb18b7f8cab32c  gcc/testsuite/gfortran.dg/gomp/loop-3.f90
! dc10655e180ad0a1051825a91031195e  gcc/testsuite/gfortran.dg/gomp/loop-4.f90
  f9ef443961a79bdf37522ed835fb9343  gcc/testsuite/gfortran.dg/gomp/loop-5.f90
! 6c5fd0bf7897ea9671386beeacb6687d  gcc/testsuite/gfortran.dg/gomp/loop-exit.f90
  dec560a080ae2757b0acb2325c3aafab  gcc/testsuite/gfortran.dg/gomp/map-1.f90
  11c284b49207de0bcded24256310f939  gcc/testsuite/gfortran.dg/gomp/map-10.f90
  4fc3198a0e28b8286278dfad0e0e1315  gcc/testsuite/gfortran.dg/gomp/map-11.f90
! daa02c0c6e2b5fd126431451fffed529  gcc/testsuite/gfortran.dg/gomp/map-12.f90
  43569bbc57024a10628df3c4be381f2a  gcc/testsuite/gfortran.dg/gomp/map-2.f90
! 0099fa1c745288d7f8036322555c6ef9  gcc/testsuite/gfortran.dg/gomp/map-3.f90
  cd9740173b89307e8f51dcf62b1f0874  gcc/testsuite/gfortran.dg/gomp/map-4.f90
  b76492fcf2fb1505fe0530d8302d7581  gcc/testsuite/gfortran.dg/gomp/map-5.f90
! 7240be7896831071d3b33bc6142bef90  gcc/testsuite/gfortran.dg/gomp/map-6.f90
! 9386777c02f9d7c5173fb0e8c2171f11  gcc/testsuite/gfortran.dg/gomp/map-7.f90
! 7d7d346af5f07416c14bd1e65e77ee39  gcc/testsuite/gfortran.dg/gomp/map-8.f90
  e4611087ccbe2da89ff845309c4f0a28  gcc/testsuite/gfortran.dg/gomp/map-9.f90
  76e8b638cea123405704916f0d8d15c5  gcc/testsuite/gfortran.dg/gomp/map-alloc-comp-1.f90
  45a30924a96af3f4dc17367d65b8aa30  gcc/testsuite/gfortran.dg/gomp/map-subarray-2.f90
*************** e4611087ccbe2da89ff845309c4f0a28  gcc/te
*** 113555,113560 ****
--- 113640,113646 ----
  cb24525724c32b45315c964136a5f1b9  gcc/testsuite/gfortran.dg/gomp/masked-combined-1.f90
  363b0dfc01dfa5ff05f2e7f9e5cb91dd  gcc/testsuite/gfortran.dg/gomp/masked-combined-2.f90
  4fc7de6f5648a0220d734c2d546f8dfc  gcc/testsuite/gfortran.dg/gomp/masked-taskloop.f90
+ ef9f0e624a6e1138111483e1e9cb634b  gcc/testsuite/gfortran.dg/gomp/master-construct-dep.f90
  2363323e22544eea9783547bfc3d1109  gcc/testsuite/gfortran.dg/gomp/metadirective-1.f90
  d512aeac74264bd6299df1eee7ca57c9  gcc/testsuite/gfortran.dg/gomp/metadirective-10.f90
  b686d21e1f423f1bb85ad24a8accfd3b  gcc/testsuite/gfortran.dg/gomp/metadirective-11.f90
*************** b8def6b976bafaca7cf4bbe147909f92  gcc/te
*** 113572,113589 ****
  25daaf75f02ebca94cb4a2f945df875b  gcc/testsuite/gfortran.dg/gomp/metadirective-no-score.f90
  5089fa6a1404ef16d8501a2090e01711  gcc/testsuite/gfortran.dg/gomp/minmaxloc_1.f90
  d8fab0c405f257ffcf3c0d31627f2355  gcc/testsuite/gfortran.dg/gomp/nesting-1.f90
! 20369c0edadd588648f0e943f1fb0e7e  gcc/testsuite/gfortran.dg/gomp/nesting-2.f90
! d4bd33dd71cfc2687d89a40ce9aa0059  gcc/testsuite/gfortran.dg/gomp/nesting-3.f90
  eab54daacd3e5d6012cfbac3a0c1cb18  gcc/testsuite/gfortran.dg/gomp/non-rectangular-loop.f90
  5eb69ee32fb2e3a0ddb2b6d84e0e175c  gcc/testsuite/gfortran.dg/gomp/nontemporal-1.f90
  50c115c8124a5d89918f3466d7eab60a  gcc/testsuite/gfortran.dg/gomp/nontemporal-2.f90
  f9188ccb0e23b81607240441c3714df2  gcc/testsuite/gfortran.dg/gomp/nothing-1.f90
  178861091b905131233646d13eaba131  gcc/testsuite/gfortran.dg/gomp/nothing-2.f90
  3cc8ac1a4c71ccef2cd14409d43c0c2f  gcc/testsuite/gfortran.dg/gomp/nowait-1.f90
! cd03f8a0d20132fe216e0272244aea16  gcc/testsuite/gfortran.dg/gomp/nowait-2.f90
  490e293ad86c435fc0bcef164624d407  gcc/testsuite/gfortran.dg/gomp/nowait-3.f90
! 25610cd5dd461e9fd48920a34199b821  gcc/testsuite/gfortran.dg/gomp/nowait-4.f90
! cd03f8a0d20132fe216e0272244aea16  gcc/testsuite/gfortran.dg/gomp/nowait-5.f90
  cfb5a1542d4d90f61e5067fcaac3be80  gcc/testsuite/gfortran.dg/gomp/nowait-6.f90
  dd9162259e2bd075657e964692c7a68b  gcc/testsuite/gfortran.dg/gomp/nowait-7.f90
  2bdc0b4bf54d9d026d81bf850163570e  gcc/testsuite/gfortran.dg/gomp/nowait-8.f90
--- 113658,113675 ----
  25daaf75f02ebca94cb4a2f945df875b  gcc/testsuite/gfortran.dg/gomp/metadirective-no-score.f90
  5089fa6a1404ef16d8501a2090e01711  gcc/testsuite/gfortran.dg/gomp/minmaxloc_1.f90
  d8fab0c405f257ffcf3c0d31627f2355  gcc/testsuite/gfortran.dg/gomp/nesting-1.f90
! e169ede8459ff98cc22e90213e014227  gcc/testsuite/gfortran.dg/gomp/nesting-2.f90
! 406ee0443b981dd427ad450419ee61c7  gcc/testsuite/gfortran.dg/gomp/nesting-3.f90
  eab54daacd3e5d6012cfbac3a0c1cb18  gcc/testsuite/gfortran.dg/gomp/non-rectangular-loop.f90
  5eb69ee32fb2e3a0ddb2b6d84e0e175c  gcc/testsuite/gfortran.dg/gomp/nontemporal-1.f90
  50c115c8124a5d89918f3466d7eab60a  gcc/testsuite/gfortran.dg/gomp/nontemporal-2.f90
  f9188ccb0e23b81607240441c3714df2  gcc/testsuite/gfortran.dg/gomp/nothing-1.f90
  178861091b905131233646d13eaba131  gcc/testsuite/gfortran.dg/gomp/nothing-2.f90
  3cc8ac1a4c71ccef2cd14409d43c0c2f  gcc/testsuite/gfortran.dg/gomp/nowait-1.f90
! aff8e89c09aeddf7d5d3aadbfb8f7d84  gcc/testsuite/gfortran.dg/gomp/nowait-2.f90
  490e293ad86c435fc0bcef164624d407  gcc/testsuite/gfortran.dg/gomp/nowait-3.f90
! b9b467a2c2fb48ee863302212151d989  gcc/testsuite/gfortran.dg/gomp/nowait-4.f90
! aff8e89c09aeddf7d5d3aadbfb8f7d84  gcc/testsuite/gfortran.dg/gomp/nowait-5.f90
  cfb5a1542d4d90f61e5067fcaac3be80  gcc/testsuite/gfortran.dg/gomp/nowait-6.f90
  dd9162259e2bd075657e964692c7a68b  gcc/testsuite/gfortran.dg/gomp/nowait-7.f90
  2bdc0b4bf54d9d026d81bf850163570e  gcc/testsuite/gfortran.dg/gomp/nowait-8.f90
*************** bdca03c79b16b5f9c19e5c92941f5888  gcc/te
*** 113605,113612 ****
  fec41b5c6a0b000823f8815e41c46849  gcc/testsuite/gfortran.dg/gomp/omx-1.f
  f4c867d57c42e9ff424e7bf8e63aca27  gcc/testsuite/gfortran.dg/gomp/omx-2.f
  31f5c4996a25be6d38e18faf28b150b4  gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90
! 2b03c97061d19eddde270a6c9dd3fc38  gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
! 7b53af38ad214d98f0d0550bbb80b654  gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
  c86578519526f3523481033c61923ccb  gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90
  962b3bb368923a3267954c83793c7d97  gcc/testsuite/gfortran.dg/gomp/openmp-simd-5.f90
  9ace4e530b40cdfe46ee82285a4c3007  gcc/testsuite/gfortran.dg/gomp/openmp-simd-6.f90
--- 113691,113698 ----
  fec41b5c6a0b000823f8815e41c46849  gcc/testsuite/gfortran.dg/gomp/omx-1.f
  f4c867d57c42e9ff424e7bf8e63aca27  gcc/testsuite/gfortran.dg/gomp/omx-2.f
  31f5c4996a25be6d38e18faf28b150b4  gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90
! bd88a2ad371d6ec3982331d16e220930  gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
! e7b92e07a4fb7ab99fbe633c4c26c946  gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
  c86578519526f3523481033c61923ccb  gcc/testsuite/gfortran.dg/gomp/openmp-simd-4.f90
  962b3bb368923a3267954c83793c7d97  gcc/testsuite/gfortran.dg/gomp/openmp-simd-5.f90
  9ace4e530b40cdfe46ee82285a4c3007  gcc/testsuite/gfortran.dg/gomp/openmp-simd-6.f90
*************** f8e40f23828c760759b3893792acb659  gcc/te
*** 113619,113628 ****
  35c099331d2ac9c6383bb03bcf2fab33  gcc/testsuite/gfortran.dg/gomp/order-5.f90
  901de0f48b4103e45783c545e17e9697  gcc/testsuite/gfortran.dg/gomp/order-6.f90
  5aee86e6d3f0327d9fcb22e4e1a7d079  gcc/testsuite/gfortran.dg/gomp/order-7.f90
! 3ce5e3c6b7e07614a15766628501a17d  gcc/testsuite/gfortran.dg/gomp/order-8.f90
  054c5c2350f2722c8a722ca2a63bed3f  gcc/testsuite/gfortran.dg/gomp/order-9.f90
! 905750ad1d8a5ad625ad891d24861b35  gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90
! 141c35f9d62b46a7e1b14aa4806260cb  gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90
  583f15b294093b280f67c26128dd1e2e  gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-1.f90
  aa8a8106984b67c577ddf1f8e1481350  gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-2.f90
  bcec7c6f5a28739d45c8dce6a8c1545c  gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-3.f90
--- 113705,113714 ----
  35c099331d2ac9c6383bb03bcf2fab33  gcc/testsuite/gfortran.dg/gomp/order-5.f90
  901de0f48b4103e45783c545e17e9697  gcc/testsuite/gfortran.dg/gomp/order-6.f90
  5aee86e6d3f0327d9fcb22e4e1a7d079  gcc/testsuite/gfortran.dg/gomp/order-7.f90
! 1df5307e687b9a678831469ec20695e5  gcc/testsuite/gfortran.dg/gomp/order-8.f90
  054c5c2350f2722c8a722ca2a63bed3f  gcc/testsuite/gfortran.dg/gomp/order-9.f90
! 9f9f67726dedce0b7ada760b7075ff24  gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90
! 52a2936d315828f32d6e92776c565212  gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90
  583f15b294093b280f67c26128dd1e2e  gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-1.f90
  aa8a8106984b67c577ddf1f8e1481350  gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-2.f90
  bcec7c6f5a28739d45c8dce6a8c1545c  gcc/testsuite/gfortran.dg/gomp/polymorphic-mapping-3.f90
*************** aa1b85a34517ebec1f009bb653cba745  gcc/te
*** 113644,113650 ****
  18ff1e9a70f7c58228a1509531b146db  gcc/testsuite/gfortran.dg/gomp/pr107214-5.f90
  edeec1fe2488c7117f56e10734af03dc  gcc/testsuite/gfortran.dg/gomp/pr107214-6.f90
  697c52a53eea166cade44a3f935b8caf  gcc/testsuite/gfortran.dg/gomp/pr107214-7.f90
! 1474c5a5881d7047f1212bc8cfb8ef92  gcc/testsuite/gfortran.dg/gomp/pr107214-8.f90
  3beded12a494129bebcc732d85089896  gcc/testsuite/gfortran.dg/gomp/pr107214.f90
  999f28c36a4332b9862398973c6f4c18  gcc/testsuite/gfortran.dg/gomp/pr107421.f90
  616305573acc701769497c1eee637edc  gcc/testsuite/gfortran.dg/gomp/pr114825.f90
--- 113730,113736 ----
  18ff1e9a70f7c58228a1509531b146db  gcc/testsuite/gfortran.dg/gomp/pr107214-5.f90
  edeec1fe2488c7117f56e10734af03dc  gcc/testsuite/gfortran.dg/gomp/pr107214-6.f90
  697c52a53eea166cade44a3f935b8caf  gcc/testsuite/gfortran.dg/gomp/pr107214-7.f90
! 75a523b6ea1c03878cc3bdc6a6346971  gcc/testsuite/gfortran.dg/gomp/pr107214-8.f90
  3beded12a494129bebcc732d85089896  gcc/testsuite/gfortran.dg/gomp/pr107214.f90
  999f28c36a4332b9862398973c6f4c18  gcc/testsuite/gfortran.dg/gomp/pr107421.f90
  616305573acc701769497c1eee637edc  gcc/testsuite/gfortran.dg/gomp/pr114825.f90
*************** abbd279cc7e81d89b58dd804d829ed65  gcc/te
*** 113691,113697 ****
  0784fa1cf4bc9ef82345c80d2f32b6f0  gcc/testsuite/gfortran.dg/gomp/pr45595.f90
  b1d0dcbfd8ebb1bf70bf3d4c08b4e6a8  gcc/testsuite/gfortran.dg/gomp/pr45597.f90
  8be15365cc348700632eb03e92eedffc  gcc/testsuite/gfortran.dg/gomp/pr47331.f90
! 128d8dd37fe27c11274b9de08392f9b9  gcc/testsuite/gfortran.dg/gomp/pr48117.f90
  62851f39d208792f5cfb76e509e86f00  gcc/testsuite/gfortran.dg/gomp/pr48611.f90
  a48ce96e50db497ce8703576a8ef40a4  gcc/testsuite/gfortran.dg/gomp/pr48794-2.f90
  66c2d2d7f643cc553c6340c0786db036  gcc/testsuite/gfortran.dg/gomp/pr48794.f90
--- 113777,113783 ----
  0784fa1cf4bc9ef82345c80d2f32b6f0  gcc/testsuite/gfortran.dg/gomp/pr45595.f90
  b1d0dcbfd8ebb1bf70bf3d4c08b4e6a8  gcc/testsuite/gfortran.dg/gomp/pr45597.f90
  8be15365cc348700632eb03e92eedffc  gcc/testsuite/gfortran.dg/gomp/pr47331.f90
! ddfb3c8c60839caf1d3c787d3e9254c3  gcc/testsuite/gfortran.dg/gomp/pr48117.f90
  62851f39d208792f5cfb76e509e86f00  gcc/testsuite/gfortran.dg/gomp/pr48611.f90
  a48ce96e50db497ce8703576a8ef40a4  gcc/testsuite/gfortran.dg/gomp/pr48794-2.f90
  66c2d2d7f643cc553c6340c0786db036  gcc/testsuite/gfortran.dg/gomp/pr48794.f90
*************** cfd3639436beee7a175e6d834a4c6834  gcc/te
*** 113736,113742 ****
  9b10d6e97e6ec036398bc75fe623a968  gcc/testsuite/gfortran.dg/gomp/pr80918.f90
  f5bcea31678114301e0da9c5d60bb564  gcc/testsuite/gfortran.dg/gomp/pr81887.f90
  92640e276a3deabcb0817b450e3c007f  gcc/testsuite/gfortran.dg/gomp/pr82568.f90
! 13b62b43e8c430a8a748b9782ee8d3d1  gcc/testsuite/gfortran.dg/gomp/pr83977.f90
  28b8381f9a6407f3fbdf2a45fe796f66  gcc/testsuite/gfortran.dg/gomp/pr84116.f90
  eaf9460f4ff975f6fc6dcd6a8c5f1500  gcc/testsuite/gfortran.dg/gomp/pr85313.f90
  793bc6a890f694516d4634a933a5cb43  gcc/testsuite/gfortran.dg/gomp/pr85703.f90
--- 113822,113828 ----
  9b10d6e97e6ec036398bc75fe623a968  gcc/testsuite/gfortran.dg/gomp/pr80918.f90
  f5bcea31678114301e0da9c5d60bb564  gcc/testsuite/gfortran.dg/gomp/pr81887.f90
  92640e276a3deabcb0817b450e3c007f  gcc/testsuite/gfortran.dg/gomp/pr82568.f90
! 3e883cb0a570efeffb160741369886c4  gcc/testsuite/gfortran.dg/gomp/pr83977.f90
  28b8381f9a6407f3fbdf2a45fe796f66  gcc/testsuite/gfortran.dg/gomp/pr84116.f90
  eaf9460f4ff975f6fc6dcd6a8c5f1500  gcc/testsuite/gfortran.dg/gomp/pr85313.f90
  793bc6a890f694516d4634a933a5cb43  gcc/testsuite/gfortran.dg/gomp/pr85703.f90
*************** c2c9b1a1db79eedb25331d3565231b66  gcc/te
*** 113749,113765 ****
  6399dd6d481972c65426ae5a0fe674a2  gcc/testsuite/gfortran.dg/gomp/pr89651.f90
  1365d33484c21cf6b603f60889b019a4  gcc/testsuite/gfortran.dg/gomp/pr92977.f90
  6db6e7072dccd0be789b6dc9bd2a586c  gcc/testsuite/gfortran.dg/gomp/pr93555.f90
! a921eeb5697bd066712d41d66d374930  gcc/testsuite/gfortran.dg/gomp/pr94672.f90
  8a04653b9aa2543e13a3136934e00444  gcc/testsuite/gfortran.dg/gomp/pr95869.f90
  f832e5b53ac5754d0490d912e4da9ec6  gcc/testsuite/gfortran.dg/gomp/pr99226.f90
! bcd0369b2e799c3808032efd4c583295  gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90
! 5a122e0df6f86c9b8f25e3ef0a8de595  gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90
! 10754ed15a5d6410e61e98492ddcc1a6  gcc/testsuite/gfortran.dg/gomp/pr99928-2.f90
! b564582f56873e1c1671ba8472cd4e7c  gcc/testsuite/gfortran.dg/gomp/pr99928-3.f90
! 40b4f2ef3f3552b786fcb7c63c204257  gcc/testsuite/gfortran.dg/gomp/pr99928-4.f90
! eccea57d37be5c510137e35d54db87b2  gcc/testsuite/gfortran.dg/gomp/pr99928-5.f90
! 64fdae01dc0866fd9b34a72b18aa5d62  gcc/testsuite/gfortran.dg/gomp/pr99928-6.f90
! 453d5604d4da08b7868c762f71d254fc  gcc/testsuite/gfortran.dg/gomp/pr99928-8.f90
  b4be3f9de7631846875a711ae9b67293  gcc/testsuite/gfortran.dg/gomp/proc_ptr_1.f90
  87885556568e657ef4c936c53e1c7305  gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90
  b4e0aeaf5b75aeb3fe4de5a0aa527890  gcc/testsuite/gfortran.dg/gomp/pure-1.f90
--- 113835,113851 ----
  6399dd6d481972c65426ae5a0fe674a2  gcc/testsuite/gfortran.dg/gomp/pr89651.f90
  1365d33484c21cf6b603f60889b019a4  gcc/testsuite/gfortran.dg/gomp/pr92977.f90
  6db6e7072dccd0be789b6dc9bd2a586c  gcc/testsuite/gfortran.dg/gomp/pr93555.f90
! a60737a927ad7417e1231dbf1000e5c1  gcc/testsuite/gfortran.dg/gomp/pr94672.f90
  8a04653b9aa2543e13a3136934e00444  gcc/testsuite/gfortran.dg/gomp/pr95869.f90
  f832e5b53ac5754d0490d912e4da9ec6  gcc/testsuite/gfortran.dg/gomp/pr99226.f90
! 3331e8d7e65132fd0fcdd59cd90008dc  gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90
! f594249cbf60d2fa369812e54fded373  gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90
! 513a3bb13311279addee26524fb5ecc1  gcc/testsuite/gfortran.dg/gomp/pr99928-2.f90
! dbdef7b2e91bd33ee274e75308d2100f  gcc/testsuite/gfortran.dg/gomp/pr99928-3.f90
! eae1176f0c05b615807a8bdfb3dcf8f6  gcc/testsuite/gfortran.dg/gomp/pr99928-4.f90
! aa10d7859d6e78ba5db003536a9084f9  gcc/testsuite/gfortran.dg/gomp/pr99928-5.f90
! 03d4e66579f2284d5a506560657e8460  gcc/testsuite/gfortran.dg/gomp/pr99928-6.f90
! abcd35866af3bc5d5a8997b7059216f0  gcc/testsuite/gfortran.dg/gomp/pr99928-8.f90
  b4be3f9de7631846875a711ae9b67293  gcc/testsuite/gfortran.dg/gomp/proc_ptr_1.f90
  87885556568e657ef4c936c53e1c7305  gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90
  b4e0aeaf5b75aeb3fe4de5a0aa527890  gcc/testsuite/gfortran.dg/gomp/pure-1.f90
*************** fb0554238513491cab61f8c72f0fb5d5  gcc/te
*** 113770,113776 ****
  14ea0275f3cac52c76c9b2a736035336  gcc/testsuite/gfortran.dg/gomp/reduction-task-2.f90
  a68adcaed6526211be8ca88c99cd653f  gcc/testsuite/gfortran.dg/gomp/reduction-task-2a.f90
  20a03aafef1e43b54b78e701de6e7518  gcc/testsuite/gfortran.dg/gomp/reduction-task-3.f90
! 59e444df8ec8f5ea9859b5aef4d75865  gcc/testsuite/gfortran.dg/gomp/reduction1.f90
  02484261b0434dbaf2709c34db58cd4d  gcc/testsuite/gfortran.dg/gomp/reduction2.f90
  a2addf1a691db784ba87841fe1cf8f23  gcc/testsuite/gfortran.dg/gomp/reduction3.f90
  9c7956cb365de1302caa4e1e6ffdfdcc  gcc/testsuite/gfortran.dg/gomp/reduction4.f90
--- 113856,113862 ----
  14ea0275f3cac52c76c9b2a736035336  gcc/testsuite/gfortran.dg/gomp/reduction-task-2.f90
  a68adcaed6526211be8ca88c99cd653f  gcc/testsuite/gfortran.dg/gomp/reduction-task-2a.f90
  20a03aafef1e43b54b78e701de6e7518  gcc/testsuite/gfortran.dg/gomp/reduction-task-3.f90
! bf0767aabd916c2064887ad44208e156  gcc/testsuite/gfortran.dg/gomp/reduction1.f90
  02484261b0434dbaf2709c34db58cd4d  gcc/testsuite/gfortran.dg/gomp/reduction2.f90
  a2addf1a691db784ba87841fe1cf8f23  gcc/testsuite/gfortran.dg/gomp/reduction3.f90
  9c7956cb365de1302caa4e1e6ffdfdcc  gcc/testsuite/gfortran.dg/gomp/reduction4.f90
*************** d56094ad174ac9dd36a007adf8c4fb31  gcc/te
*** 113802,113818 ****
  f51f66a6b2e14680b95f605597f14be3  gcc/testsuite/gfortran.dg/gomp/scan-9.f90
  96b7be608b1727fa1e3fc8a9c0185d70  gcc/testsuite/gfortran.dg/gomp/schedule-1.f90
  c525cee40cfdc1d7f1dda5cf299fdde9  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-1.f90
! 97aefac9d65dc006ea6d5ce5ea111492  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90
  c7709e0ef8d893a3fa9d2e893d1cb1a7  gcc/testsuite/gfortran.dg/gomp/scope-1.f90
  6d5ecca1c74a442d5b324bc5e3b1524a  gcc/testsuite/gfortran.dg/gomp/scope-2.f90
  c4ea98725e5c211b45cc9e83b4dca2be  gcc/testsuite/gfortran.dg/gomp/scope-5.f90
  70cbd3f99d5ec34e89e7f2fb12f0938e  gcc/testsuite/gfortran.dg/gomp/scope-6.f90
  79dfa2e9e4441b4f7baa74120274ac19  gcc/testsuite/gfortran.dg/gomp/sharing-1.f90
  9dd19a9e9dfc0e4a98f98e8a7fc69049  gcc/testsuite/gfortran.dg/gomp/sharing-2.f90
! 61ab8721e9576883e27967dd80ebb199  gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
  b3d1280c39c6cae9dddab498b1e1eeb4  gcc/testsuite/gfortran.dg/gomp/sharing-4.f90
! 1be41e06c2542eaeda3f3dc714dd101a  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-1.f90
! d492a0ba11cd7662d12ae10d05c32cae  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-2.f90
  2645b64d7f38b00ac8056bed5284cfb5  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-3.f90
  5aa2e0ee8670be7d60e95eb876e49faa  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-4.f90
  0938cf42002e64246f5cfad387f8c0ed  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-5.f90
--- 113888,113904 ----
  f51f66a6b2e14680b95f605597f14be3  gcc/testsuite/gfortran.dg/gomp/scan-9.f90
  96b7be608b1727fa1e3fc8a9c0185d70  gcc/testsuite/gfortran.dg/gomp/schedule-1.f90
  c525cee40cfdc1d7f1dda5cf299fdde9  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-1.f90
! ae1839837ca664fa39559a7e703441e7  gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90
  c7709e0ef8d893a3fa9d2e893d1cb1a7  gcc/testsuite/gfortran.dg/gomp/scope-1.f90
  6d5ecca1c74a442d5b324bc5e3b1524a  gcc/testsuite/gfortran.dg/gomp/scope-2.f90
  c4ea98725e5c211b45cc9e83b4dca2be  gcc/testsuite/gfortran.dg/gomp/scope-5.f90
  70cbd3f99d5ec34e89e7f2fb12f0938e  gcc/testsuite/gfortran.dg/gomp/scope-6.f90
  79dfa2e9e4441b4f7baa74120274ac19  gcc/testsuite/gfortran.dg/gomp/sharing-1.f90
  9dd19a9e9dfc0e4a98f98e8a7fc69049  gcc/testsuite/gfortran.dg/gomp/sharing-2.f90
! fc64cb37c3738dda4203d0b7f045abdc  gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
  b3d1280c39c6cae9dddab498b1e1eeb4  gcc/testsuite/gfortran.dg/gomp/sharing-4.f90
! 7be819d09c269efea52ae9d2a290478b  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-1.f90
! 5d4fae4bcc40648259edea77f34ad30a  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-2.f90
  2645b64d7f38b00ac8056bed5284cfb5  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-3.f90
  5aa2e0ee8670be7d60e95eb876e49faa  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-4.f90
  0938cf42002e64246f5cfad387f8c0ed  gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-5.f90
*************** a81fcf292a341e29920f0576722dfd3e  gcc/te
*** 113834,113845 ****
  533ad130fc9c9f6a430f9cdefc575831  gcc/testsuite/gfortran.dg/gomp/target-has-device-addr-2.f90
  3c3ee23796192e475b1597bfe4ae9d72  gcc/testsuite/gfortran.dg/gomp/target-parallel1.f90
  69d4ca23e09530908dad71ad87c932c1  gcc/testsuite/gfortran.dg/gomp/target-update-1.f90
! 919bd1d4b3eea35828ead5f8cf204a98  gcc/testsuite/gfortran.dg/gomp/target1.f90
  b75e4a6eaec211becf176c75768a3f3d  gcc/testsuite/gfortran.dg/gomp/target2.f90
  4a93baff2b168f10d86571d18de637ba  gcc/testsuite/gfortran.dg/gomp/target3.f90
  15b47b840694124950869755ba30ce6f  gcc/testsuite/gfortran.dg/gomp/task-detach-1.f90
! 6c1d12034e3ca377a04b7373ef678265  gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90
! ccb7b4451c217a9dd2635e672900c087  gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90
  694a3a8185e7fe47817679c2aeb886c8  gcc/testsuite/gfortran.dg/gomp/taskwait-depend-nowait-1.f90
  1b22afe90e22c058fc805c2720b68de8  gcc/testsuite/gfortran.dg/gomp/taskwait.f90
  c3cfb4ba20d0cf306196d4a7cfcbd04d  gcc/testsuite/gfortran.dg/gomp/teams-3.f90
--- 113920,113931 ----
  533ad130fc9c9f6a430f9cdefc575831  gcc/testsuite/gfortran.dg/gomp/target-has-device-addr-2.f90
  3c3ee23796192e475b1597bfe4ae9d72  gcc/testsuite/gfortran.dg/gomp/target-parallel1.f90
  69d4ca23e09530908dad71ad87c932c1  gcc/testsuite/gfortran.dg/gomp/target-update-1.f90
! ace8eeae9c6c9db051a9c0f4380b3cf1  gcc/testsuite/gfortran.dg/gomp/target1.f90
  b75e4a6eaec211becf176c75768a3f3d  gcc/testsuite/gfortran.dg/gomp/target2.f90
  4a93baff2b168f10d86571d18de637ba  gcc/testsuite/gfortran.dg/gomp/target3.f90
  15b47b840694124950869755ba30ce6f  gcc/testsuite/gfortran.dg/gomp/task-detach-1.f90
! e9189a7fc6380cd6f8b7c7d629f9dd38  gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90
! 5795aa6a070f3603b5b698a910c8ae20  gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90
  694a3a8185e7fe47817679c2aeb886c8  gcc/testsuite/gfortran.dg/gomp/taskwait-depend-nowait-1.f90
  1b22afe90e22c058fc805c2720b68de8  gcc/testsuite/gfortran.dg/gomp/taskwait.f90
  c3cfb4ba20d0cf306196d4a7cfcbd04d  gcc/testsuite/gfortran.dg/gomp/teams-3.f90
*************** f2587050f986e340a57d1dff27f19650  gcc/te
*** 113960,113969 ****
  691f6ca9c2e2576d299447ffcbc1b4b2  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-52.f90
  fe0a3478e4428c993a82f7b6e0a66c7b  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-53.f90
  e5a965c0d4fde40f267b99ad13512653  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-54.f90
! bab0bace2772a0e3433627668852a5c2  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-55.f90
! fb627f186c63129ab959ab9b1fd3d46c  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-56.f90
! 26f92a3276f3a5c5b7329197037922bc  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-57.f90
! 99cae2704f821f984f06c5a51e636448  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-58.f90
  4fe9b6c63d41bbfdcd688517fbcb9a45  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-6.f90
  3b44c5b537ef809faf8036a38c923073  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-7.f90
  f5b9adb72b23db9e9be45e89cefe8af0  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-8.f90
--- 114046,114055 ----
  691f6ca9c2e2576d299447ffcbc1b4b2  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-52.f90
  fe0a3478e4428c993a82f7b6e0a66c7b  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-53.f90
  e5a965c0d4fde40f267b99ad13512653  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-54.f90
! fd699d1dd641c91bd9bce60f5b0e58ae  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-55.f90
! 0a68551d081825cbde4f86b012697df7  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-56.f90
! ea4dce83295553cdcaa4bcbcad574c1d  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-57.f90
! 361fd6e63567665ef83b531c10c39dc2  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-58.f90
  4fe9b6c63d41bbfdcd688517fbcb9a45  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-6.f90
  3b44c5b537ef809faf8036a38c923073  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-7.f90
  f5b9adb72b23db9e9be45e89cefe8af0  gcc/testsuite/gfortran.dg/gomp/workshare-reduction-8.f90
*************** ec558a82bb4b8209168624a762e13383  gcc/te
*** 114344,114350 ****
  488f14e62a4815a2fdf65173e83ea2af  gcc/testsuite/gfortran.dg/initialization_6.f90
  452645ba47a1260f909898a7313d9d8f  gcc/testsuite/gfortran.dg/initialization_7.f90
  cc4d6e061d5fbfc0742e0c48dad42d09  gcc/testsuite/gfortran.dg/initialization_8.f90
! d4d8a181bcb7eb756cf1498c62c9f6e7  gcc/testsuite/gfortran.dg/initialization_9.f90
  1cc76d4c1acac6297df84e3574966378  gcc/testsuite/gfortran.dg/inline_matmul_1.f90
  77f3febffafae6303787ea418d1d31d5  gcc/testsuite/gfortran.dg/inline_matmul_10.f90
  78ba6e618e4a1cd6e7597233a5e8e65d  gcc/testsuite/gfortran.dg/inline_matmul_11.f90
--- 114430,114436 ----
  488f14e62a4815a2fdf65173e83ea2af  gcc/testsuite/gfortran.dg/initialization_6.f90
  452645ba47a1260f909898a7313d9d8f  gcc/testsuite/gfortran.dg/initialization_7.f90
  cc4d6e061d5fbfc0742e0c48dad42d09  gcc/testsuite/gfortran.dg/initialization_8.f90
! 113aa5e18ce48309d252bdc0c12429de  gcc/testsuite/gfortran.dg/initialization_9.f90
  1cc76d4c1acac6297df84e3574966378  gcc/testsuite/gfortran.dg/inline_matmul_1.f90
  77f3febffafae6303787ea418d1d31d5  gcc/testsuite/gfortran.dg/inline_matmul_10.f90
  78ba6e618e4a1cd6e7597233a5e8e65d  gcc/testsuite/gfortran.dg/inline_matmul_11.f90
*************** aaf42fffbdb274f0f43b9ed58d6cde7f  gcc/te
*** 114465,114471 ****
  b81939fbc1e04cd0f35d5940d11a69b2  gcc/testsuite/gfortran.dg/interface_13.f90
  85acf338bc6bb2a0c454031cec28f2e3  gcc/testsuite/gfortran.dg/interface_14.f90
  d924bdc542707fe8acced1b7741859cd  gcc/testsuite/gfortran.dg/interface_15.f90
! c56e26fb28b30b5d6bc86f44ec3d4fe4  gcc/testsuite/gfortran.dg/interface_16.f90
  1ceed116ae517ff6cfc92393589f25bf  gcc/testsuite/gfortran.dg/interface_17.f90
  0e38de22b8a37860231db85750ab6248  gcc/testsuite/gfortran.dg/interface_18.f90
  9d523e845bda900d7e8d6428e3203666  gcc/testsuite/gfortran.dg/interface_19.f90
--- 114551,114557 ----
  b81939fbc1e04cd0f35d5940d11a69b2  gcc/testsuite/gfortran.dg/interface_13.f90
  85acf338bc6bb2a0c454031cec28f2e3  gcc/testsuite/gfortran.dg/interface_14.f90
  d924bdc542707fe8acced1b7741859cd  gcc/testsuite/gfortran.dg/interface_15.f90
! 0aa52a11d14267ff737dfda030c764a8  gcc/testsuite/gfortran.dg/interface_16.f90
  1ceed116ae517ff6cfc92393589f25bf  gcc/testsuite/gfortran.dg/interface_17.f90
  0e38de22b8a37860231db85750ab6248  gcc/testsuite/gfortran.dg/interface_18.f90
  9d523e845bda900d7e8d6428e3203666  gcc/testsuite/gfortran.dg/interface_19.f90
*************** c20fd15a7b2e66c8ae01f70d95fb7779  gcc/te
*** 114592,114598 ****
  8de5b5da5c0b6404e976e90dd262d8ee  gcc/testsuite/gfortran.dg/intrinsic_actual_1.f
  01e0ee064d6086b30abccca8fc43a7e3  gcc/testsuite/gfortran.dg/intrinsic_actual_2.f90
  783e2c030e71ba529911e2569d83793f  gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90
! 8bbf9648b56711afd349b09f68edd79c  gcc/testsuite/gfortran.dg/intrinsic_actual_4.f90
  6a393f5eb99e093b9217f6ea5f8bb9d0  gcc/testsuite/gfortran.dg/intrinsic_argument_conformance_1.f90
  73b6ad811e05c03fda87e9cec3f657cc  gcc/testsuite/gfortran.dg/intrinsic_argument_conformance_2.f90
  11c58964c4de125227080f9765b50025  gcc/testsuite/gfortran.dg/intrinsic_bounds_1.f90
--- 114678,114684 ----
  8de5b5da5c0b6404e976e90dd262d8ee  gcc/testsuite/gfortran.dg/intrinsic_actual_1.f
  01e0ee064d6086b30abccca8fc43a7e3  gcc/testsuite/gfortran.dg/intrinsic_actual_2.f90
  783e2c030e71ba529911e2569d83793f  gcc/testsuite/gfortran.dg/intrinsic_actual_3.f90
! ecaacf1a8e6cf6d27acf0728314a8bfa  gcc/testsuite/gfortran.dg/intrinsic_actual_4.f90
  6a393f5eb99e093b9217f6ea5f8bb9d0  gcc/testsuite/gfortran.dg/intrinsic_argument_conformance_1.f90
  73b6ad811e05c03fda87e9cec3f657cc  gcc/testsuite/gfortran.dg/intrinsic_argument_conformance_2.f90
  11c58964c4de125227080f9765b50025  gcc/testsuite/gfortran.dg/intrinsic_bounds_1.f90
*************** b28986ef259fe186d84c0622f1c5f76b  gcc/te
*** 115235,115241 ****
  19c3d1357394b2399e1ff5d6f9694a51  gcc/testsuite/gfortran.dg/namelist_97.f90
  a2df4ca61a2b12380764cd69635191f0  gcc/testsuite/gfortran.dg/namelist_98.f90
  843ad75abd3258ea2565083edf16cbc3  gcc/testsuite/gfortran.dg/namelist_args.f90
! b8f12d194aa9b2cfb5214297f897456c  gcc/testsuite/gfortran.dg/namelist_assumed_char.f90
  73de646ecd69b0bf965fecc1ccd64052  gcc/testsuite/gfortran.dg/namelist_blockdata.f
  b4b317ef7f0e3b328cd2408c834c565e  gcc/testsuite/gfortran.dg/namelist_char_only.f90
  ab1962cc90efed9c77a456b69eee06b6  gcc/testsuite/gfortran.dg/namelist_empty.f90
--- 115321,115327 ----
  19c3d1357394b2399e1ff5d6f9694a51  gcc/testsuite/gfortran.dg/namelist_97.f90
  a2df4ca61a2b12380764cd69635191f0  gcc/testsuite/gfortran.dg/namelist_98.f90
  843ad75abd3258ea2565083edf16cbc3  gcc/testsuite/gfortran.dg/namelist_args.f90
! 12a7b6c1ef4d3529ee1dd458eb8c4a0f  gcc/testsuite/gfortran.dg/namelist_assumed_char.f90
  73de646ecd69b0bf965fecc1ccd64052  gcc/testsuite/gfortran.dg/namelist_blockdata.f
  b4b317ef7f0e3b328cd2408c834c565e  gcc/testsuite/gfortran.dg/namelist_char_only.f90
  ab1962cc90efed9c77a456b69eee06b6  gcc/testsuite/gfortran.dg/namelist_empty.f90
*************** e548fbe30e98c9d7ac1106482dbc7e3e  gcc/te
*** 115376,115382 ****
  86113f32e1c3798e72e4dc686fde343e  gcc/testsuite/gfortran.dg/openacc-define-3.f90
  13b9efd2d6877e1ce4634b24aac8b5fc  gcc/testsuite/gfortran.dg/openmp-define-1.f90
  7c3311ed70efe122c0482f92398333c9  gcc/testsuite/gfortran.dg/openmp-define-2.f90
! 9fb28c099543f7f38e9a0dbcdb890070  gcc/testsuite/gfortran.dg/openmp-define-3.f90
  1053eca20a7e15049ebb36ade3724790  gcc/testsuite/gfortran.dg/operator_1.f90
  b17cec21502c8794736dc737cec00cef  gcc/testsuite/gfortran.dg/operator_2.f90
  0dd70087c9deb3c1435a846982d5b717  gcc/testsuite/gfortran.dg/operator_3.f90
--- 115462,115468 ----
  86113f32e1c3798e72e4dc686fde343e  gcc/testsuite/gfortran.dg/openacc-define-3.f90
  13b9efd2d6877e1ce4634b24aac8b5fc  gcc/testsuite/gfortran.dg/openmp-define-1.f90
  7c3311ed70efe122c0482f92398333c9  gcc/testsuite/gfortran.dg/openmp-define-2.f90
! 0b6021e0e31e3ddb700bd3e9c2c68182  gcc/testsuite/gfortran.dg/openmp-define-3.f90
  1053eca20a7e15049ebb36ade3724790  gcc/testsuite/gfortran.dg/operator_1.f90
  b17cec21502c8794736dc737cec00cef  gcc/testsuite/gfortran.dg/operator_2.f90
  0dd70087c9deb3c1435a846982d5b717  gcc/testsuite/gfortran.dg/operator_3.f90
*************** c6f893cb449a80625f83167f1ff5ba51  gcc/te
*** 115540,115545 ****
--- 115626,115633 ----
  8d4993c59b25b275c9be746b415c88a7  gcc/testsuite/gfortran.dg/pdt_74.f03
  8ccbb94fe607aa377b82a359ac1d2ab7  gcc/testsuite/gfortran.dg/pdt_75.f03
  872e5a262b625630f6c8518c84192fe0  gcc/testsuite/gfortran.dg/pdt_76.f03
+ e7b56697ac64f36257ec59b471922aaa  gcc/testsuite/gfortran.dg/pdt_77.f03
+ 3d080e764a86b6c6b89cec537323af50  gcc/testsuite/gfortran.dg/pdt_78.f03
  e21f38a2db39f95405441b61c12cf1e6  gcc/testsuite/gfortran.dg/pdt_8.f03
  c621629f10feffbfa9fef1441a610e53  gcc/testsuite/gfortran.dg/pdt_9.f03
  ce217e87870d47796b72f99a0b0f46b7  gcc/testsuite/gfortran.dg/pdt_generic_1.f90
*************** b1cb2c9a52574c2df5df49bd13ee7e5d  gcc/te
*** 115857,115863 ****
  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
  fb5f15b3c2517fe0b8083e8530c9bf2c  gcc/testsuite/gfortran.dg/pr15164.f90
  146cca656e75166f32a0ec1cdb216ee2  gcc/testsuite/gfortran.dg/pr15324.f90
  7f8e1de010f46d132b567298a02ba30d  gcc/testsuite/gfortran.dg/pr15332.f
--- 115945,115951 ----
  b6e7e7e8bea9878d7980ddcd5a97c5f5  gcc/testsuite/gfortran.dg/pr122513.f90
  984f8307f36d56a0b48b5acce2dd5eb5  gcc/testsuite/gfortran.dg/pr12884.f
  64075248b9d1bffd6f380bb4e2a6eae0  gcc/testsuite/gfortran.dg/pr15129.f90
! 2b5f18b773a5db29b0a2ee2d8cce767c  gcc/testsuite/gfortran.dg/pr15140.f90
  fb5f15b3c2517fe0b8083e8530c9bf2c  gcc/testsuite/gfortran.dg/pr15164.f90
  146cca656e75166f32a0ec1cdb216ee2  gcc/testsuite/gfortran.dg/pr15324.f90
  7f8e1de010f46d132b567298a02ba30d  gcc/testsuite/gfortran.dg/pr15332.f
*************** abf68e470c0aa7bc77cac4f589082522  gcc/te
*** 118037,118043 ****
  677875c22fcbdaacf0630aebbf7740ee  gcc/testsuite/gfortran.dg/vect/pr83232.f90
  8b92a1fffaa166252123bd512e3f07ff  gcc/testsuite/gfortran.dg/vect/pr84913.f90
  9be04baf09b73ee331ee919269c7ee1d  gcc/testsuite/gfortran.dg/vect/pr85853.f90
! 48c80a6c163523eb726f99224a1e283a  gcc/testsuite/gfortran.dg/vect/pr86421.f90
  34153245fea2ed8b978b0ee75953c440  gcc/testsuite/gfortran.dg/vect/pr89535.f90
  9ab34e9e659f29537ab1a84a0cc37823  gcc/testsuite/gfortran.dg/vect/pr90681.f
  228d01744ff334cf0b8c02d689a04b1e  gcc/testsuite/gfortran.dg/vect/pr90913.f90
--- 118125,118131 ----
  677875c22fcbdaacf0630aebbf7740ee  gcc/testsuite/gfortran.dg/vect/pr83232.f90
  8b92a1fffaa166252123bd512e3f07ff  gcc/testsuite/gfortran.dg/vect/pr84913.f90
  9be04baf09b73ee331ee919269c7ee1d  gcc/testsuite/gfortran.dg/vect/pr85853.f90
! fff400d55f6a88218a7de082bdb1006e  gcc/testsuite/gfortran.dg/vect/pr86421.f90
  34153245fea2ed8b978b0ee75953c440  gcc/testsuite/gfortran.dg/vect/pr89535.f90
  9ab34e9e659f29537ab1a84a0cc37823  gcc/testsuite/gfortran.dg/vect/pr90681.f
  228d01744ff334cf0b8c02d689a04b1e  gcc/testsuite/gfortran.dg/vect/pr90913.f90
*************** b3a316ada43c24ff36cbe71860fae91c  gcc/te
*** 120875,120880 ****
--- 120963,120969 ----
  f202185bfd0a21aad1b2b2a3c53f0530  gcc/testsuite/gnat.dg/aggr32.adb
  c08e4f7d35898f0bc9c4996849adc409  gcc/testsuite/gnat.dg/aggr32_pkg-child.ads
  1057b1221f0bd9331d17412ee8c29e1d  gcc/testsuite/gnat.dg/aggr32_pkg.ads
+ 2e81bb438686c4b5e8022356634d0f32  gcc/testsuite/gnat.dg/aggr33.adb
  35168b6dce753ec723ff0dcf21d977d0  gcc/testsuite/gnat.dg/aggr4.adb
  a12ec40d7ebc1ab08b05b0d1f6a57bc4  gcc/testsuite/gnat.dg/aggr7.adb
  39fba9f7f4870b15e9c37bcf9a358858  gcc/testsuite/gnat.dg/aggr8.adb
*************** fde5d5ed0c271572ac7da0e31e22bc5c  gcc/te
*** 122533,122538 ****
--- 122622,122628 ----
  46cc8f530fa18a6afd30b9d241f7967e  gcc/testsuite/gnat.dg/recursive_call.adb
  85a55db824671af62dedb2987941d2fe  gcc/testsuite/gnat.dg/reduce1.adb
  0b27bcc5788ce003bc049b34d20d5c88  gcc/testsuite/gnat.dg/reduce2.adb
+ cc69f06d5cf4cbc8c70e417d3db3148b  gcc/testsuite/gnat.dg/reduce3.adb
  50be8d98f4f9ac99d64926a10596a2df  gcc/testsuite/gnat.dg/ref_type.adb
  5457827e708b7bfc92ffe5610655a443  gcc/testsuite/gnat.dg/ref_type.ads
  222b5d10f23a2e8e8a5e4d41e86e66ed  gcc/testsuite/gnat.dg/regpat1.adb
*************** e5ba939d3c279c5b6a8f745c0873635b  gcc/te
*** 122851,122856 ****
--- 122941,122947 ----
  7b27b6bdd1df4f3312e7f8c1e8faf020  gcc/testsuite/gnat.dg/specs/private3-child.ads
  a84edadaee1ab9facb33753c1ef587df  gcc/testsuite/gnat.dg/specs/private3.ads
  fc55b1bcb0c272bc29027f58c8607f74  gcc/testsuite/gnat.dg/specs/private_with.ads
+ 3cbbbcdd33c1cd2f5801d65eb79d3cb4  gcc/testsuite/gnat.dg/specs/put_image2.ads
  38c51300d90d115072862fad182112ba  gcc/testsuite/gnat.dg/specs/renaming1.ads
  3b6772c48920aaa7f63a032ce18244a2  gcc/testsuite/gnat.dg/specs/renaming2.ads
  f16ac17ba73b5454cac752f8f68ab33b  gcc/testsuite/gnat.dg/specs/renaming2_pkg1.ads
*************** e87a7723ddb82de7bd960a324539538f  gcc/te
*** 125631,125637 ****
  58f513e93c9d11094e8f0c6934f2852d  gcc/testsuite/lib/file-format.exp
  9784ae05070dcc427e2ab82a218df718  gcc/testsuite/lib/fortran-modules.exp
  9c1c18d54fa5811ce07e3c5d4a677fbf  gcc/testsuite/lib/fortran-torture.exp
! 8f561f20e6575fc58b7f0ffd21432994  gcc/testsuite/lib/g++-dg.exp
  c345df92b75960dbcf02dc790324b5c6  gcc/testsuite/lib/g++.exp
  34afeaf5c956af6c63ace657aec3525c  gcc/testsuite/lib/gcc-defs.exp
  613c4bf9d9645d83e88918615b2efad9  gcc/testsuite/lib/gcc-dg.exp
--- 125722,125728 ----
  58f513e93c9d11094e8f0c6934f2852d  gcc/testsuite/lib/file-format.exp
  9784ae05070dcc427e2ab82a218df718  gcc/testsuite/lib/fortran-modules.exp
  9c1c18d54fa5811ce07e3c5d4a677fbf  gcc/testsuite/lib/fortran-torture.exp
! 1002d0832cc19029e591c658688de0c7  gcc/testsuite/lib/g++-dg.exp
  c345df92b75960dbcf02dc790324b5c6  gcc/testsuite/lib/g++.exp
  34afeaf5c956af6c63ace657aec3525c  gcc/testsuite/lib/gcc-defs.exp
  613c4bf9d9645d83e88918615b2efad9  gcc/testsuite/lib/gcc-dg.exp
*************** f427d0c6721f464c1dcbe2e8bea5fdfe  gcc/te
*** 125649,125655 ****
  b31646238765c4f7c1464399fd05e5eb  gcc/testsuite/lib/gm2-torture.exp
  7cdebf6cba574d6fd805c978ed4e5aaa  gcc/testsuite/lib/gm2.exp
  0678956ec8761ea452385bc244b33382  gcc/testsuite/lib/gnat-dg.exp
! 30035dff80db0cbe777f5ec29ee77ebc  gcc/testsuite/lib/gnat.exp
  628b339f01ad2b5a5afbfe6c0220ad31  gcc/testsuite/lib/go-dg.exp
  a658e6e3511698723b87be3277ba706d  gcc/testsuite/lib/go-torture.exp
  450868d4f15f0faade8c693e132ee071  gcc/testsuite/lib/go.exp
--- 125740,125746 ----
  b31646238765c4f7c1464399fd05e5eb  gcc/testsuite/lib/gm2-torture.exp
  7cdebf6cba574d6fd805c978ed4e5aaa  gcc/testsuite/lib/gm2.exp
  0678956ec8761ea452385bc244b33382  gcc/testsuite/lib/gnat-dg.exp
! 4592c669696bedc5478cf9ef8c4d9ffd  gcc/testsuite/lib/gnat.exp
  628b339f01ad2b5a5afbfe6c0220ad31  gcc/testsuite/lib/go-dg.exp
  a658e6e3511698723b87be3277ba706d  gcc/testsuite/lib/go-torture.exp
  450868d4f15f0faade8c693e132ee071  gcc/testsuite/lib/go.exp
*************** eb1595e729e2eaac81c7ffe330d8f24e  gcc/te
*** 125693,125699 ****
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 56226c9cf1ac9853a53c8b59d3ef7a01  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
--- 125784,125790 ----
  f7940f4f8c24d9f0bf4d062473f55777  gcc/testsuite/lib/scanwpaipa.exp
  23e89ca46b182663a4139064b179545f  gcc/testsuite/lib/target-libpath.exp
  d9a6726c38c578e1cd46631ee7f92d0a  gcc/testsuite/lib/target-supports-dg.exp
! 33fd07e7e0080132e5442fc824aeeea6  gcc/testsuite/lib/target-supports.exp
  cfe4a2f0a83382048de060dc6669cbb9  gcc/testsuite/lib/target-utils.exp
  e45ee1a35539730bd823a310ad306ded  gcc/testsuite/lib/timeout-dg.exp
  b755c82fb5ee43ef6c852f23fbdc8704  gcc/testsuite/lib/timeout.exp
*************** b4a6da1471f279353aaca4956c18cdea  gcc/tr
*** 128355,128368 ****
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  23590c969997d33ec2e1fa1da2a89526  gcc/tree-call-cdce.cc
! 2c03161e3401b5343b2c2e3fe83e557e  gcc/tree-cfg.cc
! 10d3c7c1807e0cb252d9100eed514e59  gcc/tree-cfg.h
! f52b2355fd5c638140254b4a00ef72f8  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
  1718a36253ebbb17fe4570fc768216c9  gcc/tree-chrec.cc
  0e4a484c6387f9be0a506783637432f9  gcc/tree-chrec.h
  c610e208c5e1da4ee1bff58dac50e79a  gcc/tree-complex.cc
! 455bddf8ce2fe4dfcb90a83d94c24c60  gcc/tree-core.h
  77244f55dae576a255f5b69b70774e54  gcc/tree-data-ref.cc
  e43a555cdaab9a97ba3910364910f865  gcc/tree-data-ref.h
  f01aeac56dffd44808096094e2bf76c1  gcc/tree-dfa.cc
--- 128446,128459 ----
  bcff760f6710b9047412aba72a381983  gcc/tree-affine.h
  527c9fa3845b2653cafc14c109129179  gcc/tree-assume.cc
  23590c969997d33ec2e1fa1da2a89526  gcc/tree-call-cdce.cc
! f95abeeb84fab10990790adba3fdf2f3  gcc/tree-cfg.cc
! a2ce5683f24c556f6dbc78e7c6d27dd6  gcc/tree-cfg.h
! 7f12d8875f61aad8508fa38cefd5dc57  gcc/tree-cfgcleanup.cc
  b528a0932f50504df146d112f7d01a5c  gcc/tree-cfgcleanup.h
  1718a36253ebbb17fe4570fc768216c9  gcc/tree-chrec.cc
  0e4a484c6387f9be0a506783637432f9  gcc/tree-chrec.h
  c610e208c5e1da4ee1bff58dac50e79a  gcc/tree-complex.cc
! 4825cc40c62dc692177266f3e85ba928  gcc/tree-core.h
  77244f55dae576a255f5b69b70774e54  gcc/tree-data-ref.cc
  e43a555cdaab9a97ba3910364910f865  gcc/tree-data-ref.h
  f01aeac56dffd44808096094e2bf76c1  gcc/tree-dfa.cc
*************** ef1cb0fba517532ecda9f4e0dd5218f7  gcc/tr
*** 128387,128393 ****
  1a3fc26573e4e592efe69f41168a65fa  gcc/tree-iterator.h
  708a19806855f78da0268f0c25a1c1c0  gcc/tree-logical-location.cc
  fba074361c117a968daf282ef88a2b6e  gcc/tree-logical-location.h
! 809e077fea6aa1e38be693ae0a16dee1  gcc/tree-loop-distribution.cc
  dfd20c8b11a281f68c975c63033ed5e0  gcc/tree-nested.cc
  b9bad013f5186a6cf78fe8adbe457945  gcc/tree-nested.h
  b2cc2bfd702552bff382308428fec556  gcc/tree-nrv.cc
--- 128478,128484 ----
  1a3fc26573e4e592efe69f41168a65fa  gcc/tree-iterator.h
  708a19806855f78da0268f0c25a1c1c0  gcc/tree-logical-location.cc
  fba074361c117a968daf282ef88a2b6e  gcc/tree-logical-location.h
! f9aaa5558fcc5a324ef572971dc9f564  gcc/tree-loop-distribution.cc
  dfd20c8b11a281f68c975c63033ed5e0  gcc/tree-nested.cc
  b9bad013f5186a6cf78fe8adbe457945  gcc/tree-nested.h
  b2cc2bfd702552bff382308428fec556  gcc/tree-nrv.cc
*************** beaa17685ead93eee17f6373d004c4c4  gcc/tr
*** 128402,128408 ****
  460fc341cb2d78f53e0a27c81de36a7d  gcc/tree-phinodes.h
  10ba4bea4c7470735678acc6088c06d5  gcc/tree-predcom.cc
  529cb4117fb3ff7fd899c570bd97e944  gcc/tree-pretty-print-markup.h
! 5c27ec66167b88ee1ac42a16d76266bd  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
  30eadcd3625eaa7cbebc8de55729efbc  gcc/tree-scalar-evolution.cc
--- 128493,128499 ----
  460fc341cb2d78f53e0a27c81de36a7d  gcc/tree-phinodes.h
  10ba4bea4c7470735678acc6088c06d5  gcc/tree-predcom.cc
  529cb4117fb3ff7fd899c570bd97e944  gcc/tree-pretty-print-markup.h
! 9549fe142712a6a3002b12302fc770a7  gcc/tree-pretty-print.cc
  fd4dd1219acc650a4f7855faa0097964  gcc/tree-pretty-print.h
  7c11aa147a6d02acce5170cb35aed445  gcc/tree-profile.cc
  30eadcd3625eaa7cbebc8de55729efbc  gcc/tree-scalar-evolution.cc
*************** bc6f720750badcd2ff68dddf544e75eb  gcc/tr
*** 128419,128425 ****
  56468d0bf8f8f4c754ea03008cc6c0eb  gcc/tree-ssa-coalesce.cc
  44217fe298d550aecd4800f65391c931  gcc/tree-ssa-coalesce.h
  be605b5b6cac7c418bd348b54f9d47cf  gcc/tree-ssa-copy.cc
! 80a7f1d6d9a483968c3f95f035bdaa27  gcc/tree-ssa-dce.cc
  4b3c2e3456bae55a01edd98396b099a1  gcc/tree-ssa-dce.h
  b9ccca93dfe789389d268eca6dbec62f  gcc/tree-ssa-dom.cc
  0046e212ff1b9f3f4d27d055aa299c47  gcc/tree-ssa-dom.h
--- 128510,128516 ----
  56468d0bf8f8f4c754ea03008cc6c0eb  gcc/tree-ssa-coalesce.cc
  44217fe298d550aecd4800f65391c931  gcc/tree-ssa-coalesce.h
  be605b5b6cac7c418bd348b54f9d47cf  gcc/tree-ssa-copy.cc
! a2562716402a79e7cd6af0a32c2f4563  gcc/tree-ssa-dce.cc
  4b3c2e3456bae55a01edd98396b099a1  gcc/tree-ssa-dce.h
  b9ccca93dfe789389d268eca6dbec62f  gcc/tree-ssa-dom.cc
  0046e212ff1b9f3f4d27d055aa299c47  gcc/tree-ssa-dom.h
*************** a6d83be241a72da1740cf6c5b2ce7d52  gcc/tr
*** 128429,128437 ****
  0915c4bbeb42abdda8799c2b27e5db12  gcc/tree-ssa-ifcombine.cc
  9bff033c448d54835a74eae5797b80e7  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
! 02e9a1bf25d500979aa57640611d72bc  gcc/tree-ssa-loop-ch.cc
  56c17094ff91d36af5c68291820c1d2f  gcc/tree-ssa-loop-im.cc
! 21088fa37f899ccd0056bf3486157db9  gcc/tree-ssa-loop-ivcanon.cc
  ec0ea4b2fca8f29ceacc9fa4130673d0  gcc/tree-ssa-loop-ivopts.cc
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
  71ebf1f6c8d82b1fdbca6c7aa3bd14cb  gcc/tree-ssa-loop-manip.cc
--- 128520,128528 ----
  0915c4bbeb42abdda8799c2b27e5db12  gcc/tree-ssa-ifcombine.cc
  9bff033c448d54835a74eae5797b80e7  gcc/tree-ssa-live.cc
  cf4bde43ab3b843eff45bac243d4116d  gcc/tree-ssa-live.h
! 43cee7e03d2dcf9be9a012c3b6f663e0  gcc/tree-ssa-loop-ch.cc
  56c17094ff91d36af5c68291820c1d2f  gcc/tree-ssa-loop-im.cc
! 59817c52e943058ad942cd5b8c8427d0  gcc/tree-ssa-loop-ivcanon.cc
  ec0ea4b2fca8f29ceacc9fa4130673d0  gcc/tree-ssa-loop-ivopts.cc
  1f70c217ef5bd5f655512b9232754870  gcc/tree-ssa-loop-ivopts.h
  71ebf1f6c8d82b1fdbca6c7aa3bd14cb  gcc/tree-ssa-loop-manip.cc
*************** cc64c91d8734e7d0da1a88587224af44  gcc/tr
*** 128454,128460 ****
  ec25a5b6fd6b05135faa83b07eca7e91  gcc/tree-ssa-propagate.h
  2e77cb6dbff1d8175a2c6adc5299e1cf  gcc/tree-ssa-reassoc.cc
  258492cd7ef04be49374ea1e670f3b5b  gcc/tree-ssa-reassoc.h
! 0bbbe2a0347f381c92098ba698393a33  gcc/tree-ssa-sccvn.cc
  952cb2484413ce2cf094a52b596dc078  gcc/tree-ssa-sccvn.h
  a27c58eccc3d8929767feb76dc99399f  gcc/tree-ssa-scopedtables.cc
  aa25adbcb019dd38a66ce237df54ae1d  gcc/tree-ssa-scopedtables.h
--- 128545,128551 ----
  ec25a5b6fd6b05135faa83b07eca7e91  gcc/tree-ssa-propagate.h
  2e77cb6dbff1d8175a2c6adc5299e1cf  gcc/tree-ssa-reassoc.cc
  258492cd7ef04be49374ea1e670f3b5b  gcc/tree-ssa-reassoc.h
! 041c0ad1c9434fc7d52a7ba4d5324d1c  gcc/tree-ssa-sccvn.cc
  952cb2484413ce2cf094a52b596dc078  gcc/tree-ssa-sccvn.h
  a27c58eccc3d8929767feb76dc99399f  gcc/tree-ssa-scopedtables.cc
  aa25adbcb019dd38a66ce237df54ae1d  gcc/tree-ssa-scopedtables.h
*************** af4c63760c432f66b1c6c8e7e7666699  gcc/tr
*** 128487,128508 ****
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  c98debbdc978c10e8934f3b4fb7e2504  gcc/tree-tailcall.cc
  afc64fe5f2d0be7edd7fd887eb73b974  gcc/tree-vect-data-refs.cc
! e569116acd109106c3f93f17b35e82c9  gcc/tree-vect-generic.cc
! 1fda189ce70e35745f865fd7705fd60a  gcc/tree-vect-loop-manip.cc
! ff900d86848016b11aeec88d9e225674  gcc/tree-vect-loop.cc
! 45156c2c4f681900600c801161a90601  gcc/tree-vect-patterns.cc
  588899232babed9c67e61795ff405608  gcc/tree-vect-slp-patterns.cc
! 6c3b37caceaea7946e7fde6dfa408f3f  gcc/tree-vect-slp.cc
! 6373d046b1d3dc14cec984ec55658793  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  c516450d07587e25c338c4223664b2ad  gcc/tree-vectorizer.cc
  69c93a44a2b800f839150157cfd558e1  gcc/tree-vectorizer.h
  6af612260e9aa57da3abab8955305844  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! 26e4c4decbadc48ca56beacdcc5cc8ed  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! 3c7284eaa6ec4e9196ccee69be8048a4  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
--- 128578,128599 ----
  ebb8ac3717c1bf5db4371da2f3cf6af7  gcc/tree-switch-conversion.h
  c98debbdc978c10e8934f3b4fb7e2504  gcc/tree-tailcall.cc
  afc64fe5f2d0be7edd7fd887eb73b974  gcc/tree-vect-data-refs.cc
! 643ae42915f153c0014934d90e00c875  gcc/tree-vect-generic.cc
! 9b4b4c9a9ecbdf482cab09c556fa92fd  gcc/tree-vect-loop-manip.cc
! 7afd755aead556a7b9c54083248dc70c  gcc/tree-vect-loop.cc
! 92facee65a97dd1619b579cad2d611d1  gcc/tree-vect-patterns.cc
  588899232babed9c67e61795ff405608  gcc/tree-vect-slp-patterns.cc
! 241056c37ca5ddefdad7c9c3132f788e  gcc/tree-vect-slp.cc
! 717e5918b264584711060b325baa3779  gcc/tree-vect-stmts.cc
  c8efeee600d612c4bae8dda4bd45ee54  gcc/tree-vector-builder.cc
  258611ff1e83cc7680e8c9f033499665  gcc/tree-vector-builder.h
  c516450d07587e25c338c4223664b2ad  gcc/tree-vectorizer.cc
  69c93a44a2b800f839150157cfd558e1  gcc/tree-vectorizer.h
  6af612260e9aa57da3abab8955305844  gcc/tree-vrp.cc
  a19edad681d27130bd2a0d83768ac946  gcc/tree-vrp.h
! a28c66d5fa146a42930296a1f6dfc91f  gcc/tree.cc
  2b3067f4ee14760d08fdfee4eb6b8a00  gcc/tree.def
! d4ada940c189672b6a0a2a9874d2b11d  gcc/tree.h
  b642c83968cda285afc700da2fb276d5  gcc/treestruct.def
  84205f5a5b424f30ce8c527b234e3f94  gcc/tristate.cc
  ea37ace5dddab6f4b2b9608516bebc35  gcc/tristate.h
*************** c4e8176c1964a5ebe0a55900f2141299  gotool
*** 128572,128578 ****
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! d670aa4cb670832ed89b7d35ee8fafc6  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  44b123c52a2755c9e6bf43ec0c33ae49  include/ansidecl.h
--- 128663,128669 ----
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! b624bd8e7fb5c6cebcff53e95b2ac4f9  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  44b123c52a2755c9e6bf43ec0c33ae49  include/ansidecl.h
*************** d551a31f3c70723b0e716ae5b1248096  includ
*** 128606,128612 ****
  91ecff44973c64cfdfc2e3c412c56a80  include/libcollector.h
  71ab4f2b87330987580da553ce63f7c7  include/libfcollector.h
  e6ec1b5594d3c2b4fb4c7c22a25108be  include/libiberty.h
! 266ebf6ed7b71766881387dd58040705  include/longlong.h
  aed43c5ed4317377043b964bab985093  include/lto-symtab.h
  4182cc168d3cd5762aa0182ebb59c5a5  include/md5.h
  94050e374a4cacc270466637b4eb9411  include/objalloc.h
--- 128697,128703 ----
  91ecff44973c64cfdfc2e3c412c56a80  include/libcollector.h
  71ab4f2b87330987580da553ce63f7c7  include/libfcollector.h
  e6ec1b5594d3c2b4fb4c7c22a25108be  include/libiberty.h
! cb4514364c3d012b1615c49d6329f281  include/longlong.h
  aed43c5ed4317377043b964bab985093  include/lto-symtab.h
  4182cc168d3cd5762aa0182ebb59c5a5  include/md5.h
  94050e374a4cacc270466637b4eb9411  include/objalloc.h
*************** c7399bbb7eadd31d7cd04991cd79c238  includ
*** 128632,128642 ****
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  c01f38de8270d558b8d3ecac839d3bbf  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! ad55c6833cc3ca9160ff469c99404d04  libatomic/ChangeLog
  22c7908ed07d94ad58548bcab79a35f2  libatomic/Makefile.am
! 2e5b5c867693b7f777a87ca4a0ff3628  libatomic/Makefile.in
  3ffebc64ea145f822a3e70192f58b44f  libatomic/acinclude.m4
! 65ce51ad1e77408c7dba775ba9859d1e  libatomic/aclocal.m4
  b741b38c451feebdcd9aedce6e37b702  libatomic/auto-config.h.in
  43e4662201ba553905a037a8ad2a470b  libatomic/cas_n.c
  49704e7e33ce53ec4c1f6d60dc504b79  libatomic/config/aarch64/aarch64-config.h
--- 128723,128733 ----
  46d6319e8ffc7eabf27cbecd6141a912  libada/configure
  c01f38de8270d558b8d3ecac839d3bbf  libada/configure.ac
  46d3fe6da7a771cc2d5420c4137a6861  libatomic/.gitignore
! 0977be4b13b2d7509875ac3ec0ad18a6  libatomic/ChangeLog
  22c7908ed07d94ad58548bcab79a35f2  libatomic/Makefile.am
! 9e9fda61274991dc83714f45f6aa740a  libatomic/Makefile.in
  3ffebc64ea145f822a3e70192f58b44f  libatomic/acinclude.m4
! 24697a8f49205fd232a3f6f3870a5d40  libatomic/aclocal.m4
  b741b38c451feebdcd9aedce6e37b702  libatomic/auto-config.h.in
  43e4662201ba553905a037a8ad2a470b  libatomic/cas_n.c
  49704e7e33ce53ec4c1f6d60dc504b79  libatomic/config/aarch64/aarch64-config.h
*************** ed3d69739cb2f35407547229f0393f92  libato
*** 128670,128677 ****
  e40da0e8515ee6996456294b571e5572  libatomic/config/x86/fenv.c
  e3229b3119558c9d6d6d8f8676d4f1ce  libatomic/config/x86/host-config.h
  6d8f1d8fc6da675bbeacfbd55dca52c9  libatomic/config/x86/init.c
! 3b6472c8de473563896ccfc8b65eddee  libatomic/configure
! abf6360bd010fbde8c4c935f1cf5616d  libatomic/configure.ac
  9214be1259694af7ffa422117215249a  libatomic/configure.tgt
  cffc539e08bc3149260124f3eb09e1a1  libatomic/exch_n.c
  35ea85a90d52ccf9efaf3179f1201076  libatomic/fadd_n.c
--- 128761,128768 ----
  e40da0e8515ee6996456294b571e5572  libatomic/config/x86/fenv.c
  e3229b3119558c9d6d6d8f8676d4f1ce  libatomic/config/x86/host-config.h
  6d8f1d8fc6da675bbeacfbd55dca52c9  libatomic/config/x86/init.c
! 3d7e9587d9f593eb5c1458d42518cfc7  libatomic/configure
! ba143206631a06f8bcb35b2938595437  libatomic/configure.ac
  9214be1259694af7ffa422117215249a  libatomic/configure.tgt
  cffc539e08bc3149260124f3eb09e1a1  libatomic/exch_n.c
  35ea85a90d52ccf9efaf3179f1201076  libatomic/fadd_n.c
*************** bc390700f9512a3b3eb690eb394d2acb  libato
*** 128697,128703 ****
  7086349c671f41e815a2d73551fe98b2  libatomic/store_n.c
  b62c913583a1c24be476956037b71a99  libatomic/tas_n.c
  8772872393a7b4f226a2ff99cd0767b9  libatomic/testsuite/Makefile.am
! e47bcf755f9a8cab0eb3815277403ff3  libatomic/testsuite/Makefile.in
  ed1ed157638cd6b95884f216e3414581  libatomic/testsuite/config/default.exp
  3e77a79fd1e00a1f4e5fbf507474e1e5  libatomic/testsuite/lib/libatomic-dg.exp
  64915dff2d4513942794e67acc165a35  libatomic/testsuite/lib/libatomic.exp
--- 128788,128794 ----
  7086349c671f41e815a2d73551fe98b2  libatomic/store_n.c
  b62c913583a1c24be476956037b71a99  libatomic/tas_n.c
  8772872393a7b4f226a2ff99cd0767b9  libatomic/testsuite/Makefile.am
! c048f9d27d78810024a0052bbf3568c6  libatomic/testsuite/Makefile.in
  ed1ed157638cd6b95884f216e3414581  libatomic/testsuite/config/default.exp
  3e77a79fd1e00a1f4e5fbf507474e1e5  libatomic/testsuite/lib/libatomic-dg.exp
  64915dff2d4513942794e67acc165a35  libatomic/testsuite/lib/libatomic.exp
*************** cffdeae41b78da05839b193e90188f55  libcod
*** 128835,128841 ****
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! bfa0a9ec0fe45dba57e77309735ecc99  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  e80a909ca87015a009bee9588bb84a64  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
--- 128926,128932 ----
  6419dfc879387358e95288142e569914  libcody/packet.cc
  688ece05c8b9d378b3df186808162e76  libcody/resolver.cc
  c94add0032978604acf65591bb86d2d6  libcody/server.cc
! d46010925ad586865b5b6b40d1eabb9b  libcpp/ChangeLog
  2bd831b17997584e38305782cebe6948  libcpp/ChangeLog.jit
  e80a909ca87015a009bee9588bb84a64  libcpp/Makefile.in
  b07c7863f0e7ad4e6a0915d66fc9e582  libcpp/aclocal.m4
*************** b07c7863f0e7ad4e6a0915d66fc9e582  libcpp
*** 128847,128856 ****
  4544249e26f23e9431a118ea6d548b52  libcpp/directives.cc
  fe94628a876ca876eb1ac6dc396c0068  libcpp/errors.cc
  a80d04c82bb4afb7bdb159103298ecd0  libcpp/expr.cc
! 11a16fb1a2db14c6ab9a0b9a36888c57  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  c496c50691c37464e0aacc985cc3ab1e  libcpp/identifiers.cc
! 9781ac9c6a15a5c06d4fa31b2c1863ba  libcpp/include/cpplib.h
  ac88522f7fec46badcd2623d11a4b61e  libcpp/include/label-text.h
  dfc19e9ca5f8f9391a0bc03e85de0c2f  libcpp/include/line-map.h
  4779aaa10e24fd2398a105e78bdd88a5  libcpp/include/mkdeps.h
--- 128938,128947 ----
  4544249e26f23e9431a118ea6d548b52  libcpp/directives.cc
  fe94628a876ca876eb1ac6dc396c0068  libcpp/errors.cc
  a80d04c82bb4afb7bdb159103298ecd0  libcpp/expr.cc
! c9454fde7c526cfdabdbd0db1aed2b02  libcpp/files.cc
  d7530c9a36bef9a00a690083401e3c83  libcpp/generated_cpp_wcwidth.h
  c496c50691c37464e0aacc985cc3ab1e  libcpp/identifiers.cc
! 9ae4e583f9498dffe47f918670f49446  libcpp/include/cpplib.h
  ac88522f7fec46badcd2623d11a4b61e  libcpp/include/label-text.h
  dfc19e9ca5f8f9391a0bc03e85de0c2f  libcpp/include/line-map.h
  4779aaa10e24fd2398a105e78bdd88a5  libcpp/include/mkdeps.h
*************** f7003e261c3571b88fe403d28fb3157f  libga6
*** 129375,129382 ****
  d85b910fef5199d4921a6353feb96b71  libga68/ga68.h
  df913cb29914c3ebdb600c9c3be7f788  libga68/libga68.c
  5a99bd84e0794e311b25ab281d6c294a  libga68/libga68.spec.in
! dc3246c3de71507568db77e9bb90d4e4  libgcc/ChangeLog
! 46871f7f435b4902cf5796badf55e199  libgcc/Makefile.in
  3909078d285165298c78eb97ea152e90  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  9e6d8ec4ff0470579444dbe0a1287f05  libgcc/config/aarch64/__aarch64_have_sme.c
--- 129466,129473 ----
  d85b910fef5199d4921a6353feb96b71  libga68/ga68.h
  df913cb29914c3ebdb600c9c3be7f788  libga68/libga68.c
  5a99bd84e0794e311b25ab281d6c294a  libga68/libga68.spec.in
! b8b1e67d09cef1e57e713c78dbb5e916  libgcc/ChangeLog
! cada2741a04d59811a0d9b12b601d3cf  libgcc/Makefile.in
  3909078d285165298c78eb97ea152e90  libgcc/config.host
  46412830a2ee8a02503ccc921912c3cf  libgcc/config.in
  9e6d8ec4ff0470579444dbe0a1287f05  libgcc/config/aarch64/__aarch64_have_sme.c
*************** d119a58a81bebc60db32e4162e42d0fd  libgcc
*** 130007,130013 ****
  d57d21934ea496642e8c8c9f62db9488  libgcc/config/loongarch/libgcc-loongarch.ver
  524d3cd99dfcdda6c1a4895305cd4aa4  libgcc/config/loongarch/linux-unwind.h
  a3f0e7fc76c68352401e4963c88f85e9  libgcc/config/loongarch/sfp-machine.h
! 39d859f2463613a8181ae213154247d3  libgcc/config/loongarch/t-crtstuff
  6883bbf1b6255e7d7d374cf325381ce1  libgcc/config/loongarch/t-loongarch
  30a759945cf2224eb5cd5985df99af5f  libgcc/config/loongarch/t-loongarch64
  5eefb8d5a64eeaa8e6b4d8618a2c8219  libgcc/config/loongarch/t-softfp-tf
--- 130098,130105 ----
  d57d21934ea496642e8c8c9f62db9488  libgcc/config/loongarch/libgcc-loongarch.ver
  524d3cd99dfcdda6c1a4895305cd4aa4  libgcc/config/loongarch/linux-unwind.h
  a3f0e7fc76c68352401e4963c88f85e9  libgcc/config/loongarch/sfp-machine.h
! 452ec44add9224de8e934c51322eaba5  libgcc/config/loongarch/t-crtstuff-la32
! 39d859f2463613a8181ae213154247d3  libgcc/config/loongarch/t-crtstuff-la64
  6883bbf1b6255e7d7d374cf325381ce1  libgcc/config/loongarch/t-loongarch
  30a759945cf2224eb5cd5985df99af5f  libgcc/config/loongarch/t-loongarch64
  5eefb8d5a64eeaa8e6b4d8618a2c8219  libgcc/config/loongarch/t-softfp-tf
*************** ad6ae6684d4dec9ddd78efad67d1af4b  libgcc
*** 130548,130554 ****
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-ppc64-fp
  bd7ceb31787a37d9cb144c41d41acfb3  libgcc/config/rs6000/t-ppccomm
  9583a9aed217116e54bc90a5464e493e  libgcc/config/rs6000/t-savresfgpr
! 877eea4ec27ee5942a88df85d5e5a5b8  libgcc/config/rs6000/t-slibgcc-aix
  1d9dab8390b84ff0de504beefb72ce61  libgcc/config/rs6000/t-stack-rs6000
  04581882e1764bcc2a4240b21f3eaa8a  libgcc/config/rs6000/t-vxworks
  5a15231d86d041b489cd77a2c66d90b7  libgcc/config/rs6000/tramp.S
--- 130640,130646 ----
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-ppc64-fp
  bd7ceb31787a37d9cb144c41d41acfb3  libgcc/config/rs6000/t-ppccomm
  9583a9aed217116e54bc90a5464e493e  libgcc/config/rs6000/t-savresfgpr
! d6e19472e51ec6986b58b276171d4b9d  libgcc/config/rs6000/t-slibgcc-aix
  1d9dab8390b84ff0de504beefb72ce61  libgcc/config/rs6000/t-stack-rs6000
  04581882e1764bcc2a4240b21f3eaa8a  libgcc/config/rs6000/t-vxworks
  5a15231d86d041b489cd77a2c66d90b7  libgcc/config/rs6000/tramp.S
*************** ce614fa17d52c2d7121d7e2d6f80b02d  libgcc
*** 130718,130725 ****
  dca6d35465143e4a68b87cc9c4e803ee  libgcc/config/xtensa/unwind-dw2-xtensa.c
  b99cc01380166f4692e0732bbc912212  libgcc/config/xtensa/unwind-dw2-xtensa.h
  19ec14444518e397fc90d9fdb8667783  libgcc/config/xtensa/xtensa-config-builtin.h
! d1d7e66dc7e2d23b6835f3ce6a88a5da  libgcc/configure
! b0189d76af1ccb1db32084120fda87f6  libgcc/configure.ac
  67c2374dbad34029ec8371ef10329bcd  libgcc/crtstuff.c
  ab5a8eda1cc5a04c100d837a67f3c0c3  libgcc/dfp-bit.c
  20a8155e167830f65cf1b081393e5207  libgcc/dfp-bit.h
--- 130810,130817 ----
  dca6d35465143e4a68b87cc9c4e803ee  libgcc/config/xtensa/unwind-dw2-xtensa.c
  b99cc01380166f4692e0732bbc912212  libgcc/config/xtensa/unwind-dw2-xtensa.h
  19ec14444518e397fc90d9fdb8667783  libgcc/config/xtensa/xtensa-config-builtin.h
! 041f88d5d0dc8b08b75edb91dd8fde5d  libgcc/configure
! 33d04cf404fcf38d6f00e18df27e8e90  libgcc/configure.ac
  67c2374dbad34029ec8371ef10329bcd  libgcc/crtstuff.c
  ab5a8eda1cc5a04c100d837a67f3c0c3  libgcc/dfp-bit.c
  20a8155e167830f65cf1b081393e5207  libgcc/dfp-bit.h
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 137583,137589 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! e73fcc95df2f8ca16293bba8328bb804  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  a0a1ac8cf0159995930a1c6c60042f2d  libgomp/Makefile.in
--- 137675,137681 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! c7df59be93f3a5bd9e7c9cba5378760f  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
  a0a1ac8cf0159995930a1c6c60042f2d  libgomp/Makefile.in
*************** af41d1d04a4112345554ca8b8a072ed9  libgom
*** 137713,137724 ****
  250e49a5865485507899765bf69913a0  libgomp/configure.ac
  0eb9aa41c92e30c6fb1494575b1c8daa  libgomp/configure.tgt
  bdbd19a4ded46698d600a262cfc20343  libgomp/critical.c
! 9633e52067a12f11a2929330afe8b6b4  libgomp/env.c
  de6d218010cbf7859c6b94615b21f35a  libgomp/error.c
! d98fb492b4e4c1c04a41a6bc6433de2b  libgomp/fortran.c
  7f54b43cb86dd02741d33a360f1dbbe2  libgomp/hashtab.h
  f4c32f19e8df86d2ac9c3d4cc4e788f1  libgomp/icv-device.c
! 4b8f9b7d5eeb68462259c9d483f7ea4f  libgomp/icv.c
  c798aea0a594e97c71edb3bd8cb93579  libgomp/iter.c
  c3d837ee5481f078c8b7875c1c8306be  libgomp/iter_ull.c
  0214d07a09a5c6e422ca9541c3f6cba4  libgomp/libgomp-plugin.c
--- 137805,137816 ----
  250e49a5865485507899765bf69913a0  libgomp/configure.ac
  0eb9aa41c92e30c6fb1494575b1c8daa  libgomp/configure.tgt
  bdbd19a4ded46698d600a262cfc20343  libgomp/critical.c
! 55ad926f1921905eec70969fb970708b  libgomp/env.c
  de6d218010cbf7859c6b94615b21f35a  libgomp/error.c
! 0dc7d750d7d97a9eb0863f70f660c0dd  libgomp/fortran.c
  7f54b43cb86dd02741d33a360f1dbbe2  libgomp/hashtab.h
  f4c32f19e8df86d2ac9c3d4cc4e788f1  libgomp/icv-device.c
! 4cdea498bd4014e5e6dee5fbaac4415e  libgomp/icv.c
  c798aea0a594e97c71edb3bd8cb93579  libgomp/iter.c
  c3d837ee5481f078c8b7875c1c8306be  libgomp/iter_ull.c
  0214d07a09a5c6e422ca9541c3f6cba4  libgomp/libgomp-plugin.c
*************** c3d837ee5481f078c8b7875c1c8306be  libgom
*** 137726,137732 ****
  21a838f501beb823e9b3a82f26344b31  libgomp/libgomp.h
  cd6a22eaa3c99a58084ad32602f087b4  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! ab40dff8475a71931fda31d4e1beeeab  libgomp/libgomp.texi
  519d28879206bae759d85cd3bb7b493b  libgomp/libgomp_f.h.in
  fdadcc861565b686070908326f5e5914  libgomp/libgomp_g.h
  a5060d745455b036a62cc46de1fe0576  libgomp/lock.c
--- 137818,137824 ----
  21a838f501beb823e9b3a82f26344b31  libgomp/libgomp.h
  cd6a22eaa3c99a58084ad32602f087b4  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! e646d859aeb8498a75a56abd4abe6af6  libgomp/libgomp.texi
  519d28879206bae759d85cd3bb7b493b  libgomp/libgomp_f.h.in
  fdadcc861565b686070908326f5e5914  libgomp/libgomp_g.h
  a5060d745455b036a62cc46de1fe0576  libgomp/lock.c
*************** b6edffd0cc3b521c5885b285ddc3deaf  libgom
*** 137743,137751 ****
  cabec5d2660028884f23c85bd403f01e  libgomp/oacc-plugin.h
  a6450e2f5f7558ce92992048a3735241  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! a31ab494b630dbdd28ee7ecf6e4a6e1f  libgomp/omp.h.in
! 8ae9c2214048c161d6f1a1d1bd129c7c  libgomp/omp_lib.f90.in
! 345a46549869336f44b8e6661388a7f9  libgomp/omp_lib.h.in
  f24734d0f876e60f6edf6283233372be  libgomp/openacc.f90
  0380c0cfc562bb08603d6ff4bb9c8311  libgomp/openacc.h
  61774236eebfdd613ffcc94220388876  libgomp/openacc_lib.h
--- 137835,137843 ----
  cabec5d2660028884f23c85bd403f01e  libgomp/oacc-plugin.h
  a6450e2f5f7558ce92992048a3735241  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! 1e41ce052f0b7362b5c9d68aca7ab33e  libgomp/omp.h.in
! 9dc4afcb9aaf283d6544ecc4d3a51976  libgomp/omp_lib.f90.in
! 12418f535da78b291b553b2447b9e267  libgomp/omp_lib.h.in
  f24734d0f876e60f6edf6283233372be  libgomp/openacc.f90
  0380c0cfc562bb08603d6ff4bb9c8311  libgomp/openacc.h
  61774236eebfdd613ffcc94220388876  libgomp/openacc_lib.h
*************** ae0dcb4c08025996b4bf4550cf72832e  libgom
*** 137779,137788 ****
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! 75a6472ade550f7c04d89ab0da87b781  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
! 75cc672a1bf25974c5f4c5e3bc1a74b1  libgomp/testsuite/libgomp.c++/affinity-1.C
  6856c17d5ce497451e68ed6383793c60  libgomp/testsuite/libgomp.c++/alloc-managed-1.C
  b53352ff3eedfe05e27937094f28fa51  libgomp/testsuite/libgomp.c++/allocate-1.C
  621f4af33dbb0ad8d27a2993a83c9953  libgomp/testsuite/libgomp.c++/allocator-1.C
--- 137871,137880 ----
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! d38dcecc6a73a36b6cb71e1fa9029715  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
! 640013cb5bd3037f4b8af5f9c3b758c9  libgomp/testsuite/libgomp.c++/affinity-1.C
  6856c17d5ce497451e68ed6383793c60  libgomp/testsuite/libgomp.c++/alloc-managed-1.C
  b53352ff3eedfe05e27937094f28fa51  libgomp/testsuite/libgomp.c++/allocate-1.C
  621f4af33dbb0ad8d27a2993a83c9953  libgomp/testsuite/libgomp.c++/allocator-1.C
*************** d45d2e1fd50ef2de185180de7e46168c  libgom
*** 137838,137854 ****
  95b1d349c03cc5d01483df22751c0183  libgomp/testsuite/libgomp.c++/collapse-2.C
  f1e175a4d49888d51652b27c0e3c8c01  libgomp/testsuite/libgomp.c++/copyin-1.C
  10ed00f527e0f70026947c8f56627828  libgomp/testsuite/libgomp.c++/copyin-2.C
! dd14bc7576437b98c5c00026c7f5d61f  libgomp/testsuite/libgomp.c++/ctor-1.C
  75be4b24ec5c938326f469fafe3fb919  libgomp/testsuite/libgomp.c++/ctor-10.C
! b812dfb76303fb741edad434356f3e35  libgomp/testsuite/libgomp.c++/ctor-11.C
  223d0cf490744b1bfb4f1cc606e36f45  libgomp/testsuite/libgomp.c++/ctor-12.C
! 30097ccff5eea8ab8de78ca5413b99a5  libgomp/testsuite/libgomp.c++/ctor-13.C
! 77ef1f3b35655957d8c63625800cc252  libgomp/testsuite/libgomp.c++/ctor-2.C
  30fe7293fbfe4d3917ee957be0df04b8  libgomp/testsuite/libgomp.c++/ctor-3.C
  35977f0d2ad0a90d819510aebcbf6e04  libgomp/testsuite/libgomp.c++/ctor-4.C
! 72da6a7795f81709b3fedf23755dfe73  libgomp/testsuite/libgomp.c++/ctor-5.C
  e4c259ceb3f0850ee4a9c2d8db93fa19  libgomp/testsuite/libgomp.c++/ctor-6.C
! 46280f072d47ab513989684a0c34bbbd  libgomp/testsuite/libgomp.c++/ctor-7.C
  cf8630c02b905d98e08a439066bb9815  libgomp/testsuite/libgomp.c++/ctor-8.C
  0bd7fe39119bfc0574561c1e381edc5b  libgomp/testsuite/libgomp.c++/ctor-9.C
  3b8f9635872e44615536b61fe9b4503a  libgomp/testsuite/libgomp.c++/declare-mapper-1.C
--- 137930,137946 ----
  95b1d349c03cc5d01483df22751c0183  libgomp/testsuite/libgomp.c++/collapse-2.C
  f1e175a4d49888d51652b27c0e3c8c01  libgomp/testsuite/libgomp.c++/copyin-1.C
  10ed00f527e0f70026947c8f56627828  libgomp/testsuite/libgomp.c++/copyin-2.C
! 714ea43f1133133d2a0c80c34e7bef5a  libgomp/testsuite/libgomp.c++/ctor-1.C
  75be4b24ec5c938326f469fafe3fb919  libgomp/testsuite/libgomp.c++/ctor-10.C
! d50277f6e59605c1cb0f791ee2e74637  libgomp/testsuite/libgomp.c++/ctor-11.C
  223d0cf490744b1bfb4f1cc606e36f45  libgomp/testsuite/libgomp.c++/ctor-12.C
! f8ef69060cda9d407bf9d6788f7754e7  libgomp/testsuite/libgomp.c++/ctor-13.C
! 4eb8eeba2bd8289a82b8e4a2a02f91ee  libgomp/testsuite/libgomp.c++/ctor-2.C
  30fe7293fbfe4d3917ee957be0df04b8  libgomp/testsuite/libgomp.c++/ctor-3.C
  35977f0d2ad0a90d819510aebcbf6e04  libgomp/testsuite/libgomp.c++/ctor-4.C
! 6b93ea785838cc5bdd37f01c702d5e45  libgomp/testsuite/libgomp.c++/ctor-5.C
  e4c259ceb3f0850ee4a9c2d8db93fa19  libgomp/testsuite/libgomp.c++/ctor-6.C
! d8a210fa526cbe35b8fd349f5e466840  libgomp/testsuite/libgomp.c++/ctor-7.C
  cf8630c02b905d98e08a439066bb9815  libgomp/testsuite/libgomp.c++/ctor-8.C
  0bd7fe39119bfc0574561c1e381edc5b  libgomp/testsuite/libgomp.c++/ctor-9.C
  3b8f9635872e44615536b61fe9b4503a  libgomp/testsuite/libgomp.c++/declare-mapper-1.C
*************** dd6b619ee130db82170781062477eb42  libgom
*** 137860,137887 ****
  94c964b235f72b68d9bed9ab44fc25de  libgomp/testsuite/libgomp.c++/declare-mapper-7.C
  2eb1d9d112637bbafc20c3a646030e32  libgomp/testsuite/libgomp.c++/declare-mapper-8.C
  23c42bd29433374ffd8ef4b669c3ab98  libgomp/testsuite/libgomp.c++/declare-target-indirect-1.C
! 69326cfd40097e393a1bdb2e95e9052d  libgomp/testsuite/libgomp.c++/declare_target-1.C
  a571dcf473210e7664f748b4e44d47f5  libgomp/testsuite/libgomp.c++/declare_target-2.C
  9680d8fd6dafdcd73ddfb70fce9898b5  libgomp/testsuite/libgomp.c++/default-1.C
  b46a5d495949774f9240c56cbc76b39d  libgomp/testsuite/libgomp.c++/delim-declare-variant-1.C
  cb237e684fa48f0d3d0a04a711c5a6b0  libgomp/testsuite/libgomp.c++/delim-declare-variant-2.C
  76847f360255d626023722de04e6d21c  libgomp/testsuite/libgomp.c++/delim-declare-variant-7.C
  01456b503209d46ee61ee8a1877c839c  libgomp/testsuite/libgomp.c++/depend-1.C
! 5ddffb7f236c9b7b81760cac311649f6  libgomp/testsuite/libgomp.c++/depend-iterator-1.C
! 521ba1bcee599d1efb924a8c86ed94d1  libgomp/testsuite/libgomp.c++/depobj-1.C
! 2619580c0be36294ded42bfd27732a03  libgomp/testsuite/libgomp.c++/doacross-1.C
  8f3fa1739a32f62d1e950e3ffdf69ab6  libgomp/testsuite/libgomp.c++/examples-4/declare_target-2.C
  98f2608bd37e360bc09de297923e88b7  libgomp/testsuite/libgomp.c++/examples-4/target_data-5.C
  ccd9ee1d01506847d3ea1b041c796d78  libgomp/testsuite/libgomp.c++/firstprivate-1.C
  2e6cbe250ac9d5c71de572a824df56a0  libgomp/testsuite/libgomp.c++/firstprivate-2.C
  e1ee4867ce68141a641f925070e14fdc  libgomp/testsuite/libgomp.c++/for-1.C
! 41f700ca58c11f46be2e3a3308301e79  libgomp/testsuite/libgomp.c++/for-15.C
  d113b76246a174aabcd300069f49ddc9  libgomp/testsuite/libgomp.c++/for-16.C
  b64542faf55a399e300d1e45dd199dea  libgomp/testsuite/libgomp.c++/for-2.C
  67ba06624377eed5d1497eaceab58821  libgomp/testsuite/libgomp.c++/for-21.C
  548bd1093d38aa787d9e1e6545a91ebb  libgomp/testsuite/libgomp.c++/for-22.C
  5db697b71da56abad36b497ef0baa540  libgomp/testsuite/libgomp.c++/for-23.C
! 99452f627e990cdefa96819a9e325971  libgomp/testsuite/libgomp.c++/for-24.C
  3ca216cad035ad474193cd5dd18d3646  libgomp/testsuite/libgomp.c++/for-25.C
  3a46935f338415db1e4f5c968d5d9380  libgomp/testsuite/libgomp.c++/for-26.C
  051ba74539f9452f0b15fd7bbace8c53  libgomp/testsuite/libgomp.c++/for-27.C
--- 137952,137979 ----
  94c964b235f72b68d9bed9ab44fc25de  libgomp/testsuite/libgomp.c++/declare-mapper-7.C
  2eb1d9d112637bbafc20c3a646030e32  libgomp/testsuite/libgomp.c++/declare-mapper-8.C
  23c42bd29433374ffd8ef4b669c3ab98  libgomp/testsuite/libgomp.c++/declare-target-indirect-1.C
! 5cb1bc38fa65c19949479e11a9715ad1  libgomp/testsuite/libgomp.c++/declare_target-1.C
  a571dcf473210e7664f748b4e44d47f5  libgomp/testsuite/libgomp.c++/declare_target-2.C
  9680d8fd6dafdcd73ddfb70fce9898b5  libgomp/testsuite/libgomp.c++/default-1.C
  b46a5d495949774f9240c56cbc76b39d  libgomp/testsuite/libgomp.c++/delim-declare-variant-1.C
  cb237e684fa48f0d3d0a04a711c5a6b0  libgomp/testsuite/libgomp.c++/delim-declare-variant-2.C
  76847f360255d626023722de04e6d21c  libgomp/testsuite/libgomp.c++/delim-declare-variant-7.C
  01456b503209d46ee61ee8a1877c839c  libgomp/testsuite/libgomp.c++/depend-1.C
! 8945def7ee59696379ce0bb88a8f3f77  libgomp/testsuite/libgomp.c++/depend-iterator-1.C
! c9740fad4aed0ad56520ed80ef3e0c8d  libgomp/testsuite/libgomp.c++/depobj-1.C
! ce9c39e35005e3bdc03574b9f7ee41c9  libgomp/testsuite/libgomp.c++/doacross-1.C
  8f3fa1739a32f62d1e950e3ffdf69ab6  libgomp/testsuite/libgomp.c++/examples-4/declare_target-2.C
  98f2608bd37e360bc09de297923e88b7  libgomp/testsuite/libgomp.c++/examples-4/target_data-5.C
  ccd9ee1d01506847d3ea1b041c796d78  libgomp/testsuite/libgomp.c++/firstprivate-1.C
  2e6cbe250ac9d5c71de572a824df56a0  libgomp/testsuite/libgomp.c++/firstprivate-2.C
  e1ee4867ce68141a641f925070e14fdc  libgomp/testsuite/libgomp.c++/for-1.C
! d0954022d926f34bf7b593ee87adf45b  libgomp/testsuite/libgomp.c++/for-15.C
  d113b76246a174aabcd300069f49ddc9  libgomp/testsuite/libgomp.c++/for-16.C
  b64542faf55a399e300d1e45dd199dea  libgomp/testsuite/libgomp.c++/for-2.C
  67ba06624377eed5d1497eaceab58821  libgomp/testsuite/libgomp.c++/for-21.C
  548bd1093d38aa787d9e1e6545a91ebb  libgomp/testsuite/libgomp.c++/for-22.C
  5db697b71da56abad36b497ef0baa540  libgomp/testsuite/libgomp.c++/for-23.C
! ca544b4b2a2d45abdba53d0cc5fed42f  libgomp/testsuite/libgomp.c++/for-24.C
  3ca216cad035ad474193cd5dd18d3646  libgomp/testsuite/libgomp.c++/for-25.C
  3a46935f338415db1e4f5c968d5d9380  libgomp/testsuite/libgomp.c++/for-26.C
  051ba74539f9452f0b15fd7bbace8c53  libgomp/testsuite/libgomp.c++/for-27.C
*************** b2840419f7f70553698eb41dcd3bd6c6  libgom
*** 137907,137913 ****
  c5fa025c49fa4f84574bce84b4f41edf  libgomp/testsuite/libgomp.c++/loop-10.C
  7d8d309be88fba3f64b8a8a60b8ed182  libgomp/testsuite/libgomp.c++/loop-11.C
  2b91a43b8cbf2e2039ddc01ebeadd690  libgomp/testsuite/libgomp.c++/loop-12.C
! 70f80a65dabe8794c15c00281dbb9fd0  libgomp/testsuite/libgomp.c++/loop-13.C
  aed699d798c7681bd702449f4f033dfc  libgomp/testsuite/libgomp.c++/loop-14.C
  573135b1d14ef770a87ae31f69cf2d60  libgomp/testsuite/libgomp.c++/loop-15.C
  ef01090490728b068e2a5d47b76f1d20  libgomp/testsuite/libgomp.c++/loop-2.C
--- 137999,138005 ----
  c5fa025c49fa4f84574bce84b4f41edf  libgomp/testsuite/libgomp.c++/loop-10.C
  7d8d309be88fba3f64b8a8a60b8ed182  libgomp/testsuite/libgomp.c++/loop-11.C
  2b91a43b8cbf2e2039ddc01ebeadd690  libgomp/testsuite/libgomp.c++/loop-12.C
! 2d0c1289a0c4ab436d59a1e2147b1567  libgomp/testsuite/libgomp.c++/loop-13.C
  aed699d798c7681bd702449f4f033dfc  libgomp/testsuite/libgomp.c++/loop-14.C
  573135b1d14ef770a87ae31f69cf2d60  libgomp/testsuite/libgomp.c++/loop-15.C
  ef01090490728b068e2a5d47b76f1d20  libgomp/testsuite/libgomp.c++/loop-2.C
*************** b622a4cee9411a85452ee1b29b91d320  libgom
*** 137922,137928 ****
  414b422384c0287ef05799dee8ee0cb8  libgomp/testsuite/libgomp.c++/lvalue-tofrom-2.C
  d2827edf08309dd5d05a7ae82eb3a65f  libgomp/testsuite/libgomp.c++/map-comma-1.C
  76b1317d8fa0898f3ddb99d7d9719925  libgomp/testsuite/libgomp.c++/map-rvalue-ref-1.C
! f228bd69972ac57d7838e7a77158e192  libgomp/testsuite/libgomp.c++/master-1.C
  8efc996f883f46be409f4fe300a37b0a  libgomp/testsuite/libgomp.c++/matrix-no-directive-unroll-full-1.C
  b148cb9e7cea0a2c2871af156c98d443  libgomp/testsuite/libgomp.c++/member-1.C
  4d16af77bc5ead4ab34365affb08b16e  libgomp/testsuite/libgomp.c++/member-2.C
--- 138014,138020 ----
  414b422384c0287ef05799dee8ee0cb8  libgomp/testsuite/libgomp.c++/lvalue-tofrom-2.C
  d2827edf08309dd5d05a7ae82eb3a65f  libgomp/testsuite/libgomp.c++/map-comma-1.C
  76b1317d8fa0898f3ddb99d7d9719925  libgomp/testsuite/libgomp.c++/map-rvalue-ref-1.C
! c849774eedba911cacafa2948bdf66ff  libgomp/testsuite/libgomp.c++/master-1.C
  8efc996f883f46be409f4fe300a37b0a  libgomp/testsuite/libgomp.c++/matrix-no-directive-unroll-full-1.C
  b148cb9e7cea0a2c2871af156c98d443  libgomp/testsuite/libgomp.c++/member-1.C
  4d16af77bc5ead4ab34365affb08b16e  libgomp/testsuite/libgomp.c++/member-2.C
*************** bddf1919febc77ab73283f66e954b61e  libgom
*** 137936,137943 ****
  c24b71428729c4477c68a326981f1502  libgomp/testsuite/libgomp.c++/metadirective-template-3.C
  1af322f02a0df2cf1f3c2c01d328da07  libgomp/testsuite/libgomp.c++/nested-1.C
  3f755c96f4b692988ea0d1ddeef1ca9b  libgomp/testsuite/libgomp.c++/parallel-1.C
! 930dba8506c04bc3a0ed1285cf54ebb5  libgomp/testsuite/libgomp.c++/pr101544-1-O0.C
! 28ff93024e689b4bb4133d2be9065e4d  libgomp/testsuite/libgomp.c++/pr101544-1.C
  0a4d31c36842026108385cca1b33c889  libgomp/testsuite/libgomp.c++/pr106445-1-O0.C
  f707c9b8a0f7005cc93bc19e863bbd02  libgomp/testsuite/libgomp.c++/pr106445-1.C
  918bd233ad318b00f080ec4f186b4ee1  libgomp/testsuite/libgomp.c++/pr108180.C
--- 138028,138035 ----
  c24b71428729c4477c68a326981f1502  libgomp/testsuite/libgomp.c++/metadirective-template-3.C
  1af322f02a0df2cf1f3c2c01d328da07  libgomp/testsuite/libgomp.c++/nested-1.C
  3f755c96f4b692988ea0d1ddeef1ca9b  libgomp/testsuite/libgomp.c++/parallel-1.C
! 5783490a13c41927d74f329313a1afea  libgomp/testsuite/libgomp.c++/pr101544-1-O0.C
! 81e9e4844d0dd22a7e18902062719a5d  libgomp/testsuite/libgomp.c++/pr101544-1.C
  0a4d31c36842026108385cca1b33c889  libgomp/testsuite/libgomp.c++/pr106445-1-O0.C
  f707c9b8a0f7005cc93bc19e863bbd02  libgomp/testsuite/libgomp.c++/pr106445-1.C
  918bd233ad318b00f080ec4f186b4ee1  libgomp/testsuite/libgomp.c++/pr108180.C
*************** b9bea55653edd95a419c1fac4dc913e8  libgom
*** 137951,137957 ****
  c57d4e906a72b08e5f49bef40306b63f  libgomp/testsuite/libgomp.c++/pr24455-1.C
  54c6e1c645042b8c18d27e04190d4816  libgomp/testsuite/libgomp.c++/pr24455.C
  ebbf9a13ba035141ba01b3281fd27fea  libgomp/testsuite/libgomp.c++/pr26691.C
! f22ddc230a1c3c9064a657fa7fa843e6  libgomp/testsuite/libgomp.c++/pr26943.C
  b7d3ba53e1428eb4ab2cf1cdcd576335  libgomp/testsuite/libgomp.c++/pr27337.C
  e31d9cc17430983d0904112f3275e13c  libgomp/testsuite/libgomp.c++/pr30703.C
  a41af349d54ba08799297bcd040e9521  libgomp/testsuite/libgomp.c++/pr34513.C
--- 138043,138049 ----
  c57d4e906a72b08e5f49bef40306b63f  libgomp/testsuite/libgomp.c++/pr24455-1.C
  54c6e1c645042b8c18d27e04190d4816  libgomp/testsuite/libgomp.c++/pr24455.C
  ebbf9a13ba035141ba01b3281fd27fea  libgomp/testsuite/libgomp.c++/pr26691.C
! 531d2d2ef5874dc441d0c68406a16fc2  libgomp/testsuite/libgomp.c++/pr26943.C
  b7d3ba53e1428eb4ab2cf1cdcd576335  libgomp/testsuite/libgomp.c++/pr27337.C
  e31d9cc17430983d0904112f3275e13c  libgomp/testsuite/libgomp.c++/pr30703.C
  a41af349d54ba08799297bcd040e9521  libgomp/testsuite/libgomp.c++/pr34513.C
*************** d40927d27fc8aa0a3f0aca700ccbd13b  libgom
*** 137970,137977 ****
  3a212ac2024168bc7de1da7b0d3118e4  libgomp/testsuite/libgomp.c++/pr69555-1.C
  e05799ca0fb925e4de120a002da662ed  libgomp/testsuite/libgomp.c++/pr69555-2.C
  854c3912b1646c8771d7f3032a72cd1f  libgomp/testsuite/libgomp.c++/pr70376.C
! 80258160ea88fc6c77ba4774e507a905  libgomp/testsuite/libgomp.c++/pr81130.C
! 6050a57d353f711a4c93e9fc816d1fd8  libgomp/testsuite/libgomp.c++/pr81314.C
  31f6ec374e23bffe347a99f3b1f06174  libgomp/testsuite/libgomp.c++/pr82835.C
  3e23fe34ad940217f5fda935e9ec54ec  libgomp/testsuite/libgomp.c++/pr86291.C
  dc7de2a56e857e340edadd8faabda685  libgomp/testsuite/libgomp.c++/pr86539.C
--- 138062,138069 ----
  3a212ac2024168bc7de1da7b0d3118e4  libgomp/testsuite/libgomp.c++/pr69555-1.C
  e05799ca0fb925e4de120a002da662ed  libgomp/testsuite/libgomp.c++/pr69555-2.C
  854c3912b1646c8771d7f3032a72cd1f  libgomp/testsuite/libgomp.c++/pr70376.C
! 784c3ee1b7f433a99e9587422a5afdca  libgomp/testsuite/libgomp.c++/pr81130.C
! e038a372b13888f4139816227565af05  libgomp/testsuite/libgomp.c++/pr81314.C
  31f6ec374e23bffe347a99f3b1f06174  libgomp/testsuite/libgomp.c++/pr82835.C
  3e23fe34ad940217f5fda935e9ec54ec  libgomp/testsuite/libgomp.c++/pr86291.C
  dc7de2a56e857e340edadd8faabda685  libgomp/testsuite/libgomp.c++/pr86539.C
*************** dc7de2a56e857e340edadd8faabda685  libgom
*** 137979,137986 ****
  2f4b5b9cb40dd4bff2c3c0ebada29767  libgomp/testsuite/libgomp.c++/pr88988.C
  7cc253bb1b2c2c65f9d69743d9235b32  libgomp/testsuite/libgomp.c++/pr93931.C
  ccbeb19f46d34074feddb4daec61a533  libgomp/testsuite/libgomp.c++/pr96390.C
! 27cb9c0ed40538d7ec95c23139a27be0  libgomp/testsuite/libgomp.c++/pr96835-1-O0.C
! fb886d6d4d2dfe2fd65c4409f786ca02  libgomp/testsuite/libgomp.c++/pr96835-1.C
  4cffa5137acf2753cd96b591d407c9ef  libgomp/testsuite/libgomp.c++/private-1.C
  b5571c134a19d36224598207948c1778  libgomp/testsuite/libgomp.c++/private-2.C
  04dc564b11f6e503f39552628affa8a8  libgomp/testsuite/libgomp.c++/range-for-1.C
--- 138071,138078 ----
  2f4b5b9cb40dd4bff2c3c0ebada29767  libgomp/testsuite/libgomp.c++/pr88988.C
  7cc253bb1b2c2c65f9d69743d9235b32  libgomp/testsuite/libgomp.c++/pr93931.C
  ccbeb19f46d34074feddb4daec61a533  libgomp/testsuite/libgomp.c++/pr96390.C
! 63bd24d77867fab9ada7d67f20c63d41  libgomp/testsuite/libgomp.c++/pr96835-1-O0.C
! fc0a3e3809ef348fbf52c75b8ec62710  libgomp/testsuite/libgomp.c++/pr96835-1.C
  4cffa5137acf2753cd96b591d407c9ef  libgomp/testsuite/libgomp.c++/private-1.C
  b5571c134a19d36224598207948c1778  libgomp/testsuite/libgomp.c++/private-2.C
  04dc564b11f6e503f39552628affa8a8  libgomp/testsuite/libgomp.c++/range-for-1.C
*************** ff04658f034a805f42f6227468e350d8  libgom
*** 138034,138047 ****
  537fc9ac07046ce042391dfa19843e8c  libgomp/testsuite/libgomp.c++/single-1.C
  6c9d8951c10a36292097716f431c385a  libgomp/testsuite/libgomp.c++/single-2.C
  7d0f24f8edab30e9e5aa2d3f5133e9f4  libgomp/testsuite/libgomp.c++/single-3.C
! e000c578b89df6c6c969482c9249246a  libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C
! 282bbb357153cede25202177dee31d7a  libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C
! 4c1664fdbae0c3ee5188dbf0f415c2d7  libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C
  fc294ecae70ea0e846f751937b8f0cf4  libgomp/testsuite/libgomp.c++/struct-ref-1.C
  866b1595d3c521f9e048f3d196a4dea7  libgomp/testsuite/libgomp.c++/target-10.C
  584a99de04a66868ae3499eedc3e2195  libgomp/testsuite/libgomp.c++/target-11.C
  27a976c5e735ce9e087e36caed72abea  libgomp/testsuite/libgomp.c++/target-12.C
! a6b49af37227f8b4a2b400968972f26d  libgomp/testsuite/libgomp.c++/target-13.C
  9e98d2f79fc4ee9addb65363ad3dac4d  libgomp/testsuite/libgomp.c++/target-14.C
  2c4c8267dca8995861a505bab1fbea46  libgomp/testsuite/libgomp.c++/target-15.C
  a847e64529061157489cc5cde35c7ab0  libgomp/testsuite/libgomp.c++/target-16.C
--- 138126,138139 ----
  537fc9ac07046ce042391dfa19843e8c  libgomp/testsuite/libgomp.c++/single-1.C
  6c9d8951c10a36292097716f431c385a  libgomp/testsuite/libgomp.c++/single-2.C
  7d0f24f8edab30e9e5aa2d3f5133e9f4  libgomp/testsuite/libgomp.c++/single-3.C
! a6b584355d5e70bb4dd4c080756cf9ca  libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C
! 7691a822fae7a8fe0fb7046161e0fbe0  libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C
! 887aefe7366c51c00d0def5dadc1e242  libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C
  fc294ecae70ea0e846f751937b8f0cf4  libgomp/testsuite/libgomp.c++/struct-ref-1.C
  866b1595d3c521f9e048f3d196a4dea7  libgomp/testsuite/libgomp.c++/target-10.C
  584a99de04a66868ae3499eedc3e2195  libgomp/testsuite/libgomp.c++/target-11.C
  27a976c5e735ce9e087e36caed72abea  libgomp/testsuite/libgomp.c++/target-12.C
! a075f3003fb33b25b2f3fb4f8a7c3c0c  libgomp/testsuite/libgomp.c++/target-13.C
  9e98d2f79fc4ee9addb65363ad3dac4d  libgomp/testsuite/libgomp.c++/target-14.C
  2c4c8267dca8995861a505bab1fbea46  libgomp/testsuite/libgomp.c++/target-15.C
  a847e64529061157489cc5cde35c7ab0  libgomp/testsuite/libgomp.c++/target-16.C
*************** f66604a729c1a693416c247cef5805b1  libgom
*** 138060,138067 ****
  131b2ab5b78c2725e33c4249f59e5799  libgomp/testsuite/libgomp.c++/target-7.C
  1a7862ad9a2af6943f9928a670bcaf16  libgomp/testsuite/libgomp.c++/target-8.C
  9ae4b452504278d0f3af44f0a9a2aa71  libgomp/testsuite/libgomp.c++/target-9.C
! 0c3cc98689bf759beba23798d61ce4b1  libgomp/testsuite/libgomp.c++/target-cdtor-1.C
! 457b919f3ef79b72a20a5deb55a33a8e  libgomp/testsuite/libgomp.c++/target-cdtor-2.C
  3d15e0d44019185d8004a4d4b87851de  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C
  64bd4e898ee85afe93f6f182b3a479fc  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C
  2ab3f03a68f64f25cb39af3017726c7c  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C
--- 138152,138159 ----
  131b2ab5b78c2725e33c4249f59e5799  libgomp/testsuite/libgomp.c++/target-7.C
  1a7862ad9a2af6943f9928a670bcaf16  libgomp/testsuite/libgomp.c++/target-8.C
  9ae4b452504278d0f3af44f0a9a2aa71  libgomp/testsuite/libgomp.c++/target-9.C
! fa716b461da8e5de360fdcf69a488b17  libgomp/testsuite/libgomp.c++/target-cdtor-1.C
! ca5bc44232dc9d552ae8a1e6353dd7d4  libgomp/testsuite/libgomp.c++/target-cdtor-2.C
  3d15e0d44019185d8004a4d4b87851de  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-1.C
  64bd4e898ee85afe93f6f182b3a479fc  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-GCN.C
  2ab3f03a68f64f25cb39af3017726c7c  libgomp/testsuite/libgomp.c++/target-exceptions-bad_cast-2-offload-sorry-nvptx.C
*************** e2dfff93f6318ffc237067f281108b05  libgom
*** 138108,138115 ****
  3f30996cbb6ad3019d08c6070ee98f7b  libgomp/testsuite/libgomp.c++/target-has-device-addr-7.C
  19df607ca0e83587c3295f274e8fc1bf  libgomp/testsuite/libgomp.c++/target-has-device-addr-8.C
  8d805913407543aaead455b01dc65b8d  libgomp/testsuite/libgomp.c++/target-has-device-addr-9.C
! 8e3301c974be75f8c7968867a40e1254  libgomp/testsuite/libgomp.c++/target-in-reduction-1.C
! 940cbc52029d3b66c419146d369dbd5e  libgomp/testsuite/libgomp.c++/target-in-reduction-2.C
  0776355f201276cae286d03057ed95b2  libgomp/testsuite/libgomp.c++/target-lambda-1.C
  b22a767f11646ecb4998ef385c41337f  libgomp/testsuite/libgomp.c++/target-lambda-2.C
  0b5bbbcf9eb120684f80f84df54f570d  libgomp/testsuite/libgomp.c++/target-lambda-3.C
--- 138200,138207 ----
  3f30996cbb6ad3019d08c6070ee98f7b  libgomp/testsuite/libgomp.c++/target-has-device-addr-7.C
  19df607ca0e83587c3295f274e8fc1bf  libgomp/testsuite/libgomp.c++/target-has-device-addr-8.C
  8d805913407543aaead455b01dc65b8d  libgomp/testsuite/libgomp.c++/target-has-device-addr-9.C
! a9f5be36618d677c67c540a52d2cf72f  libgomp/testsuite/libgomp.c++/target-in-reduction-1.C
! 7d4b3b8b0a487d6532c7adc1aa72092a  libgomp/testsuite/libgomp.c++/target-in-reduction-2.C
  0776355f201276cae286d03057ed95b2  libgomp/testsuite/libgomp.c++/target-lambda-1.C
  b22a767f11646ecb4998ef385c41337f  libgomp/testsuite/libgomp.c++/target-lambda-2.C
  0b5bbbcf9eb120684f80f84df54f570d  libgomp/testsuite/libgomp.c++/target-lambda-3.C
*************** cfa4149542c401b73310497159a6cb92  libgom
*** 138119,138173 ****
  d01f6cd5771f7784c8ce461cf8b60255  libgomp/testsuite/libgomp.c++/target-same-name-2-a.C
  b0372bd118a07b6674371887148186be  libgomp/testsuite/libgomp.c++/target-same-name-2-b.C
  e20a8ae264dd60aac921ec743e8b6ef6  libgomp/testsuite/libgomp.c++/target-same-name-2.C
! 49bec1188a7f331490fd1a884f5ffe7d  libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C
! 930f1412fb1556f867d16b8bdd015934  libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C
! abc1f024f366b278405b58df17afe0cd  libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C
  06d825a0695b3b2c778183f2a0f15340  libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent.C
! 46a820315e87c64c2043cfe42375298c  libgomp/testsuite/libgomp.c++/target-std__cmath.C
! 31a5c6ae9e1ebbc7d44b7d279bd40b98  libgomp/testsuite/libgomp.c++/target-std__complex.C
! 983898d3a6fba310a33cc99a690e61cd  libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C
! 641e02305cef2872a17d09d3aee5e29a  libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C
  7b8564af7efb36534e06bf9256491d47  libgomp/testsuite/libgomp.c++/target-std__flat_map-concurrent.C
  50abf3a4f9429a3f337acccadf011f08  libgomp/testsuite/libgomp.c++/target-std__flat_multimap-concurrent.C
  462312b79cfd6847f34cdd45245bc748  libgomp/testsuite/libgomp.c++/target-std__flat_multiset-concurrent.C
  9f7bf1a7585f20e59cb41e8099f7caf1  libgomp/testsuite/libgomp.c++/target-std__flat_set-concurrent.C
! 35f877f9bcff198b68b3c7adbe76cc90  libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C
! 738cfd5c2e93632d34138fd16adf5b25  libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C
! f957ac83f08d36891003338813dcd03d  libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C
! 38996444567e6544d8fc2c8896b3857c  libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C
! 9215d28cde00a16495049615bac940cb  libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C
  0850a8e25f775a93e3548200ac6c5e9b  libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C
! 5e320404381ef41bf4828273a4162e96  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C
  ebc970badffeaa66f031d7077302889d  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C
! 02fbac6f0c9f081d4eb14d7a2f7a0041  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C
  3c9a591a77ac428729c14e9aebfdc428  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C
! 733f4878044be0e7b75ce52065c6cd77  libgomp/testsuite/libgomp.c++/target-std__numbers.C
! 5c629252d916db885e993c42be0fa90e  libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C
  5c50c046a303089716d97390d263ae5d  libgomp/testsuite/libgomp.c++/target-std__set-concurrent.C
! 85fcbd49d3999b48d99d829e637b8eac  libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C
! 5ef72ef8ba9ff6bc00c1a2437acbe965  libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C
  1fb1f482d2cc7a45a533ed58a3ad667b  libgomp/testsuite/libgomp.c++/target-std__unordered_map-concurrent.C
  bbb993c5215396373d2a2a480d2ef71a  libgomp/testsuite/libgomp.c++/target-std__unordered_multimap-concurrent.C
  4eb7070d3fbd54355b325be0a2134275  libgomp/testsuite/libgomp.c++/target-std__unordered_multiset-concurrent.C
  8987e8e0d15420f50e0c3dd2ba9a92fc  libgomp/testsuite/libgomp.c++/target-std__unordered_set-concurrent.C
! eb61cd412b5e2700a8043a9017c98ca7  libgomp/testsuite/libgomp.c++/target-std__valarray-1.C
  94b5f7b92b7c4edffc6cfe54dfd4fdee  libgomp/testsuite/libgomp.c++/target-std__valarray-1.output
! 965d40172dd9afb6a0a83d60c260bfbb  libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C
! 485cd8daad096e850e07025d661fbca6  libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C
! 22adb89598c33012dbbc8c38c19501ce  libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C
! 23b6710435558e7002fc886615d59f56  libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C
  dd3ce96eb6e1a02d995c05804baf3219  libgomp/testsuite/libgomp.c++/target-this-1.C
  7ecd542ef8fc4d3c7a2e77af16f33ddc  libgomp/testsuite/libgomp.c++/target-this-2.C
  ca6e1cf374cf317aca4336ffd0f23b46  libgomp/testsuite/libgomp.c++/target-this-3.C
  267d80f9766f37b7c01e315688b6f58b  libgomp/testsuite/libgomp.c++/target-this-4.C
  16c373a225fe82f7f0d604229dd1c144  libgomp/testsuite/libgomp.c++/target-this-5.C
  f29fd9fd6b4ceb2153ee577439c12757  libgomp/testsuite/libgomp.c++/target-virtual-1.C
! 4755f8276f35f740d59135af4e5242f0  libgomp/testsuite/libgomp.c++/task-1.C
! 5532f36e28daf97021228ebf72885697  libgomp/testsuite/libgomp.c++/task-2.C
  27531bc2a807e1107292fe33e894f8a0  libgomp/testsuite/libgomp.c++/task-3.C
  0d8cf66e014b36ac1b99ff0ada601105  libgomp/testsuite/libgomp.c++/task-4.C
  6cc1ae8058007b8afab8f6686080f1dc  libgomp/testsuite/libgomp.c++/task-5.C
! f3fc31477cdff517af07a5eaed3977b4  libgomp/testsuite/libgomp.c++/task-6.C
  e58d1f21c043b7905dfd8072efa52a05  libgomp/testsuite/libgomp.c++/task-7.C
  c2392e28255d8ad9d2a56b86eddef4b4  libgomp/testsuite/libgomp.c++/task-8.C
  eacb4b2d5ef8455c8e37851883c5714d  libgomp/testsuite/libgomp.c++/task-reduction-1.C
--- 138211,138265 ----
  d01f6cd5771f7784c8ce461cf8b60255  libgomp/testsuite/libgomp.c++/target-same-name-2-a.C
  b0372bd118a07b6674371887148186be  libgomp/testsuite/libgomp.c++/target-same-name-2-b.C
  e20a8ae264dd60aac921ec743e8b6ef6  libgomp/testsuite/libgomp.c++/target-same-name-2.C
! c9d5676fea876c578c496003955fd30f  libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C
! 8b98f91100d66ac34727cfa5d5717c68  libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C
! 203cd3bbd56fcbfbb37ecdfe1acbecde  libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C
  06d825a0695b3b2c778183f2a0f15340  libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent.C
! 9ca8fd31f9d1a81ee2848076e938d038  libgomp/testsuite/libgomp.c++/target-std__cmath.C
! 3e851d51211a5b45aef590ec200d5aeb  libgomp/testsuite/libgomp.c++/target-std__complex.C
! 74dc860faf574c58178a0cdd8785bead  libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C
! b758290af585897f36616822156ea1a9  libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C
  7b8564af7efb36534e06bf9256491d47  libgomp/testsuite/libgomp.c++/target-std__flat_map-concurrent.C
  50abf3a4f9429a3f337acccadf011f08  libgomp/testsuite/libgomp.c++/target-std__flat_multimap-concurrent.C
  462312b79cfd6847f34cdd45245bc748  libgomp/testsuite/libgomp.c++/target-std__flat_multiset-concurrent.C
  9f7bf1a7585f20e59cb41e8099f7caf1  libgomp/testsuite/libgomp.c++/target-std__flat_set-concurrent.C
! 7369f06d6c6e12c4efe8eb11b828b88c  libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C
! 6f8b7653695f5852a537ab81635a40d2  libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C
! b0f9096b7bf3c9d0ce4dd3a00ee55759  libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C
! 2f3331139fe17c39b23a3edc290e40a0  libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C
! 35f314c32d461e5b9b300e452a0e98a1  libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C
  0850a8e25f775a93e3548200ac6c5e9b  libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C
! d77d8756bf317a714ee17dc55981161d  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C
  ebc970badffeaa66f031d7077302889d  libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C
! 2a4a1e185293d0c63298569d1c7d7719  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C
  3c9a591a77ac428729c14e9aebfdc428  libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C
! 155c26d39bae87ec622ca18a97497525  libgomp/testsuite/libgomp.c++/target-std__numbers.C
! 0cc775768f980490ca709164e16fce0e  libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C
  5c50c046a303089716d97390d263ae5d  libgomp/testsuite/libgomp.c++/target-std__set-concurrent.C
! b0960e5e9f351f0ed8ff8529cc3194e1  libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C
! b41edef63ed773783fe739048b52b76b  libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C
  1fb1f482d2cc7a45a533ed58a3ad667b  libgomp/testsuite/libgomp.c++/target-std__unordered_map-concurrent.C
  bbb993c5215396373d2a2a480d2ef71a  libgomp/testsuite/libgomp.c++/target-std__unordered_multimap-concurrent.C
  4eb7070d3fbd54355b325be0a2134275  libgomp/testsuite/libgomp.c++/target-std__unordered_multiset-concurrent.C
  8987e8e0d15420f50e0c3dd2ba9a92fc  libgomp/testsuite/libgomp.c++/target-std__unordered_set-concurrent.C
! 1ca15bd8238a647321aeb7d4e5868782  libgomp/testsuite/libgomp.c++/target-std__valarray-1.C
  94b5f7b92b7c4edffc6cfe54dfd4fdee  libgomp/testsuite/libgomp.c++/target-std__valarray-1.output
! 3c291529e3fb93e1412a045262b4b281  libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C
! d131730aa8400dfc468fc20016b2384e  libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C
! 99f3f3b3487d9caab256ded57f8d2a90  libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C
! 0a26596ca5e68223783093ca0fc7964f  libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C
  dd3ce96eb6e1a02d995c05804baf3219  libgomp/testsuite/libgomp.c++/target-this-1.C
  7ecd542ef8fc4d3c7a2e77af16f33ddc  libgomp/testsuite/libgomp.c++/target-this-2.C
  ca6e1cf374cf317aca4336ffd0f23b46  libgomp/testsuite/libgomp.c++/target-this-3.C
  267d80f9766f37b7c01e315688b6f58b  libgomp/testsuite/libgomp.c++/target-this-4.C
  16c373a225fe82f7f0d604229dd1c144  libgomp/testsuite/libgomp.c++/target-this-5.C
  f29fd9fd6b4ceb2153ee577439c12757  libgomp/testsuite/libgomp.c++/target-virtual-1.C
! e6f9f0923050a40abd625993bf6fbcc6  libgomp/testsuite/libgomp.c++/task-1.C
! cf639a82455a339b02a5aa5715eec58e  libgomp/testsuite/libgomp.c++/task-2.C
  27531bc2a807e1107292fe33e894f8a0  libgomp/testsuite/libgomp.c++/task-3.C
  0d8cf66e014b36ac1b99ff0ada601105  libgomp/testsuite/libgomp.c++/task-4.C
  6cc1ae8058007b8afab8f6686080f1dc  libgomp/testsuite/libgomp.c++/task-5.C
! 96b679c821a9d219230c2ed8293edb38  libgomp/testsuite/libgomp.c++/task-6.C
  e58d1f21c043b7905dfd8072efa52a05  libgomp/testsuite/libgomp.c++/task-7.C
  c2392e28255d8ad9d2a56b86eddef4b4  libgomp/testsuite/libgomp.c++/task-8.C
  eacb4b2d5ef8455c8e37851883c5714d  libgomp/testsuite/libgomp.c++/task-reduction-1.C
*************** d584d89884b73fdaeb2dbdb58307cc54  libgom
*** 138186,138200 ****
  2586da7d10786a72f88c1e2c8c132097  libgomp/testsuite/libgomp.c++/task-reduction-4.C
  e0b9223f090e13d2eaffa1c4beadfb00  libgomp/testsuite/libgomp.c++/task-reduction-5.C
  667be26164ed91cd6373fa0993fc4b5b  libgomp/testsuite/libgomp.c++/task-reduction-6.C
! 43dede2457d19ee878bfca6e0827f9b7  libgomp/testsuite/libgomp.c++/task-reduction-7.C
  b74a32fc280ea9e21760697490ebe443  libgomp/testsuite/libgomp.c++/task-reduction-8.C
! dc6d761bb7690280e86d9b43578c2095  libgomp/testsuite/libgomp.c++/task-reduction-9.C
  952a7f4c3daca43ae5ba697df18b089b  libgomp/testsuite/libgomp.c++/taskloop-5.C
  81911142ff8fca718d13016b3ee5dc84  libgomp/testsuite/libgomp.c++/taskloop-6.C
  b3611556d31dd93c92d3f5f0f9099804  libgomp/testsuite/libgomp.c++/taskloop-7.C
  1509a4bd1d786f821f29fcd625281ad8  libgomp/testsuite/libgomp.c++/taskloop-8.C
  2709861c62646dd2b7f52c228c6271d7  libgomp/testsuite/libgomp.c++/taskloop-9.C
! 542dc7970e6d4a87acac2feba00d3cfc  libgomp/testsuite/libgomp.c++/taskloop-reduction-1.C
  7f4692124344d69ebd3f8a913e8062f6  libgomp/testsuite/libgomp.c++/taskloop-reduction-2.C
  c47c26eb550171d349d30225ea3a9a0f  libgomp/testsuite/libgomp.c++/taskloop-reduction-3.C
  9046bc657a820699d03ba700761062e1  libgomp/testsuite/libgomp.c++/taskloop-reduction-4.C
--- 138278,138292 ----
  2586da7d10786a72f88c1e2c8c132097  libgomp/testsuite/libgomp.c++/task-reduction-4.C
  e0b9223f090e13d2eaffa1c4beadfb00  libgomp/testsuite/libgomp.c++/task-reduction-5.C
  667be26164ed91cd6373fa0993fc4b5b  libgomp/testsuite/libgomp.c++/task-reduction-6.C
! 5b15a0bbe9d51dcfd2e02d8d291168fe  libgomp/testsuite/libgomp.c++/task-reduction-7.C
  b74a32fc280ea9e21760697490ebe443  libgomp/testsuite/libgomp.c++/task-reduction-8.C
! 735d0bae2fd83ba165f0c74dfd1cd069  libgomp/testsuite/libgomp.c++/task-reduction-9.C
  952a7f4c3daca43ae5ba697df18b089b  libgomp/testsuite/libgomp.c++/taskloop-5.C
  81911142ff8fca718d13016b3ee5dc84  libgomp/testsuite/libgomp.c++/taskloop-6.C
  b3611556d31dd93c92d3f5f0f9099804  libgomp/testsuite/libgomp.c++/taskloop-7.C
  1509a4bd1d786f821f29fcd625281ad8  libgomp/testsuite/libgomp.c++/taskloop-8.C
  2709861c62646dd2b7f52c228c6271d7  libgomp/testsuite/libgomp.c++/taskloop-9.C
! 790fee819fbc5cab61a4c562abb4a920  libgomp/testsuite/libgomp.c++/taskloop-reduction-1.C
  7f4692124344d69ebd3f8a913e8062f6  libgomp/testsuite/libgomp.c++/taskloop-reduction-2.C
  c47c26eb550171d349d30225ea3a9a0f  libgomp/testsuite/libgomp.c++/taskloop-reduction-3.C
  9046bc657a820699d03ba700761062e1  libgomp/testsuite/libgomp.c++/taskloop-reduction-4.C
*************** e700fabc04a10611a988a11fccaf0fe6  libgom
*** 138254,138260 ****
  025dfca2b02c470cf7f46afb552c078c  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-1.c
  e84312e49f013526d73d8d431b003123  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-2.c
  954be12144c529b10fe999f79ec5e0c2  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c
! 65874eb51aef9c0a8ebb700f6708ac82  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-4.c
  9fe6259058ff7671b0dadfe2a5eea80f  libgomp/testsuite/libgomp.c-c++-common/critical-hint-1.c
  a4ab197aeadddd54aec1345501b5ea69  libgomp/testsuite/libgomp.c-c++-common/critical-hint-2.c
  61e48ed628966d420618cb7384f5f541  libgomp/testsuite/libgomp.c-c++-common/declare-mapper-10.c
--- 138346,138352 ----
  025dfca2b02c470cf7f46afb552c078c  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-1.c
  e84312e49f013526d73d8d431b003123  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-2.c
  954be12144c529b10fe999f79ec5e0c2  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-3.c
! 452631becda11e1d7559e049fe776eff  libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-4.c
  9fe6259058ff7671b0dadfe2a5eea80f  libgomp/testsuite/libgomp.c-c++-common/critical-hint-1.c
  a4ab197aeadddd54aec1345501b5ea69  libgomp/testsuite/libgomp.c-c++-common/critical-hint-2.c
  61e48ed628966d420618cb7384f5f541  libgomp/testsuite/libgomp.c-c++-common/declare-mapper-10.c
*************** e1fa8ce4f72dcee9fa7fa3c1656fbf01  libgom
*** 138266,138284 ****
  a91d1e81f6056f17808a3f96ef2583c6  libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-1.c
  340f18f5450878329ed68937e697b129  libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-2.c
  87cbcc55746faa452b358c6cc4478de3  libgomp/testsuite/libgomp.c-c++-common/declare-variant-1.c
! 12e3ee01b70343537315551db476c391  libgomp/testsuite/libgomp.c-c++-common/declare_target-1.c
  59c8656b7740501a704831756762d395  libgomp/testsuite/libgomp.c-c++-common/default-1.c
  5003b9495bcf8077b467a405e2a84b81  libgomp/testsuite/libgomp.c-c++-common/delim-declare-variant-1.c
  1bb8f78534cdd039f92d6f77666853f1  libgomp/testsuite/libgomp.c-c++-common/delim-declare-variant-2.c
  a1a09ff547c6ff16fad80cd2261269ee  libgomp/testsuite/libgomp.c-c++-common/depend-1.c
! 1cdb324b383818a853a928fc5fde4668  libgomp/testsuite/libgomp.c-c++-common/depend-2.c
  9f82353471029dda0e81fd17d53ada6a  libgomp/testsuite/libgomp.c-c++-common/depend-3.c
! 276cc39e55e150ed968d02e05c73cbf2  libgomp/testsuite/libgomp.c-c++-common/depend-inoutset-1.c
! ffae923e01f64777614298d5256aa1e4  libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c
  02dfe4fc07134aeaf04c1a053a76d5d4  libgomp/testsuite/libgomp.c-c++-common/depend-iterator-2.c
  1583f97cbaa7d0b05f4bc3415cf9a901  libgomp/testsuite/libgomp.c-c++-common/depend-mutexinout-1.c
  744de86f8478d3f33bf9ae8549aa5d5f  libgomp/testsuite/libgomp.c-c++-common/depend-mutexinout-2.c
! 34181537abfe326d25c077843377069a  libgomp/testsuite/libgomp.c-c++-common/depobj-1.c
  b8d825afda76163d391407189bbdc955  libgomp/testsuite/libgomp.c-c++-common/dispatch-1.c
  576de2de2369991bc3a08a1d5dffddc9  libgomp/testsuite/libgomp.c-c++-common/dispatch-2.c
  3035c770acef0fafa426b2d7148c9238  libgomp/testsuite/libgomp.c-c++-common/display-affinity-1.c
--- 138358,138376 ----
  a91d1e81f6056f17808a3f96ef2583c6  libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-1.c
  340f18f5450878329ed68937e697b129  libgomp/testsuite/libgomp.c-c++-common/declare-target-indirect-2.c
  87cbcc55746faa452b358c6cc4478de3  libgomp/testsuite/libgomp.c-c++-common/declare-variant-1.c
! 225961951fb9b45ca7f9a12e31ccdbfe  libgomp/testsuite/libgomp.c-c++-common/declare_target-1.c
  59c8656b7740501a704831756762d395  libgomp/testsuite/libgomp.c-c++-common/default-1.c
  5003b9495bcf8077b467a405e2a84b81  libgomp/testsuite/libgomp.c-c++-common/delim-declare-variant-1.c
  1bb8f78534cdd039f92d6f77666853f1  libgomp/testsuite/libgomp.c-c++-common/delim-declare-variant-2.c
  a1a09ff547c6ff16fad80cd2261269ee  libgomp/testsuite/libgomp.c-c++-common/depend-1.c
! f69fd03d065ac091918436dd35ae0b8d  libgomp/testsuite/libgomp.c-c++-common/depend-2.c
  9f82353471029dda0e81fd17d53ada6a  libgomp/testsuite/libgomp.c-c++-common/depend-3.c
! 3fce08ec160b3bdb00e050bbcd0ac5d9  libgomp/testsuite/libgomp.c-c++-common/depend-inoutset-1.c
! b87e1783b579faba88ea9fb30e462c4d  libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c
  02dfe4fc07134aeaf04c1a053a76d5d4  libgomp/testsuite/libgomp.c-c++-common/depend-iterator-2.c
  1583f97cbaa7d0b05f4bc3415cf9a901  libgomp/testsuite/libgomp.c-c++-common/depend-mutexinout-1.c
  744de86f8478d3f33bf9ae8549aa5d5f  libgomp/testsuite/libgomp.c-c++-common/depend-mutexinout-2.c
! c0df903a53541da7914a60d10a204e86  libgomp/testsuite/libgomp.c-c++-common/depobj-1.c
  b8d825afda76163d391407189bbdc955  libgomp/testsuite/libgomp.c-c++-common/dispatch-1.c
  576de2de2369991bc3a08a1d5dffddc9  libgomp/testsuite/libgomp.c-c++-common/dispatch-2.c
  3035c770acef0fafa426b2d7148c9238  libgomp/testsuite/libgomp.c-c++-common/display-affinity-1.c
*************** b8d825afda76163d391407189bbdc955  libgom
*** 138286,138308 ****
  128ad362b06c9753ddbcbe2789351c1a  libgomp/testsuite/libgomp.c-c++-common/for-1.c
  c8a38164050e9ce322ff7c77a9f0f96c  libgomp/testsuite/libgomp.c-c++-common/for-1.h
  90517645b53ddd6cd57d1b9e55ae5023  libgomp/testsuite/libgomp.c-c++-common/for-10.c
! 07be80e9db331a811ae629bc098e1151  libgomp/testsuite/libgomp.c-c++-common/for-11.c
! d7ceec9c2f54a9c83c61ab6edabe06fb  libgomp/testsuite/libgomp.c-c++-common/for-12.c
  5d8c32de5ade2a47a71b104e000cbd5f  libgomp/testsuite/libgomp.c-c++-common/for-13.c
  cbc14e9058cf7693b82cf46dc742fafb  libgomp/testsuite/libgomp.c-c++-common/for-14.c
  6b7dbfb9f68342594df4696803e3afaf  libgomp/testsuite/libgomp.c-c++-common/for-15.c
! 39f370f549dd8b0710d66b5d97a3817c  libgomp/testsuite/libgomp.c-c++-common/for-16.c
  e0f3473e377101c52df3a53604089bff  libgomp/testsuite/libgomp.c-c++-common/for-2.c
  fb8359839c9314ffa41831bcd16efb06  libgomp/testsuite/libgomp.c-c++-common/for-2.h
! ec2352caddec68baeddd9018aa81c14b  libgomp/testsuite/libgomp.c-c++-common/for-3.c
  5c2c6f34632d5e4d4a9f6cad324f21ef  libgomp/testsuite/libgomp.c-c++-common/for-4.c
! 0885eb5a2a371c53a717ebe52186deeb  libgomp/testsuite/libgomp.c-c++-common/for-5.c
! 44cbd81173518afca6a17f0bf914a60f  libgomp/testsuite/libgomp.c-c++-common/for-6.c
  ee0115a370a5b6a9e6990b3d15bdd431  libgomp/testsuite/libgomp.c-c++-common/for-7.c
  5b4d126628a41201baf8653fe10a5d94  libgomp/testsuite/libgomp.c-c++-common/for-8.c
! 81a985257cde0e49d560ae8aee85cf96  libgomp/testsuite/libgomp.c-c++-common/for-9.c
  38b84120e95c50bcbe995ff760fb2f46  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded-aux.c
! 45a948d47bf9a9580f0eaaa779cabe59  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c
  289803ddb56467011cd3c9f15600fb0e  libgomp/testsuite/libgomp.c-c++-common/get-mapped-ptr-1.c
  082e4a8098a26fe0515142872ac3472f  libgomp/testsuite/libgomp.c-c++-common/get-mapped-ptr-2.c
  c09232193f6376e5d0b4ebdc9096118e  libgomp/testsuite/libgomp.c-c++-common/get-mapped-ptr-3.c
--- 138378,138400 ----
  128ad362b06c9753ddbcbe2789351c1a  libgomp/testsuite/libgomp.c-c++-common/for-1.c
  c8a38164050e9ce322ff7c77a9f0f96c  libgomp/testsuite/libgomp.c-c++-common/for-1.h
  90517645b53ddd6cd57d1b9e55ae5023  libgomp/testsuite/libgomp.c-c++-common/for-10.c
! 9f104421f806751caa4abe3fb20911fb  libgomp/testsuite/libgomp.c-c++-common/for-11.c
! 6f1f9c67bf77c229aba5817b44963f8f  libgomp/testsuite/libgomp.c-c++-common/for-12.c
  5d8c32de5ade2a47a71b104e000cbd5f  libgomp/testsuite/libgomp.c-c++-common/for-13.c
  cbc14e9058cf7693b82cf46dc742fafb  libgomp/testsuite/libgomp.c-c++-common/for-14.c
  6b7dbfb9f68342594df4696803e3afaf  libgomp/testsuite/libgomp.c-c++-common/for-15.c
! 50ebf841e70ad6aa898aa3e6882db87e  libgomp/testsuite/libgomp.c-c++-common/for-16.c
  e0f3473e377101c52df3a53604089bff  libgomp/testsuite/libgomp.c-c++-common/for-2.c
  fb8359839c9314ffa41831bcd16efb06  libgomp/testsuite/libgomp.c-c++-common/for-2.h
! 0e6b69b6886fbaf91377695be50c2487  libgomp/testsuite/libgomp.c-c++-common/for-3.c
  5c2c6f34632d5e4d4a9f6cad324f21ef  libgomp/testsuite/libgomp.c-c++-common/for-4.c
! 05e5d45e605579787261bdf8d8f0e655  libgomp/testsuite/libgomp.c-c++-common/for-5.c
! 4999bd5ec884b059dbaeed3ec0d24cfa  libgomp/testsuite/libgomp.c-c++-common/for-6.c
  ee0115a370a5b6a9e6990b3d15bdd431  libgomp/testsuite/libgomp.c-c++-common/for-7.c
  5b4d126628a41201baf8653fe10a5d94  libgomp/testsuite/libgomp.c-c++-common/for-8.c
! 14ac121f9dbf4675cb527a13f401e0c6  libgomp/testsuite/libgomp.c-c++-common/for-9.c
  38b84120e95c50bcbe995ff760fb2f46  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded-aux.c
! 0a53af92f72022a91eded9bc193bc5c0  libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c
  289803ddb56467011cd3c9f15600fb0e  libgomp/testsuite/libgomp.c-c++-common/get-mapped-ptr-1.c
  082e4a8098a26fe0515142872ac3472f  libgomp/testsuite/libgomp.c-c++-common/get-mapped-ptr-2.c
  c09232193f6376e5d0b4ebdc9096118e  libgomp/testsuite/libgomp.c-c++-common/get-mapped-ptr-3.c
*************** dffc3aabaa5b2461aa560fc66c80c0fe  libgom
*** 138345,138351 ****
  afc52bb7680e92ac0996527dce7bd30f  libgomp/testsuite/libgomp.c-c++-common/map-arrayofstruct-2.c
  b7c55d9a7dcc3e046b1f2c02fc0d61e2  libgomp/testsuite/libgomp.c-c++-common/map-arrayofstruct-3.c
  5cdaccb404c42c94d2b0ed71fa9b4450  libgomp/testsuite/libgomp.c-c++-common/masked-1.c
! 3c55e0ae7ee0559f4081eae1bd8bcff2  libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c
  27c24d3b4c26f7da3f648202a22fa1e7  libgomp/testsuite/libgomp.c-c++-common/matrix-1.h
  826568a3f568f5f90eac3c16a2593e67  libgomp/testsuite/libgomp.c-c++-common/matrix-constant-iter.h
  21db8edc7c6d920ec21c472435c1d7ee  libgomp/testsuite/libgomp.c-c++-common/matrix-helper.h
--- 138437,138443 ----
  afc52bb7680e92ac0996527dce7bd30f  libgomp/testsuite/libgomp.c-c++-common/map-arrayofstruct-2.c
  b7c55d9a7dcc3e046b1f2c02fc0d61e2  libgomp/testsuite/libgomp.c-c++-common/map-arrayofstruct-3.c
  5cdaccb404c42c94d2b0ed71fa9b4450  libgomp/testsuite/libgomp.c-c++-common/masked-1.c
! 776bf7cbf25f215ab09a3df3faed350d  libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c
  27c24d3b4c26f7da3f648202a22fa1e7  libgomp/testsuite/libgomp.c-c++-common/matrix-1.h
  826568a3f568f5f90eac3c16a2593e67  libgomp/testsuite/libgomp.c-c++-common/matrix-constant-iter.h
  21db8edc7c6d920ec21c472435c1d7ee  libgomp/testsuite/libgomp.c-c++-common/matrix-helper.h
*************** e42f1e345c7fcd9893f399df22eaed2f  libgom
*** 138363,138386 ****
  cfa794b61d7b642929f4141128dac867  libgomp/testsuite/libgomp.c-c++-common/matrix-simd-1.c
  50746be62833efa7f254f6d21e6a7d34  libgomp/testsuite/libgomp.c-c++-common/matrix-transform-variants-1.h
  6641003248aa3d1115dde398cabf5d6d  libgomp/testsuite/libgomp.c-c++-common/memcpyxd-bias-1.c
! 87cada43a2557a6c8c7b870bd75cab00  libgomp/testsuite/libgomp.c-c++-common/metadirective-1.c
! 1d83edce1d354aa18fd8d8acf0e56192  libgomp/testsuite/libgomp.c-c++-common/metadirective-2.c
! 619fdbed63b97f6d4a1e0a1cabf0ebd9  libgomp/testsuite/libgomp.c-c++-common/metadirective-3.c
  29710e6fe72aca1f1ab459086956363b  libgomp/testsuite/libgomp.c-c++-common/metadirective-4.c
! bf54e115e3ac6d8d1b44a07233c24021  libgomp/testsuite/libgomp.c-c++-common/metadirective-5.c
  9e2a7fb63de6e1d73eccc9e73ad6aae1  libgomp/testsuite/libgomp.c-c++-common/metadirective-late-1.c
  957a41bc37324bdc70bfb24dbbf759d5  libgomp/testsuite/libgomp.c-c++-common/metadirective-late-2.c
  31c50bc97af7fe33ed45cf89bac7e287  libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c
! f959c1fe9d94d7321dbc7b419eefe7a7  libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c
! cc6abf61b301e17286872d6d76d483c0  libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c
  1c4ec2975c3dc84ae293e87a285260b4  libgomp/testsuite/libgomp.c-c++-common/nested-parallel-unbalanced.c
  83daaaf005b81e8c9d1f407ac1c30136  libgomp/testsuite/libgomp.c-c++-common/non-rect-loop-1.c
  d9c974865c1c03b48fac0231e028a7be  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-1.c
  214e7bba3d270a6822e2e6161f05981b  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-2.c
  857b86f8109e8843b901fc93bce4c8a8  libgomp/testsuite/libgomp.c-c++-common/nothing-1.c
  57e89804109a50bfcedf48ad5d907aec  libgomp/testsuite/libgomp.c-c++-common/omp-default-device.c
  7b82eb3ecdfe1a29b71573e9670b905e  libgomp/testsuite/libgomp.c-c++-common/omp-display-env-1.c
  b44227078d5fcd5acfde164f5bf5bcbe  libgomp/testsuite/libgomp.c-c++-common/omp-display-env-2.c
  f8a93d0f03afa6b6ecf0173347e50345  libgomp/testsuite/libgomp.c-c++-common/omp_target_memset-2.c
  75c915440c0f7fe2bea12c6015c12df0  libgomp/testsuite/libgomp.c-c++-common/omp_target_memset-3.c
  7c637d684293b3530653d3d2ec36b7e0  libgomp/testsuite/libgomp.c-c++-common/omp_target_memset.c
--- 138455,138483 ----
  cfa794b61d7b642929f4141128dac867  libgomp/testsuite/libgomp.c-c++-common/matrix-simd-1.c
  50746be62833efa7f254f6d21e6a7d34  libgomp/testsuite/libgomp.c-c++-common/matrix-transform-variants-1.h
  6641003248aa3d1115dde398cabf5d6d  libgomp/testsuite/libgomp.c-c++-common/memcpyxd-bias-1.c
! d9b2871c4ac5bfdb2e62b25d05660d91  libgomp/testsuite/libgomp.c-c++-common/metadirective-1.c
! 82e019efd12c984cfc7bbe6abf9a56eb  libgomp/testsuite/libgomp.c-c++-common/metadirective-2.c
! 8d65ce64d69f0d93e4ef66bc3e3e16a8  libgomp/testsuite/libgomp.c-c++-common/metadirective-3.c
  29710e6fe72aca1f1ab459086956363b  libgomp/testsuite/libgomp.c-c++-common/metadirective-4.c
! 9653d51bd6317b6548a23c86c1b3d68e  libgomp/testsuite/libgomp.c-c++-common/metadirective-5.c
  9e2a7fb63de6e1d73eccc9e73ad6aae1  libgomp/testsuite/libgomp.c-c++-common/metadirective-late-1.c
  957a41bc37324bdc70bfb24dbbf759d5  libgomp/testsuite/libgomp.c-c++-common/metadirective-late-2.c
  31c50bc97af7fe33ed45cf89bac7e287  libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c
! 7dbdd6d020a54568a72f83b04627336b  libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c
! ac58ad35aa15ff328b01e2e93461e29b  libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c
  1c4ec2975c3dc84ae293e87a285260b4  libgomp/testsuite/libgomp.c-c++-common/nested-parallel-unbalanced.c
  83daaaf005b81e8c9d1f407ac1c30136  libgomp/testsuite/libgomp.c-c++-common/non-rect-loop-1.c
  d9c974865c1c03b48fac0231e028a7be  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-1.c
  214e7bba3d270a6822e2e6161f05981b  libgomp/testsuite/libgomp.c-c++-common/nonmonotonic-2.c
  857b86f8109e8843b901fc93bce4c8a8  libgomp/testsuite/libgomp.c-c++-common/nothing-1.c
+ 501a8cc4ef6f36f7c9967a586a8903fb  libgomp/testsuite/libgomp.c-c++-common/omp-atv-seq-dep.c
  57e89804109a50bfcedf48ad5d907aec  libgomp/testsuite/libgomp.c-c++-common/omp-default-device.c
  7b82eb3ecdfe1a29b71573e9670b905e  libgomp/testsuite/libgomp.c-c++-common/omp-display-env-1.c
  b44227078d5fcd5acfde164f5bf5bcbe  libgomp/testsuite/libgomp.c-c++-common/omp-display-env-2.c
+ 05cd8d001ba65fdc6caa66411ef2b87f  libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-contended-dep.c
+ 53abde160a263195b0dd0c5667edd5d1  libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-none-dep.c
+ ea7adc494846c6fd16af3076e1902dae  libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-speculative-dep.c
+ 15ee55a54d78c64f4f04ff67a16506d4  libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-uncontended-dep.c
  f8a93d0f03afa6b6ecf0173347e50345  libgomp/testsuite/libgomp.c-c++-common/omp_target_memset-2.c
  75c915440c0f7fe2bea12c6015c12df0  libgomp/testsuite/libgomp.c-c++-common/omp_target_memset-3.c
  7c637d684293b3530653d3d2ec36b7e0  libgomp/testsuite/libgomp.c-c++-common/omp_target_memset.c
*************** e2bc55eb4581cd421c13c8ce68663678  libgom
*** 138390,138396 ****
  53fe13231ac841815b983b820fa61932  libgomp/testsuite/libgomp.c-c++-common/ordered-4.c
  35032e9e752cf0fddfcf3aa3df880c48  libgomp/testsuite/libgomp.c-c++-common/pause-1.c
  333f11e6a780e595ef92d101803745c9  libgomp/testsuite/libgomp.c-c++-common/pause-2.c
! 2ac0dc733994b8e1c05d57368faeec50  libgomp/testsuite/libgomp.c-c++-common/pr100059-1.c
  f57660e58c4d1e1085d45c8590d31ff9  libgomp/testsuite/libgomp.c-c++-common/pr106449-2.c
  5c7fd2f1e707d0e769a814bd91bb9ae8  libgomp/testsuite/libgomp.c-c++-common/pr106449.c
  010e1c442bf8c18b7045c53d36e8346e  libgomp/testsuite/libgomp.c-c++-common/pr106981.c
--- 138487,138493 ----
  53fe13231ac841815b983b820fa61932  libgomp/testsuite/libgomp.c-c++-common/ordered-4.c
  35032e9e752cf0fddfcf3aa3df880c48  libgomp/testsuite/libgomp.c-c++-common/pause-1.c
  333f11e6a780e595ef92d101803745c9  libgomp/testsuite/libgomp.c-c++-common/pause-2.c
! d77f1924af7fe7c3767c0c6cc9710773  libgomp/testsuite/libgomp.c-c++-common/pr100059-1.c
  f57660e58c4d1e1085d45c8590d31ff9  libgomp/testsuite/libgomp.c-c++-common/pr106449-2.c
  5c7fd2f1e707d0e769a814bd91bb9ae8  libgomp/testsuite/libgomp.c-c++-common/pr106449.c
  010e1c442bf8c18b7045c53d36e8346e  libgomp/testsuite/libgomp.c-c++-common/pr106981.c
*************** e56e5a27a779ac1ffbfc5f8855994d32  libgom
*** 138404,138424 ****
  996a066d9d133757016a7f0ff96e8930  libgomp/testsuite/libgomp.c-c++-common/pr66199-12.c
  11e1293245b7d120bb8a3cd6581854f6  libgomp/testsuite/libgomp.c-c++-common/pr66199-13.c
  cc16a292ae635c2424f142c030b87a90  libgomp/testsuite/libgomp.c-c++-common/pr66199-14.c
! dc87921c80e455d76dfce51295ed5d0b  libgomp/testsuite/libgomp.c-c++-common/pr66199-2.c
  3da17a0f69be8bac8b2e645dcb27c2c7  libgomp/testsuite/libgomp.c-c++-common/pr66199-3.c
! dff7a676c5c7625a109dad1fb29c317d  libgomp/testsuite/libgomp.c-c++-common/pr66199-4.c
! 6dfc857e953d6edc4e5fcdbdbf9bb21c  libgomp/testsuite/libgomp.c-c++-common/pr66199-5.c
! 37e3ad682af7ce80afe8d0dd932d4c38  libgomp/testsuite/libgomp.c-c++-common/pr66199-6.c
! 5355014a06d1c467c4f049057fb98d1a  libgomp/testsuite/libgomp.c-c++-common/pr66199-7.c
! 3ee81bf6e44b7f9129c1687542ce39b0  libgomp/testsuite/libgomp.c-c++-common/pr66199-8.c
! 37654389272e34a44758a6f659f503a9  libgomp/testsuite/libgomp.c-c++-common/pr66199-9.c
  4891b9bdc801db05683bb9bcd26d27c4  libgomp/testsuite/libgomp.c-c++-common/pr69389.c
  4066b4a4600721101ac384b659311782  libgomp/testsuite/libgomp.c-c++-common/pr81875.c
  08611a968d3d5d8544391a554aa64d2e  libgomp/testsuite/libgomp.c-c++-common/pr83046.c
  bbbd1b345adde5e2b11d48880c03841d  libgomp/testsuite/libgomp.c-c++-common/pr93515.c
  aa27b099930bc5b5e07e143f2ff6fedc  libgomp/testsuite/libgomp.c-c++-common/pr94366.c
  9a833edb00c6348a6ec9bb286a7a041a  libgomp/testsuite/libgomp.c-c++-common/pr96390.c
! 540dbc81df43f1010c2eb236718b4a4b  libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c
  ae1dda1dfff65bea882fe38f014e5472  libgomp/testsuite/libgomp.c-c++-common/ptr-attach-2.c
  2d2748b0be4d42cf748c994d23973c0d  libgomp/testsuite/libgomp.c-c++-common/reduction-1.c
  1918a797ca25f14588ff263d56568f8d  libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
--- 138501,138521 ----
  996a066d9d133757016a7f0ff96e8930  libgomp/testsuite/libgomp.c-c++-common/pr66199-12.c
  11e1293245b7d120bb8a3cd6581854f6  libgomp/testsuite/libgomp.c-c++-common/pr66199-13.c
  cc16a292ae635c2424f142c030b87a90  libgomp/testsuite/libgomp.c-c++-common/pr66199-14.c
! 73de2d3152cad4a4e7a1de3df0c847ab  libgomp/testsuite/libgomp.c-c++-common/pr66199-2.c
  3da17a0f69be8bac8b2e645dcb27c2c7  libgomp/testsuite/libgomp.c-c++-common/pr66199-3.c
! b4f84aa71b902636d5d0843ade6a82ca  libgomp/testsuite/libgomp.c-c++-common/pr66199-4.c
! a5cb011b6c3b9fcb77d1d53d669ac4ab  libgomp/testsuite/libgomp.c-c++-common/pr66199-5.c
! 3ac81389a25f3bada34f9bcc5bfcc6c7  libgomp/testsuite/libgomp.c-c++-common/pr66199-6.c
! 7a88c8a30d17a9afd163ea089e9d1f56  libgomp/testsuite/libgomp.c-c++-common/pr66199-7.c
! 9b5b71759284ba32956e284ec9aa71d1  libgomp/testsuite/libgomp.c-c++-common/pr66199-8.c
! daa5bc8608b569324e470b32f95cc205  libgomp/testsuite/libgomp.c-c++-common/pr66199-9.c
  4891b9bdc801db05683bb9bcd26d27c4  libgomp/testsuite/libgomp.c-c++-common/pr69389.c
  4066b4a4600721101ac384b659311782  libgomp/testsuite/libgomp.c-c++-common/pr81875.c
  08611a968d3d5d8544391a554aa64d2e  libgomp/testsuite/libgomp.c-c++-common/pr83046.c
  bbbd1b345adde5e2b11d48880c03841d  libgomp/testsuite/libgomp.c-c++-common/pr93515.c
  aa27b099930bc5b5e07e143f2ff6fedc  libgomp/testsuite/libgomp.c-c++-common/pr94366.c
  9a833edb00c6348a6ec9bb286a7a041a  libgomp/testsuite/libgomp.c-c++-common/pr96390.c
! ca41bb3f413739f2e2d0c2cb5bcf3828  libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c
  ae1dda1dfff65bea882fe38f014e5472  libgomp/testsuite/libgomp.c-c++-common/ptr-attach-2.c
  2d2748b0be4d42cf748c994d23973c0d  libgomp/testsuite/libgomp.c-c++-common/reduction-1.c
  1918a797ca25f14588ff263d56568f8d  libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
*************** fd32aa450f6085f94f173a50b28d3d25  libgom
*** 138446,138452 ****
  b59fce7c7dfddc5a531d9a1080c91edb  libgomp/testsuite/libgomp.c-c++-common/requires-unified-addr-1.c
  f2b29613d469d34204a185cce77a72ba  libgomp/testsuite/libgomp.c-c++-common/requires-unified-addr-2.c
  8e516448f286cde9aee98590f90f9b54  libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1-aux.c
! 03510135dd2e6c915f2ce8b2b3e096ed  libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1.c
  e1893e2e9ae8849b851fe85bf492a4bc  libgomp/testsuite/libgomp.c-c++-common/reverse-offload-2.c
  6eba84b9b3a32f65db772fedfb9db148  libgomp/testsuite/libgomp.c-c++-common/scan-1.c
  ee53be878dd906b2e18b5907cb4a4617  libgomp/testsuite/libgomp.c-c++-common/scope-1.c
--- 138543,138549 ----
  b59fce7c7dfddc5a531d9a1080c91edb  libgomp/testsuite/libgomp.c-c++-common/requires-unified-addr-1.c
  f2b29613d469d34204a185cce77a72ba  libgomp/testsuite/libgomp.c-c++-common/requires-unified-addr-2.c
  8e516448f286cde9aee98590f90f9b54  libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1-aux.c
! 06a4a34beee909f562dcec8513446055  libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1.c
  e1893e2e9ae8849b851fe85bf492a4bc  libgomp/testsuite/libgomp.c-c++-common/reverse-offload-2.c
  6eba84b9b3a32f65db772fedfb9db148  libgomp/testsuite/libgomp.c-c++-common/scan-1.c
  ee53be878dd906b2e18b5907cb4a4617  libgomp/testsuite/libgomp.c-c++-common/scope-1.c
*************** cbc1c46aca10b5056dd653273e1b22d3  libgom
*** 138461,138477 ****
  31d15621334ecdff113afb86d86a61e0  libgomp/testsuite/libgomp.c-c++-common/struct-elem-3.c
  0e9f2991ddeb503b1a576d6dfefe7b15  libgomp/testsuite/libgomp.c-c++-common/struct-elem-4.c
  2f381b5b2c1edcb3aff57cd8162f2765  libgomp/testsuite/libgomp.c-c++-common/struct-elem-5.c
! fa179f92bce747c523f38056959318ff  libgomp/testsuite/libgomp.c-c++-common/target-1.c
! d01ee6246770101e0827d46c27fc4cc5  libgomp/testsuite/libgomp.c-c++-common/target-10.c
  52ce685862fa4549564c34c17e73ed24  libgomp/testsuite/libgomp.c-c++-common/target-13.c
  5d869d97e503649c0abd949c725eeeb8  libgomp/testsuite/libgomp.c-c++-common/target-2.c
! b49863bdb637f8ca06b2d3981f2ffbaf  libgomp/testsuite/libgomp.c-c++-common/target-40.c
  c1475af16cfcc82bec0d85875d542fdb  libgomp/testsuite/libgomp.c-c++-common/target-41.c
  d87524b525b7f424e584af640f4b038b  libgomp/testsuite/libgomp.c-c++-common/target-42.c
  ae24e1c7b9fc9100ef17c4595417ef54  libgomp/testsuite/libgomp.c-c++-common/target-45.c
! 4d80e900b1dc39b9c34d4f6576cfd9be  libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c
! 6814c54bc25aa3da74822d5d4717c414  libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1.c
! 606f84c99a4efc1405feef5c9b230de4  libgomp/testsuite/libgomp.c-c++-common/target-cdtor-1.c
  dcce6a2d3146ada05a00f632271e2669  libgomp/testsuite/libgomp.c-c++-common/target-has-device-addr-1.c
  038d0072f445d0120f15c605ec76e54a  libgomp/testsuite/libgomp.c-c++-common/target-imperfect-transform-1.c
  923df9fb10163f8d97c25a33b74c5b70  libgomp/testsuite/libgomp.c-c++-common/target-imperfect-transform-2.c
--- 138558,138574 ----
  31d15621334ecdff113afb86d86a61e0  libgomp/testsuite/libgomp.c-c++-common/struct-elem-3.c
  0e9f2991ddeb503b1a576d6dfefe7b15  libgomp/testsuite/libgomp.c-c++-common/struct-elem-4.c
  2f381b5b2c1edcb3aff57cd8162f2765  libgomp/testsuite/libgomp.c-c++-common/struct-elem-5.c
! 8f27ce990f1126b470fb31270c5d5393  libgomp/testsuite/libgomp.c-c++-common/target-1.c
! 6f5e2a9456fa80159727bad1e98aec97  libgomp/testsuite/libgomp.c-c++-common/target-10.c
  52ce685862fa4549564c34c17e73ed24  libgomp/testsuite/libgomp.c-c++-common/target-13.c
  5d869d97e503649c0abd949c725eeeb8  libgomp/testsuite/libgomp.c-c++-common/target-2.c
! 04788851768f75fc88a1a8bcff7b4bdc  libgomp/testsuite/libgomp.c-c++-common/target-40.c
  c1475af16cfcc82bec0d85875d542fdb  libgomp/testsuite/libgomp.c-c++-common/target-41.c
  d87524b525b7f424e584af640f4b038b  libgomp/testsuite/libgomp.c-c++-common/target-42.c
  ae24e1c7b9fc9100ef17c4595417ef54  libgomp/testsuite/libgomp.c-c++-common/target-45.c
! cd282378dfef369c52bc05a158d78191  libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c
! ff0a3002fdcbeebbbeec1630ff94b97b  libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1.c
! abbe672b8bd007021485cc55cdd01a55  libgomp/testsuite/libgomp.c-c++-common/target-cdtor-1.c
  dcce6a2d3146ada05a00f632271e2669  libgomp/testsuite/libgomp.c-c++-common/target-has-device-addr-1.c
  038d0072f445d0120f15c605ec76e54a  libgomp/testsuite/libgomp.c-c++-common/target-imperfect-transform-1.c
  923df9fb10163f8d97c25a33b74c5b70  libgomp/testsuite/libgomp.c-c++-common/target-imperfect-transform-2.c
*************** c194c024e42053dd95f6e219515d6619  libgom
*** 138482,138497 ****
  e73115d6a79251ae1cec9faf5147c7c8  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-1.c
  484a97eb41ca00a84f4903464d9270df  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-2.c
  b3506d3ed6c7b40289dd8c49dadf0e5a  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-3.c
! be9edae79e36592176a6ef4d75308c5f  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-4.c
  ea40a48889ca697d07372802d2a0a4aa  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-5.c
! 430a11ff48828f06d3fcf3bd4c8fab56  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c
! bd77f269e406272861b52443fdae9fb5  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c
  d2f77283bea52f0c0d6a1356e85496d0  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c
  69dd12ce5d2a48b7f97153765a590284  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host-2.c
  9e8fb2b92bd09fc8b76faad9bb3ef464  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host.c
  d04c3cda0f5d9481f26ad3a000f4b3d3  libgomp/testsuite/libgomp.c-c++-common/target-link-2.c
! 9ff30abde078f26fb73508314a1a4c1e  libgomp/testsuite/libgomp.c-c++-common/target-link-3.c
! f050a6f90c7d48e4c829975976ab7e71  libgomp/testsuite/libgomp.c-c++-common/target-link-4.c
  6dac483ba3b23504793becd705f3947d  libgomp/testsuite/libgomp.c-c++-common/target-map-iterators-1.c
  0cf20228dfeb5394791055d76019d46e  libgomp/testsuite/libgomp.c-c++-common/target-map-iterators-2.c
  09bc6cf4e088b0fd6625e525cfe99662  libgomp/testsuite/libgomp.c-c++-common/target-map-iterators-3.c
--- 138579,138594 ----
  e73115d6a79251ae1cec9faf5147c7c8  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-1.c
  484a97eb41ca00a84f4903464d9270df  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-2.c
  b3506d3ed6c7b40289dd8c49dadf0e5a  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-3.c
! b27cf8b82a6cfcd0e8dff2a026ce1860  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-4.c
  ea40a48889ca697d07372802d2a0a4aa  libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-5.c
! c56339bf90ef39856eb55c5e21be0ef6  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c
! 781d8c89676b5f17dfb6a7fbea91d274  libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c
  d2f77283bea52f0c0d6a1356e85496d0  libgomp/testsuite/libgomp.c-c++-common/target-is-accessible-1.c
  69dd12ce5d2a48b7f97153765a590284  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host-2.c
  9e8fb2b92bd09fc8b76faad9bb3ef464  libgomp/testsuite/libgomp.c-c++-common/target-is-initial-host.c
  d04c3cda0f5d9481f26ad3a000f4b3d3  libgomp/testsuite/libgomp.c-c++-common/target-link-2.c
! dea6e4773d5d9bcf4b5177f8c2dfb4de  libgomp/testsuite/libgomp.c-c++-common/target-link-3.c
! 6d333518b73fa1f60b85aa1f88314355  libgomp/testsuite/libgomp.c-c++-common/target-link-4.c
  6dac483ba3b23504793becd705f3947d  libgomp/testsuite/libgomp.c-c++-common/target-map-iterators-1.c
  0cf20228dfeb5394791055d76019d46e  libgomp/testsuite/libgomp.c-c++-common/target-map-iterators-2.c
  09bc6cf4e088b0fd6625e525cfe99662  libgomp/testsuite/libgomp.c-c++-common/target-map-iterators-3.c
*************** ffe15652e4f5929658a368d8b7aabdd0  libgom
*** 138505,138518 ****
  d4069bee4bb64a7b1bc7c9545219e88c  libgomp/testsuite/libgomp.c-c++-common/target-present-3.c
  400c5830e8dd2f17214d8d23477755de  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1-a.c
  469b004815365e46140bcd8b826170ce  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1-b.c
! b85430592a96b021a6f4ab81d5c35eb9  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1.c
  f1b436bdbaa4b38fe6d32370519f68e3  libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-1.c
  cde74e18484ff23e829ac3c95bcde854  libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-2.c
  4e87ff4920e50f68d51703a7079e191c  libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-3.c
  5232d615b2109b50002b7e6eb8301a84  libgomp/testsuite/libgomp.c-c++-common/task-detach-1.c
  7f2f3a630783e68a54ffcd18a73085b2  libgomp/testsuite/libgomp.c-c++-common/task-detach-10.c
  bf2a6ba66b2350c597a56727abd53608  libgomp/testsuite/libgomp.c-c++-common/task-detach-11.c
! fcda8b049ef6e77b18e5feef85979a96  libgomp/testsuite/libgomp.c-c++-common/task-detach-12.c
  b40007acfa7d6af27f51387ecc184dae  libgomp/testsuite/libgomp.c-c++-common/task-detach-13.c
  5992bcf110c8d557070ec896be0cf9fc  libgomp/testsuite/libgomp.c-c++-common/task-detach-2.c
  80f1063bb97ccd9af83f01d1967ea47b  libgomp/testsuite/libgomp.c-c++-common/task-detach-3.c
--- 138602,138615 ----
  d4069bee4bb64a7b1bc7c9545219e88c  libgomp/testsuite/libgomp.c-c++-common/target-present-3.c
  400c5830e8dd2f17214d8d23477755de  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1-a.c
  469b004815365e46140bcd8b826170ce  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1-b.c
! d3ed63d8204ec7537fa5e6f47a76d83e  libgomp/testsuite/libgomp.c-c++-common/target-same-name-1.c
  f1b436bdbaa4b38fe6d32370519f68e3  libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-1.c
  cde74e18484ff23e829ac3c95bcde854  libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-2.c
  4e87ff4920e50f68d51703a7079e191c  libgomp/testsuite/libgomp.c-c++-common/target-update-iterators-3.c
  5232d615b2109b50002b7e6eb8301a84  libgomp/testsuite/libgomp.c-c++-common/task-detach-1.c
  7f2f3a630783e68a54ffcd18a73085b2  libgomp/testsuite/libgomp.c-c++-common/task-detach-10.c
  bf2a6ba66b2350c597a56727abd53608  libgomp/testsuite/libgomp.c-c++-common/task-detach-11.c
! 831d027be3ca00c89d622a43e4b71081  libgomp/testsuite/libgomp.c-c++-common/task-detach-12.c
  b40007acfa7d6af27f51387ecc184dae  libgomp/testsuite/libgomp.c-c++-common/task-detach-13.c
  5992bcf110c8d557070ec896be0cf9fc  libgomp/testsuite/libgomp.c-c++-common/task-detach-2.c
  80f1063bb97ccd9af83f01d1967ea47b  libgomp/testsuite/libgomp.c-c++-common/task-detach-3.c
*************** a1b3168ce30f47447336b170740ef26e  libgom
*** 138529,138546 ****
  46ef1e951bcd1926264b756c36ccbaf5  libgomp/testsuite/libgomp.c-c++-common/task-reduction-11.c
  3ec3d8e842118a228ca6e8fa2d2134a5  libgomp/testsuite/libgomp.c-c++-common/task-reduction-12.c
  e4f419faa09d744436aad29d88eb43cf  libgomp/testsuite/libgomp.c-c++-common/task-reduction-13.c
! d284915ed4a4ac417bfb2b7632453bec  libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c
! 9c603541ce46d78d4526034634edb381  libgomp/testsuite/libgomp.c-c++-common/task-reduction-15.c
  aa692c9fbf6093f12c6ed0803d74067f  libgomp/testsuite/libgomp.c-c++-common/task-reduction-16.c
  e653bf8d31dab3838d4fca110a3ce845  libgomp/testsuite/libgomp.c-c++-common/task-reduction-17.c
  6fc6fff584c1f373ed1f3621bae88c86  libgomp/testsuite/libgomp.c-c++-common/task-reduction-18.c
  47acc8ff8c516165766737c2f13be4cf  libgomp/testsuite/libgomp.c-c++-common/task-reduction-2.c
  0134350a1e5cc559916eb7632406e2ac  libgomp/testsuite/libgomp.c-c++-common/task-reduction-3.c
  5ab2e1d3a94c19b612a71f802938e9d8  libgomp/testsuite/libgomp.c-c++-common/task-reduction-4.c
! 3cbec62183a2a342ec1463ff8e14e458  libgomp/testsuite/libgomp.c-c++-common/task-reduction-5.c
! 1b038915a126b4286350b6591edbefa2  libgomp/testsuite/libgomp.c-c++-common/task-reduction-6.c
  34811d5ad506744da4033d8c6cca9520  libgomp/testsuite/libgomp.c-c++-common/task-reduction-7.c
! e8b91070ba113269db3f80127dea46d1  libgomp/testsuite/libgomp.c-c++-common/task-reduction-8.c
  e2796a1db9565864bbd2d6aee684339f  libgomp/testsuite/libgomp.c-c++-common/task-reduction-9.c
  9aeca4581b0d88b4cdaf4cd5fb964e23  libgomp/testsuite/libgomp.c-c++-common/taskgroup-1.c
  533a2f763e275eebcca5c5ab19adcde9  libgomp/testsuite/libgomp.c-c++-common/taskloop-1.c
--- 138626,138643 ----
  46ef1e951bcd1926264b756c36ccbaf5  libgomp/testsuite/libgomp.c-c++-common/task-reduction-11.c
  3ec3d8e842118a228ca6e8fa2d2134a5  libgomp/testsuite/libgomp.c-c++-common/task-reduction-12.c
  e4f419faa09d744436aad29d88eb43cf  libgomp/testsuite/libgomp.c-c++-common/task-reduction-13.c
! 407fdfb2555a6eb0cb55c6d3cda7242a  libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c
! c24a6c4d52006fcb6225825eced8c7a9  libgomp/testsuite/libgomp.c-c++-common/task-reduction-15.c
  aa692c9fbf6093f12c6ed0803d74067f  libgomp/testsuite/libgomp.c-c++-common/task-reduction-16.c
  e653bf8d31dab3838d4fca110a3ce845  libgomp/testsuite/libgomp.c-c++-common/task-reduction-17.c
  6fc6fff584c1f373ed1f3621bae88c86  libgomp/testsuite/libgomp.c-c++-common/task-reduction-18.c
  47acc8ff8c516165766737c2f13be4cf  libgomp/testsuite/libgomp.c-c++-common/task-reduction-2.c
  0134350a1e5cc559916eb7632406e2ac  libgomp/testsuite/libgomp.c-c++-common/task-reduction-3.c
  5ab2e1d3a94c19b612a71f802938e9d8  libgomp/testsuite/libgomp.c-c++-common/task-reduction-4.c
! 592fd700d7fb967bf6214910740d1585  libgomp/testsuite/libgomp.c-c++-common/task-reduction-5.c
! 0d8c82b4b820957ea41bbb60d32a9fe7  libgomp/testsuite/libgomp.c-c++-common/task-reduction-6.c
  34811d5ad506744da4033d8c6cca9520  libgomp/testsuite/libgomp.c-c++-common/task-reduction-7.c
! ade0395cbd00022dcf2954dba24d7aad  libgomp/testsuite/libgomp.c-c++-common/task-reduction-8.c
  e2796a1db9565864bbd2d6aee684339f  libgomp/testsuite/libgomp.c-c++-common/task-reduction-9.c
  9aeca4581b0d88b4cdaf4cd5fb964e23  libgomp/testsuite/libgomp.c-c++-common/taskgroup-1.c
  533a2f763e275eebcca5c5ab19adcde9  libgomp/testsuite/libgomp.c-c++-common/taskloop-1.c
*************** cbef0235768c1f4944ee1b5c5fa053be  libgom
*** 138548,138557 ****
  8b721a972a83827d50ac99b596effbce  libgomp/testsuite/libgomp.c-c++-common/taskloop-3.c
  2a89db069ccb0624db9d711681161fbe  libgomp/testsuite/libgomp.c-c++-common/taskloop-4.c
  f2e93e59b93b24a2a3ed96e4562d49e9  libgomp/testsuite/libgomp.c-c++-common/taskloop-5.c
! a45e0bc2a9defec1ccedcfe9f7d71f80  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c
  7edf3f3649daef36cf5cf8a28d58e84b  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-2.c
! 2eba45c946c43172dafb32280f9b9085  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c
! fb173d8d2f7d77807e2f94fea30c2a43  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c
  7766c9cddf6031ff22c64ce9e45948bc  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-1.c
  8bc6c55a37ac8b7cded66fd93df20596  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-nowait-1.c
  b33f1965a6b9dacd7167fd0324c38e22  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-nowait-2.c
--- 138645,138654 ----
  8b721a972a83827d50ac99b596effbce  libgomp/testsuite/libgomp.c-c++-common/taskloop-3.c
  2a89db069ccb0624db9d711681161fbe  libgomp/testsuite/libgomp.c-c++-common/taskloop-4.c
  f2e93e59b93b24a2a3ed96e4562d49e9  libgomp/testsuite/libgomp.c-c++-common/taskloop-5.c
! 976b77391e0b3b77c9c8433d15968f43  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c
  7edf3f3649daef36cf5cf8a28d58e84b  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-2.c
! fb74d0eff6a7d4f53afb1f367fb608d1  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c
! 93eec905aa13bbfa69a0fe66f4ce604e  libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c
  7766c9cddf6031ff22c64ce9e45948bc  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-1.c
  8bc6c55a37ac8b7cded66fd93df20596  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-nowait-1.c
  b33f1965a6b9dacd7167fd0324c38e22  libgomp/testsuite/libgomp.c-c++-common/taskwait-depend-nowait-2.c
*************** ca33c5f9c9903b757ed36247b61aad15  libgom
*** 138567,138573 ****
  448f5dd482b6ef3000923aaa33bb3bfb  libgomp/testsuite/libgomp.c-c++-common/unmap-infinity-2.c
  96f4675f2ddb3142834360b1350ca6e5  libgomp/testsuite/libgomp.c-c++-common/unroll-1.c
  9c2abbff55e05e4a43196cca67da7778  libgomp/testsuite/libgomp.c-c++-common/unroll-non-rect-1.c
! b2587cfb605c9af09f5b45e95cdb2437  libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c
  50ce6b27289abfc41ac81fabefd8a020  libgomp/testsuite/libgomp.c-target/aarch64/aarch64.exp
  7a58e37c0b313a747771027b82cb2e03  libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c
  3564abd7107d431cc73324ef3175fc02  libgomp/testsuite/libgomp.c-target/aarch64/lastprivate.c
--- 138664,138670 ----
  448f5dd482b6ef3000923aaa33bb3bfb  libgomp/testsuite/libgomp.c-c++-common/unmap-infinity-2.c
  96f4675f2ddb3142834360b1350ca6e5  libgomp/testsuite/libgomp.c-c++-common/unroll-1.c
  9c2abbff55e05e4a43196cca67da7778  libgomp/testsuite/libgomp.c-c++-common/unroll-non-rect-1.c
! 4a1473f6b61b19a2252d130f2617b930  libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c
  50ce6b27289abfc41ac81fabefd8a020  libgomp/testsuite/libgomp.c-target/aarch64/aarch64.exp
  7a58e37c0b313a747771027b82cb2e03  libgomp/testsuite/libgomp.c-target/aarch64/firstprivate.c
  3564abd7107d431cc73324ef3175fc02  libgomp/testsuite/libgomp.c-target/aarch64/lastprivate.c
*************** caca1aa745e9df985dc965e87fc08c02  libgom
*** 138578,138584 ****
  22339699e5ead02323ff39f1b6fe0db9  libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c
  3e38202a9a5de0a29a80148a97ba15d8  libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c
  9827d700d634869b090c7636cc855819  libgomp/testsuite/libgomp.c/address-space-1.c
! 35d465afcc91bf0b02e92e10cee649bb  libgomp/testsuite/libgomp.c/affinity-1.c
  fe6e22f8c0d2e289ecbd5ea26c9ed1bc  libgomp/testsuite/libgomp.c/affinity-2.c
  a52fb92b19587144b8e2695db415d94e  libgomp/testsuite/libgomp.c/alloc-managed-1.c
  6c8686bb019986a5da3b70a8e4ec67e6  libgomp/testsuite/libgomp.c/alloc-managed-2.c
--- 138675,138681 ----
  22339699e5ead02323ff39f1b6fe0db9  libgomp/testsuite/libgomp.c-target/aarch64/threadprivate.c
  3e38202a9a5de0a29a80148a97ba15d8  libgomp/testsuite/libgomp.c-target/aarch64/udr-sve.c
  9827d700d634869b090c7636cc855819  libgomp/testsuite/libgomp.c/address-space-1.c
! ee0aef7568eaf6032ce83a846610f437  libgomp/testsuite/libgomp.c/affinity-1.c
  fe6e22f8c0d2e289ecbd5ea26c9ed1bc  libgomp/testsuite/libgomp.c/affinity-2.c
  a52fb92b19587144b8e2695db415d94e  libgomp/testsuite/libgomp.c/alloc-managed-1.c
  6c8686bb019986a5da3b70a8e4ec67e6  libgomp/testsuite/libgomp.c/alloc-managed-2.c
*************** d77547c5021e041b3434a7acad4e4ec3  libgom
*** 138656,138663 ****
  b4791f074c4f3494a72098d4fe6dc7da  libgomp/testsuite/libgomp.c/copyin-2.c
  a0864a470dcfab5610654831f9ec1740  libgomp/testsuite/libgomp.c/copyin-3.c
  4dd2cfb516bf87f648a7200fcbe97240  libgomp/testsuite/libgomp.c/critical-1.c
! 1cca2a92d0182ae3c650964de6d87d0a  libgomp/testsuite/libgomp.c/critical-2.c
! b5604fce8e01b4e305a8c0a4563d1aa9  libgomp/testsuite/libgomp.c/debug-1.c
  afbc465058b9ba3f4c999bbdd4f3d1ae  libgomp/testsuite/libgomp.c/declare-variant-1.c
  6d6b0531c9f74483e6111b636da2edf2  libgomp/testsuite/libgomp.c/declare-variant-2.c
  d9c383822eb3728cd6eba3775b3e04bc  libgomp/testsuite/libgomp.c/declare-variant-3-sm30.c
--- 138753,138760 ----
  b4791f074c4f3494a72098d4fe6dc7da  libgomp/testsuite/libgomp.c/copyin-2.c
  a0864a470dcfab5610654831f9ec1740  libgomp/testsuite/libgomp.c/copyin-3.c
  4dd2cfb516bf87f648a7200fcbe97240  libgomp/testsuite/libgomp.c/critical-1.c
! d9fd6ed98015269ce9eddab24d3efeba  libgomp/testsuite/libgomp.c/critical-2.c
! 47117801af35c93e0553f4fd2ee62156  libgomp/testsuite/libgomp.c/debug-1.c
  afbc465058b9ba3f4c999bbdd4f3d1ae  libgomp/testsuite/libgomp.c/declare-variant-1.c
  6d6b0531c9f74483e6111b636da2edf2  libgomp/testsuite/libgomp.c/declare-variant-2.c
  d9c383822eb3728cd6eba3775b3e04bc  libgomp/testsuite/libgomp.c/declare-variant-3-sm30.c
*************** a30c653b4c75613a04461c9dd4693f7c  libgom
*** 138670,138676 ****
  c7e4450d857de7de3db653040f28ea54  libgomp/testsuite/libgomp.c/declare-variant-3-sm75.c
  f2efa95bfb9ba9e454c38688371551c9  libgomp/testsuite/libgomp.c/declare-variant-3-sm80.c
  0315cdf9221c890fcd6f827cf70b030e  libgomp/testsuite/libgomp.c/declare-variant-3-sm89.c
! 07f0d7a64507218c809e5e271bdb674b  libgomp/testsuite/libgomp.c/declare-variant-3.c
  990725ec4ad0102414e463c434143f4f  libgomp/testsuite/libgomp.c/declare-variant-3.h
  6514cd5e3a0a420fe0305c6e4e7e139d  libgomp/testsuite/libgomp.c/declare-variant-4-gfx10-3-generic.c
  3e7f10285df48e5145c86b3105312288  libgomp/testsuite/libgomp.c/declare-variant-4-gfx1030.c
--- 138767,138773 ----
  c7e4450d857de7de3db653040f28ea54  libgomp/testsuite/libgomp.c/declare-variant-3-sm75.c
  f2efa95bfb9ba9e454c38688371551c9  libgomp/testsuite/libgomp.c/declare-variant-3-sm80.c
  0315cdf9221c890fcd6f827cf70b030e  libgomp/testsuite/libgomp.c/declare-variant-3-sm89.c
! 7da3ac85e4c6bcbc1ce1d6d1c6575395  libgomp/testsuite/libgomp.c/declare-variant-3.c
  990725ec4ad0102414e463c434143f4f  libgomp/testsuite/libgomp.c/declare-variant-3.h
  6514cd5e3a0a420fe0305c6e4e7e139d  libgomp/testsuite/libgomp.c/declare-variant-4-gfx10-3-generic.c
  3e7f10285df48e5145c86b3105312288  libgomp/testsuite/libgomp.c/declare-variant-4-gfx1030.c
*************** c6140af0b4134fc2cd0af2cd67b6e93f  libgom
*** 138701,138707 ****
  a3798387afacc8f3b56b1c2357980b40  libgomp/testsuite/libgomp.c/declare-variant-4-gfx90c.c
  03788ed6fd46368d573f8054aaa4cc74  libgomp/testsuite/libgomp.c/declare-variant-4-gfx942.c
  bb78bd1426b9a9dbb6d042011bc83fc5  libgomp/testsuite/libgomp.c/declare-variant-4-gfx950.c
! 1a4ae6cfa2b54902b0414a9c9adc6ec2  libgomp/testsuite/libgomp.c/declare-variant-4.c
  e47e9fb21f42db5558fd30458968e456  libgomp/testsuite/libgomp.c/declare-variant-4.h
  de26bcca8c4e027a5ce130d6ff6fc370  libgomp/testsuite/libgomp.c/depend-1.c
  f064386a2df301c3135834944af37de9  libgomp/testsuite/libgomp.c/depend-10.c
--- 138798,138804 ----
  a3798387afacc8f3b56b1c2357980b40  libgomp/testsuite/libgomp.c/declare-variant-4-gfx90c.c
  03788ed6fd46368d573f8054aaa4cc74  libgomp/testsuite/libgomp.c/declare-variant-4-gfx942.c
  bb78bd1426b9a9dbb6d042011bc83fc5  libgomp/testsuite/libgomp.c/declare-variant-4-gfx950.c
! 1f5eb948c82d13c08cf06ad916ec9f8a  libgomp/testsuite/libgomp.c/declare-variant-4.c
  e47e9fb21f42db5558fd30458968e456  libgomp/testsuite/libgomp.c/declare-variant-4.h
  de26bcca8c4e027a5ce130d6ff6fc370  libgomp/testsuite/libgomp.c/depend-1.c
  f064386a2df301c3135834944af37de9  libgomp/testsuite/libgomp.c/depend-10.c
*************** ca47d9e0cacee8e7c1316c14a513cda4  libgom
*** 138714,138734 ****
  ec897cbb2003f55279c80e8a2f700f48  libgomp/testsuite/libgomp.c/depend-8.c
  2b66f56c0267e26a89308845398264b1  libgomp/testsuite/libgomp.c/depend-9.c
  511f904a0e4d34bd22f7f7883fc5e945  libgomp/testsuite/libgomp.c/device_uid.c
! e5b7c99f7690e7d5a01b632a8bbf6c3a  libgomp/testsuite/libgomp.c/doacross-1.c
! 3664b043d881889fef3f1a55197c60ab  libgomp/testsuite/libgomp.c/doacross-2.c
! 60e6c95d8f6e038252d5ffaead6d3549  libgomp/testsuite/libgomp.c/doacross-3.c
  3760ae74c8f812679e9ee9ec7f1a9e69  libgomp/testsuite/libgomp.c/doacross-4.c
  06d29ccb303726b81f0699bef121edff  libgomp/testsuite/libgomp.c/doacross-5.c
  da453be173ad92979620c14fc3d651f4  libgomp/testsuite/libgomp.c/doacross-6.c
  6e7c4419d5e13365138b21fd45594989  libgomp/testsuite/libgomp.c/doacross-7.c
  39fea640f2c9adb1a5a7efe5f6d370b8  libgomp/testsuite/libgomp.c/examples-4/array_sections-3.c
  9d4709594c05148c0ee2d3ba822d433d  libgomp/testsuite/libgomp.c/examples-4/array_sections-4.c
! 8afb8b38a1fe85028237e930148d4464  libgomp/testsuite/libgomp.c/examples-4/async_target-1.c
  54cf2a17f0a08dba2be7b953a4867917  libgomp/testsuite/libgomp.c/examples-4/async_target-2.c
! 11c94d6fb4c61b15faac9adae8a3aa9b  libgomp/testsuite/libgomp.c/examples-4/declare_target-1.c
! 13592f5506c4ebab75f89572dcf6a5f2  libgomp/testsuite/libgomp.c/examples-4/declare_target-3.c
! f2563f445de10b8aebe82dbb5a202daf  libgomp/testsuite/libgomp.c/examples-4/declare_target-4.c
! 5abebfddd096be49d494104d24f2f4d7  libgomp/testsuite/libgomp.c/examples-4/declare_target-5.c
  2a4af8a2aa774c718874c3d705060298  libgomp/testsuite/libgomp.c/examples-4/device-1.c
  c5ddf64e605f81874f4dfbf37fa16829  libgomp/testsuite/libgomp.c/examples-4/device-2.c
  e3bf01e608c6cb03fb590fa04a9563a4  libgomp/testsuite/libgomp.c/examples-4/device-3.c
--- 138811,138831 ----
  ec897cbb2003f55279c80e8a2f700f48  libgomp/testsuite/libgomp.c/depend-8.c
  2b66f56c0267e26a89308845398264b1  libgomp/testsuite/libgomp.c/depend-9.c
  511f904a0e4d34bd22f7f7883fc5e945  libgomp/testsuite/libgomp.c/device_uid.c
! c3a08426facaa422592c916a5e4a5362  libgomp/testsuite/libgomp.c/doacross-1.c
! f9d1bd788f7b14099c6c5397e1599146  libgomp/testsuite/libgomp.c/doacross-2.c
! 6c68fef60510d1ad8178b2f817a04f14  libgomp/testsuite/libgomp.c/doacross-3.c
  3760ae74c8f812679e9ee9ec7f1a9e69  libgomp/testsuite/libgomp.c/doacross-4.c
  06d29ccb303726b81f0699bef121edff  libgomp/testsuite/libgomp.c/doacross-5.c
  da453be173ad92979620c14fc3d651f4  libgomp/testsuite/libgomp.c/doacross-6.c
  6e7c4419d5e13365138b21fd45594989  libgomp/testsuite/libgomp.c/doacross-7.c
  39fea640f2c9adb1a5a7efe5f6d370b8  libgomp/testsuite/libgomp.c/examples-4/array_sections-3.c
  9d4709594c05148c0ee2d3ba822d433d  libgomp/testsuite/libgomp.c/examples-4/array_sections-4.c
! f95f9a06d610c417756639a9e31b39de  libgomp/testsuite/libgomp.c/examples-4/async_target-1.c
  54cf2a17f0a08dba2be7b953a4867917  libgomp/testsuite/libgomp.c/examples-4/async_target-2.c
! 5dae1e63b6e289379131dc0b49823a76  libgomp/testsuite/libgomp.c/examples-4/declare_target-1.c
! 09801ffa5ff17b2b3a0382319df3b8e6  libgomp/testsuite/libgomp.c/examples-4/declare_target-3.c
! 10e8145c82c46c37bfdcb8f1004a9792  libgomp/testsuite/libgomp.c/examples-4/declare_target-4.c
! d8d127b3c8a0e1f0bd16ef39d37f71f9  libgomp/testsuite/libgomp.c/examples-4/declare_target-5.c
  2a4af8a2aa774c718874c3d705060298  libgomp/testsuite/libgomp.c/examples-4/device-1.c
  c5ddf64e605f81874f4dfbf37fa16829  libgomp/testsuite/libgomp.c/examples-4/device-2.c
  e3bf01e608c6cb03fb590fa04a9563a4  libgomp/testsuite/libgomp.c/examples-4/device-3.c
*************** b892336be3124a54b2f99643e2295959  libgom
*** 138786,138792 ****
  a6c33c02bb48400578351a95922a2f1c  libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c
  01e92bf2afe709ab5d5aabf0410fa484  libgomp/testsuite/libgomp.c/ipcp-cb-spec2.c
  95f6c8613aa251d5def12c5b8ac78a94  libgomp/testsuite/libgomp.c/ipcp-cb1.c
! 60295e2f73526594a93b118333ca7ff3  libgomp/testsuite/libgomp.c/lib-1.c
  af9d852282ae3da623a0727f1df789ab  libgomp/testsuite/libgomp.c/lib-2.c
  954e001a86eca6e39424518360cc7b36  libgomp/testsuite/libgomp.c/linear-1.c
  790464caa9172f448964fa91bbff5813  libgomp/testsuite/libgomp.c/linear-2.c
--- 138883,138889 ----
  a6c33c02bb48400578351a95922a2f1c  libgomp/testsuite/libgomp.c/ipcp-cb-spec1.c
  01e92bf2afe709ab5d5aabf0410fa484  libgomp/testsuite/libgomp.c/ipcp-cb-spec2.c
  95f6c8613aa251d5def12c5b8ac78a94  libgomp/testsuite/libgomp.c/ipcp-cb1.c
! 05a55b01beb419917b31560d862a3cad  libgomp/testsuite/libgomp.c/lib-1.c
  af9d852282ae3da623a0727f1df789ab  libgomp/testsuite/libgomp.c/lib-2.c
  954e001a86eca6e39424518360cc7b36  libgomp/testsuite/libgomp.c/linear-1.c
  790464caa9172f448964fa91bbff5813  libgomp/testsuite/libgomp.c/linear-2.c
*************** fcf0b70da92fc55e6cdd5d1a77923dc3  libgom
*** 138806,138812 ****
  8e0875862cc838ae1a1551a354fc9e77  libgomp/testsuite/libgomp.c/loop-21.c
  c97be2d4dda2fd0e24aee73e7daeb779  libgomp/testsuite/libgomp.c/loop-22.c
  55bdc5ab65021c3fa80cc6ee8c856909  libgomp/testsuite/libgomp.c/loop-23.c
! a19b860b4cd897806edbbabe581dbb96  libgomp/testsuite/libgomp.c/loop-24.c
  1560509326b57b175c476871c1751dee  libgomp/testsuite/libgomp.c/loop-25.c
  c526be410e3cf6c1c674405feb05cbb2  libgomp/testsuite/libgomp.c/loop-26.c
  78088db622ed796d0cffbcc62df18537  libgomp/testsuite/libgomp.c/loop-27.c
--- 138903,138909 ----
  8e0875862cc838ae1a1551a354fc9e77  libgomp/testsuite/libgomp.c/loop-21.c
  c97be2d4dda2fd0e24aee73e7daeb779  libgomp/testsuite/libgomp.c/loop-22.c
  55bdc5ab65021c3fa80cc6ee8c856909  libgomp/testsuite/libgomp.c/loop-23.c
! f613c1f4250aa117c271f57e8922ffa9  libgomp/testsuite/libgomp.c/loop-24.c
  1560509326b57b175c476871c1751dee  libgomp/testsuite/libgomp.c/loop-25.c
  c526be410e3cf6c1c674405feb05cbb2  libgomp/testsuite/libgomp.c/loop-26.c
  78088db622ed796d0cffbcc62df18537  libgomp/testsuite/libgomp.c/loop-27.c
*************** c526be410e3cf6c1c674405feb05cbb2  libgom
*** 138817,138830 ****
  a28f0449c06d99dd5b700e4d3e6bc6f9  libgomp/testsuite/libgomp.c/loop-7.c
  b0f5c1da84528f7536416837c59936a3  libgomp/testsuite/libgomp.c/loop-8.c
  675d1d2731b881ab81851bc2a4026c37  libgomp/testsuite/libgomp.c/loop-9.c
! 45f151a915cc0a329c8d36570d0886f2  libgomp/testsuite/libgomp.c/max_vf-1.c
  fb6c2dd0e49019031b9710d8acb09de2  libgomp/testsuite/libgomp.c/max_vf-2.c
  d84bb51b8ed9d10332e1e2199d17e364  libgomp/testsuite/libgomp.c/nested-1.c
  1d1a9a5fca15cd4628e275afcbca97e9  libgomp/testsuite/libgomp.c/nested-2.c
  accdda3ec5d8ad880d3578643fdff519  libgomp/testsuite/libgomp.c/nested-3.c
  726d0ef78ecb6dd92379c6d84e18a9c7  libgomp/testsuite/libgomp.c/nestedfn-1.c
! 48b7f93dc451cc15a3beb0cecceade08  libgomp/testsuite/libgomp.c/nestedfn-2.c
! d8d9ea68baada1a29a137d38c8c2206b  libgomp/testsuite/libgomp.c/nestedfn-3.c
  0a7198c17cd8937101ee75701851161a  libgomp/testsuite/libgomp.c/nestedfn-4.c
  7bcacbdfa081a8d1af605b984229645c  libgomp/testsuite/libgomp.c/nestedfn-5.c
  f7c21b673a353f09b2f8780a2e2cf556  libgomp/testsuite/libgomp.c/nestedfn-6.c
--- 138914,138927 ----
  a28f0449c06d99dd5b700e4d3e6bc6f9  libgomp/testsuite/libgomp.c/loop-7.c
  b0f5c1da84528f7536416837c59936a3  libgomp/testsuite/libgomp.c/loop-8.c
  675d1d2731b881ab81851bc2a4026c37  libgomp/testsuite/libgomp.c/loop-9.c
! 581606fd6fb4e68b7e8888af6172a499  libgomp/testsuite/libgomp.c/max_vf-1.c
  fb6c2dd0e49019031b9710d8acb09de2  libgomp/testsuite/libgomp.c/max_vf-2.c
  d84bb51b8ed9d10332e1e2199d17e364  libgomp/testsuite/libgomp.c/nested-1.c
  1d1a9a5fca15cd4628e275afcbca97e9  libgomp/testsuite/libgomp.c/nested-2.c
  accdda3ec5d8ad880d3578643fdff519  libgomp/testsuite/libgomp.c/nested-3.c
  726d0ef78ecb6dd92379c6d84e18a9c7  libgomp/testsuite/libgomp.c/nestedfn-1.c
! b077f988f391c816b0a921bdc5ee6cc9  libgomp/testsuite/libgomp.c/nestedfn-2.c
! 98a58ae6f932a201c9cc6426a833cc30  libgomp/testsuite/libgomp.c/nestedfn-3.c
  0a7198c17cd8937101ee75701851161a  libgomp/testsuite/libgomp.c/nestedfn-4.c
  7bcacbdfa081a8d1af605b984229645c  libgomp/testsuite/libgomp.c/nestedfn-5.c
  f7c21b673a353f09b2f8780a2e2cf556  libgomp/testsuite/libgomp.c/nestedfn-6.c
*************** b2840419f7f70553698eb41dcd3bd6c6  libgom
*** 138837,138842 ****
--- 138934,138940 ----
  155f067cfc582aa157e2bdb3145adbf5  libgomp/testsuite/libgomp.c/omp-nested-3.c
  20a1c4ad16d936e13bfcff4af3b2a27a  libgomp/testsuite/libgomp.c/omp-parallel-for.c
  e756f95da64c35a1d35271b41d86a25f  libgomp/testsuite/libgomp.c/omp-parallel-if.c
+ 3a7d8771def546c958b6ffd09fe62346  libgomp/testsuite/libgomp.c/omp-proc-bind-master-dep.c
  fd94f11e80d06ba6d2e92c00e2dbaf0d  libgomp/testsuite/libgomp.c/omp-single-1.c
  5c210f4cc7da947889dd747ceff032fa  libgomp/testsuite/libgomp.c/omp-single-2.c
  51a80dab8d4bcf4b4a8d80121e330d5c  libgomp/testsuite/libgomp.c/omp-single-3.c
*************** b2fb8a46bb1499918a8fc73feb9e8d08  libgom
*** 138877,138883 ****
  85ff1aec133bd8a4b5de89942472b6ab  libgomp/testsuite/libgomp.c/places-7.c
  ea933c3d3011e72147289674c4f66d9f  libgomp/testsuite/libgomp.c/places-8.c
  4b3bd4043ea1b8f3ca4b9c512b5cabc1  libgomp/testsuite/libgomp.c/places-9.c
! bb57a9ccf51a738ab2985a513801a658  libgomp/testsuite/libgomp.c/pr104385.c
  b39893ba213997fb0f30060685879d54  libgomp/testsuite/libgomp.c/pr104783-2.c
  9783950bd82dd3de38f343049b240ea9  libgomp/testsuite/libgomp.c/pr104783.c
  90c233f1c51f5ec4e94b2c31c4dc28bb  libgomp/testsuite/libgomp.c/pr104952-1.c
--- 138975,138981 ----
  85ff1aec133bd8a4b5de89942472b6ab  libgomp/testsuite/libgomp.c/places-7.c
  ea933c3d3011e72147289674c4f66d9f  libgomp/testsuite/libgomp.c/places-8.c
  4b3bd4043ea1b8f3ca4b9c512b5cabc1  libgomp/testsuite/libgomp.c/places-9.c
! 0316e6898cb46084a4d3e2ce553cbfdb  libgomp/testsuite/libgomp.c/pr104385.c
  b39893ba213997fb0f30060685879d54  libgomp/testsuite/libgomp.c/pr104783-2.c
  9783950bd82dd3de38f343049b240ea9  libgomp/testsuite/libgomp.c/pr104783.c
  90c233f1c51f5ec4e94b2c31c4dc28bb  libgomp/testsuite/libgomp.c/pr104952-1.c
*************** fbaa429fdd38498866cb27eca67eb819  libgom
*** 138944,138953 ****
  e768743d2af95f59780e3418077b7e1e  libgomp/testsuite/libgomp.c/pr80853.c
  9116b9dc2c0c3c11fdab95ea2ca66a18  libgomp/testsuite/libgomp.c/pr81687-1.c
  5996dc15da52a000b77c153bb70588f6  libgomp/testsuite/libgomp.c/pr81687-2.c
! 028299ccbe448518755bf7ecfb2173c4  libgomp/testsuite/libgomp.c/pr81778.c
  d2e99b56eca2603a98c09d8a426f014d  libgomp/testsuite/libgomp.c/pr86416-1.c
  2e46285bc3dd9de6aa9f549109ddeee5  libgomp/testsuite/libgomp.c/pr86416-2.c
! ed00c0e197dcbbf46f44ea320b473f78  libgomp/testsuite/libgomp.c/pr86660.c
  98b922b1cdf2f28ae03ab1ce3c81629a  libgomp/testsuite/libgomp.c/pr89002.c
  647c1c2e346c7cfa972582b2d830c004  libgomp/testsuite/libgomp.c/pr90779.c
  c809670e9df5e9371adcd7582c352fe5  libgomp/testsuite/libgomp.c/pr90811.c
--- 139042,139051 ----
  e768743d2af95f59780e3418077b7e1e  libgomp/testsuite/libgomp.c/pr80853.c
  9116b9dc2c0c3c11fdab95ea2ca66a18  libgomp/testsuite/libgomp.c/pr81687-1.c
  5996dc15da52a000b77c153bb70588f6  libgomp/testsuite/libgomp.c/pr81687-2.c
! 7f210f87bb34fac24c883d60b2ea628a  libgomp/testsuite/libgomp.c/pr81778.c
  d2e99b56eca2603a98c09d8a426f014d  libgomp/testsuite/libgomp.c/pr86416-1.c
  2e46285bc3dd9de6aa9f549109ddeee5  libgomp/testsuite/libgomp.c/pr86416-2.c
! 0c7e9378c779a0b6cfb8cd77d7e8c567  libgomp/testsuite/libgomp.c/pr86660.c
  98b922b1cdf2f28ae03ab1ce3c81629a  libgomp/testsuite/libgomp.c/pr89002.c
  647c1c2e346c7cfa972582b2d830c004  libgomp/testsuite/libgomp.c/pr90779.c
  c809670e9df5e9371adcd7582c352fe5  libgomp/testsuite/libgomp.c/pr90811.c
*************** d321b450677a9393d745c2b0880a9bde  libgom
*** 138965,138971 ****
  46df3b1df79db68648b6ccbec941306b  libgomp/testsuite/libgomp.c/reduction-15.c
  6a724210e4cb30df7ade4ef7ee0aa83e  libgomp/testsuite/libgomp.c/reduction-2.c
  e6be7ac480ea1328785bc17e9c2ecc9a  libgomp/testsuite/libgomp.c/reduction-3.c
! 44f69b0c87d6183287459ce05d2c547d  libgomp/testsuite/libgomp.c/reduction-4.c
  9126ac9782df114930590ae42eef14dc  libgomp/testsuite/libgomp.c/reduction-5.c
  bec2e246a29d581f6ebc16d2674347cb  libgomp/testsuite/libgomp.c/reduction-6.c
  bbb535f9235265a2e36ddfe0bbef8c2c  libgomp/testsuite/libgomp.c/reduction-7.c
--- 139063,139069 ----
  46df3b1df79db68648b6ccbec941306b  libgomp/testsuite/libgomp.c/reduction-15.c
  6a724210e4cb30df7ade4ef7ee0aa83e  libgomp/testsuite/libgomp.c/reduction-2.c
  e6be7ac480ea1328785bc17e9c2ecc9a  libgomp/testsuite/libgomp.c/reduction-3.c
! ebf13aabb647dcf04ca1673ed3b617c6  libgomp/testsuite/libgomp.c/reduction-4.c
  9126ac9782df114930590ae42eef14dc  libgomp/testsuite/libgomp.c/reduction-5.c
  bec2e246a29d581f6ebc16d2674347cb  libgomp/testsuite/libgomp.c/reduction-6.c
  bbb535f9235265a2e36ddfe0bbef8c2c  libgomp/testsuite/libgomp.c/reduction-7.c
*************** f96d46491425528d3d7b30c80c64952a  libgom
*** 139019,139025 ****
  d949aebaa065c468f63b2e2f5894020d  libgomp/testsuite/libgomp.c/sort-1.c
  fe7fdb3688e9cc0090e8bf29500cd119  libgomp/testsuite/libgomp.c/static-chunk-size-one.c
  b100c329df163acfa97656a24a5c1bb9  libgomp/testsuite/libgomp.c/switch-conversion-2.c
! 7c841b55fe2c0baa3b9aa8b2656a1d60  libgomp/testsuite/libgomp.c/switch-conversion.c
  9db70785f4086ce177b8c657f8afcf53  libgomp/testsuite/libgomp.c/target-11.c
  2de942c75a916f102ba01aa0912ff30c  libgomp/testsuite/libgomp.c/target-12.c
  27431e068ab8aac1749f7d5589cc31a4  libgomp/testsuite/libgomp.c/target-14.c
--- 139117,139123 ----
  d949aebaa065c468f63b2e2f5894020d  libgomp/testsuite/libgomp.c/sort-1.c
  fe7fdb3688e9cc0090e8bf29500cd119  libgomp/testsuite/libgomp.c/static-chunk-size-one.c
  b100c329df163acfa97656a24a5c1bb9  libgomp/testsuite/libgomp.c/switch-conversion-2.c
! ff65a10dd402092a4cbe8ba2a361ac11  libgomp/testsuite/libgomp.c/switch-conversion.c
  9db70785f4086ce177b8c657f8afcf53  libgomp/testsuite/libgomp.c/target-11.c
  2de942c75a916f102ba01aa0912ff30c  libgomp/testsuite/libgomp.c/target-12.c
  27431e068ab8aac1749f7d5589cc31a4  libgomp/testsuite/libgomp.c/target-14.c
*************** f2e54a8764788eb33e978b5d31ff89b6  libgom
*** 139034,139054 ****
  4ce1597f944d0dab5e5edb26f06eb285  libgomp/testsuite/libgomp.c/target-23.c
  f9477bd5cd91873e5bdae1efb8919bf2  libgomp/testsuite/libgomp.c/target-24.c
  cfe55d2cd53f9f250f09f4f5fe8f0a26  libgomp/testsuite/libgomp.c/target-25.c
! f10dc3eae15856c4039679f4c4b59813  libgomp/testsuite/libgomp.c/target-26.c
  b19f78bcd8657caada64699a1cf44c50  libgomp/testsuite/libgomp.c/target-27.c
! cfb96280c2ccf2711f5cc008a7b246ae  libgomp/testsuite/libgomp.c/target-28.c
  853e83a34241d01c658ccbaf8af52df8  libgomp/testsuite/libgomp.c/target-29.c
  f7a44ccd815684332e17fd32bdd34759  libgomp/testsuite/libgomp.c/target-3.c
! 89b93437359f4de22f03c55eb9283547  libgomp/testsuite/libgomp.c/target-30.c
! 95908bcfba12e260232003299ef50b2d  libgomp/testsuite/libgomp.c/target-31.c
! dceaa3615119793c5e2cc8a17d2db8bf  libgomp/testsuite/libgomp.c/target-32.c
  bccccd438324ee9e479d4e3a0bdb6d81  libgomp/testsuite/libgomp.c/target-33.c
! 1ac6fb011b9f01d7645493e720fffe9b  libgomp/testsuite/libgomp.c/target-34.c
! 39197232f51c6d357b1433cbac40474e  libgomp/testsuite/libgomp.c/target-35.c
  8ceaf60bd931304015eb3da87ed4570f  libgomp/testsuite/libgomp.c/target-36.c
  afd63367e7cb3f8df5a7702805b4f9d2  libgomp/testsuite/libgomp.c/target-37.c
! 42c91dcf309f915341e77cf7bc7b46ea  libgomp/testsuite/libgomp.c/target-38.c
! 30443acc8daefd5d19442cdbebdf89c9  libgomp/testsuite/libgomp.c/target-39.c
  2976dbc7a685197058903e4113919f62  libgomp/testsuite/libgomp.c/target-4.c
  8709eb7110674b1efddc628092eb42bc  libgomp/testsuite/libgomp.c/target-40.c
  53964eae69f62a1e1e6ccd73dfd29af4  libgomp/testsuite/libgomp.c/target-41.c
--- 139132,139152 ----
  4ce1597f944d0dab5e5edb26f06eb285  libgomp/testsuite/libgomp.c/target-23.c
  f9477bd5cd91873e5bdae1efb8919bf2  libgomp/testsuite/libgomp.c/target-24.c
  cfe55d2cd53f9f250f09f4f5fe8f0a26  libgomp/testsuite/libgomp.c/target-25.c
! 96a085f245242eeec5f4db65fdfd073f  libgomp/testsuite/libgomp.c/target-26.c
  b19f78bcd8657caada64699a1cf44c50  libgomp/testsuite/libgomp.c/target-27.c
! 71cb25c4b14d93a826bfaab87fb63eaa  libgomp/testsuite/libgomp.c/target-28.c
  853e83a34241d01c658ccbaf8af52df8  libgomp/testsuite/libgomp.c/target-29.c
  f7a44ccd815684332e17fd32bdd34759  libgomp/testsuite/libgomp.c/target-3.c
! 998c9e9b2884363ebc629685b0e8524c  libgomp/testsuite/libgomp.c/target-30.c
! 8f97ed48397941692c8d064833ea658f  libgomp/testsuite/libgomp.c/target-31.c
! 271e8ca083b73c4ae56bc42f3f634e1f  libgomp/testsuite/libgomp.c/target-32.c
  bccccd438324ee9e479d4e3a0bdb6d81  libgomp/testsuite/libgomp.c/target-33.c
! efdbb5631b9b73352854c7f30468cd42  libgomp/testsuite/libgomp.c/target-34.c
! 0168fff6191978721858e6a9fd8e4192  libgomp/testsuite/libgomp.c/target-35.c
  8ceaf60bd931304015eb3da87ed4570f  libgomp/testsuite/libgomp.c/target-36.c
  afd63367e7cb3f8df5a7702805b4f9d2  libgomp/testsuite/libgomp.c/target-37.c
! 865fa9882d91e5e076a764f03ad98105  libgomp/testsuite/libgomp.c/target-38.c
! e04f8e3314964356d53be2c6d6f80602  libgomp/testsuite/libgomp.c/target-39.c
  2976dbc7a685197058903e4113919f62  libgomp/testsuite/libgomp.c/target-4.c
  8709eb7110674b1efddc628092eb42bc  libgomp/testsuite/libgomp.c/target-40.c
  53964eae69f62a1e1e6ccd73dfd29af4  libgomp/testsuite/libgomp.c/target-41.c
*************** afc4ab3aab3ed9982eae8a31f1a79482  libgom
*** 139072,139081 ****
  ae27a3336844047d494b72607cf843fc  libgomp/testsuite/libgomp.c/target-6.c
  a9b2ad991bd60cd4cd6ef4a68071bee6  libgomp/testsuite/libgomp.c/target-7.c
  9249f482d7291a60ed32df9743b496fb  libgomp/testsuite/libgomp.c/target-8.c
! 59acb9b212e99b3f1ea3d1a543acdd3d  libgomp/testsuite/libgomp.c/target-9.c
! 4e29a1266d0dcad35365d246391e52c3  libgomp/testsuite/libgomp.c/target-critical-1.c
  d7cbe25f5829f4d664a461d6ef7327f5  libgomp/testsuite/libgomp.c/target-has-device-addr-3.c
! 2c67f32f623ae7d4b5ad5c7688a6acb1  libgomp/testsuite/libgomp.c/target-link-1.c
  2615e18884995f596aab452699d4a70a  libgomp/testsuite/libgomp.c/target-map-zero-sized-2.c
  68edfd581475a06b17e8a98d85c86022  libgomp/testsuite/libgomp.c/target-map-zero-sized-3.c
  24c08630e1dc6f184073f42ff7c1bb73  libgomp/testsuite/libgomp.c/target-map-zero-sized.c
--- 139170,139179 ----
  ae27a3336844047d494b72607cf843fc  libgomp/testsuite/libgomp.c/target-6.c
  a9b2ad991bd60cd4cd6ef4a68071bee6  libgomp/testsuite/libgomp.c/target-7.c
  9249f482d7291a60ed32df9743b496fb  libgomp/testsuite/libgomp.c/target-8.c
! 37f4629cc5ec7daf74c2204face7e933  libgomp/testsuite/libgomp.c/target-9.c
! 0c22284da2bf46f8073fce86c2b87371  libgomp/testsuite/libgomp.c/target-critical-1.c
  d7cbe25f5829f4d664a461d6ef7327f5  libgomp/testsuite/libgomp.c/target-has-device-addr-3.c
! ae08608d1d34ffa14592283860b92d45  libgomp/testsuite/libgomp.c/target-link-1.c
  2615e18884995f596aab452699d4a70a  libgomp/testsuite/libgomp.c/target-map-zero-sized-2.c
  68edfd581475a06b17e8a98d85c86022  libgomp/testsuite/libgomp.c/target-map-zero-sized-3.c
  24c08630e1dc6f184073f42ff7c1bb73  libgomp/testsuite/libgomp.c/target-map-zero-sized.c
*************** d7cbe25f5829f4d664a461d6ef7327f5  libgom
*** 139083,139108 ****
  ec5b58aca4cfce9a6dafce47f592cdc3  libgomp/testsuite/libgomp.c/target-simd-clone-1.c
  602b6f2d636477283d0ff3d6fc3402fc  libgomp/testsuite/libgomp.c/target-simd-clone-2.c
  3945b32fbe56de1978fd25a17fabaacf  libgomp/testsuite/libgomp.c/target-simd-clone-3.c
! 3ec1f30520e033764f5322b77b9ccb08  libgomp/testsuite/libgomp.c/target-teams-1.c
! 199474ddc91715f45996e095a9f4298a  libgomp/testsuite/libgomp.c/task-1.c
  b07f3ce8ad8f8edece7624d18f5d154d  libgomp/testsuite/libgomp.c/task-2.c
! f7ff00e5f2a30832f7f427c91fa1f61b  libgomp/testsuite/libgomp.c/task-3.c
  d3e7c403248ba696f161f0c29c1f87a6  libgomp/testsuite/libgomp.c/task-4.c
  d4661425a651c88d20ba240b4b095d25  libgomp/testsuite/libgomp.c/task-5.c
! 44bdb32169338741ef61362037413b94  libgomp/testsuite/libgomp.c/task-6.c
  be9ace9f504e4b04cbe60d9c44b6ec06  libgomp/testsuite/libgomp.c/task-7.c
  fa0452ae69f7810be8c0d18767e0b973  libgomp/testsuite/libgomp.c/task-8.c
! 38213b90919e07d4d9f35aca2fd48cdd  libgomp/testsuite/libgomp.c/task-reduction-1.c
! ccf79f1a3cd3d9897f6ea88c19bfbdc8  libgomp/testsuite/libgomp.c/task-reduction-2.c
  e25fde9ed6b03c3c743ea8cf6c8eaa3e  libgomp/testsuite/libgomp.c/task-reduction-3.c
  3b961187e4321fe4d1a657f3f6963089  libgomp/testsuite/libgomp.c/task-reduction-4.c
! f75d1327afda704d612dae70b35ac230  libgomp/testsuite/libgomp.c/teams-1.c
  37b3daacf6336034e4ee7c938d7fc2ef  libgomp/testsuite/libgomp.c/teams-2.c
  8f9a5283e3b48bb452ccf9f17b6bf998  libgomp/testsuite/libgomp.c/teams-3.c
  01982ba157671cfd498fc3b3effd6f5d  libgomp/testsuite/libgomp.c/teams-4.c
  823e6611a5fcc98ccb7472d8cd3c93bc  libgomp/testsuite/libgomp.c/teams-5.c
  74e159f134df946b8d2bcebce46c6cf3  libgomp/testsuite/libgomp.c/thread-limit-1.c
! 3cdc81bd7b9c658361c933f7a80c7a77  libgomp/testsuite/libgomp.c/thread-limit-2.c
  014784f1e47ac29bf6638d12861665ec  libgomp/testsuite/libgomp.c/thread-limit-3.c
  65b122ed46c1c99e052ffdbb6cec4968  libgomp/testsuite/libgomp.c/thread-limit-4.c
  2c056e80fa07dd3649137bb24e331964  libgomp/testsuite/libgomp.c/thread-limit-5.c
--- 139181,139206 ----
  ec5b58aca4cfce9a6dafce47f592cdc3  libgomp/testsuite/libgomp.c/target-simd-clone-1.c
  602b6f2d636477283d0ff3d6fc3402fc  libgomp/testsuite/libgomp.c/target-simd-clone-2.c
  3945b32fbe56de1978fd25a17fabaacf  libgomp/testsuite/libgomp.c/target-simd-clone-3.c
! b252b319bbe3ddfce7d52820069e82fe  libgomp/testsuite/libgomp.c/target-teams-1.c
! c37e15563e68af3a9459b8879bf6d99b  libgomp/testsuite/libgomp.c/task-1.c
  b07f3ce8ad8f8edece7624d18f5d154d  libgomp/testsuite/libgomp.c/task-2.c
! 86c0a1376fb9f2e8566c4af319af9845  libgomp/testsuite/libgomp.c/task-3.c
  d3e7c403248ba696f161f0c29c1f87a6  libgomp/testsuite/libgomp.c/task-4.c
  d4661425a651c88d20ba240b4b095d25  libgomp/testsuite/libgomp.c/task-5.c
! 5ae25a0540fcee6f2b3dc2f3c91e5372  libgomp/testsuite/libgomp.c/task-6.c
  be9ace9f504e4b04cbe60d9c44b6ec06  libgomp/testsuite/libgomp.c/task-7.c
  fa0452ae69f7810be8c0d18767e0b973  libgomp/testsuite/libgomp.c/task-8.c
! 570d6a0c186d0da5b24bbbe3fb03353a  libgomp/testsuite/libgomp.c/task-reduction-1.c
! 7379dbab4c17a99389823257b869b0e6  libgomp/testsuite/libgomp.c/task-reduction-2.c
  e25fde9ed6b03c3c743ea8cf6c8eaa3e  libgomp/testsuite/libgomp.c/task-reduction-3.c
  3b961187e4321fe4d1a657f3f6963089  libgomp/testsuite/libgomp.c/task-reduction-4.c
! 9679a6532287009cbe86b9b274b36e42  libgomp/testsuite/libgomp.c/teams-1.c
  37b3daacf6336034e4ee7c938d7fc2ef  libgomp/testsuite/libgomp.c/teams-2.c
  8f9a5283e3b48bb452ccf9f17b6bf998  libgomp/testsuite/libgomp.c/teams-3.c
  01982ba157671cfd498fc3b3effd6f5d  libgomp/testsuite/libgomp.c/teams-4.c
  823e6611a5fcc98ccb7472d8cd3c93bc  libgomp/testsuite/libgomp.c/teams-5.c
  74e159f134df946b8d2bcebce46c6cf3  libgomp/testsuite/libgomp.c/thread-limit-1.c
! 9b210a0a407cb35a35873177f31e8748  libgomp/testsuite/libgomp.c/thread-limit-2.c
  014784f1e47ac29bf6638d12861665ec  libgomp/testsuite/libgomp.c/thread-limit-3.c
  65b122ed46c1c99e052ffdbb6cec4968  libgomp/testsuite/libgomp.c/thread-limit-4.c
  2c056e80fa07dd3649137bb24e331964  libgomp/testsuite/libgomp.c/thread-limit-5.c
*************** f75d1327afda704d612dae70b35ac230  libgom
*** 139110,139116 ****
  26a632a90e3b65f74ab6b734c3fd0d94  libgomp/testsuite/libgomp.c/udr-3.c
  edfe0cd950eb6d29688ffe6e38c87d10  libgomp/testsuite/libgomp.c/uns-outer-4.c
  6e82e5e252481546aea46d0ffe020ef9  libgomp/testsuite/libgomp.c/usleep.h
! 35c4904668124586d73a652acb4ed703  libgomp/testsuite/libgomp.c/vla-1.c
  bc4cd825c8ad15fbafb7f2c60e6cab7c  libgomp/testsuite/libgomp.fortran/affinity1.f90
  a7ba1c005e2c0979fffc63313c6c2d42  libgomp/testsuite/libgomp.fortran/affinity2.f90
  b4e8ed1ab4338f0ccdabc2598d2e0973  libgomp/testsuite/libgomp.fortran/aligned1.f03
--- 139208,139214 ----
  26a632a90e3b65f74ab6b734c3fd0d94  libgomp/testsuite/libgomp.c/udr-3.c
  edfe0cd950eb6d29688ffe6e38c87d10  libgomp/testsuite/libgomp.c/uns-outer-4.c
  6e82e5e252481546aea46d0ffe020ef9  libgomp/testsuite/libgomp.c/usleep.h
! 495472dbacc523f3a08b49b4c4c38272  libgomp/testsuite/libgomp.c/vla-1.c
  bc4cd825c8ad15fbafb7f2c60e6cab7c  libgomp/testsuite/libgomp.fortran/affinity1.f90
  a7ba1c005e2c0979fffc63313c6c2d42  libgomp/testsuite/libgomp.fortran/affinity2.f90
  b4e8ed1ab4338f0ccdabc2598d2e0973  libgomp/testsuite/libgomp.fortran/aligned1.f03
*************** b6f0fb56203a24951779ba06548a5fdf  libgom
*** 139155,139166 ****
  0d85a7a7d82fc3a1cb843bfd2d569a50  libgomp/testsuite/libgomp.fortran/allocate-6.f90
  0c4e938e58564254af87788f3071c7da  libgomp/testsuite/libgomp.fortran/allocate-7.f90
  81149f56dc2424a239c1018c9772cfeb  libgomp/testsuite/libgomp.fortran/allocate-8.f90
! 2d1e593d2cc2b95815470db5eeb2ca42  libgomp/testsuite/libgomp.fortran/allocate-8a.f90
  5e4bfaae7990e17182be61796245e45b  libgomp/testsuite/libgomp.fortran/allocate-static.f90
! e8e247710b175502d920dd45bc21dcc1  libgomp/testsuite/libgomp.fortran/allocators-1.f90
! 417aa104f21cd017122168ef884904f3  libgomp/testsuite/libgomp.fortran/allocators-2.f90
  a3968845ddd44e2abfd5506503fcaff2  libgomp/testsuite/libgomp.fortran/allocators-3.f90
! 3e30278436011c71be08d7b18f3bae4c  libgomp/testsuite/libgomp.fortran/allocators-4.f90
  e6be398238acf7c496b5ab6816e00064  libgomp/testsuite/libgomp.fortran/allocators-5.f90
  d69ebafdf43e748e354c0c05228cdd0c  libgomp/testsuite/libgomp.fortran/appendix-a/a.15.1.f90
  3f53f7b5eb9ab9c8cb9eb0edfeedad91  libgomp/testsuite/libgomp.fortran/appendix-a/a.16.1.f90
--- 139253,139264 ----
  0d85a7a7d82fc3a1cb843bfd2d569a50  libgomp/testsuite/libgomp.fortran/allocate-6.f90
  0c4e938e58564254af87788f3071c7da  libgomp/testsuite/libgomp.fortran/allocate-7.f90
  81149f56dc2424a239c1018c9772cfeb  libgomp/testsuite/libgomp.fortran/allocate-8.f90
! 56919121dd21cc5f4be5ea57d5c13a93  libgomp/testsuite/libgomp.fortran/allocate-8a.f90
  5e4bfaae7990e17182be61796245e45b  libgomp/testsuite/libgomp.fortran/allocate-static.f90
! 084290de38c0d5a95c09a7950a8784fa  libgomp/testsuite/libgomp.fortran/allocators-1.f90
! 60d040dcd1b37604d6e3330aebad2593  libgomp/testsuite/libgomp.fortran/allocators-2.f90
  a3968845ddd44e2abfd5506503fcaff2  libgomp/testsuite/libgomp.fortran/allocators-3.f90
! 3f3abd809d1c38e8a07a14f7a45184d6  libgomp/testsuite/libgomp.fortran/allocators-4.f90
  e6be398238acf7c496b5ab6816e00064  libgomp/testsuite/libgomp.fortran/allocators-5.f90
  d69ebafdf43e748e354c0c05228cdd0c  libgomp/testsuite/libgomp.fortran/appendix-a/a.15.1.f90
  3f53f7b5eb9ab9c8cb9eb0edfeedad91  libgomp/testsuite/libgomp.fortran/appendix-a/a.16.1.f90
*************** a8a1d4819e69f862a14301cb3ed192c9  libgom
*** 139223,139229 ****
  5c117e1d74f2b4f253e83682b499c979  libgomp/testsuite/libgomp.fortran/condinc2.f
  6a93bc13521437f84fc52b9fc3544dc4  libgomp/testsuite/libgomp.fortran/condinc3.f90
  830c32b3e02911ba8619b6e823f94108  libgomp/testsuite/libgomp.fortran/condinc4.f90
! c930836635408ae2f513d5a829fcac58  libgomp/testsuite/libgomp.fortran/crayptr1.f90
  5c72e66b85ebaa813cafc7e498afdc78  libgomp/testsuite/libgomp.fortran/crayptr2.f90
  03cd1507e8a9e3a9d48b7a317bba1008  libgomp/testsuite/libgomp.fortran/crayptr3.f90
  f83e1497def5d9050edf0d194ed99cab  libgomp/testsuite/libgomp.fortran/critical-hint-1.f90
--- 139321,139327 ----
  5c117e1d74f2b4f253e83682b499c979  libgomp/testsuite/libgomp.fortran/condinc2.f
  6a93bc13521437f84fc52b9fc3544dc4  libgomp/testsuite/libgomp.fortran/condinc3.f90
  830c32b3e02911ba8619b6e823f94108  libgomp/testsuite/libgomp.fortran/condinc4.f90
! d05718b44484a797e3236d1a01ef8777  libgomp/testsuite/libgomp.fortran/crayptr1.f90
  5c72e66b85ebaa813cafc7e498afdc78  libgomp/testsuite/libgomp.fortran/crayptr2.f90
  03cd1507e8a9e3a9d48b7a317bba1008  libgomp/testsuite/libgomp.fortran/crayptr3.f90
  f83e1497def5d9050edf0d194ed99cab  libgomp/testsuite/libgomp.fortran/critical-hint-1.f90
*************** f83e1497def5d9050edf0d194ed99cab  libgom
*** 139232,139242 ****
  c0ebd55529e9baf82532c7b2f51f3fe4  libgomp/testsuite/libgomp.fortran/declare-simd-2.f90
  8ca22b63783876ef9de275258422a06a  libgomp/testsuite/libgomp.fortran/declare-simd-3.f90
  4aa1fe4701d5e31226d8165c2fb26718  libgomp/testsuite/libgomp.fortran/declare-simd-4.f90
! 41c4fec6db885d55d5e3922d68598eac  libgomp/testsuite/libgomp.fortran/declare-target-1.f90
! df7199b063fe5d0c60dfe901e72b07d4  libgomp/testsuite/libgomp.fortran/declare-target-2.f90
  49813561cddcf22ee10c7f9de89f62c3  libgomp/testsuite/libgomp.fortran/declare-target-3.f90
! abb0596997e88cb58af2f0077223279d  libgomp/testsuite/libgomp.fortran/declare-target-indirect-1.f90
! 97297d1a4a7d048fc250d3d3fd1db73a  libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90
  6e1ba8b2cba3a90e740772cb731ac63e  libgomp/testsuite/libgomp.fortran/declare-target-indirect-3.f90
  2b63f475e04fe3e224db519aa8c2799a  libgomp/testsuite/libgomp.fortran/declare-target-indirect-4.f90
  2f31f813a923a7a182caf202625282c1  libgomp/testsuite/libgomp.fortran/declare-target-link.f90
--- 139330,139340 ----
  c0ebd55529e9baf82532c7b2f51f3fe4  libgomp/testsuite/libgomp.fortran/declare-simd-2.f90
  8ca22b63783876ef9de275258422a06a  libgomp/testsuite/libgomp.fortran/declare-simd-3.f90
  4aa1fe4701d5e31226d8165c2fb26718  libgomp/testsuite/libgomp.fortran/declare-simd-4.f90
! 8ae201c80801e5b5e25b67d7fe880ecc  libgomp/testsuite/libgomp.fortran/declare-target-1.f90
! 4b6e6323760e4ced9fdb496f5bb5c0eb  libgomp/testsuite/libgomp.fortran/declare-target-2.f90
  49813561cddcf22ee10c7f9de89f62c3  libgomp/testsuite/libgomp.fortran/declare-target-3.f90
! 75cda96314db047ad0b89b03e0798025  libgomp/testsuite/libgomp.fortran/declare-target-indirect-1.f90
! a7acd96299c60619cc16b6ccd541490b  libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90
  6e1ba8b2cba3a90e740772cb731ac63e  libgomp/testsuite/libgomp.fortran/declare-target-indirect-3.f90
  2b63f475e04fe3e224db519aa8c2799a  libgomp/testsuite/libgomp.fortran/declare-target-indirect-4.f90
  2f31f813a923a7a182caf202625282c1  libgomp/testsuite/libgomp.fortran/declare-target-link.f90
*************** c22d4261003f9e9a24b78eb85be81a5d  libgom
*** 139246,139251 ****
--- 139344,139350 ----
  482984a687deae231dd6cee06019eeb2  libgomp/testsuite/libgomp.fortran/declare-variant-mod-1-use.f90
  0d6d48032bdd88a941e4e9033c179a13  libgomp/testsuite/libgomp.fortran/declare-variant-mod-1.f90
  645acb6b48e623ae2033047eff79d0d5  libgomp/testsuite/libgomp.fortran/defaultmap-8.f90
+ 46ec6b3bd3d025655aa5160872a5d974  libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
  085b168af19aac8a6dd4f31eda256d5c  libgomp/testsuite/libgomp.fortran/depend-1.f90
  f528c60f59b52a75c434ced5c9a53e30  libgomp/testsuite/libgomp.fortran/depend-2.f90
  7ebb6e3f3faa4674c639dfcc079e08dc  libgomp/testsuite/libgomp.fortran/depend-3.f90
*************** f528c60f59b52a75c434ced5c9a53e30  libgom
*** 139253,139259 ****
  879aee67d74ed13428685bf48a63fe82  libgomp/testsuite/libgomp.fortran/depend-5.f90
  dbefb5b9dae6eea372fe12a983f2bbd5  libgomp/testsuite/libgomp.fortran/depend-6.f90
  1f4919d3bf99ff54886fa58d5d0b9ffa  libgomp/testsuite/libgomp.fortran/depend-7.f90
! 0cfa1d2bc7945a8885b5261d221ac3fd  libgomp/testsuite/libgomp.fortran/depend-inoutset-1.f90
  555a9404bb8537a4e77d4f6182bc9e1a  libgomp/testsuite/libgomp.fortran/depend-iterator-2.f90
  31e5e093c62472c7dd338fd5cb6f0a15  libgomp/testsuite/libgomp.fortran/depobj-1.f90
  5ca0eeecec6ac795cb81c125cbf6011f  libgomp/testsuite/libgomp.fortran/device_uid.f90
--- 139352,139358 ----
  879aee67d74ed13428685bf48a63fe82  libgomp/testsuite/libgomp.fortran/depend-5.f90
  dbefb5b9dae6eea372fe12a983f2bbd5  libgomp/testsuite/libgomp.fortran/depend-6.f90
  1f4919d3bf99ff54886fa58d5d0b9ffa  libgomp/testsuite/libgomp.fortran/depend-7.f90
! 0bc9518ab76a968ba79d8872c74146f4  libgomp/testsuite/libgomp.fortran/depend-inoutset-1.f90
  555a9404bb8537a4e77d4f6182bc9e1a  libgomp/testsuite/libgomp.fortran/depend-iterator-2.f90
  31e5e093c62472c7dd338fd5cb6f0a15  libgomp/testsuite/libgomp.fortran/depobj-1.f90
  5ca0eeecec6ac795cb81c125cbf6011f  libgomp/testsuite/libgomp.fortran/device_uid.f90
*************** d399d484908827be2ebc1cab5ad149fb  libgom
*** 139264,139272 ****
  b27fda28ea209679d1fd8dab627e1468  libgomp/testsuite/libgomp.fortran/do1.f90
  e5575c879fa22b33a94ebe42d9cfc7aa  libgomp/testsuite/libgomp.fortran/do2.f90
  aa15618c3424182c7ab9976352f3f841  libgomp/testsuite/libgomp.fortran/do_concurrent_5.f90
! 1fd310939051dc84ed3d25d8d99fbc31  libgomp/testsuite/libgomp.fortran/doacross1.f90
! 7c59966d63fa307ff5b7881bce1f067f  libgomp/testsuite/libgomp.fortran/doacross2.f90
! 38a69ab87320a0ee3ca08fccb175ab76  libgomp/testsuite/libgomp.fortran/doacross3.f90
  ebe7ba81e035d4ab86f7804cd541614d  libgomp/testsuite/libgomp.fortran/dummy-procs-1.f90
  dbf8d5d52757ffbf204f319b01a6f8ab  libgomp/testsuite/libgomp.fortran/error-1.f90
  e169bdb39b192bb0ba2d9a077ad5ae8c  libgomp/testsuite/libgomp.fortran/examples-4/array_sections-3.f90
--- 139363,139371 ----
  b27fda28ea209679d1fd8dab627e1468  libgomp/testsuite/libgomp.fortran/do1.f90
  e5575c879fa22b33a94ebe42d9cfc7aa  libgomp/testsuite/libgomp.fortran/do2.f90
  aa15618c3424182c7ab9976352f3f841  libgomp/testsuite/libgomp.fortran/do_concurrent_5.f90
! 6ac0a15b899e7f0ee5b2df78bb129fee  libgomp/testsuite/libgomp.fortran/doacross1.f90
! 07ac39d8ea1578439748666eb5f16265  libgomp/testsuite/libgomp.fortran/doacross2.f90
! 4226182e39082285733d2ee7551f6cbc  libgomp/testsuite/libgomp.fortran/doacross3.f90
  ebe7ba81e035d4ab86f7804cd541614d  libgomp/testsuite/libgomp.fortran/dummy-procs-1.f90
  dbf8d5d52757ffbf204f319b01a6f8ab  libgomp/testsuite/libgomp.fortran/error-1.f90
  e169bdb39b192bb0ba2d9a077ad5ae8c  libgomp/testsuite/libgomp.fortran/examples-4/array_sections-3.f90
*************** e1956151e0a1b58e3b37a0ee0654547f  libgom
*** 139345,139360 ****
  9c55850bde7bfabdf7cff657c5b44496  libgomp/testsuite/libgomp.fortran/interop-routines-5.F
  0f68219697c00a7ea66039969b5c4050  libgomp/testsuite/libgomp.fortran/interop-routines-6.F
  28d16a15587d67e51cb31aa8cad48d31  libgomp/testsuite/libgomp.fortran/interop-routines-7.F90
! 1d7f490f3aa22662cdd277712b26a462  libgomp/testsuite/libgomp.fortran/is_device_ptr-1.f90
! e917c7e025fcc6df71315792522da77e  libgomp/testsuite/libgomp.fortran/is_device_ptr-2.f90
  2382b518f8fa444fc94c1e6cf51b5280  libgomp/testsuite/libgomp.fortran/is_device_ptr-3.f90
  c25692d207e679ebce7864339e12a85f  libgomp/testsuite/libgomp.fortran/jacobi.f
  de6f55a3f86dc416877253cfdf1ab448  libgomp/testsuite/libgomp.fortran/lastprivate-conditional-10.f90
  ae72f9bef5c27e6ae84ab0ff6ee16399  libgomp/testsuite/libgomp.fortran/lastprivate1.f90
  c845e7034250759b9b08ddeeb577af4d  libgomp/testsuite/libgomp.fortran/lastprivate2.f90
! bef133e4d3cf823ac34bff98a44d05ad  libgomp/testsuite/libgomp.fortran/lib1.f90
! 650bd5daf8df9ced6b7c318d3e3a7222  libgomp/testsuite/libgomp.fortran/lib2.f
! fbe0e124aba46c9f69f236a8199dee70  libgomp/testsuite/libgomp.fortran/lib3.f
  edb8cf0884ac73fb59ab5c66f1acb3ad  libgomp/testsuite/libgomp.fortran/lib4.f90
  7122ffee4ad568a67d404fe06da86cf8  libgomp/testsuite/libgomp.fortran/lock-1.f90
  12b2386c008a817a32688ca1ae228c42  libgomp/testsuite/libgomp.fortran/lock-2.f90
--- 139444,139459 ----
  9c55850bde7bfabdf7cff657c5b44496  libgomp/testsuite/libgomp.fortran/interop-routines-5.F
  0f68219697c00a7ea66039969b5c4050  libgomp/testsuite/libgomp.fortran/interop-routines-6.F
  28d16a15587d67e51cb31aa8cad48d31  libgomp/testsuite/libgomp.fortran/interop-routines-7.F90
! c1ad752762a27cfa3e94bbea246b828c  libgomp/testsuite/libgomp.fortran/is_device_ptr-1.f90
! 1c4a4186e9dd647a0bb50cb4d4dd1a13  libgomp/testsuite/libgomp.fortran/is_device_ptr-2.f90
  2382b518f8fa444fc94c1e6cf51b5280  libgomp/testsuite/libgomp.fortran/is_device_ptr-3.f90
  c25692d207e679ebce7864339e12a85f  libgomp/testsuite/libgomp.fortran/jacobi.f
  de6f55a3f86dc416877253cfdf1ab448  libgomp/testsuite/libgomp.fortran/lastprivate-conditional-10.f90
  ae72f9bef5c27e6ae84ab0ff6ee16399  libgomp/testsuite/libgomp.fortran/lastprivate1.f90
  c845e7034250759b9b08ddeeb577af4d  libgomp/testsuite/libgomp.fortran/lastprivate2.f90
! 1326c1e04303678180e61687a4198a39  libgomp/testsuite/libgomp.fortran/lib1.f90
! 94d11bb00832da654b65e96f4ce792ff  libgomp/testsuite/libgomp.fortran/lib2.f
! 093b3e118842173b06e4ab75c49794e3  libgomp/testsuite/libgomp.fortran/lib3.f
  edb8cf0884ac73fb59ab5c66f1acb3ad  libgomp/testsuite/libgomp.fortran/lib4.f90
  7122ffee4ad568a67d404fe06da86cf8  libgomp/testsuite/libgomp.fortran/lock-1.f90
  12b2386c008a817a32688ca1ae228c42  libgomp/testsuite/libgomp.fortran/lock-2.f90
*************** e0c7a627e2c061377a19883807aabfe2  libgom
*** 139367,139373 ****
  10190778b4af6170854bedfa75244a91  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90
  11a2994612dda1ea5d074b912ea7e4aa  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
! 794f9311ffd6c98b9329dc06aa6a39e3  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
  523668cf7417e7c8cb78a2b394f7329d  libgomp/testsuite/libgomp.fortran/map-subarray-10.f90
  fe829ea13169aa018e2a5ad40e7581b9  libgomp/testsuite/libgomp.fortran/map-subarray-2.f90
  c1190bc5bceb25197c6d0d9b5ba5a2ae  libgomp/testsuite/libgomp.fortran/map-subarray-3.f90
--- 139466,139472 ----
  10190778b4af6170854bedfa75244a91  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90
  11a2994612dda1ea5d074b912ea7e4aa  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
! 18f729a1444b06169904daaa41adb0f4  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
  523668cf7417e7c8cb78a2b394f7329d  libgomp/testsuite/libgomp.fortran/map-subarray-10.f90
  fe829ea13169aa018e2a5ad40e7581b9  libgomp/testsuite/libgomp.fortran/map-subarray-2.f90
  c1190bc5bceb25197c6d0d9b5ba5a2ae  libgomp/testsuite/libgomp.fortran/map-subarray-3.f90
*************** c04b9603dcb91e38586d7ece605fc03b  libgom
*** 139400,139406 ****
--- 139499,139510 ----
  bc67f38e5b5b1d2e0bceb6481561db59  libgomp/testsuite/libgomp.fortran/non-rectangular-loop-4.f90
  450d27c40e577d44326373374aa78fa8  libgomp/testsuite/libgomp.fortran/non-rectangular-loop-5.f90
  e55e4d88039e45885286f5121fff1fba  libgomp/testsuite/libgomp.fortran/non-rectangular-loop-6.f90
+ e9e866d28e0c8de7982725a2b2235266  libgomp/testsuite/libgomp.fortran/omp-atv-seq-dep.f90
  308e04cf45923f0a4dc041fb8a3dd54c  libgomp/testsuite/libgomp.fortran/omp-default-device.f90
+ 3ae700ee989ce700da4bcf6ebd575e7d  libgomp/testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90
+ b674994b25171d5d1759c43b2277a422  libgomp/testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90
+ 47cd36368ba8d4c47ba71a97d165ca30  libgomp/testsuite/libgomp.fortran/omp-lock-hint-speculative-dep.f90
+ bdf48ac39719ec3b3eedc3ef4b2e8640  libgomp/testsuite/libgomp.fortran/omp-lock-hint-uncontended-dep.f90
  642bd7c41f7948130aa5f8f42b8f21ac  libgomp/testsuite/libgomp.fortran/omp_atomic1.f90
  ac3048471613e2f1f1ee806355b65040  libgomp/testsuite/libgomp.fortran/omp_atomic2.f90
  edf8151c5b785d7f10272dd95dbad260  libgomp/testsuite/libgomp.fortran/omp_atomic3.f90
*************** cb047ff69f1a96928ae722ff607004b4  libgom
*** 139413,139419 ****
  622323a8b6d6827bf9a0ded81fb4d9cb  libgomp/testsuite/libgomp.fortran/omp_hello.f
  1d5baa651387120c1fda67e24dd2125c  libgomp/testsuite/libgomp.fortran/omp_orphan.f
  d09da57ba1fe6d1b566373765f254243  libgomp/testsuite/libgomp.fortran/omp_parse1.f90
! 23d6147324c65d3e1edd705212c5c1a8  libgomp/testsuite/libgomp.fortran/omp_parse2.f90
  1a48e57dbad9754e5d6a3b9f67aa65b5  libgomp/testsuite/libgomp.fortran/omp_parse3.f90
  8170f7b977312f5e8e9fadd4c3b8fc8b  libgomp/testsuite/libgomp.fortran/omp_parse4.f90
  c910dfe57b9f53b8992d397c3571fd09  libgomp/testsuite/libgomp.fortran/omp_reduction.f
--- 139517,139523 ----
  622323a8b6d6827bf9a0ded81fb4d9cb  libgomp/testsuite/libgomp.fortran/omp_hello.f
  1d5baa651387120c1fda67e24dd2125c  libgomp/testsuite/libgomp.fortran/omp_orphan.f
  d09da57ba1fe6d1b566373765f254243  libgomp/testsuite/libgomp.fortran/omp_parse1.f90
! 9844fb727ac21a595db4eea521da3081  libgomp/testsuite/libgomp.fortran/omp_parse2.f90
  1a48e57dbad9754e5d6a3b9f67aa65b5  libgomp/testsuite/libgomp.fortran/omp_parse3.f90
  8170f7b977312f5e8e9fadd4c3b8fc8b  libgomp/testsuite/libgomp.fortran/omp_parse4.f90
  c910dfe57b9f53b8992d397c3571fd09  libgomp/testsuite/libgomp.fortran/omp_reduction.f
*************** be00ce3e3f96c8c6b7e69b3390cbea6c  libgom
*** 139422,139438 ****
  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
! 8aa12e7dad422c429a80a15a029ca3b8  libgomp/testsuite/libgomp.fortran/openmp_version-1.f
! 652c29cde1daaffead2dae0cc54aa9a7  libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
  b12d43efd39917600c23bdbe6e67c348  libgomp/testsuite/libgomp.fortran/optional-bind-c.f90
  57b1c325fdc9d4288e335bb56037d1c3  libgomp/testsuite/libgomp.fortran/optional-map.f90
  c3a66da5face2583306f5e661ecdeaa5  libgomp/testsuite/libgomp.fortran/order-reproducible-1.f90
  f00176bd156a14c71188a3e90d24e3f3  libgomp/testsuite/libgomp.fortran/order-reproducible-2.f90
! 84abc52abece939c2fa04b3d3d942da7  libgomp/testsuite/libgomp.fortran/parallel-master.f90
  18632f821c4d20cc8ddfb8b182ae7d87  libgomp/testsuite/libgomp.fortran/parloops-exit-first-loop-alt-2.f95
  b018601a4e35da4037b1e04dfdb00b98  libgomp/testsuite/libgomp.fortran/parloops-exit-first-loop-alt.f95
  10f51539240fd456f44686f1368a9ebb  libgomp/testsuite/libgomp.fortran/pointer1.f90
! ea1e8a0a21d27e85d504f82d979196a3  libgomp/testsuite/libgomp.fortran/pointer2.f90
  5a38dd4751898fd9556aa9ed131fad76  libgomp/testsuite/libgomp.fortran/pr100981-2.f90
  1e7de6c9f1376e7662fc088ab6ec5e64  libgomp/testsuite/libgomp.fortran/pr25162.f
  150790c35955da1ca1b74284c2553f34  libgomp/testsuite/libgomp.fortran/pr25219.f90
--- 139526,139542 ----
  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
! a29a829025700f8dffb0583c3fee9044  libgomp/testsuite/libgomp.fortran/openmp_version-1.f
! 033d117ca3910488d1093a55f274f502  libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
  b12d43efd39917600c23bdbe6e67c348  libgomp/testsuite/libgomp.fortran/optional-bind-c.f90
  57b1c325fdc9d4288e335bb56037d1c3  libgomp/testsuite/libgomp.fortran/optional-map.f90
  c3a66da5face2583306f5e661ecdeaa5  libgomp/testsuite/libgomp.fortran/order-reproducible-1.f90
  f00176bd156a14c71188a3e90d24e3f3  libgomp/testsuite/libgomp.fortran/order-reproducible-2.f90
! dbf0851b5c45f0ea48805ef81ea2f3ce  libgomp/testsuite/libgomp.fortran/parallel-master.f90
  18632f821c4d20cc8ddfb8b182ae7d87  libgomp/testsuite/libgomp.fortran/parloops-exit-first-loop-alt-2.f95
  b018601a4e35da4037b1e04dfdb00b98  libgomp/testsuite/libgomp.fortran/parloops-exit-first-loop-alt.f95
  10f51539240fd456f44686f1368a9ebb  libgomp/testsuite/libgomp.fortran/pointer1.f90
! 43b3675f4eee0ab654fb9ae0fd4ee940  libgomp/testsuite/libgomp.fortran/pointer2.f90
  5a38dd4751898fd9556aa9ed131fad76  libgomp/testsuite/libgomp.fortran/pr100981-2.f90
  1e7de6c9f1376e7662fc088ab6ec5e64  libgomp/testsuite/libgomp.fortran/pr25162.f
  150790c35955da1ca1b74284c2553f34  libgomp/testsuite/libgomp.fortran/pr25219.f90
*************** eaeadf99271f326c16618e5bfa7fa387  libgom
*** 139471,139478 ****
  2d364f3055004bfd34a5395bfd835c8c  libgomp/testsuite/libgomp.fortran/pr71734-2.f90
  46dd955872bf1b09c3aa0e2e5a309f83  libgomp/testsuite/libgomp.fortran/pr81304.f90
  f96c2e3c116f85fe16f4a9f158198174  libgomp/testsuite/libgomp.fortran/pr81841.f90
! a446018edae19a61aa6c9d823e6b9bf1  libgomp/testsuite/libgomp.fortran/pr84418-1.f90
! 0a4b33df6b5e6f6d6670ba0af38eee36  libgomp/testsuite/libgomp.fortran/pr84418-2.f90
  c7db4b5dee9ac08d55532ef8375a0a44  libgomp/testsuite/libgomp.fortran/pr88463-1.f90
  10dbdf5281da9c9f304148a51eebb319  libgomp/testsuite/libgomp.fortran/pr88463-2.f90
  ed9fbe24202460ac0d1324b917a21848  libgomp/testsuite/libgomp.fortran/pr90030.f90
--- 139575,139582 ----
  2d364f3055004bfd34a5395bfd835c8c  libgomp/testsuite/libgomp.fortran/pr71734-2.f90
  46dd955872bf1b09c3aa0e2e5a309f83  libgomp/testsuite/libgomp.fortran/pr81304.f90
  f96c2e3c116f85fe16f4a9f158198174  libgomp/testsuite/libgomp.fortran/pr81841.f90
! ddc6f4aef10f2d8b689c156091f2e3dc  libgomp/testsuite/libgomp.fortran/pr84418-1.f90
! 8cf52dc2100c1e89d16a6b1e5b3d7fe0  libgomp/testsuite/libgomp.fortran/pr84418-2.f90
  c7db4b5dee9ac08d55532ef8375a0a44  libgomp/testsuite/libgomp.fortran/pr88463-1.f90
  10dbdf5281da9c9f304148a51eebb319  libgomp/testsuite/libgomp.fortran/pr88463-2.f90
  ed9fbe24202460ac0d1324b917a21848  libgomp/testsuite/libgomp.fortran/pr90030.f90
*************** ed9fbe24202460ac0d1324b917a21848  libgom
*** 139481,139492 ****
  8b1a074bf6ac8ea5010df757cd5d381f  libgomp/testsuite/libgomp.fortran/pr95654.f90
  1a0d9a55fff1fc09bbe94b9bf7578792  libgomp/testsuite/libgomp.fortran/procptr1.f90
  c1a53ea8789c3861561b7fb5726a9ba2  libgomp/testsuite/libgomp.fortran/recursion1.f90
! b86e035d24babf0c6f9d3607c02b652e  libgomp/testsuite/libgomp.fortran/reduction1.f90
  0fc8244e59d112b68ae655e086e519d7  libgomp/testsuite/libgomp.fortran/reduction2.f90
  39469a84d6cf2502c4634549cae0a913  libgomp/testsuite/libgomp.fortran/reduction3.f90
  5899f176a17d8eba0edb298b174173b3  libgomp/testsuite/libgomp.fortran/reduction4.f90
  6525e29cdea318e59633c8df34a55c9c  libgomp/testsuite/libgomp.fortran/reduction5.f90
! cb3013075cd476e0aa06ce0539ce8956  libgomp/testsuite/libgomp.fortran/reduction6.f90
  304da9196843372885093e5cacce568e  libgomp/testsuite/libgomp.fortran/refcount-1.f90
  ad73f3cdfa6093602117e056e552a92e  libgomp/testsuite/libgomp.fortran/reference1.f90
  50d442710afd759c4aa50c0567fff8cb  libgomp/testsuite/libgomp.fortran/reference2.f90
--- 139585,139596 ----
  8b1a074bf6ac8ea5010df757cd5d381f  libgomp/testsuite/libgomp.fortran/pr95654.f90
  1a0d9a55fff1fc09bbe94b9bf7578792  libgomp/testsuite/libgomp.fortran/procptr1.f90
  c1a53ea8789c3861561b7fb5726a9ba2  libgomp/testsuite/libgomp.fortran/recursion1.f90
! fca87be26e41b2bd1f5724c2637e5c3b  libgomp/testsuite/libgomp.fortran/reduction1.f90
  0fc8244e59d112b68ae655e086e519d7  libgomp/testsuite/libgomp.fortran/reduction2.f90
  39469a84d6cf2502c4634549cae0a913  libgomp/testsuite/libgomp.fortran/reduction3.f90
  5899f176a17d8eba0edb298b174173b3  libgomp/testsuite/libgomp.fortran/reduction4.f90
  6525e29cdea318e59633c8df34a55c9c  libgomp/testsuite/libgomp.fortran/reduction5.f90
! 031c8fbc6eea732c045373eb3cf57386  libgomp/testsuite/libgomp.fortran/reduction6.f90
  304da9196843372885093e5cacce568e  libgomp/testsuite/libgomp.fortran/refcount-1.f90
  ad73f3cdfa6093602117e056e552a92e  libgomp/testsuite/libgomp.fortran/reference1.f90
  50d442710afd759c4aa50c0567fff8cb  libgomp/testsuite/libgomp.fortran/reference2.f90
*************** f94173449f0106660c3c83b7da6eb1b2  libgom
*** 139510,139516 ****
  1582a3cbc05a3c7b9ac548941c98cd81  libgomp/testsuite/libgomp.fortran/scan-2.f90
  fbdab6e5a5617405737d6de640e5197a  libgomp/testsuite/libgomp.fortran/scope-1.f90
  d5c0f2d60e8a68a314e661ccc5e4d638  libgomp/testsuite/libgomp.fortran/scope-2.f90
! 9f7f086d88ffa3ab2d91919688dc0081  libgomp/testsuite/libgomp.fortran/self_maps.f90
  e4cf951d5826f38fd2445b2bd21a6f3b  libgomp/testsuite/libgomp.fortran/sharing1.f90
  fb3e4ec0015a50f8ddd3f6a1306e2627  libgomp/testsuite/libgomp.fortran/sharing2.f90
  4b323aab0234bc26e21f874065725efd  libgomp/testsuite/libgomp.fortran/simd1.f90
--- 139614,139620 ----
  1582a3cbc05a3c7b9ac548941c98cd81  libgomp/testsuite/libgomp.fortran/scan-2.f90
  fbdab6e5a5617405737d6de640e5197a  libgomp/testsuite/libgomp.fortran/scope-1.f90
  d5c0f2d60e8a68a314e661ccc5e4d638  libgomp/testsuite/libgomp.fortran/scope-2.f90
! 7c00379763031d9871323e9d20c3f71e  libgomp/testsuite/libgomp.fortran/self_maps.f90
  e4cf951d5826f38fd2445b2bd21a6f3b  libgomp/testsuite/libgomp.fortran/sharing1.f90
  fb3e4ec0015a50f8ddd3f6a1306e2627  libgomp/testsuite/libgomp.fortran/sharing2.f90
  4b323aab0234bc26e21f874065725efd  libgomp/testsuite/libgomp.fortran/simd1.f90
*************** eeec7e27fda7ab81ff9b8a0cc3565be4  libgom
*** 139539,139545 ****
  abbc97bdf2b7f6b7eb83b0ea35d12ca8  libgomp/testsuite/libgomp.fortran/target-enter-data-6.f90
  6ab97e695942e090864fc83282b49a44  libgomp/testsuite/libgomp.fortran/target-enter-data-7.f90
  d2f9dcb74c3f8c91ce46755504611660  libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90
! 4b32e60df4d9f68e1aefdd38f541c157  libgomp/testsuite/libgomp.fortran/target-firstprivate-1.f90
  1f145e3be28990a374e7117e351fb917  libgomp/testsuite/libgomp.fortran/target-firstprivate-2.f90
  92d67d046a52b255c5a4e9d08fe3f118  libgomp/testsuite/libgomp.fortran/target-firstprivate-3.f90
  6069ee87a3235563ba19c231c5d6c1e5  libgomp/testsuite/libgomp.fortran/target-has-device-addr-1.f90
--- 139643,139649 ----
  abbc97bdf2b7f6b7eb83b0ea35d12ca8  libgomp/testsuite/libgomp.fortran/target-enter-data-6.f90
  6ab97e695942e090864fc83282b49a44  libgomp/testsuite/libgomp.fortran/target-enter-data-7.f90
  d2f9dcb74c3f8c91ce46755504611660  libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90
! d8b9e56f2e45bc15ab1a122ae2e8f357  libgomp/testsuite/libgomp.fortran/target-firstprivate-1.f90
  1f145e3be28990a374e7117e351fb917  libgomp/testsuite/libgomp.fortran/target-firstprivate-2.f90
  92d67d046a52b255c5a4e9d08fe3f118  libgomp/testsuite/libgomp.fortran/target-firstprivate-3.f90
  6069ee87a3235563ba19c231c5d6c1e5  libgomp/testsuite/libgomp.fortran/target-has-device-addr-1.f90
*************** a9fb7025054b44d715c53f9df0e22afd  libgom
*** 139632,139638 ****
  176b01ed1aa80e482336a70a48b6c440  libgomp/testsuite/libgomp.fortran/tile-unroll-4.f90
  48a661d5fb49e8b4fcf66f025f784531  libgomp/testsuite/libgomp.fortran/udr1.f90
  5c5b279adcf502a31ec5869b8ff020b0  libgomp/testsuite/libgomp.fortran/udr10.f90
! 8e64a104830a0f1e4d7e2368862c91e1  libgomp/testsuite/libgomp.fortran/udr11.f90
  eb9a9af2826a48d830b935bea9c48e65  libgomp/testsuite/libgomp.fortran/udr12.f90
  55282d5ca931ce290aac95c2928712d9  libgomp/testsuite/libgomp.fortran/udr13.f90
  e68e14540cccf65cbeb790d8dab92592  libgomp/testsuite/libgomp.fortran/udr14.f90
--- 139736,139742 ----
  176b01ed1aa80e482336a70a48b6c440  libgomp/testsuite/libgomp.fortran/tile-unroll-4.f90
  48a661d5fb49e8b4fcf66f025f784531  libgomp/testsuite/libgomp.fortran/udr1.f90
  5c5b279adcf502a31ec5869b8ff020b0  libgomp/testsuite/libgomp.fortran/udr10.f90
! cc8707ea5a55b349099202afd3b8c856  libgomp/testsuite/libgomp.fortran/udr11.f90
  eb9a9af2826a48d830b935bea9c48e65  libgomp/testsuite/libgomp.fortran/udr12.f90
  55282d5ca931ce290aac95c2928712d9  libgomp/testsuite/libgomp.fortran/udr13.f90
  e68e14540cccf65cbeb790d8dab92592  libgomp/testsuite/libgomp.fortran/udr14.f90
*************** ec7578b439097f138537ceda021b5414  libgom
*** 139659,139679 ****
  913612500d63b7123cfc8155f8708ce4  libgomp/testsuite/libgomp.fortran/unroll-simd-1.f90
  fac06f18dd8712fb3271e7860be58526  libgomp/testsuite/libgomp.fortran/unroll-tile-1.f90
  49997e112adc8ebd77cd7a76a76d892d  libgomp/testsuite/libgomp.fortran/unroll-tile-2.f90
! 54228803a196ad0284ae69ea06360510  libgomp/testsuite/libgomp.fortran/use_device_addr-1.f90
! b1f5d4bd212151ec10ee5fcb2e86e8a9  libgomp/testsuite/libgomp.fortran/use_device_addr-2.f90
! 9161a2c67f2086d26842275e652c2d09  libgomp/testsuite/libgomp.fortran/use_device_addr-3.f90
! 0f0739055024a52f6c6062614fefcd20  libgomp/testsuite/libgomp.fortran/use_device_addr-4.f90
! d88ab0fbf766c009a5fcca0379d79fe6  libgomp/testsuite/libgomp.fortran/use_device_addr-5.f90
! 27c3a980a8e94305bd6a957c7ea5dbd8  libgomp/testsuite/libgomp.fortran/use_device_ptr-1.f90
! d58b22d6389008961e84f8a1b3d9a8f9  libgomp/testsuite/libgomp.fortran/use_device_ptr-3.f90
! 421b0a816a39ae625f4e8f4f91b3671d  libgomp/testsuite/libgomp.fortran/use_device_ptr-4.f90
! 5b0545422a5d32741adf1b28e189108a  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-1.f90
! 95257bb64bc7b70916e7cf5e4c13ac0a  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-2.f90
! 2b347c1c7f2cbe98905e1b48f453f08c  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90
  dc1df4b97d0fa5209eb509523fa08bfc  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-4.f90
  fd6becb20369d6ac5a1bacfc014b31a3  libgomp/testsuite/libgomp.fortran/use_intrinsic_1.f90
! 7a20912688877bc0ecca6ebe741d55f3  libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90
! 8187bb38cd9b950a649f25ea20977a3d  libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90
  fecda9fc3e70ac57c13ecf7a85196138  libgomp/testsuite/libgomp.fortran/vla1.f90
  4bd76ef74f55ed2027a8be5f22222133  libgomp/testsuite/libgomp.fortran/vla2.f90
  aadd57f9487c4584ba47a1bbdb07af7c  libgomp/testsuite/libgomp.fortran/vla3.f90
--- 139763,139784 ----
  913612500d63b7123cfc8155f8708ce4  libgomp/testsuite/libgomp.fortran/unroll-simd-1.f90
  fac06f18dd8712fb3271e7860be58526  libgomp/testsuite/libgomp.fortran/unroll-tile-1.f90
  49997e112adc8ebd77cd7a76a76d892d  libgomp/testsuite/libgomp.fortran/unroll-tile-2.f90
! 62079afb43af876e3d7efc5b7c4e4f74  libgomp/testsuite/libgomp.fortran/use_device_addr-1.f90
! c3306a43e196ac3643577db44b758334  libgomp/testsuite/libgomp.fortran/use_device_addr-2.f90
! 7c84891cdf7020576afb81fd4488d97f  libgomp/testsuite/libgomp.fortran/use_device_addr-3.f90
! 2b19fde819db6c2dfbcb007c7ea9a7ff  libgomp/testsuite/libgomp.fortran/use_device_addr-4.f90
! d91b73cecfa40719f59c3f52814cce5a  libgomp/testsuite/libgomp.fortran/use_device_addr-5.f90
! 19e6721dd79e44e68893364cb8201906  libgomp/testsuite/libgomp.fortran/use_device_ptr-1.f90
! 1d1c09904411e4b630f518a066694e34  libgomp/testsuite/libgomp.fortran/use_device_ptr-3.f90
! d55ddb65ae7cd2ad95a7446d45af7eb7  libgomp/testsuite/libgomp.fortran/use_device_ptr-4.f90
! ba23071854d45364a52aa56e0e3316ac  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-1.f90
! 5c405d9e23974845c48dc7d2f9caf732  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-2.f90
! 145271a42e3885d82155f89fbb8a1d67  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90
  dc1df4b97d0fa5209eb509523fa08bfc  libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-4.f90
  fd6becb20369d6ac5a1bacfc014b31a3  libgomp/testsuite/libgomp.fortran/use_intrinsic_1.f90
! 4b4761c07dd081ab36a01dfa8f710bf0  libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
! 9a2ba6cff64ca5bc6375ce44cf49a165  libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90
! 112d434e4f93bd46b5f504a2376b9129  libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90
  fecda9fc3e70ac57c13ecf7a85196138  libgomp/testsuite/libgomp.fortran/vla1.f90
  4bd76ef74f55ed2027a8be5f22222133  libgomp/testsuite/libgomp.fortran/vla2.f90
  aadd57f9487c4584ba47a1bbdb07af7c  libgomp/testsuite/libgomp.fortran/vla3.f90
*************** dc3b85e4d70a05254d93d5fa4c2d9996  libgom
*** 139685,139691 ****
  b9934c31f9524836ba1a35470a511bb3  libgomp/testsuite/libgomp.fortran/workshare1.f90
  bf94ef977afb5353c18948ce9e602bfa  libgomp/testsuite/libgomp.fortran/workshare2.f90
  5cbe5ce09b7be271cbfc863a87d14ce4  libgomp/testsuite/libgomp.graphite/bounds.c
! e7a61a11b74fb8e2e4d71f7a03078500  libgomp/testsuite/libgomp.graphite/force-parallel-1.c
  79fedad6d75bdc436c74c6ccabd1c317  libgomp/testsuite/libgomp.graphite/force-parallel-2.c
  7a00417999c02913b99a84c786868fd1  libgomp/testsuite/libgomp.graphite/force-parallel-3.c
  15a27db8e574f52b5f617f056c72aa78  libgomp/testsuite/libgomp.graphite/force-parallel-4.c
--- 139790,139796 ----
  b9934c31f9524836ba1a35470a511bb3  libgomp/testsuite/libgomp.fortran/workshare1.f90
  bf94ef977afb5353c18948ce9e602bfa  libgomp/testsuite/libgomp.fortran/workshare2.f90
  5cbe5ce09b7be271cbfc863a87d14ce4  libgomp/testsuite/libgomp.graphite/bounds.c
! 06ccf93d78beba03f87dacb2a3b75f53  libgomp/testsuite/libgomp.graphite/force-parallel-1.c
  79fedad6d75bdc436c74c6ccabd1c317  libgomp/testsuite/libgomp.graphite/force-parallel-2.c
  7a00417999c02913b99a84c786868fd1  libgomp/testsuite/libgomp.graphite/force-parallel-3.c
  15a27db8e574f52b5f617f056c72aa78  libgomp/testsuite/libgomp.graphite/force-parallel-4.c
*************** a9f926de80d09b0da7520672b009c751  libgom
*** 140148,140154 ****
  e65c44041c15898765a99f6782a191d2  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-type-1.c
  1adf3017b5fe6def74e1026289ff82b8  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c
  3df312778896ed29ec60eefae35ce701  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
! 740bb3c7370aed8a10c47e96dc522237  libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
  4210ba709794292b7c55787ddbfa572a  libgomp/testsuite/libgomp.oacc-c-c++-common/zero_length_subarrays.c
  2a6a62d82b16b3bd4b1ab343e02eaed3  libgomp/testsuite/libgomp.oacc-c/c.exp
  cbdcc7dbb1bbfcb008b972db87d6a771  libgomp/testsuite/libgomp.oacc-c/nested-function-1.c
--- 140253,140259 ----
  e65c44041c15898765a99f6782a191d2  libgomp/testsuite/libgomp.oacc-c-c++-common/vector-type-1.c
  1adf3017b5fe6def74e1026289ff82b8  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop-2.c
  3df312778896ed29ec60eefae35ce701  libgomp/testsuite/libgomp.oacc-c-c++-common/vprop.c
! 43188fab53292c75aaf3b00d92ff1d50  libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
  4210ba709794292b7c55787ddbfa572a  libgomp/testsuite/libgomp.oacc-c-c++-common/zero_length_subarrays.c
  2a6a62d82b16b3bd4b1ab343e02eaed3  libgomp/testsuite/libgomp.oacc-c/c.exp
  cbdcc7dbb1bbfcb008b972db87d6a771  libgomp/testsuite/libgomp.oacc-c/nested-function-1.c
*************** e52d95644dc6f186070f349a5903ca72  libibe
*** 141315,141321 ****
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  9ee73c41e33c5385829971172a184c87  libiberty/xstrndup.c
  264565e1673eec920dc95fb09d4605ea  libiberty/xvasprintf.c
! d20ff6ed86a70a08afab33963dcd0edc  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  ef89f818c0c39a850af7e33129d6ba50  libitm/Makefile.in
  354a4dc018f4a1bb610d11d1743d3cb1  libitm/aatree.cc
--- 141420,141426 ----
  6f774a92661ca4a067f1691a7925524b  libiberty/xstrerror.c
  9ee73c41e33c5385829971172a184c87  libiberty/xstrndup.c
  264565e1673eec920dc95fb09d4605ea  libiberty/xvasprintf.c
! 3de153aa9bce9658a2bb22f2368f982d  libitm/ChangeLog
  763fe82c2e5c5ae9547defb28107952a  libitm/Makefile.am
  ef89f818c0c39a850af7e33129d6ba50  libitm/Makefile.in
  354a4dc018f4a1bb610d11d1743d3cb1  libitm/aatree.cc
*************** b0ee2b3c660bca0be10d4d265b39721c  libitm
*** 141352,141358 ****
  f076bedbecf3ec0d62f0099122bfb58f  libitm/config/linux/sparc/futex_bits.h
  63e8dd4e7dbfef8c45cda6d9934d054f  libitm/config/linux/x86/futex_bits.h
  f306285d259eaf96e32faee0835e6bc0  libitm/config/linux/x86/tls.h
! 8ef81d13cc518dce479426aeecd226ef  libitm/config/loongarch/asm.h
  ab3414e82604f31286d990c8a88220fb  libitm/config/loongarch/sjlj.S
  f6fc4d93b33dbbb6b4160110d6f0b772  libitm/config/loongarch/target.h
  f0f0f24d5cb4dc1eb287a4e62d273847  libitm/config/posix/rwlock.cc
--- 141457,141463 ----
  f076bedbecf3ec0d62f0099122bfb58f  libitm/config/linux/sparc/futex_bits.h
  63e8dd4e7dbfef8c45cda6d9934d054f  libitm/config/linux/x86/futex_bits.h
  f306285d259eaf96e32faee0835e6bc0  libitm/config/linux/x86/tls.h
! 4e4ba0cbcc58e3852cf097a0e97c209f  libitm/config/loongarch/asm.h
  ab3414e82604f31286d990c8a88220fb  libitm/config/loongarch/sjlj.S
  f6fc4d93b33dbbb6b4160110d6f0b772  libitm/config/loongarch/target.h
  f0f0f24d5cb4dc1eb287a4e62d273847  libitm/config/posix/rwlock.cc
*************** a50aaef4b803051d8c8de65277787205  libobj
*** 141481,141494 ****
  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
--- 141586,141599 ----
  1529c9317f23aa02b19c43cda7528d66  libobjc/selector.c
  e48bb3c47cdcb1bfade3ef0007f5a149  libobjc/sendmsg.c
  06be35842165837797461a0db264aeea  libobjc/thr.c
! 449e5e78af96ba82a8401075986fee05  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
! 96867e1d491e65b3b54997c68cfc0ffa  libphobos/configure
  122f630ac036808d09fb88947d310aff  libphobos/configure.ac
  782c279b3071b4e4641bddc2b665efbd  libphobos/configure.tgt
  63ec818a02a0e071420a85b12fbfd563  libphobos/d_rules.am
*************** b44590c842b754fede38a9a70a5b2d53  libpho
*** 142073,142079 ****
  cbef578492ab132e253c07ad83e6ee8a  libphobos/m4/druntime.m4
  2157f801b8e7e6a834559bcfe402c105  libphobos/m4/druntime/cpu.m4
  85906ebe53a95f2ccaa626b006ea0256  libphobos/m4/druntime/libraries.m4
! 5bcc0c9b5219a91f2eceeccc74630397  libphobos/m4/druntime/os.m4
  be2340569194e9c072c40fc94eab3483  libphobos/m4/gcc_support.m4
  c49ab40607849fa623787878420e7207  libphobos/m4/gdc.m4
  458abf211dc60540bf28a9257d4bd4e5  libphobos/m4/libtool.m4
--- 142178,142184 ----
  cbef578492ab132e253c07ad83e6ee8a  libphobos/m4/druntime.m4
  2157f801b8e7e6a834559bcfe402c105  libphobos/m4/druntime/cpu.m4
  85906ebe53a95f2ccaa626b006ea0256  libphobos/m4/druntime/libraries.m4
! 9e6660cf64066a1db6917b8b90ffe9c8  libphobos/m4/druntime/os.m4
  be2340569194e9c072c40fc94eab3483  libphobos/m4/gcc_support.m4
  c49ab40607849fa623787878420e7207  libphobos/m4/gdc.m4
  458abf211dc60540bf28a9257d4bd4e5  libphobos/m4/libtool.m4
*************** a73fdec6746eaad8ccdc8e8403aac562  libqua
*** 142615,142624 ****
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! 3619205a8df2bf6440bd437f68f17e8a  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
! bb311178c14b9f8eae7c689d13438244  libsanitizer/LOCAL_PATCHES
  77c8af4bb646849f05ab0cd2380ea36c  libsanitizer/MERGE
  843b9a7b22b34445ab6cc181f7afd30b  libsanitizer/Makefile.am
  039dcea53673bf748693f1a5817c9880  libsanitizer/Makefile.in
--- 142720,142729 ----
  af84fa5118f4adec8393614994e1c4d6  libquadmath/strtod/strtoflt128.c
  d15a18f7c46ba2add6148edc5b7563c0  libquadmath/strtod/tens_in_limb.c
  12c73a846f7668d29de720bd79502bef  libquadmath/update-quadmath.py
! 9be202da7c6b8b07b653ef1ad39fedc9  libsanitizer/ChangeLog
  63916ba64a3cfa7ce2809fb46ab38597  libsanitizer/HOWTO_MERGE
  0249c37748936faf5b1efd5789587909  libsanitizer/LICENSE.TXT
! f59c588c924fa6a8fdf5b39671ce29c5  libsanitizer/LOCAL_PATCHES
  77c8af4bb646849f05ab0cd2380ea36c  libsanitizer/MERGE
  843b9a7b22b34445ab6cc181f7afd30b  libsanitizer/Makefile.am
  039dcea53673bf748693f1a5817c9880  libsanitizer/Makefile.in
*************** ca9cc861399b488409ed41ba77d7607f  libsan
*** 142933,142939 ****
  6a13c5d77fcf1ab15a92498a30bfc5c2  libsanitizer/sanitizer_common/sanitizer_quarantine.h
  7991d1d21190a84ae23b6795d92b8228  libsanitizer/sanitizer_common/sanitizer_range.cpp
  63beefad8f822d08911997ce177551c3  libsanitizer/sanitizer_common/sanitizer_range.h
! 88857b15b3de420a2e77d990e0631771  libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h
  790117d4c85c98c499151ad830f99a49  libsanitizer/sanitizer_common/sanitizer_report_decorator.h
  490e9e2e338b8cd9b363bf836a1362d7  libsanitizer/sanitizer_common/sanitizer_ring_buffer.h
  78c6484faf368ee653b5f05b5d751999  libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc
--- 143038,143044 ----
  6a13c5d77fcf1ab15a92498a30bfc5c2  libsanitizer/sanitizer_common/sanitizer_quarantine.h
  7991d1d21190a84ae23b6795d92b8228  libsanitizer/sanitizer_common/sanitizer_range.cpp
  63beefad8f822d08911997ce177551c3  libsanitizer/sanitizer_common/sanitizer_range.h
! ed727af3ec328732af654414e0c2ce8c  libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h
  790117d4c85c98c499151ad830f99a49  libsanitizer/sanitizer_common/sanitizer_report_decorator.h
  490e9e2e338b8cd9b363bf836a1362d7  libsanitizer/sanitizer_common/sanitizer_ring_buffer.h
  78c6484faf368ee653b5f05b5d751999  libsanitizer/sanitizer_common/sanitizer_signal_interceptors.inc
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 143141,143147 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 6bbbc903fd4a952d0aed358aff9e89aa  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 143246,143252 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 30c65053f82c46a2d45fc72d62f8a24f  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a94321c8d0dbbc71741ebf0f1cc9828c  libstd
*** 143172,143178 ****
  b569b721263ae74c6a8e285903fb9906  libstdc++-v3/Makefile.am
  4f2ea793c6b34934133e8e7e01601c7e  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 33204252935e2742f864b4e7be53dca3  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  9e25b4e524e0d639f272a9e96bab0ce3  libstdc++-v3/config/abi/compatibility.h
--- 143277,143283 ----
  b569b721263ae74c6a8e285903fb9906  libstdc++-v3/Makefile.am
  4f2ea793c6b34934133e8e7e01601c7e  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 6c13076005cad5e11e17baae6004b3b4  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  9e25b4e524e0d639f272a9e96bab0ce3  libstdc++-v3/config/abi/compatibility.h
*************** abc6f4755fae8c6e8f45ce5fee798654  libstd
*** 143207,143213 ****
  6c165e7a2d80e986556ae6dc2bad3857  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  2abf821a3eaae508ba83c8dfaa496ea4  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! 7b2afb8285524c178577de89221f3763  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
  f48bfa11a1f6ebbba6b09b9618c997f2  libstdc++-v3/config/allocator/malloc_allocator_base.h
  229729de73da6f9ba6e1bf4c48f51f24  libstdc++-v3/config/allocator/new_allocator_base.h
--- 143312,143318 ----
  6c165e7a2d80e986556ae6dc2bad3857  libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
  5c4c38aeca254313c616b84337c937c3  libstdc++-v3/config/abi/pre/float128.ver
  2abf821a3eaae508ba83c8dfaa496ea4  libstdc++-v3/config/abi/pre/gnu-versioned-namespace.ver
! 72117273fe8abb9f56606e583c702504  libstdc++-v3/config/abi/pre/gnu.ver
  b01f8da8f4373070847fe317fe8a546e  libstdc++-v3/config/abi/pre/none.ver
  f48bfa11a1f6ebbba6b09b9618c997f2  libstdc++-v3/config/allocator/malloc_allocator_base.h
  229729de73da6f9ba6e1bf4c48f51f24  libstdc++-v3/config/allocator/new_allocator_base.h
*************** ed199f6700a016816d625b286bf25ead  libstd
*** 143364,143370 ****
  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
! c0da6f8e6b96031e982a6be1b63ad23c  libstdc++-v3/configure
  d1b8e66f3a21a1e0ec3fdd829dea566c  libstdc++-v3/configure.ac
  bfcbc1fdbf99aa57e07470ca81fd7627  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
--- 143469,143475 ----
  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
! 542404ba22ae9e5e3d2a0de53bb8a324  libstdc++-v3/configure
  d1b8e66f3a21a1e0ec3fdd829dea566c  libstdc++-v3/configure.ac
  bfcbc1fdbf99aa57e07470ca81fd7627  libstdc++-v3/configure.host
  450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
*************** bc0412a9556e7ed39afe5103b73f1f26  libstd
*** 143800,143807 ****
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! 3ab39089ede995cb1febae4fe7522ce8  libstdc++-v3/include/Makefile.am
! ba9b9411c240a6b808a7f157890fd9c4  libstdc++-v3/include/Makefile.in
  9909a8468983e231e92c9e286c9765fb  libstdc++-v3/include/backward/auto_ptr.h
  83254dbbadebf6a7aeb58f3cdbf117e9  libstdc++-v3/include/backward/backward_warning.h
  38985095b8ea422bf8bfa31ec65d803c  libstdc++-v3/include/backward/binders.h
--- 143905,143912 ----
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
! bb893c00c400698d7baed37d3da216c6  libstdc++-v3/include/Makefile.am
! a04390416b071401200d585473d823f2  libstdc++-v3/include/Makefile.in
  9909a8468983e231e92c9e286c9765fb  libstdc++-v3/include/backward/auto_ptr.h
  83254dbbadebf6a7aeb58f3cdbf117e9  libstdc++-v3/include/backward/backward_warning.h
  38985095b8ea422bf8bfa31ec65d803c  libstdc++-v3/include/backward/binders.h
*************** d18c16b3c9c3ab2e7d487de90ec27d17  libstd
*** 143819,143825 ****
  7c88fbee1dffec663e740720882b5344  libstdc++-v3/include/bits/atomic_futex.h
  bbb2e6df693b76b595fa2fb59b423b42  libstdc++-v3/include/bits/atomic_timed_wait.h
  40e1eb93e4f9a6472b74fe13470d2ef5  libstdc++-v3/include/bits/atomic_wait.h
! 3f7a7ce2588d1e8ea4f282e9f41ac292  libstdc++-v3/include/bits/basic_ios.h
  c54b27ddff7542cc6baa362f62fb5778  libstdc++-v3/include/bits/basic_ios.tcc
  7d529582d267ef7674bba74d215574ce  libstdc++-v3/include/bits/basic_string.h
  ae1074cab6b583707efdb40bf0099caf  libstdc++-v3/include/bits/basic_string.tcc
--- 143924,143930 ----
  7c88fbee1dffec663e740720882b5344  libstdc++-v3/include/bits/atomic_futex.h
  bbb2e6df693b76b595fa2fb59b423b42  libstdc++-v3/include/bits/atomic_timed_wait.h
  40e1eb93e4f9a6472b74fe13470d2ef5  libstdc++-v3/include/bits/atomic_wait.h
! bac46e97b2ed17ce3c0efd64e0c9b864  libstdc++-v3/include/bits/basic_ios.h
  c54b27ddff7542cc6baa362f62fb5778  libstdc++-v3/include/bits/basic_ios.tcc
  7d529582d267ef7674bba74d215574ce  libstdc++-v3/include/bits/basic_string.h
  ae1074cab6b583707efdb40bf0099caf  libstdc++-v3/include/bits/basic_string.tcc
*************** ab10cb2f08652ed880121613c166fb90  libstd
*** 143840,143846 ****
  be08582d1795753f6e8fb613a7ec9fe0  libstdc++-v3/include/bits/elements_of.h
  397af990234a7f718cce0f629f7d8b13  libstdc++-v3/include/bits/enable_special_members.h
  b194eb42ed4e3bc3a3f65805561d45c8  libstdc++-v3/include/bits/erase_if.h
! ad6b1a9496bacef0b6f949164422ab8d  libstdc++-v3/include/bits/formatfwd.h
  0b4a32caac3b12dee4bd64701e0ee0b5  libstdc++-v3/include/bits/forward_list.h
  8123372b7074a636b749e1e60f9f2b81  libstdc++-v3/include/bits/forward_list.tcc
  547631f602a86bc167ed71b762904cd9  libstdc++-v3/include/bits/fs_dir.h
--- 143945,143951 ----
  be08582d1795753f6e8fb613a7ec9fe0  libstdc++-v3/include/bits/elements_of.h
  397af990234a7f718cce0f629f7d8b13  libstdc++-v3/include/bits/enable_special_members.h
  b194eb42ed4e3bc3a3f65805561d45c8  libstdc++-v3/include/bits/erase_if.h
! b188cffee149fcdafb414716002bc90b  libstdc++-v3/include/bits/formatfwd.h
  0b4a32caac3b12dee4bd64701e0ee0b5  libstdc++-v3/include/bits/forward_list.h
  8123372b7074a636b749e1e60f9f2b81  libstdc++-v3/include/bits/forward_list.tcc
  547631f602a86bc167ed71b762904cd9  libstdc++-v3/include/bits/fs_dir.h
*************** b13fecc1efb3b85dacbed61c6d2a7eed  libstd
*** 143849,143869 ****
  5fa932fcea9eb5ed9e3683af8d5e9276  libstdc++-v3/include/bits/fs_path.h
  b3da24b61a3e8219dde982b2734707ec  libstdc++-v3/include/bits/fstream.tcc
  66abab33b154fe334e91c3ed03ed17ce  libstdc++-v3/include/bits/funcref_impl.h
! bda3ca60f2214f1bd6656e6612aff428  libstdc++-v3/include/bits/functexcept.h
  68bc2b242e62bd27a00ee3f202c736de  libstdc++-v3/include/bits/functional_hash.h
  3283c5ed367802f57dec4ff2994a8f85  libstdc++-v3/include/bits/funcwrap.h
  f656180781457f5f36a26b5902da4b6f  libstdc++-v3/include/bits/gslice.h
  a94b98a38c3eb27aa6644a5fb468c9de  libstdc++-v3/include/bits/gslice_array.h
  bd1878ee12df5790539afd0dae94ae20  libstdc++-v3/include/bits/hashtable.h
! bafd340e02d232fc7ced1eb5f68967ce  libstdc++-v3/include/bits/hashtable_policy.h
  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
! 07d6a764dc4604a32ea343700b3a5a95  libstdc++-v3/include/bits/locale_classes.h
  4c9c92e77c3450c6e65949fa769d4f93  libstdc++-v3/include/bits/locale_classes.tcc
  8f509f8144d2597f255993c82c206b33  libstdc++-v3/include/bits/locale_conv.h
  d5313190529dc17f5c1b224649a2d12c  libstdc++-v3/include/bits/locale_facets.h
--- 143954,143975 ----
  5fa932fcea9eb5ed9e3683af8d5e9276  libstdc++-v3/include/bits/fs_path.h
  b3da24b61a3e8219dde982b2734707ec  libstdc++-v3/include/bits/fstream.tcc
  66abab33b154fe334e91c3ed03ed17ce  libstdc++-v3/include/bits/funcref_impl.h
! ccfbc99bf41b28f376143acb91ed77e5  libstdc++-v3/include/bits/functexcept.h
  68bc2b242e62bd27a00ee3f202c736de  libstdc++-v3/include/bits/functional_hash.h
  3283c5ed367802f57dec4ff2994a8f85  libstdc++-v3/include/bits/funcwrap.h
  f656180781457f5f36a26b5902da4b6f  libstdc++-v3/include/bits/gslice.h
  a94b98a38c3eb27aa6644a5fb468c9de  libstdc++-v3/include/bits/gslice_array.h
  bd1878ee12df5790539afd0dae94ae20  libstdc++-v3/include/bits/hashtable.h
! 331b9b3b88ea29edafe003e02c87f6f8  libstdc++-v3/include/bits/hashtable_policy.h
  95eb0b92d5c9a8ddf313e412fee97770  libstdc++-v3/include/bits/indirect.h
  473034b12d8308be48d4a3b85fe19d83  libstdc++-v3/include/bits/indirect_array.h
+ 51e942182e104f3f0f5b87448de7a056  libstdc++-v3/include/bits/intcmp.h
  ab0c92c57c5ec5cb9d0bfb3a7963d00c  libstdc++-v3/include/bits/invoke.h
  24c85a910194edab3f4da441514c12c8  libstdc++-v3/include/bits/ios_base.h
  2bc5cac03f5593d9be1d3d99b4b8f3b3  libstdc++-v3/include/bits/istream.tcc
! 4cbb1c1d0664e43f71e22074bbdca279  libstdc++-v3/include/bits/iterator_concepts.h
  141c7da3c057e3f798bef5a54873d5cc  libstdc++-v3/include/bits/list.tcc
! 46f89da58aec6091766f92bb05f23c5c  libstdc++-v3/include/bits/locale_classes.h
  4c9c92e77c3450c6e65949fa769d4f93  libstdc++-v3/include/bits/locale_classes.tcc
  8f509f8144d2597f255993c82c206b33  libstdc++-v3/include/bits/locale_conv.h
  d5313190529dc17f5c1b224649a2d12c  libstdc++-v3/include/bits/locale_facets.h
*************** d5313190529dc17f5c1b224649a2d12c  libstd
*** 143872,143884 ****
  9e782e5da4039aa3230bb96c97245039  libstdc++-v3/include/bits/locale_facets_nonio.tcc
  1d2095e2488ff25b060768c176bc3199  libstdc++-v3/include/bits/localefwd.h
  ebe0e043997d2c8b674df27da18dc48c  libstdc++-v3/include/bits/mask_array.h
! 2b70a35d8ca01173292d1c7142b5c666  libstdc++-v3/include/bits/max_size_type.h
! 9eff13bd13b461742ae4d1e12f0cce28  libstdc++-v3/include/bits/memory_resource.h
  27bdede74800b12180665889a05cca6b  libstdc++-v3/include/bits/memoryfwd.h
  3cdf6345e89c49a55bd7c9be035d3729  libstdc++-v3/include/bits/mofunc_impl.h
  6ac85b21a9fb05014efe9345967c51b4  libstdc++-v3/include/bits/monostate.h
  9031e8dd93bc2fbebf995d9a7eb28647  libstdc++-v3/include/bits/move.h
! 46c2f3b679b1978ddb4dff0bf8b97610  libstdc++-v3/include/bits/new_allocator.h
  f0db6753fd67e8ef172c6851da248f62  libstdc++-v3/include/bits/node_handle.h
  3092071ce3fbded00e007d2833fcfcae  libstdc++-v3/include/bits/ostream.h
  6a70bf77d2af097179dfd48fd590bcfc  libstdc++-v3/include/bits/ostream.tcc
--- 143978,143992 ----
  9e782e5da4039aa3230bb96c97245039  libstdc++-v3/include/bits/locale_facets_nonio.tcc
  1d2095e2488ff25b060768c176bc3199  libstdc++-v3/include/bits/localefwd.h
  ebe0e043997d2c8b674df27da18dc48c  libstdc++-v3/include/bits/mask_array.h
! e144065d0f6c2e949467bb7d4715a0e1  libstdc++-v3/include/bits/max_size_type.h
! 83796ad5e50c66ad29c5de518186e580  libstdc++-v3/include/bits/memory_resource.h
  27bdede74800b12180665889a05cca6b  libstdc++-v3/include/bits/memoryfwd.h
  3cdf6345e89c49a55bd7c9be035d3729  libstdc++-v3/include/bits/mofunc_impl.h
  6ac85b21a9fb05014efe9345967c51b4  libstdc++-v3/include/bits/monostate.h
  9031e8dd93bc2fbebf995d9a7eb28647  libstdc++-v3/include/bits/move.h
! 8898bda7668c94d855ed28e77f735e48  libstdc++-v3/include/bits/new_allocator.h
! e50567d989b276585635745f6cbebe60  libstdc++-v3/include/bits/new_except.h
! bb05e6b3edd6125754d5f4eb32a8a632  libstdc++-v3/include/bits/new_throw.h
  f0db6753fd67e8ef172c6851da248f62  libstdc++-v3/include/bits/node_handle.h
  3092071ce3fbded00e007d2833fcfcae  libstdc++-v3/include/bits/ostream.h
  6a70bf77d2af097179dfd48fd590bcfc  libstdc++-v3/include/bits/ostream.tcc
*************** cffd73f057e9c37be8d8f13e0e97c5c0  libstd
*** 143912,143931 ****
  15dd5944c7cd223ab035591c92c65fc5  libstdc++-v3/include/bits/regex_scanner.h
  27e294ed24336b703f9fb025b6d69f51  libstdc++-v3/include/bits/regex_scanner.tcc
  22a9676313472917eaaccc27ddfb10f4  libstdc++-v3/include/bits/requires_hosted.h
! 29d35f9c7457aa87bf544a27b2663614  libstdc++-v3/include/bits/sat_arith.h
  0323932b17809619626eeceaf3ad375f  libstdc++-v3/include/bits/semaphore_base.h
  ec9967579f5a56f1f687a745536eafea  libstdc++-v3/include/bits/shared_ptr.h
  1d175c4fafbb8ff4655e2de7f60b5ae7  libstdc++-v3/include/bits/shared_ptr_atomic.h
  e7a0f2e6e40ce70d795ab8cb06878277  libstdc++-v3/include/bits/shared_ptr_base.h
  d050e025f60dc3eef08990d737b75085  libstdc++-v3/include/bits/slice_array.h
! 67cd790795bafd7c20715ef4d1f9d2d3  libstdc++-v3/include/bits/specfun.h
  de3723b929f14af1731389010c14893b  libstdc++-v3/include/bits/sstream.tcc
  59b16730440e89a81d7071a74053fed6  libstdc++-v3/include/bits/std_abs.h
  c35a5da0369f3af2e9e202c9c8510914  libstdc++-v3/include/bits/std_function.h
  f5b75c431f2a636db9c6051ad3121ae9  libstdc++-v3/include/bits/std_mutex.h
  bb19c550085b43f6251959e05791f4c6  libstdc++-v3/include/bits/std_thread.h
  de56251aaccb7f2a48169f9f6b369cf6  libstdc++-v3/include/bits/stl_algo.h
! 6a79779bd47cc3d33e08e0ddd282775e  libstdc++-v3/include/bits/stl_algobase.h
  50378fb402a4f63ad663a2763f5cd08a  libstdc++-v3/include/bits/stl_bvector.h
  8abaf8c2264c2af42f3e3ac2a8bb1941  libstdc++-v3/include/bits/stl_construct.h
  ca1849d33a84098658d3310146abebf0  libstdc++-v3/include/bits/stl_deque.h
--- 144020,144043 ----
  15dd5944c7cd223ab035591c92c65fc5  libstdc++-v3/include/bits/regex_scanner.h
  27e294ed24336b703f9fb025b6d69f51  libstdc++-v3/include/bits/regex_scanner.tcc
  22a9676313472917eaaccc27ddfb10f4  libstdc++-v3/include/bits/requires_hosted.h
! 37bc69a700bfdf4f91c9ebd678231ea8  libstdc++-v3/include/bits/sat_arith.h
  0323932b17809619626eeceaf3ad375f  libstdc++-v3/include/bits/semaphore_base.h
  ec9967579f5a56f1f687a745536eafea  libstdc++-v3/include/bits/shared_ptr.h
  1d175c4fafbb8ff4655e2de7f60b5ae7  libstdc++-v3/include/bits/shared_ptr_atomic.h
  e7a0f2e6e40ce70d795ab8cb06878277  libstdc++-v3/include/bits/shared_ptr_base.h
  d050e025f60dc3eef08990d737b75085  libstdc++-v3/include/bits/slice_array.h
! 1aed7661ceda20bd5c9830dbe12ceef8  libstdc++-v3/include/bits/specfun.h
  de3723b929f14af1731389010c14893b  libstdc++-v3/include/bits/sstream.tcc
  59b16730440e89a81d7071a74053fed6  libstdc++-v3/include/bits/std_abs.h
  c35a5da0369f3af2e9e202c9c8510914  libstdc++-v3/include/bits/std_function.h
  f5b75c431f2a636db9c6051ad3121ae9  libstdc++-v3/include/bits/std_mutex.h
  bb19c550085b43f6251959e05791f4c6  libstdc++-v3/include/bits/std_thread.h
+ 2cf0d65ec93dd4cd116e86e1a3d2f955  libstdc++-v3/include/bits/stdexcept_except.h
+ 76d7a6303d5a8566aefdb4f4de3d3935  libstdc++-v3/include/bits/stdexcept_throw.h
+ 366b7eaf3d477f3a3b8bad91c143ab2c  libstdc++-v3/include/bits/stdexcept_throwdef.h
+ f33e4980fe75fd40c1f3d234474f6fab  libstdc++-v3/include/bits/stdexcept_throwfwd.h
  de56251aaccb7f2a48169f9f6b369cf6  libstdc++-v3/include/bits/stl_algo.h
! 64c183f3d93df5d0d4a6b887dc9205b1  libstdc++-v3/include/bits/stl_algobase.h
  50378fb402a4f63ad663a2763f5cd08a  libstdc++-v3/include/bits/stl_bvector.h
  8abaf8c2264c2af42f3e3ac2a8bb1941  libstdc++-v3/include/bits/stl_construct.h
  ca1849d33a84098658d3310146abebf0  libstdc++-v3/include/bits/stl_deque.h
*************** ce452f748be2c455c1ac0f358be411e7  libstd
*** 143935,143941 ****
  8985b7e75e42ac4e5951cc4e88df3455  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  54bf96df9d7600b71ab8d00f28c7e6de  libstdc++-v3/include/bits/stl_iterator_base_types.h
  4f93444bfce714698d1c4bd36a134164  libstdc++-v3/include/bits/stl_list.h
! 557f6acdb64d284dc278855f99d7d509  libstdc++-v3/include/bits/stl_map.h
  de62a761b87657887f85fa1883261b25  libstdc++-v3/include/bits/stl_multimap.h
  55e5e6ba11e50131e5c545eda53371c7  libstdc++-v3/include/bits/stl_multiset.h
  480b44132613538ac869874bf3fc4e45  libstdc++-v3/include/bits/stl_numeric.h
--- 144047,144053 ----
  8985b7e75e42ac4e5951cc4e88df3455  libstdc++-v3/include/bits/stl_iterator_base_funcs.h
  54bf96df9d7600b71ab8d00f28c7e6de  libstdc++-v3/include/bits/stl_iterator_base_types.h
  4f93444bfce714698d1c4bd36a134164  libstdc++-v3/include/bits/stl_list.h
! f0b5fa38097d4f2d3e8f4137582b16a3  libstdc++-v3/include/bits/stl_map.h
  de62a761b87657887f85fa1883261b25  libstdc++-v3/include/bits/stl_multimap.h
  55e5e6ba11e50131e5c545eda53371c7  libstdc++-v3/include/bits/stl_multiset.h
  480b44132613538ac869874bf3fc4e45  libstdc++-v3/include/bits/stl_numeric.h
*************** c48928d63732da42056105c33cf860ff  libstd
*** 143948,143954 ****
  e77200e337d1f4695ed04b8f6fd9991d  libstdc++-v3/include/bits/stl_tempbuf.h
  ac768cd1868664a11e86594d35aa3270  libstdc++-v3/include/bits/stl_tree.h
  acafb6ad2e0035c5b84058721e364dca  libstdc++-v3/include/bits/stl_uninitialized.h
! a289051282846bf52bb1917bcbbf3673  libstdc++-v3/include/bits/stl_vector.h
  c021eea8ffb782c5cae76e39deaa7369  libstdc++-v3/include/bits/stream_iterator.h
  69fecd7181ec71c850dba6e19cf9a58c  libstdc++-v3/include/bits/streambuf.tcc
  512415517592a497decfef44b9a855e2  libstdc++-v3/include/bits/streambuf_iterator.h
--- 144060,144066 ----
  e77200e337d1f4695ed04b8f6fd9991d  libstdc++-v3/include/bits/stl_tempbuf.h
  ac768cd1868664a11e86594d35aa3270  libstdc++-v3/include/bits/stl_tree.h
  acafb6ad2e0035c5b84058721e364dca  libstdc++-v3/include/bits/stl_uninitialized.h
! 3d69e173970f30161e10fefe302d77b3  libstdc++-v3/include/bits/stl_vector.h
  c021eea8ffb782c5cae76e39deaa7369  libstdc++-v3/include/bits/stream_iterator.h
  69fecd7181ec71c850dba6e19cf9a58c  libstdc++-v3/include/bits/streambuf.tcc
  512415517592a497decfef44b9a855e2  libstdc++-v3/include/bits/streambuf_iterator.h
*************** f82756dba1eb6b3ea0ca4d3ed0da3773  libstd
*** 143971,143978 ****
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  6adf2ccea897e9d5fc8e7650eceac96f  libstdc++-v3/include/bits/vector.tcc
! d6fb199ec0d88c204f46caed5f3b61ec  libstdc++-v3/include/bits/version.def
! c640b4171ad1b53f1f0ebf6115ff2886  libstdc++-v3/include/bits/version.h
  602b081d70553843ef4511ca8ec803c9  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
--- 144083,144090 ----
  3ddbcccf58411251c2825ae41b697844  libstdc++-v3/include/bits/valarray_array.tcc
  a4c99020fc6d28e94d24a3f60a71b6ec  libstdc++-v3/include/bits/valarray_before.h
  6adf2ccea897e9d5fc8e7650eceac96f  libstdc++-v3/include/bits/vector.tcc
! b6c5eab1d9a91685768704b109339aaf  libstdc++-v3/include/bits/version.def
! 5c4dd8cef7b06a6966612af388c91e64  libstdc++-v3/include/bits/version.h
  602b081d70553843ef4511ca8ec803c9  libstdc++-v3/include/bits/version.tpl
  6ccd70c0c36dd38ba559c1fc5a05fbd0  libstdc++-v3/include/c/cassert
  c31b54f25b2f8c7ca3ca3eec930d4e1d  libstdc++-v3/include/c/cctype
*************** ba651830ef81cb6553fde41b9364bf09  libstd
*** 144010,144016 ****
  e8f0a5b02e79903187f6f348af2a2914  libstdc++-v3/include/c_compatibility/stdatomic.h
  c59b5e0eca126fcdb5d60553d7306e06  libstdc++-v3/include/c_compatibility/stdbit.h
  bd4f9cf4d767abec63404e4abde2e546  libstdc++-v3/include/c_compatibility/stdbool.h
! fca90211dcbb917c2de0be1f5c2aafb9  libstdc++-v3/include/c_compatibility/stdckdint.h
  14c6a4cffa1b2fea2e123d46e682c66c  libstdc++-v3/include/c_compatibility/stddef.h
  60d4a67454c28e4a3cf6d5ec2a8ea211  libstdc++-v3/include/c_compatibility/stdint.h
  81ae737e201a48c65603b147fcf85175  libstdc++-v3/include/c_compatibility/stdio.h
--- 144122,144128 ----
  e8f0a5b02e79903187f6f348af2a2914  libstdc++-v3/include/c_compatibility/stdatomic.h
  c59b5e0eca126fcdb5d60553d7306e06  libstdc++-v3/include/c_compatibility/stdbit.h
  bd4f9cf4d767abec63404e4abde2e546  libstdc++-v3/include/c_compatibility/stdbool.h
! d5222c91c34206ac7e1ca63d61174c41  libstdc++-v3/include/c_compatibility/stdckdint.h
  14c6a4cffa1b2fea2e123d46e682c66c  libstdc++-v3/include/c_compatibility/stddef.h
  60d4a67454c28e4a3cf6d5ec2a8ea211  libstdc++-v3/include/c_compatibility/stdint.h
  81ae737e201a48c65603b147fcf85175  libstdc++-v3/include/c_compatibility/stdio.h
*************** c633b09fdeebbc35c76b0c77186d5f3a  libstd
*** 144144,144150 ****
  244e2d1cb347f552f0c7c0e4e184997e  libstdc++-v3/include/experimental/net
  1cfd73441f6f5cbb7a65e38a9dff1454  libstdc++-v3/include/experimental/netfwd
  d0e6e52adce13e01e2d497561cb6eeb4  libstdc++-v3/include/experimental/numeric
! 9fdec753f397579b6b388f6efa2287cf  libstdc++-v3/include/experimental/optional
  63fb9a7c3f51e5ad8baa438388fec030  libstdc++-v3/include/experimental/propagate_const
  bcdf1b028ed797ae5718ba9e43bb63a9  libstdc++-v3/include/experimental/random
  d535f15e721c8bd249c6f6f8171e3d9f  libstdc++-v3/include/experimental/ratio
--- 144256,144262 ----
  244e2d1cb347f552f0c7c0e4e184997e  libstdc++-v3/include/experimental/net
  1cfd73441f6f5cbb7a65e38a9dff1454  libstdc++-v3/include/experimental/netfwd
  d0e6e52adce13e01e2d497561cb6eeb4  libstdc++-v3/include/experimental/numeric
! 84ec4dc57451d3e009224ccdcbfd6e00  libstdc++-v3/include/experimental/optional
  63fb9a7c3f51e5ad8baa438388fec030  libstdc++-v3/include/experimental/propagate_const
  bcdf1b028ed797ae5718ba9e43bb63a9  libstdc++-v3/include/experimental/random
  d535f15e721c8bd249c6f6f8171e3d9f  libstdc++-v3/include/experimental/ratio
*************** faf9f2ab717f81b1e1f120be7de31c23  libstd
*** 144169,144190 ****
  1e85d61b1ab664fe9e83e4d05536cf0c  libstdc++-v3/include/ext/aligned_buffer.h
  b538cf34d296f3161c57558eea3bca8b  libstdc++-v3/include/ext/alloc_traits.h
  75753be7d2a92c5ee7c1c4025bff2523  libstdc++-v3/include/ext/atomicity.h
! cd7c7fb3fb3d1f59882fb99a31eee718  libstdc++-v3/include/ext/bitmap_allocator.h
  cc0f2a5daeafb6e08b62720e44d9bd80  libstdc++-v3/include/ext/cast.h
  9543d5277e2a8ea51632d885f21ed4fa  libstdc++-v3/include/ext/cmath
  a18f3d9fdb753daa4f7ac1d8a2583a14  libstdc++-v3/include/ext/codecvt_specializations.h
! 7eb73f693c5d4467e38c45c9b994f1b6  libstdc++-v3/include/ext/concurrence.h
! b3e9b1a358d402d9bf3410c77acb634e  libstdc++-v3/include/ext/debug_allocator.h
  9cc2cde7a450b1a03f1b446f2bfd31ec  libstdc++-v3/include/ext/enc_filebuf.h
  8fc0b02ab84277ebf33823eedf5a0d4e  libstdc++-v3/include/ext/extptr_allocator.h
  0b5a8fc99466d7584034cb34e91edba9  libstdc++-v3/include/ext/functional
  a9710d6f73efed36ad5a227b51c4c339  libstdc++-v3/include/ext/iterator
! 84baebddebae5dbb43061f24adc09bad  libstdc++-v3/include/ext/malloc_allocator.h
  cfa37bd17a540b520d298dbe87c6ed0c  libstdc++-v3/include/ext/memory
! 2b7e1dbda06aa7c4d27af45cd6f54001  libstdc++-v3/include/ext/mt_allocator.h
  a4387732ff6f5fe0fd6bc87c3b3fa197  libstdc++-v3/include/ext/new_allocator.h
  1fdce2bb945b0f1aed415a901ee902aa  libstdc++-v3/include/ext/numeric
! 46a3024472a274b7e4fb449793af9358  libstdc++-v3/include/ext/numeric_traits.h
  7764167e114c092ba1e1921f64f8a7f2  libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
  cc20608c2498454253a55ac23b7236f2  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
  86d62df690f670934b48412d9a9a98bb  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
--- 144281,144302 ----
  1e85d61b1ab664fe9e83e4d05536cf0c  libstdc++-v3/include/ext/aligned_buffer.h
  b538cf34d296f3161c57558eea3bca8b  libstdc++-v3/include/ext/alloc_traits.h
  75753be7d2a92c5ee7c1c4025bff2523  libstdc++-v3/include/ext/atomicity.h
! 498e5a68cde2a51d7e419346ffb409c5  libstdc++-v3/include/ext/bitmap_allocator.h
  cc0f2a5daeafb6e08b62720e44d9bd80  libstdc++-v3/include/ext/cast.h
  9543d5277e2a8ea51632d885f21ed4fa  libstdc++-v3/include/ext/cmath
  a18f3d9fdb753daa4f7ac1d8a2583a14  libstdc++-v3/include/ext/codecvt_specializations.h
! 2c47451746bbde2a434e7f0195abc982  libstdc++-v3/include/ext/concurrence.h
! 322d33c4abeac8d98273841910aed6bf  libstdc++-v3/include/ext/debug_allocator.h
  9cc2cde7a450b1a03f1b446f2bfd31ec  libstdc++-v3/include/ext/enc_filebuf.h
  8fc0b02ab84277ebf33823eedf5a0d4e  libstdc++-v3/include/ext/extptr_allocator.h
  0b5a8fc99466d7584034cb34e91edba9  libstdc++-v3/include/ext/functional
  a9710d6f73efed36ad5a227b51c4c339  libstdc++-v3/include/ext/iterator
! f0ed562891a092fd4245c0c81fe9b685  libstdc++-v3/include/ext/malloc_allocator.h
  cfa37bd17a540b520d298dbe87c6ed0c  libstdc++-v3/include/ext/memory
! 545d1666161eaf101ead9b8ef28c9cfa  libstdc++-v3/include/ext/mt_allocator.h
  a4387732ff6f5fe0fd6bc87c3b3fa197  libstdc++-v3/include/ext/new_allocator.h
  1fdce2bb945b0f1aed415a901ee902aa  libstdc++-v3/include/ext/numeric
! 9181b5bdff132d1c5fe7c39a96463e06  libstdc++-v3/include/ext/numeric_traits.h
  7764167e114c092ba1e1921f64f8a7f2  libstdc++-v3/include/ext/pb_ds/assoc_container.hpp
  cc20608c2498454253a55ac23b7236f2  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/bin_search_tree_.hpp
  86d62df690f670934b48412d9a9a98bb  libstdc++-v3/include/ext/pb_ds/detail/bin_search_tree_/constructors_destructor_fn_imps.hpp
*************** fcc955b62295ec860d3325dcc560c84d  libstd
*** 144430,144454 ****
  88e49bb63ce2d7e0b660d8e6d42f380b  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
  5a26ba93d8f758420b81f277bbf2b9ae  libstdc++-v3/include/ext/pod_char_traits.h
  4ad79df4aafab52a65d948cf79db6e77  libstdc++-v3/include/ext/pointer.h
! 632b168bc3f59ee2f8d768f850477130  libstdc++-v3/include/ext/pool_allocator.h
  b322a22912e51ceadd84487a08225730  libstdc++-v3/include/ext/random
  d4823ad58701997da39ea15b0978cef0  libstdc++-v3/include/ext/random.tcc
  2b72feb0105170a5de344fa587f3297a  libstdc++-v3/include/ext/rb_tree
  e53018b54bbb57190313ae779d745211  libstdc++-v3/include/ext/rc_string_base.h
  55baeec15e5bc3849934ddc50243e6b2  libstdc++-v3/include/ext/rope
! 3c6f280e5646cfeb49b41625d7b4a288  libstdc++-v3/include/ext/ropeimpl.h
  f814222e34c98c60a69432fc93b84510  libstdc++-v3/include/ext/slist
  e2e8f9a88096423b8dadd2ce493f3bd4  libstdc++-v3/include/ext/sso_string_base.h
  3b13c6088a860c66a8a50ad1e92437d4  libstdc++-v3/include/ext/stdio_filebuf.h
  0e6b4d1614f8b6e1e005b89937a3f6e0  libstdc++-v3/include/ext/stdio_sync_filebuf.h
! 848821b40165a77461c2c977e3f3ec86  libstdc++-v3/include/ext/string_conversions.h
! 049ce3399778fdd27c13cb62fecffb5a  libstdc++-v3/include/ext/throw_allocator.h
  a6d9f7452ad80967178e3d0184f44516  libstdc++-v3/include/ext/type_traits.h
  d4df2219b3ddb5ebd7971cdf40f0db7e  libstdc++-v3/include/ext/typelist.h
  986064df49d3e662956e8200fb69a037  libstdc++-v3/include/ext/vstring.h
  7d8d81f520bc3287cc4053b7b1b8d75a  libstdc++-v3/include/ext/vstring.tcc
  81ec4de938e605def06e6302504c3b99  libstdc++-v3/include/ext/vstring_fwd.h
! 639a678e355fee017da89b58703c8851  libstdc++-v3/include/ext/vstring_util.h
  7107fa266ee21854c286a83f53c3f853  libstdc++-v3/include/parallel/algo.h
  bf6f5bfe1eb4de5b912c748fdebbabb7  libstdc++-v3/include/parallel/algobase.h
  e040768cc9509ba0b29693a5c1a19363  libstdc++-v3/include/parallel/algorithm
--- 144542,144566 ----
  88e49bb63ce2d7e0b660d8e6d42f380b  libstdc++-v3/include/ext/pb_ds/trie_policy.hpp
  5a26ba93d8f758420b81f277bbf2b9ae  libstdc++-v3/include/ext/pod_char_traits.h
  4ad79df4aafab52a65d948cf79db6e77  libstdc++-v3/include/ext/pointer.h
! 51d15d9c67de022c042b4355dab9e33f  libstdc++-v3/include/ext/pool_allocator.h
  b322a22912e51ceadd84487a08225730  libstdc++-v3/include/ext/random
  d4823ad58701997da39ea15b0978cef0  libstdc++-v3/include/ext/random.tcc
  2b72feb0105170a5de344fa587f3297a  libstdc++-v3/include/ext/rb_tree
  e53018b54bbb57190313ae779d745211  libstdc++-v3/include/ext/rc_string_base.h
  55baeec15e5bc3849934ddc50243e6b2  libstdc++-v3/include/ext/rope
! 8008153de983d00bf6b04a36ada2ad85  libstdc++-v3/include/ext/ropeimpl.h
  f814222e34c98c60a69432fc93b84510  libstdc++-v3/include/ext/slist
  e2e8f9a88096423b8dadd2ce493f3bd4  libstdc++-v3/include/ext/sso_string_base.h
  3b13c6088a860c66a8a50ad1e92437d4  libstdc++-v3/include/ext/stdio_filebuf.h
  0e6b4d1614f8b6e1e005b89937a3f6e0  libstdc++-v3/include/ext/stdio_sync_filebuf.h
! 16fdf5a9a972efe9c5e1f8e487520832  libstdc++-v3/include/ext/string_conversions.h
! 93776483fe7c6ada934622bed9390cf9  libstdc++-v3/include/ext/throw_allocator.h
  a6d9f7452ad80967178e3d0184f44516  libstdc++-v3/include/ext/type_traits.h
  d4df2219b3ddb5ebd7971cdf40f0db7e  libstdc++-v3/include/ext/typelist.h
  986064df49d3e662956e8200fb69a037  libstdc++-v3/include/ext/vstring.h
  7d8d81f520bc3287cc4053b7b1b8d75a  libstdc++-v3/include/ext/vstring.tcc
  81ec4de938e605def06e6302504c3b99  libstdc++-v3/include/ext/vstring_fwd.h
! 3a476478267b440530dbadf2473e0c80  libstdc++-v3/include/ext/vstring_util.h
  7107fa266ee21854c286a83f53c3f853  libstdc++-v3/include/parallel/algo.h
  bf6f5bfe1eb4de5b912c748fdebbabb7  libstdc++-v3/include/parallel/algobase.h
  e040768cc9509ba0b29693a5c1a19363  libstdc++-v3/include/parallel/algorithm
*************** f1cc3238df41adc204bc4f90accc63f3  libstd
*** 144521,144570 ****
  2bd04b33c3c9ee14ba8890fcbceb4328  libstdc++-v3/include/std/.editorconfig
  d26c17df4d8dbf3f28df91e901fb1ae2  libstdc++-v3/include/std/algorithm
  d891b88417c6426b21aee63c74ec4e98  libstdc++-v3/include/std/any
! cfa40ce7bf7ca94a28186ab967acdd6f  libstdc++-v3/include/std/array
  3e7b188185af6d862ad47487fc129213  libstdc++-v3/include/std/atomic
  d1730a41b18e21cbac0f5328aad2d223  libstdc++-v3/include/std/barrier
  66a9c513e3e5b0698ace3297c819bdcf  libstdc++-v3/include/std/bit
! 40092e929e71453f8b98c503bb70cf91  libstdc++-v3/include/std/bitset
! 285aa50d7e8cebdf5212f7f6e14a13fa  libstdc++-v3/include/std/charconv
  d6def2fbc6c487eccc892bf726821e1a  libstdc++-v3/include/std/chrono
  a90e2b9ed2c236c92f3f2387a39a0ac8  libstdc++-v3/include/std/codecvt
  489f1fa388f56f93420713f979711c6b  libstdc++-v3/include/std/complex
! 71f48e065b77e69f00dd2315c96b4e55  libstdc++-v3/include/std/concepts
  432501df58e845b724cce62e7d76214d  libstdc++-v3/include/std/condition_variable
  264518c8a6bbba954d8dfbc74162a7e2  libstdc++-v3/include/std/coroutine
  f945d16289e71c13744e7d9177de9ccc  libstdc++-v3/include/std/debugging
! 800f27a47208b2a5c6192f7260053949  libstdc++-v3/include/std/deque
  ae96a272e65886b9386e26db37971da1  libstdc++-v3/include/std/execution
! f69418c6593c8e3b4581801495ecdf0c  libstdc++-v3/include/std/expected
  c2e511ae49957a9f02446e544d201582  libstdc++-v3/include/std/filesystem
! 4699aa56b9e90fd895859e47b48614c1  libstdc++-v3/include/std/flat_map
! 8a5fa0a4bb554b2db8c2fed26a6993ca  libstdc++-v3/include/std/flat_set
! 0e99501415b9a573340245e608f08902  libstdc++-v3/include/std/format
  fa4316749922813b44f2ee282452813b  libstdc++-v3/include/std/forward_list
  e790ae6877466aa86b47f36d201e8563  libstdc++-v3/include/std/fstream
  03468240e9adff28238300032817bc1f  libstdc++-v3/include/std/functional
! d472ad4b1b5c12e2f731980802d15b50  libstdc++-v3/include/std/future
  d91bc94f2a9c1ff7f642d23c27ec66ae  libstdc++-v3/include/std/generator
! 54cace1e59a7a7e3b9c805c13917f662  libstdc++-v3/include/std/inplace_vector
  90e01b4e65cec5c0a3786580b2529edb  libstdc++-v3/include/std/iomanip
  bf5ea5fbda7bfdc1dc462f0303fc4e99  libstdc++-v3/include/std/ios
  4623e874877c5e927587c4bfe1a03c84  libstdc++-v3/include/std/iosfwd
  f7460188b5b2ffa503809fc888af8523  libstdc++-v3/include/std/iostream
  0cf9bb8b219885ac01620a2dbe50f81f  libstdc++-v3/include/std/istream
  b33cecab88c41408b5c244cc328a9cae  libstdc++-v3/include/std/iterator
! ccf8cf0658fcc1d11f161189c25b7aa7  libstdc++-v3/include/std/latch
  e8ef6ca7c551cefb5d53bde7cf7c1c75  libstdc++-v3/include/std/limits
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! d014429d4f4313c764d1d209cd18c58f  libstdc++-v3/include/std/mdspan
  563ae67a140bca148dc565c4a845d161  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  154adad15522042ed2886d969f645c0b  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
  b944796362aa39fc1cba3747d2247464  libstdc++-v3/include/std/numeric
! 439c4c99f2cfa09c5ca16b5ebea75797  libstdc++-v3/include/std/optional
  050dc2c12dd36f95d5fbe750ff182a38  libstdc++-v3/include/std/ostream
  fd773662a4b346f11b66520f34a8898e  libstdc++-v3/include/std/print
  ba14be3c6ffe74b2ec997245d3a94e3d  libstdc++-v3/include/std/queue
--- 144633,144682 ----
  2bd04b33c3c9ee14ba8890fcbceb4328  libstdc++-v3/include/std/.editorconfig
  d26c17df4d8dbf3f28df91e901fb1ae2  libstdc++-v3/include/std/algorithm
  d891b88417c6426b21aee63c74ec4e98  libstdc++-v3/include/std/any
! 15534634b73cbb2a8e3a5841166aeef3  libstdc++-v3/include/std/array
  3e7b188185af6d862ad47487fc129213  libstdc++-v3/include/std/atomic
  d1730a41b18e21cbac0f5328aad2d223  libstdc++-v3/include/std/barrier
  66a9c513e3e5b0698ace3297c819bdcf  libstdc++-v3/include/std/bit
! 95561699be9789488c473023d620b45c  libstdc++-v3/include/std/bitset
! a005537f5caa45d5b19156fada65b9b8  libstdc++-v3/include/std/charconv
  d6def2fbc6c487eccc892bf726821e1a  libstdc++-v3/include/std/chrono
  a90e2b9ed2c236c92f3f2387a39a0ac8  libstdc++-v3/include/std/codecvt
  489f1fa388f56f93420713f979711c6b  libstdc++-v3/include/std/complex
! f97745aad50f0c7e3a7c84deb2b3b179  libstdc++-v3/include/std/concepts
  432501df58e845b724cce62e7d76214d  libstdc++-v3/include/std/condition_variable
  264518c8a6bbba954d8dfbc74162a7e2  libstdc++-v3/include/std/coroutine
  f945d16289e71c13744e7d9177de9ccc  libstdc++-v3/include/std/debugging
! 473d7e64a85821d94aabf232f6f6a46b  libstdc++-v3/include/std/deque
  ae96a272e65886b9386e26db37971da1  libstdc++-v3/include/std/execution
! 052926694ae14ab58056f592f18ff448  libstdc++-v3/include/std/expected
  c2e511ae49957a9f02446e544d201582  libstdc++-v3/include/std/filesystem
! ec70fcd92135d0f49ac161285420c962  libstdc++-v3/include/std/flat_map
! b384f6e8eb77f0d5747534b3ed9a89cb  libstdc++-v3/include/std/flat_set
! eda2429c066ad12d7ee12dc07ae43773  libstdc++-v3/include/std/format
  fa4316749922813b44f2ee282452813b  libstdc++-v3/include/std/forward_list
  e790ae6877466aa86b47f36d201e8563  libstdc++-v3/include/std/fstream
  03468240e9adff28238300032817bc1f  libstdc++-v3/include/std/functional
! 655d33e185a47bda401d9822cdf59694  libstdc++-v3/include/std/future
  d91bc94f2a9c1ff7f642d23c27ec66ae  libstdc++-v3/include/std/generator
! cf5ec96cccebc705a55d617b1c9ffe2a  libstdc++-v3/include/std/inplace_vector
  90e01b4e65cec5c0a3786580b2529edb  libstdc++-v3/include/std/iomanip
  bf5ea5fbda7bfdc1dc462f0303fc4e99  libstdc++-v3/include/std/ios
  4623e874877c5e927587c4bfe1a03c84  libstdc++-v3/include/std/iosfwd
  f7460188b5b2ffa503809fc888af8523  libstdc++-v3/include/std/iostream
  0cf9bb8b219885ac01620a2dbe50f81f  libstdc++-v3/include/std/istream
  b33cecab88c41408b5c244cc328a9cae  libstdc++-v3/include/std/iterator
! a6a6239beba3145b2cef46de3a5d4e0b  libstdc++-v3/include/std/latch
  e8ef6ca7c551cefb5d53bde7cf7c1c75  libstdc++-v3/include/std/limits
  c9ef2791c2dc0d6c98a1a85c8f6aa473  libstdc++-v3/include/std/list
  f4af31191dea172207576960ad71d42d  libstdc++-v3/include/std/locale
  8b76fc7da76f0579c2fd1f22821d03be  libstdc++-v3/include/std/map
! 0ad5b6c8098cd5eba2a4160a431f554d  libstdc++-v3/include/std/mdspan
  563ae67a140bca148dc565c4a845d161  libstdc++-v3/include/std/memory
  9e86c11ff29d60fddf403674e9182b36  libstdc++-v3/include/std/memory_resource
  154adad15522042ed2886d969f645c0b  libstdc++-v3/include/std/mutex
  ef0d0725f5b70a4c1b5b62b84b2b63f7  libstdc++-v3/include/std/numbers
  b944796362aa39fc1cba3747d2247464  libstdc++-v3/include/std/numeric
! 20a657a251637e353b23e9f9177ee1ee  libstdc++-v3/include/std/optional
  050dc2c12dd36f95d5fbe750ff182a38  libstdc++-v3/include/std/ostream
  fd773662a4b346f11b66520f34a8898e  libstdc++-v3/include/std/print
  ba14be3c6ffe74b2ec997245d3a94e3d  libstdc++-v3/include/std/queue
*************** a28bf4bed6789b61535d4b05ff48ba76  libstd
*** 144575,144608 ****
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
  91c6fab351369373bcb191b27bc13900  libstdc++-v3/include/std/semaphore
  9b8d5c4868a64371c6591ccd2d8ae5f0  libstdc++-v3/include/std/set
! 774cbde017a7077c08bbf6ba564295f4  libstdc++-v3/include/std/shared_mutex
  61856a4d90554afdb8c60710d5dea8c5  libstdc++-v3/include/std/source_location
  522a5acff0bbc10f78a18d5e279f0cf6  libstdc++-v3/include/std/span
  efdde6d8d883a91854d4ae616b627e53  libstdc++-v3/include/std/spanstream
  1ffc378f8e8e686e82a35a2717c0da50  libstdc++-v3/include/std/sstream
  5b374a249107c7e5de0f834fa6a46f52  libstdc++-v3/include/std/stack
  11dbc7eaf7ffced493f65f6bc3b423b1  libstdc++-v3/include/std/stacktrace
! 03274bc404214a9a2c8235a5ae90f4fd  libstdc++-v3/include/std/stdexcept
  ece7d2fc2f03efd22a5d6ce6dc618b1b  libstdc++-v3/include/std/stdfloat
  23b5b63af5cceb0d44d8c2aab32c8e30  libstdc++-v3/include/std/stop_token
  56f8a72abc9e7160f18f9a373325a008  libstdc++-v3/include/std/streambuf
! 40d7d9c013bf29caa0e60c9069aae770  libstdc++-v3/include/std/string
! 78d2cbb37b2fb9bf3c0e60f6456002c7  libstdc++-v3/include/std/string_view
! b9cf79d1edae688927d40109f321047a  libstdc++-v3/include/std/syncstream
  21988a8b4bf87b01fc566fe8659ab2cc  libstdc++-v3/include/std/system_error
  608edef7344e2e25c7b00170df6fa9e6  libstdc++-v3/include/std/text_encoding
  0ed8103f880c65d72326076bb36a84d2  libstdc++-v3/include/std/thread
  8456c84295d4d092b0b55a359845078d  libstdc++-v3/include/std/tuple
! ac22bad6023357162b5da83d4fb62afe  libstdc++-v3/include/std/type_traits
  237682577d22ec3f9f5046abf0acd8e7  libstdc++-v3/include/std/typeindex
  520c52362f53e18f20838693cfd131bf  libstdc++-v3/include/std/unordered_map
  c82be32edefaa23cc1228b092d319315  libstdc++-v3/include/std/unordered_set
! 667666c43061458376aeaee7dfc78a59  libstdc++-v3/include/std/utility
  14c64f3107d654e98e9cad7d2b1a2bac  libstdc++-v3/include/std/valarray
! 6dfedd974a960950b7ce23a1bbb999f2  libstdc++-v3/include/std/variant
  54cb5753db7ef9673ab74fcd2fbd75d6  libstdc++-v3/include/std/vector
  1c10633087657ad7a31f6c3569a3ebe0  libstdc++-v3/include/std/version
! e0951486c7e6c5afe3105fe5004effb9  libstdc++-v3/include/tr1/array
  d26e5ca1b5598f236aebe125082c5efb  libstdc++-v3/include/tr1/bessel_function.tcc
  599d9660baa308be06aa240c15cff086  libstdc++-v3/include/tr1/beta_function.tcc
  b1b32edaf81f2844749113bd53d36d7c  libstdc++-v3/include/tr1/ccomplex
--- 144687,144720 ----
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
  91c6fab351369373bcb191b27bc13900  libstdc++-v3/include/std/semaphore
  9b8d5c4868a64371c6591ccd2d8ae5f0  libstdc++-v3/include/std/set
! 258b9b9045f88236a1cd7b9512db195f  libstdc++-v3/include/std/shared_mutex
  61856a4d90554afdb8c60710d5dea8c5  libstdc++-v3/include/std/source_location
  522a5acff0bbc10f78a18d5e279f0cf6  libstdc++-v3/include/std/span
  efdde6d8d883a91854d4ae616b627e53  libstdc++-v3/include/std/spanstream
  1ffc378f8e8e686e82a35a2717c0da50  libstdc++-v3/include/std/sstream
  5b374a249107c7e5de0f834fa6a46f52  libstdc++-v3/include/std/stack
  11dbc7eaf7ffced493f65f6bc3b423b1  libstdc++-v3/include/std/stacktrace
! 58f476e9a1c65524303052d1d2a6b880  libstdc++-v3/include/std/stdexcept
  ece7d2fc2f03efd22a5d6ce6dc618b1b  libstdc++-v3/include/std/stdfloat
  23b5b63af5cceb0d44d8c2aab32c8e30  libstdc++-v3/include/std/stop_token
  56f8a72abc9e7160f18f9a373325a008  libstdc++-v3/include/std/streambuf
! 18f0794717c4675e1f0db1f606bd593d  libstdc++-v3/include/std/string
! 94882391c64f02f554af3fc69bd89b5b  libstdc++-v3/include/std/string_view
! af06c1788519332260aca1c43501b543  libstdc++-v3/include/std/syncstream
  21988a8b4bf87b01fc566fe8659ab2cc  libstdc++-v3/include/std/system_error
  608edef7344e2e25c7b00170df6fa9e6  libstdc++-v3/include/std/text_encoding
  0ed8103f880c65d72326076bb36a84d2  libstdc++-v3/include/std/thread
  8456c84295d4d092b0b55a359845078d  libstdc++-v3/include/std/tuple
! 58e23728dc03d07437abac18ce1cf55e  libstdc++-v3/include/std/type_traits
  237682577d22ec3f9f5046abf0acd8e7  libstdc++-v3/include/std/typeindex
  520c52362f53e18f20838693cfd131bf  libstdc++-v3/include/std/unordered_map
  c82be32edefaa23cc1228b092d319315  libstdc++-v3/include/std/unordered_set
! cce1369fb552a9bb18d80b605d122c45  libstdc++-v3/include/std/utility
  14c64f3107d654e98e9cad7d2b1a2bac  libstdc++-v3/include/std/valarray
! c83eab68f3ca52f93f964f3068c4146f  libstdc++-v3/include/std/variant
  54cb5753db7ef9673ab74fcd2fbd75d6  libstdc++-v3/include/std/vector
  1c10633087657ad7a31f6c3569a3ebe0  libstdc++-v3/include/std/version
! 4277499f8a01c2dff2f84e3c3f5cba43  libstdc++-v3/include/tr1/array
  d26e5ca1b5598f236aebe125082c5efb  libstdc++-v3/include/tr1/bessel_function.tcc
  599d9660baa308be06aa240c15cff086  libstdc++-v3/include/tr1/beta_function.tcc
  b1b32edaf81f2844749113bd53d36d7c  libstdc++-v3/include/tr1/ccomplex
*************** d84db67356a0700f393b9efefe3ba3d1  libstd
*** 144611,144617 ****
  9ee30a89db309e0b9b62cf7f4de3f928  libstdc++-v3/include/tr1/cfloat
  dcea075f2e29f117f0b9c0aaa9c73f03  libstdc++-v3/include/tr1/cinttypes
  1ffcf07a0381caa9dc38beab3973027b  libstdc++-v3/include/tr1/climits
! ff55f913004bb0c6b5d48b9f1baddad4  libstdc++-v3/include/tr1/cmath
  40ee7eea9d539b2da5a5c71a353a29f0  libstdc++-v3/include/tr1/complex
  a002c5fc9728d0b19508e779f09c0fbf  libstdc++-v3/include/tr1/complex.h
  54679a7afe6f52db477e51be481ea01b  libstdc++-v3/include/tr1/cstdarg
--- 144723,144729 ----
  9ee30a89db309e0b9b62cf7f4de3f928  libstdc++-v3/include/tr1/cfloat
  dcea075f2e29f117f0b9c0aaa9c73f03  libstdc++-v3/include/tr1/cinttypes
  1ffcf07a0381caa9dc38beab3973027b  libstdc++-v3/include/tr1/climits
! 44acf1ebe62694250fe70210be4c91bb  libstdc++-v3/include/tr1/cmath
  40ee7eea9d539b2da5a5c71a353a29f0  libstdc++-v3/include/tr1/complex
  a002c5fc9728d0b19508e779f09c0fbf  libstdc++-v3/include/tr1/complex.h
  54679a7afe6f52db477e51be481ea01b  libstdc++-v3/include/tr1/cstdarg
*************** c3488f67c0dc6dc8f6b6124ffaa76b79  libstd
*** 144638,144644 ****
  47cd7db4db62fabae83bc0b97200d9e2  libstdc++-v3/include/tr1/legendre_function.tcc
  553b30d64d3f839fb56e8b70e5c456bd  libstdc++-v3/include/tr1/limits.h
  74548f8d1f1783ade9fa5810189c443b  libstdc++-v3/include/tr1/math.h
! 246a416af6c08f0306dc0d475d9ea931  libstdc++-v3/include/tr1/memory
  d4c56bce69f6f3dad6bd28b0a135efee  libstdc++-v3/include/tr1/modified_bessel_func.tcc
  0948d9d2752321b693e06f389b02fbd2  libstdc++-v3/include/tr1/poly_hermite.tcc
  8baa164d08aa9d95b163876c14f00453  libstdc++-v3/include/tr1/poly_laguerre.tcc
--- 144750,144756 ----
  47cd7db4db62fabae83bc0b97200d9e2  libstdc++-v3/include/tr1/legendre_function.tcc
  553b30d64d3f839fb56e8b70e5c456bd  libstdc++-v3/include/tr1/limits.h
  74548f8d1f1783ade9fa5810189c443b  libstdc++-v3/include/tr1/math.h
! 1c9bb8cd63dd7a52c54d9063c4a7ecf6  libstdc++-v3/include/tr1/memory
  d4c56bce69f6f3dad6bd28b0a135efee  libstdc++-v3/include/tr1/modified_bessel_func.tcc
  0948d9d2752321b693e06f389b02fbd2  libstdc++-v3/include/tr1/poly_hermite.tcc
  8baa164d08aa9d95b163876c14f00453  libstdc++-v3/include/tr1/poly_laguerre.tcc
*************** af173f2ac584aa231089410810f5013b  libstd
*** 144666,144672 ****
  3c22002d2429083e821bc235c87ff446  libstdc++-v3/include/tr1/wctype.h
  8799e79e5264fa4da547f8a07efea815  libstdc++-v3/include/tr2/bool_set
  f8dcce041b19d1bc99b84b4c8bd0ab65  libstdc++-v3/include/tr2/bool_set.tcc
! b5033bc12fc1667581a589f0b0816848  libstdc++-v3/include/tr2/dynamic_bitset
  020e4ef309cbacb213e801b1cdc2e794  libstdc++-v3/include/tr2/dynamic_bitset.tcc
  7dd87c5c55dd5cc161e8bbde1bf48c0e  libstdc++-v3/include/tr2/ratio
  5e8b74468be045996135279f106b9cf0  libstdc++-v3/include/tr2/type_traits
--- 144778,144784 ----
  3c22002d2429083e821bc235c87ff446  libstdc++-v3/include/tr1/wctype.h
  8799e79e5264fa4da547f8a07efea815  libstdc++-v3/include/tr2/bool_set
  f8dcce041b19d1bc99b84b4c8bd0ab65  libstdc++-v3/include/tr2/bool_set.tcc
! a50fc4ee904102c1c53204c2926c5371  libstdc++-v3/include/tr2/dynamic_bitset
  020e4ef309cbacb213e801b1cdc2e794  libstdc++-v3/include/tr2/dynamic_bitset.tcc
  7dd87c5c55dd5cc161e8bbde1bf48c0e  libstdc++-v3/include/tr2/ratio
  5e8b74468be045996135279f106b9cf0  libstdc++-v3/include/tr2/type_traits
*************** b60f1331eaf500ccce917653c90c02d1  libstd
*** 144682,144688 ****
  2c05bcb0a318121f8deb29df215a1a76  libstdc++-v3/libsupc++/bad_cast.cc
  ed96195b097b5c5644e754342e3159bc  libstdc++-v3/libsupc++/bad_typeid.cc
  d54dac42098e24364e0e8249016c78b8  libstdc++-v3/libsupc++/class_type_info.cc
! b3a4fe83e1be57bd004c8f99d59c0c4b  libstdc++-v3/libsupc++/compare
  ee57ed7a57d178fce16de2ec28a8340c  libstdc++-v3/libsupc++/cxxabi.h
  563de5baf2c41e9759583af359bb650e  libstdc++-v3/libsupc++/cxxabi_forced.h
  8aae4a67a18f5276de7831d7a44b7b2f  libstdc++-v3/libsupc++/cxxabi_init_exception.h
--- 144794,144800 ----
  2c05bcb0a318121f8deb29df215a1a76  libstdc++-v3/libsupc++/bad_cast.cc
  ed96195b097b5c5644e754342e3159bc  libstdc++-v3/libsupc++/bad_typeid.cc
  d54dac42098e24364e0e8249016c78b8  libstdc++-v3/libsupc++/class_type_info.cc
! 19084da60e8c89dd22f1d53d37a6eea7  libstdc++-v3/libsupc++/compare
  ee57ed7a57d178fce16de2ec28a8340c  libstdc++-v3/libsupc++/cxxabi.h
  563de5baf2c41e9759583af359bb650e  libstdc++-v3/libsupc++/cxxabi_forced.h
  8aae4a67a18f5276de7831d7a44b7b2f  libstdc++-v3/libsupc++/cxxabi_init_exception.h
*************** ee0f63d65224d52e788ab443330fb28d  libstd
*** 144730,144736 ****
  6d66eea53ad7b08f1adb945346f5d756  libstdc++-v3/libsupc++/initializer_list
  f93ba400e65ddaa04dad2dfa46a6d89a  libstdc++-v3/libsupc++/nested_exception.cc
  ea7cf0526f8391feb3f16ffa0ee1065c  libstdc++-v3/libsupc++/nested_exception.h
! 0dc3a2e0ce7c0973bd2295a175bc0579  libstdc++-v3/libsupc++/new
  7c0c13b2135e3f50c1cd156ab1ed5344  libstdc++-v3/libsupc++/new_handler.cc
  cb888aa40aea823d1d70236de020abac  libstdc++-v3/libsupc++/new_op.cc
  322cda8702abb03f45af9f34c50b9fd7  libstdc++-v3/libsupc++/new_opa.cc
--- 144842,144848 ----
  6d66eea53ad7b08f1adb945346f5d756  libstdc++-v3/libsupc++/initializer_list
  f93ba400e65ddaa04dad2dfa46a6d89a  libstdc++-v3/libsupc++/nested_exception.cc
  ea7cf0526f8391feb3f16ffa0ee1065c  libstdc++-v3/libsupc++/nested_exception.h
! caa6bd401e83d3e4c509a24bd8e1f936  libstdc++-v3/libsupc++/new
  7c0c13b2135e3f50c1cd156ab1ed5344  libstdc++-v3/libsupc++/new_handler.cc
  cb888aa40aea823d1d70236de020abac  libstdc++-v3/libsupc++/new_op.cc
  322cda8702abb03f45af9f34c50b9fd7  libstdc++-v3/libsupc++/new_opa.cc
*************** a693e79b0fdc9762073bab89e4ce62b5  libstd
*** 144805,144811 ****
  c113bf704e53dd400f385cf931504740  libstdc++-v3/src/c++11/cow-locale_init.cc
  1884482876acc0ef75ede22269d0a1b1  libstdc++-v3/src/c++11/cow-shim_facets.cc
  dd088fc029db779fa6d476532df5fcdc  libstdc++-v3/src/c++11/cow-sstream-inst.cc
! 5a5a140ba10941c729bd23bab9fc1cac  libstdc++-v3/src/c++11/cow-stdexcept.cc
  afd253550ec027f8e8d341e21dfa4623  libstdc++-v3/src/c++11/cow-string-inst.cc
  90722a957087c6462f3ef39ffd689517  libstdc++-v3/src/c++11/cow-string-io-inst.cc
  45600f6de3921379a947957cf08e7e2f  libstdc++-v3/src/c++11/cow-system_error.cc
--- 144917,144923 ----
  c113bf704e53dd400f385cf931504740  libstdc++-v3/src/c++11/cow-locale_init.cc
  1884482876acc0ef75ede22269d0a1b1  libstdc++-v3/src/c++11/cow-shim_facets.cc
  dd088fc029db779fa6d476532df5fcdc  libstdc++-v3/src/c++11/cow-sstream-inst.cc
! b1092d4587e38f8d0e8b09299dcba9a3  libstdc++-v3/src/c++11/cow-stdexcept.cc
  afd253550ec027f8e8d341e21dfa4623  libstdc++-v3/src/c++11/cow-string-inst.cc
  90722a957087c6462f3ef39ffd689517  libstdc++-v3/src/c++11/cow-string-io-inst.cc
  45600f6de3921379a947957cf08e7e2f  libstdc++-v3/src/c++11/cow-system_error.cc
*************** b99cc10d53d655788bd0141f278ac671  libstd
*** 144822,144828 ****
  ad1c239f49d4d2c9dd192171997fb461  libstdc++-v3/src/c++11/ext11-inst.cc
  ba1e398802c7793fc33131cddac099d5  libstdc++-v3/src/c++11/facet_inst_macros.h
  27d40b8798cf34c87d7cbda825245029  libstdc++-v3/src/c++11/fstream-inst.cc
! fad8cae2c62479e470853dc8e04649c1  libstdc++-v3/src/c++11/functexcept.cc
  9aecbf154f76f5bdcf192fe66bbef817  libstdc++-v3/src/c++11/functional.cc
  aa3245dbfb4354ba008403c69a43dee2  libstdc++-v3/src/c++11/futex.cc
  059ad09619a17632b2644b52d9b81d7a  libstdc++-v3/src/c++11/future.cc
--- 144934,144940 ----
  ad1c239f49d4d2c9dd192171997fb461  libstdc++-v3/src/c++11/ext11-inst.cc
  ba1e398802c7793fc33131cddac099d5  libstdc++-v3/src/c++11/facet_inst_macros.h
  27d40b8798cf34c87d7cbda825245029  libstdc++-v3/src/c++11/fstream-inst.cc
! 2354e297bb1625b2dba36d7b3eae770e  libstdc++-v3/src/c++11/functexcept.cc
  9aecbf154f76f5bdcf192fe66bbef817  libstdc++-v3/src/c++11/functional.cc
  aa3245dbfb4354ba008403c69a43dee2  libstdc++-v3/src/c++11/futex.cc
  059ad09619a17632b2644b52d9b81d7a  libstdc++-v3/src/c++11/future.cc
*************** fe798e7b6ed341445d180675eb4fb53d  libstd
*** 144844,144859 ****
  dbbbe37a5a3b86855b51fa69cb4fab23  libstdc++-v3/src/c++11/ostream-inst.cc
  75a70286896b5e9d774527af220c188a  libstdc++-v3/src/c++11/placeholders.cc
  635095a08b866936cfdcd45435613d3b  libstdc++-v3/src/c++11/random.cc
! a6c4bb899d00f4ad391b73d1730ab67f  libstdc++-v3/src/c++11/regex.cc
  01b87724c99b2b823ad80998d13aced5  libstdc++-v3/src/c++11/shared_ptr.cc
! 2cb21eb00e407fc289925f91199359df  libstdc++-v3/src/c++11/snprintf_lite.cc
  9e767a34d6cc919c18bd9e3ee372972f  libstdc++-v3/src/c++11/sso_string.cc
  f5af35184f655abcf9edbb76a7ac9985  libstdc++-v3/src/c++11/sstream-inst.cc
  96c5a746ee563d36d5c93056996ec3ff  libstdc++-v3/src/c++11/streambuf-inst.cc
  9a462773b93cea47b4ba35ff80b3b9f9  libstdc++-v3/src/c++11/string-inst.cc
  51eb59aec233df19c1193a1961362c36  libstdc++-v3/src/c++11/string-io-inst.cc
  b8e7b1593e5ed3dee7f0c98b40666a11  libstdc++-v3/src/c++11/system_error.cc
! f038bff0d15627443407b36722f5bdbf  libstdc++-v3/src/c++11/thread.cc
  8f11c4680a8c193b75888713450f5ae3  libstdc++-v3/src/c++11/wlocale-inst.cc
  9a2f4bc77bc2e1c94a8b5cefd3821420  libstdc++-v3/src/c++11/wstring-inst.cc
  c784e7e5223a16cc62f12abfdb1fe126  libstdc++-v3/src/c++11/wstring-io-inst.cc
--- 144956,144971 ----
  dbbbe37a5a3b86855b51fa69cb4fab23  libstdc++-v3/src/c++11/ostream-inst.cc
  75a70286896b5e9d774527af220c188a  libstdc++-v3/src/c++11/placeholders.cc
  635095a08b866936cfdcd45435613d3b  libstdc++-v3/src/c++11/random.cc
! f1f22a99809dc4f93fdac19bb00d9ddd  libstdc++-v3/src/c++11/regex.cc
  01b87724c99b2b823ad80998d13aced5  libstdc++-v3/src/c++11/shared_ptr.cc
! 02b7958e1e21bc3846a6b8e5631e2139  libstdc++-v3/src/c++11/snprintf_lite.cc
  9e767a34d6cc919c18bd9e3ee372972f  libstdc++-v3/src/c++11/sso_string.cc
  f5af35184f655abcf9edbb76a7ac9985  libstdc++-v3/src/c++11/sstream-inst.cc
  96c5a746ee563d36d5c93056996ec3ff  libstdc++-v3/src/c++11/streambuf-inst.cc
  9a462773b93cea47b4ba35ff80b3b9f9  libstdc++-v3/src/c++11/string-inst.cc
  51eb59aec233df19c1193a1961362c36  libstdc++-v3/src/c++11/string-io-inst.cc
  b8e7b1593e5ed3dee7f0c98b40666a11  libstdc++-v3/src/c++11/system_error.cc
! f3c9f5691584b404840e019c294c1712  libstdc++-v3/src/c++11/thread.cc
  8f11c4680a8c193b75888713450f5ae3  libstdc++-v3/src/c++11/wlocale-inst.cc
  9a2f4bc77bc2e1c94a8b5cefd3821420  libstdc++-v3/src/c++11/wstring-inst.cc
  c784e7e5223a16cc62f12abfdb1fe126  libstdc++-v3/src/c++11/wstring-io-inst.cc
*************** bc3131d6bdec9830589c59816ed6fc9f  libstd
*** 144867,144873 ****
  cdf9c54ab7ea85aa42bbf32b2e749913  libstdc++-v3/src/c++17/fast_float/MERGE
  88af13a4cebd3e9f44449b09304147d9  libstdc++-v3/src/c++17/fast_float/README.md
  c9dcdd9b0b5c806e787dc702505f57e1  libstdc++-v3/src/c++17/fast_float/fast_float.h
! 217207a30305c3c1757fee5e12d3ec34  libstdc++-v3/src/c++17/floating_from_chars.cc
  ac9644e2d8390587379964f6b7e51ef0  libstdc++-v3/src/c++17/floating_to_chars.cc
  7c668fe3f79c2610268b1bc631741ad5  libstdc++-v3/src/c++17/fs_dir.cc
  38394abc0e937c8a15f74a60356f174a  libstdc++-v3/src/c++17/fs_ops.cc
--- 144979,144985 ----
  cdf9c54ab7ea85aa42bbf32b2e749913  libstdc++-v3/src/c++17/fast_float/MERGE
  88af13a4cebd3e9f44449b09304147d9  libstdc++-v3/src/c++17/fast_float/README.md
  c9dcdd9b0b5c806e787dc702505f57e1  libstdc++-v3/src/c++17/fast_float/fast_float.h
! cbfe442f23973b1a1348930b0bd18213  libstdc++-v3/src/c++17/floating_from_chars.cc
  ac9644e2d8390587379964f6b7e51ef0  libstdc++-v3/src/c++17/floating_to_chars.cc
  7c668fe3f79c2610268b1bc631741ad5  libstdc++-v3/src/c++17/fs_dir.cc
  38394abc0e937c8a15f74a60356f174a  libstdc++-v3/src/c++17/fs_ops.cc
*************** ba1de75ac9c1bb7d2506c503fe17708a  libstd
*** 144906,144912 ****
  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
! 0f19d96619e7984c25e37be9bff485f9  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
--- 145018,145024 ----
  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
! 749d5f03c1747271ded2795da84c9a8e  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
*************** bb688b1bf0bbfcf18f17ecc4aceccfa1  libstd
*** 145048,145054 ****
  078cee4676bbf4e43b6d9434dcbaa62f  libstdc++-v3/testsuite/18_support/cxa_vec.cc
  37fe08e5125d8624f4aa4900e2c144a8  libstdc++-v3/testsuite/18_support/destroying_delete.cc
  198455a37447986dc59d680adafc35c8  libstdc++-v3/testsuite/18_support/exception/38732.cc
! 030042beaea3179d8a037d63368fc745  libstdc++-v3/testsuite/18_support/exception/version.cc
  a50173907daec62db9e77f26b56a12b8  libstdc++-v3/testsuite/18_support/exception/what.cc
  8a3e4fc86620d59634749ffecd317237  libstdc++-v3/testsuite/18_support/exception_ptr/103630.cc
  b68d3b924d0ec6839ff81111c3d60e3e  libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc
--- 145160,145166 ----
  078cee4676bbf4e43b6d9434dcbaa62f  libstdc++-v3/testsuite/18_support/cxa_vec.cc
  37fe08e5125d8624f4aa4900e2c144a8  libstdc++-v3/testsuite/18_support/destroying_delete.cc
  198455a37447986dc59d680adafc35c8  libstdc++-v3/testsuite/18_support/exception/38732.cc
! 808d3bf1ddffb9a68649208dcb425467  libstdc++-v3/testsuite/18_support/exception/version.cc
  a50173907daec62db9e77f26b56a12b8  libstdc++-v3/testsuite/18_support/exception/what.cc
  8a3e4fc86620d59634749ffecd317237  libstdc++-v3/testsuite/18_support/exception_ptr/103630.cc
  b68d3b924d0ec6839ff81111c3d60e3e  libstdc++-v3/testsuite/18_support/exception_ptr/40296.cc
*************** b993c63aa44508888d71e9c3e0d14c6a  libstd
*** 145215,145231 ****
--- 145327,145346 ----
  2c66677d3de8621d918e5cca45feeb18  libstdc++-v3/testsuite/19_diagnostics/headers/cerrno/macros.cc
  fc983a5832136c395f79367b9ae13390  libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/synopsis.cc
  ca810f42fe48b7c84e0bf80516ec67a4  libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/types_std.cc
+ 229a48db08ce89214fae9059129a0a84  libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/version.cc
  231951e58fc01e7c15613cf4fbc0bee9  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/34538.cc
  7854cf45dae7fbe0afe099ba62d89005  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/93151.cc
  3d872899fb228bc488fc29036bc906f7  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc
  163d9618cf6ef0d9d2f17cfc172f862f  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/std_c++0x_neg.cc
  b536c9afb85a1022cb103035fcd93a04  libstdc++-v3/testsuite/19_diagnostics/headers/system_error/types_std_c++0x.cc
  9638e9cfb67573686ee977f4a75c7e7d  libstdc++-v3/testsuite/19_diagnostics/logic_error/cons_virtual_derivation.cc
+ 463a84605e820c8cc0a48cb7caf23f87  libstdc++-v3/testsuite/19_diagnostics/logic_error/constexpr.cc
  ad0984eec50061c4936ee8f0e6774351  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-1.cc
  fe10001337efb3317a203f5de7cb4836  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-2.cc
  072c061e7c6da4e7fcf5f4cfd735e668  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-3.cc
  844a0a7fb162c9de1b371138cddaacee  libstdc++-v3/testsuite/19_diagnostics/logic_error/what-big.cc
  caf636b4ba58f8cf8b65ce85f998759e  libstdc++-v3/testsuite/19_diagnostics/runtime_error/cons_virtual_derivation.cc
+ 4abe2ee94a4e0ae142c41828d51ab50a  libstdc++-v3/testsuite/19_diagnostics/runtime_error/constexpr.cc
  630ffbd2b7a17fe20de854167d931dcd  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-1.cc
  831fb3ef7996018195e89821e90326e4  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-2.cc
  4532c3db90095a70c3a0981e4c42da01  libstdc++-v3/testsuite/19_diagnostics/runtime_error/what-3.cc
*************** d1193000441e65ec342d8cf004778af7  libstd
*** 145283,145289 ****
  d7d79e6c80fe44aa63340be2dd526a6f  libstdc++-v3/testsuite/20_util/alignment_of/value.cc
  f22afd46cc166493907d23f907fbb1d6  libstdc++-v3/testsuite/20_util/allocator/1.cc
  4c8e34641b1c9bf4b389fc3dcc97c094  libstdc++-v3/testsuite/20_util/allocator/10378.cc
! 32cd2e02d33e0de43ae3997481aa26d3  libstdc++-v3/testsuite/20_util/allocator/105975.cc
  48683feee7818e6c72ecda09c77a17a7  libstdc++-v3/testsuite/20_util/allocator/14176.cc
  91260fad647f9c78624c01103e88a2dc  libstdc++-v3/testsuite/20_util/allocator/33807.cc
  ae49058091ac2f31814de6246e958d6a  libstdc++-v3/testsuite/20_util/allocator/64135.cc
--- 145398,145404 ----
  d7d79e6c80fe44aa63340be2dd526a6f  libstdc++-v3/testsuite/20_util/alignment_of/value.cc
  f22afd46cc166493907d23f907fbb1d6  libstdc++-v3/testsuite/20_util/allocator/1.cc
  4c8e34641b1c9bf4b389fc3dcc97c094  libstdc++-v3/testsuite/20_util/allocator/10378.cc
! c3633be19cc26ebd3041d6f7a8120295  libstdc++-v3/testsuite/20_util/allocator/105975.cc
  48683feee7818e6c72ecda09c77a17a7  libstdc++-v3/testsuite/20_util/allocator/14176.cc
  91260fad647f9c78624c01103e88a2dc  libstdc++-v3/testsuite/20_util/allocator/33807.cc
  ae49058091ac2f31814de6246e958d6a  libstdc++-v3/testsuite/20_util/allocator/64135.cc
*************** b6846002a3a56bb10b1621e1792c246a  libstd
*** 145547,145558 ****
  97aac511f36cb21427676e071c189c5a  libstdc++-v3/testsuite/20_util/expected/lwg4222.cc
  087d8f0146738536fce2d6ebd4e78f9a  libstdc++-v3/testsuite/20_util/expected/lwg4366.cc
  4824cecd15088232e3348b8bad95b2ce  libstdc++-v3/testsuite/20_util/expected/monadic.cc
! 4bfafe03465669c57c9cf2717bc9b00e  libstdc++-v3/testsuite/20_util/expected/observers.cc
  8854ae6d49bfd2df3b2f3a9095f61fc4  libstdc++-v3/testsuite/20_util/expected/requirements.cc
  8c41a21e12dcb978b196eabf48e15513  libstdc++-v3/testsuite/20_util/expected/swap.cc
  44dfca2fb3ccdb8f3ea97514568bab14  libstdc++-v3/testsuite/20_util/expected/synopsis.cc
  4b84f057fc22805edcab3b394acb5a2f  libstdc++-v3/testsuite/20_util/expected/unexpected.cc
! 841bab6e9626640a4289d6b2192a63e4  libstdc++-v3/testsuite/20_util/expected/version.cc
  a575f97946121367a0e597dae96cb9dd  libstdc++-v3/testsuite/20_util/extent/requirements/explicit_instantiation.cc
  4b8ed997a5c31981f1fc4aae96c15b38  libstdc++-v3/testsuite/20_util/extent/requirements/typedefs.cc
  87c36e56af23d836f365244a25996af2  libstdc++-v3/testsuite/20_util/extent/value.cc
--- 145662,145673 ----
  97aac511f36cb21427676e071c189c5a  libstdc++-v3/testsuite/20_util/expected/lwg4222.cc
  087d8f0146738536fce2d6ebd4e78f9a  libstdc++-v3/testsuite/20_util/expected/lwg4366.cc
  4824cecd15088232e3348b8bad95b2ce  libstdc++-v3/testsuite/20_util/expected/monadic.cc
! 9f3d4b6d2922882be16e10312d73ca38  libstdc++-v3/testsuite/20_util/expected/observers.cc
  8854ae6d49bfd2df3b2f3a9095f61fc4  libstdc++-v3/testsuite/20_util/expected/requirements.cc
  8c41a21e12dcb978b196eabf48e15513  libstdc++-v3/testsuite/20_util/expected/swap.cc
  44dfca2fb3ccdb8f3ea97514568bab14  libstdc++-v3/testsuite/20_util/expected/synopsis.cc
  4b84f057fc22805edcab3b394acb5a2f  libstdc++-v3/testsuite/20_util/expected/unexpected.cc
! 9871e3d836705c317e0489642b6a82fd  libstdc++-v3/testsuite/20_util/expected/version.cc
  a575f97946121367a0e597dae96cb9dd  libstdc++-v3/testsuite/20_util/extent/requirements/explicit_instantiation.cc
  4b8ed997a5c31981f1fc4aae96c15b38  libstdc++-v3/testsuite/20_util/extent/requirements/typedefs.cc
  87c36e56af23d836f365244a25996af2  libstdc++-v3/testsuite/20_util/extent/value.cc
*************** b5303bbd9648122aa1945fc55a8a9c83  libstd
*** 145737,145742 ****
--- 145852,145858 ----
  f31f633e0212b476ca41c3f6a0c4f628  libstdc++-v3/testsuite/20_util/integer_comparisons/2.cc
  7bd5a7e45d99985c6dded52e7c805868  libstdc++-v3/testsuite/20_util/integer_comparisons/equal.cc
  8d96ef7bb50f3f92d2f26416ed49f679  libstdc++-v3/testsuite/20_util/integer_comparisons/equal_neg.cc
+ 56d3ec9a125cd0d058136cd2791f0542  libstdc++-v3/testsuite/20_util/integer_comparisons/extended.cc
  23268839cfbf52c1337d5616e250b6ea  libstdc++-v3/testsuite/20_util/integer_comparisons/greater.cc
  04b4397e9095f0eac4bf443ab0be31bd  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal.cc
  78ece8f175d389c51988e90a6c1d037e  libstdc++-v3/testsuite/20_util/integer_comparisons/greater_equal_neg.cc
*************** d892473bccf7714d4d0029f52c64922a  libstd
*** 146131,146137 ****
  8e32eb0ded59abc21ad1cfcffabfbe26  libstdc++-v3/testsuite/20_util/optional/constexpr/nullopt.cc
  a0d2ccc0eac2ac278229cb3fc253699a  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/1.cc
  75cf05127469eca1069a1374a4535f5d  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/2.cc
! 7a878bf14780ed5e8fe3c270477c2e6d  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc
  24ca0455e1571dcc4fe94d7d5e76338a  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/4.cc
  b7825db9aa7633869f61a71b32800fa0  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/5.cc
  d800a92f881461a0c2ceea3762631cfd  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/1.cc
--- 146247,146253 ----
  8e32eb0ded59abc21ad1cfcffabfbe26  libstdc++-v3/testsuite/20_util/optional/constexpr/nullopt.cc
  a0d2ccc0eac2ac278229cb3fc253699a  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/1.cc
  75cf05127469eca1069a1374a4535f5d  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/2.cc
! 6d65c8f8511be8508a1d044b23e2b1e7  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc
  24ca0455e1571dcc4fe94d7d5e76338a  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/4.cc
  b7825db9aa7633869f61a71b32800fa0  libstdc++-v3/testsuite/20_util/optional/constexpr/observers/5.cc
  d800a92f881461a0c2ceea3762631cfd  libstdc++-v3/testsuite/20_util/optional/constexpr/relops/1.cc
*************** a6e4231f1606e2be084d98550f7242cd  libstd
*** 146190,146196 ****
  0f3d45388c61f51b7f6df124ff507aaa  libstdc++-v3/testsuite/20_util/optional/swap/1.cc
  001a4c1e1cdc738cbb337a561fdf8f1b  libstdc++-v3/testsuite/20_util/optional/swap/2.cc
  87b708c4b560c5395ed1befec2f78c20  libstdc++-v3/testsuite/20_util/optional/typedefs.cc
! 994370d459890b8851dc8986f1b8a0d4  libstdc++-v3/testsuite/20_util/optional/version.cc
  822529fe3664026abe193e232af92eb1  libstdc++-v3/testsuite/20_util/owner_equal/cmp.cc
  d301a9d092bb6e8452ae1ebce956a4e2  libstdc++-v3/testsuite/20_util/owner_equal/noexcept.cc
  8d07ce272199306a82af04d41bd63384  libstdc++-v3/testsuite/20_util/owner_equal/version.cc
--- 146306,146312 ----
  0f3d45388c61f51b7f6df124ff507aaa  libstdc++-v3/testsuite/20_util/optional/swap/1.cc
  001a4c1e1cdc738cbb337a561fdf8f1b  libstdc++-v3/testsuite/20_util/optional/swap/2.cc
  87b708c4b560c5395ed1befec2f78c20  libstdc++-v3/testsuite/20_util/optional/typedefs.cc
! f5ef77c565e21bdf9e860ca5c4bfec07  libstdc++-v3/testsuite/20_util/optional/version.cc
  822529fe3664026abe193e232af92eb1  libstdc++-v3/testsuite/20_util/owner_equal/cmp.cc
  d301a9d092bb6e8452ae1ebce956a4e2  libstdc++-v3/testsuite/20_util/owner_equal/noexcept.cc
  8d07ce272199306a82af04d41bd63384  libstdc++-v3/testsuite/20_util/owner_equal/version.cc
*************** c2e30b2ec16642f486b80b9842fc91fd  libstd
*** 146796,146812 ****
  79e926626c7dc3719ed0dffd8aaed843  libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc
  b9698b5e78dcefad507d6737875a6a1d  libstdc++-v3/testsuite/20_util/variant/100384.cc
  5ef3d7df10dd90d995e4c63bc62c39de  libstdc++-v3/testsuite/20_util/variant/102912.cc
  909e769606f79e2311fe65f425279584  libstdc++-v3/testsuite/20_util/variant/80165.cc
  7e5da65bff44ca0a6b8805cd0e06fd94  libstdc++-v3/testsuite/20_util/variant/85183.cc
  becaf5bd5913b3b0b3dcd36c9153e633  libstdc++-v3/testsuite/20_util/variant/86874.cc
  a084c83ce7846b185f9f540c49cb60f6  libstdc++-v3/testsuite/20_util/variant/87431.cc
! bce3a4580ff37d79d98e71266087eb6c  libstdc++-v3/testsuite/20_util/variant/87619.cc
  2e13e6354cedec70f64a2ef435650983  libstdc++-v3/testsuite/20_util/variant/91807.cc
  181a72d05a435779f40ed14fb4820675  libstdc++-v3/testsuite/20_util/variant/92878_92947.cc
  28fd4c72a6ef9871a51383855db7d4bd  libstdc++-v3/testsuite/20_util/variant/95915.cc
  2f9a0e0955b9a4162468e53d1072e9d6  libstdc++-v3/testsuite/20_util/variant/any.cc
  d26bd75bbd8dc15059edfed867c29f06  libstdc++-v3/testsuite/20_util/variant/compile.cc
! e917c228c28a3a18beec5914b0f19474  libstdc++-v3/testsuite/20_util/variant/constexpr.cc
  aca7fd5a5c0afed062d12c96f859019b  libstdc++-v3/testsuite/20_util/variant/deduction.cc
  1fc2162ff0864215d7d9683e80eb2be2  libstdc++-v3/testsuite/20_util/variant/default_ctor.cc
  8f533dbbd716d58c270e44701e17905c  libstdc++-v3/testsuite/20_util/variant/exception_safety.cc
--- 146912,146929 ----
  79e926626c7dc3719ed0dffd8aaed843  libstdc++-v3/testsuite/20_util/variable_templates_for_traits.cc
  b9698b5e78dcefad507d6737875a6a1d  libstdc++-v3/testsuite/20_util/variant/100384.cc
  5ef3d7df10dd90d995e4c63bc62c39de  libstdc++-v3/testsuite/20_util/variant/102912.cc
+ 154fba5a48d201d17438edfa7feb44be  libstdc++-v3/testsuite/20_util/variant/112591.cc
  909e769606f79e2311fe65f425279584  libstdc++-v3/testsuite/20_util/variant/80165.cc
  7e5da65bff44ca0a6b8805cd0e06fd94  libstdc++-v3/testsuite/20_util/variant/85183.cc
  becaf5bd5913b3b0b3dcd36c9153e633  libstdc++-v3/testsuite/20_util/variant/86874.cc
  a084c83ce7846b185f9f540c49cb60f6  libstdc++-v3/testsuite/20_util/variant/87431.cc
! 9298d620d54545069fe09c57c4f69743  libstdc++-v3/testsuite/20_util/variant/87619.cc
  2e13e6354cedec70f64a2ef435650983  libstdc++-v3/testsuite/20_util/variant/91807.cc
  181a72d05a435779f40ed14fb4820675  libstdc++-v3/testsuite/20_util/variant/92878_92947.cc
  28fd4c72a6ef9871a51383855db7d4bd  libstdc++-v3/testsuite/20_util/variant/95915.cc
  2f9a0e0955b9a4162468e53d1072e9d6  libstdc++-v3/testsuite/20_util/variant/any.cc
  d26bd75bbd8dc15059edfed867c29f06  libstdc++-v3/testsuite/20_util/variant/compile.cc
! bf2a98b9d9e5e4d51eeea3285ea8a137  libstdc++-v3/testsuite/20_util/variant/constexpr.cc
  aca7fd5a5c0afed062d12c96f859019b  libstdc++-v3/testsuite/20_util/variant/deduction.cc
  1fc2162ff0864215d7d9683e80eb2be2  libstdc++-v3/testsuite/20_util/variant/default_ctor.cc
  8f533dbbd716d58c270e44701e17905c  libstdc++-v3/testsuite/20_util/variant/exception_safety.cc
*************** e56cd950ff384e81521ce2616669bfa4  libstd
*** 146821,146827 ****
  42dd952bd177e86fe26e8cf83e7a8513  libstdc++-v3/testsuite/20_util/variant/relops/three_way.cc
  569408f6d5bf9ab3ed633fdd7024c149  libstdc++-v3/testsuite/20_util/variant/run.cc
  064e84504a9fc3d50cfd8e95617bd6e1  libstdc++-v3/testsuite/20_util/variant/types_neg.cc
! b482e6581851c371b03755ce99bd22c7  libstdc++-v3/testsuite/20_util/variant/version.cc
  e412b98c1d840f8bb2292ef008408afe  libstdc++-v3/testsuite/20_util/variant/visit.cc
  17098b13758ee1e3f169c2ee138604aa  libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc
  26d4f9b70627db347289a0f52da37eb4  libstdc++-v3/testsuite/20_util/variant/visit_member.cc
--- 146938,146944 ----
  42dd952bd177e86fe26e8cf83e7a8513  libstdc++-v3/testsuite/20_util/variant/relops/three_way.cc
  569408f6d5bf9ab3ed633fdd7024c149  libstdc++-v3/testsuite/20_util/variant/run.cc
  064e84504a9fc3d50cfd8e95617bd6e1  libstdc++-v3/testsuite/20_util/variant/types_neg.cc
! 98288a62dfd35e8c4e7ae292a7be72b4  libstdc++-v3/testsuite/20_util/variant/version.cc
  e412b98c1d840f8bb2292ef008408afe  libstdc++-v3/testsuite/20_util/variant/visit.cc
  17098b13758ee1e3f169c2ee138604aa  libstdc++-v3/testsuite/20_util/variant/visit_inherited.cc
  26d4f9b70627db347289a0f52da37eb4  libstdc++-v3/testsuite/20_util/variant/visit_member.cc
*************** c5f32b33de65013c0fc106b121d9adb9  libstd
*** 148133,148140 ****
  ca98b78997105b8f93c1c653568b6095  libstdc++-v3/testsuite/23_containers/deque/version.cc
  30a5a3c1b40ce7942e8853237efc9b65  libstdc++-v3/testsuite/23_containers/flat_map/1.cc
  ed93a89d8077e1bcc2a90a7e2c63ce05  libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc
! 9b2f42aff2cc15dfd3a3f7693a799f84  libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc
! 76d6af8252b5ad047167bd10312d53bc  libstdc++-v3/testsuite/23_containers/flat_set/1.cc
  0c9946a785a1bcd0c52de4c0d17ff0e9  libstdc++-v3/testsuite/23_containers/forward_list/48101-2_neg.cc
  db346e707266a3e88546dac4c00c987b  libstdc++-v3/testsuite/23_containers/forward_list/48101-3_neg.cc
  6c11f9363d6ec93dd780d735c215c75c  libstdc++-v3/testsuite/23_containers/forward_list/48101_neg.cc
--- 148250,148257 ----
  ca98b78997105b8f93c1c653568b6095  libstdc++-v3/testsuite/23_containers/deque/version.cc
  30a5a3c1b40ce7942e8853237efc9b65  libstdc++-v3/testsuite/23_containers/flat_map/1.cc
  ed93a89d8077e1bcc2a90a7e2c63ce05  libstdc++-v3/testsuite/23_containers/flat_multimap/1.cc
! 086ebf6be41c0011120859c1081060d2  libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc
! 10bd36e295161b7839fff585fcf825af  libstdc++-v3/testsuite/23_containers/flat_set/1.cc
  0c9946a785a1bcd0c52de4c0d17ff0e9  libstdc++-v3/testsuite/23_containers/forward_list/48101-2_neg.cc
  db346e707266a3e88546dac4c00c987b  libstdc++-v3/testsuite/23_containers/forward_list/48101-3_neg.cc
  6c11f9363d6ec93dd780d735c215c75c  libstdc++-v3/testsuite/23_containers/forward_list/48101_neg.cc
*************** b310b77a8acb8e1c9644c670d6ee708d  libstd
*** 148272,148282 ****
  da421f8c7821a0a6d7eab3d8001476e3  libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
  43de62af8d3c543b80596072975c9266  libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
  50bc010406caef63380764c8105e79c8  libstdc++-v3/testsuite/23_containers/headers/vector/synopsis.cc
! c3b72820d263829b8713079673adf2bf  libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc
! 0dfecfd826cd666c38084ef6cb55c9b2  libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc
  30ab64df2eb33c78da29eab2cf8935d7  libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem_neg.cc
! 622856eec1c33e96d8aa14449309a720  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc
! cd81d3555896e4c03e2bba3f0932ce5c  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc
  38e5f39346a05e51ec2a0e4cdf2586e4  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/throws.cc
  885e647c2fd112b257c4c58939169847  libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc
  c87eb94f57dafc64e6cdeeab93e4ea86  libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign1_neg.cc
--- 148389,148399 ----
  da421f8c7821a0a6d7eab3d8001476e3  libstdc++-v3/testsuite/23_containers/headers/unordered_map/std_c++0x_neg.cc
  43de62af8d3c543b80596072975c9266  libstdc++-v3/testsuite/23_containers/headers/unordered_set/std_c++0x_neg.cc
  50bc010406caef63380764c8105e79c8  libstdc++-v3/testsuite/23_containers/headers/vector/synopsis.cc
! d403a77f650ef09907df123254dd36ab  libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc
! ba30ee3573256e9c79323edeab55f45e  libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc
  30ab64df2eb33c78da29eab2cf8935d7  libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem_neg.cc
! bc234ad58ff4608f222dc9066aef5bcc  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc
! c586c68ebedcd0552b5c6cec393e6f11  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc
  38e5f39346a05e51ec2a0e4cdf2586e4  libstdc++-v3/testsuite/23_containers/inplace_vector/cons/throws.cc
  885e647c2fd112b257c4c58939169847  libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc
  c87eb94f57dafc64e6cdeeab93e4ea86  libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign1_neg.cc
*************** b1d065547f03bed8fcb20c656a18aae3  libstd
*** 148310,148320 ****
  1201b3e07704574b86c2ebaa12550203  libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc
  597dca6295388c7b43dbf6bd1b92363a  libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc
  b597adca8581a01fbdfcf2647c26135e  libstdc++-v3/testsuite/23_containers/inplace_vector/erasure.cc
! 25458c2942c9e5fdbe79af5a83ec4102  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc
  5aec8512568ce2f7543d9c77e6605c2c  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc
  32171ec785b1b967d1076d5da1536940  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase_neg.cc
! a7c24e54c62a380315141d521b8fdcef  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc
! 8c4c89cbb2ba35feda988027855433ad  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
  63a7d605a0bc39f3acfb0fa4bb289dda  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert_neg.cc
  c0e4b5e520bb7afd9585b659e29ec827  libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc
  5518dafa57195a13905e6083cf064ace  libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc
--- 148427,148437 ----
  1201b3e07704574b86c2ebaa12550203  libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc
  597dca6295388c7b43dbf6bd1b92363a  libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc
  b597adca8581a01fbdfcf2647c26135e  libstdc++-v3/testsuite/23_containers/inplace_vector/erasure.cc
! 551687653f879c8cc6f6102dd99358dd  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc
  5aec8512568ce2f7543d9c77e6605c2c  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase.cc
  32171ec785b1b967d1076d5da1536940  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/erase_neg.cc
! 22e0d53fee04ed5208b039d33635bd0e  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc
! db8fc0f87378390d47445b0f2bcc5a55  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
  63a7d605a0bc39f3acfb0fa4bb289dda  libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert_neg.cc
  c0e4b5e520bb7afd9585b659e29ec827  libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc
  5518dafa57195a13905e6083cf064ace  libstdc++-v3/testsuite/23_containers/inplace_vector/relops.cc
*************** e5c17ed95482174d37bf901a5f3dff37  libstd
*** 148580,148593 ****
  bb096ee6d5a81634a48634c6dda721a9  libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
  58d322becec5c5e65c19f17834e2a082  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
  e9e5cce5f41b3fcb25e00e9b6edb9a83  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
! 66875233ba8f0cee58dceb78c0d2268d  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
  f11430abfbf793c9117a6d498fc9e9d6  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
  56a0f5d5edaad1117cc988beafc16d5d  libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
  669e44182af41d221acecffd45681dc9  libstdc++-v3/testsuite/23_containers/mdspan/extents/extents_mismatch_neg.cc
  b156707a9c78c39d6425cbae7cb3f90a  libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
  ab055bfc068f83879ad28ea7bc8c0287  libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
  bead52db525471c98d26137e05743c97  libstdc++-v3/testsuite/23_containers/mdspan/layout_like.h
! 72b470dbb3b1ec39181d25a3e5456df2  libstdc++-v3/testsuite/23_containers/mdspan/layout_traits.h
  ab07a82ad1f2a1ee5e8b19e0b60f44ea  libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
  17c0f6c2479b2697a0e1f1e5dbbeb6af  libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc
  ea1a2f61fac46b6b55b9ff2c52289540  libstdc++-v3/testsuite/23_containers/mdspan/layouts/debug/out_of_bounds_neg.cc
--- 148697,148710 ----
  bb096ee6d5a81634a48634c6dda721a9  libstdc++-v3/testsuite/23_containers/mdspan/extents/class_mandates_neg.cc
  58d322becec5c5e65c19f17834e2a082  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_copy.cc
  e9e5cce5f41b3fcb25e00e9b6edb9a83  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_default.cc
! 3eab3b1e28984ad8c9a7744b448fdfb9  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
  f11430abfbf793c9117a6d498fc9e9d6  libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_shape.cc
  56a0f5d5edaad1117cc988beafc16d5d  libstdc++-v3/testsuite/23_containers/mdspan/extents/custom_integer.cc
  669e44182af41d221acecffd45681dc9  libstdc++-v3/testsuite/23_containers/mdspan/extents/extents_mismatch_neg.cc
  b156707a9c78c39d6425cbae7cb3f90a  libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
  ab055bfc068f83879ad28ea7bc8c0287  libstdc++-v3/testsuite/23_containers/mdspan/int_like.h
  bead52db525471c98d26137e05743c97  libstdc++-v3/testsuite/23_containers/mdspan/layout_like.h
! da389bc5518d9172e2dec1d7e53315fb  libstdc++-v3/testsuite/23_containers/mdspan/layout_traits.h
  ab07a82ad1f2a1ee5e8b19e0b60f44ea  libstdc++-v3/testsuite/23_containers/mdspan/layouts/class_mandate_neg.cc
  17c0f6c2479b2697a0e1f1e5dbbeb6af  libstdc++-v3/testsuite/23_containers/mdspan/layouts/ctors.cc
  ea1a2f61fac46b6b55b9ff2c52289540  libstdc++-v3/testsuite/23_containers/mdspan/layouts/debug/out_of_bounds_neg.cc
*************** f100ecfcef3f79639fc5c07828bee8f2  libstd
*** 148598,148609 ****
  3f96813b92ac712ab8210f7eb24e7158  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
  94e1c258b4d0ee973edbc3f9311a7883  libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
  4b1a50b4d361b155b60027f1bdc566e7  libstdc++-v3/testsuite/23_containers/mdspan/out_of_bounds_neg.cc
! 4c9c6015ba8a52688acc785190d451f1  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc
  9bf970f0e760e969476983a9e58f4313  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc
  34b597bdb79c9dd1ff8a73e86e40e4d6  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_canonicalize_slices.cc
  aae227415f150b9a9ecb7c5f3471bdb1  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_canonicalize_slices_neg.cc
  88f4ed8f7327ad7b85a365ae47183b7b  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_extents.cc
  6cbb5626b65f7cf931854666ecfe358e  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_extents_neg.cc
  a1e2443fdfc824b4a97945b2d4aa84a0  libstdc++-v3/testsuite/23_containers/mdspan/version.cc
  351e436ffeeb8e47804c6992b75a81cb  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
  5bf01016c0929346c0086fb8a71129b5  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
--- 148715,148735 ----
  3f96813b92ac712ab8210f7eb24e7158  libstdc++-v3/testsuite/23_containers/mdspan/layouts/stride.cc
  94e1c258b4d0ee973edbc3f9311a7883  libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
  4b1a50b4d361b155b60027f1bdc566e7  libstdc++-v3/testsuite/23_containers/mdspan/out_of_bounds_neg.cc
! 75dcf76383a9e8f1226c23f8af9a325b  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/generic.cc
! ce8093884b0c73a497b2d4a3bca8b2e0  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left.cc
! afa930e77d75e7d1bdc49d8269088d56  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left_padded.cc
! 10441f07cd5a5e3795683e659b9bc8aa  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right.cc
! 7245b0935ad524af4b35326c16f65b28  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right_padded.cc
! c9e4a8bd28d2f23c7b2c2ac952c60efa  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/stride.cc
! b797f2b29fdc9e805ba051f07ad79780  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h
! 6d50e87bc82bd66db0d3bd10b0525a32  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc
  9bf970f0e760e969476983a9e58f4313  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc
  34b597bdb79c9dd1ff8a73e86e40e4d6  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_canonicalize_slices.cc
  aae227415f150b9a9ecb7c5f3471bdb1  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_canonicalize_slices_neg.cc
  88f4ed8f7327ad7b85a365ae47183b7b  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_extents.cc
  6cbb5626b65f7cf931854666ecfe358e  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_extents_neg.cc
+ d12bd48e0f1eb4041f45883c192fedf5  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc
+ 8008870b4c74933e862d19a768d61a9e  libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc
  a1e2443fdfc824b4a97945b2d4aa84a0  libstdc++-v3/testsuite/23_containers/mdspan/version.cc
  351e436ffeeb8e47804c6992b75a81cb  libstdc++-v3/testsuite/23_containers/multimap/14340.cc
  5bf01016c0929346c0086fb8a71129b5  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
*************** ca36a30a00e6109523175f48bb73e5a1  libstd
*** 151144,151149 ****
--- 151270,151276 ----
  6bb58f9b93a31777eaa590f067c50cc1  libstdc++-v3/testsuite/26_numerics/saturation/add.cc
  5be1ca6a5d00473905a4f368a38b7f1d  libstdc++-v3/testsuite/26_numerics/saturation/cast.cc
  64f614494e0dd24586ed97ac2ae00b92  libstdc++-v3/testsuite/26_numerics/saturation/div.cc
+ 38823cbcec997a6abdeaae791e520341  libstdc++-v3/testsuite/26_numerics/saturation/extended.cc
  776511df4abf99defad25c6424876f05  libstdc++-v3/testsuite/26_numerics/saturation/mul.cc
  952a33bca1e57c78c0a4003723e8399a  libstdc++-v3/testsuite/26_numerics/saturation/sub.cc
  f9e438a747cc86dc8b59ed2ec2243bc8  libstdc++-v3/testsuite/26_numerics/saturation/version.cc
*************** f9e438a747cc86dc8b59ed2ec2243bc8  libstd
*** 151154,151159 ****
--- 151281,151287 ----
  92759f71585f6a99a4dac915cde0cf1c  libstdc++-v3/testsuite/26_numerics/slice_array/requirements/typedefs.cc
  3c2e739337d1d66a837ee9dff70bfa34  libstdc++-v3/testsuite/26_numerics/stdckdint/1.cc
  b751aceaf1e04e945c13e67131969e4d  libstdc++-v3/testsuite/26_numerics/stdckdint/2_neg.cc
+ b6ec8fc1e4f9a548f94a64092b9efc78  libstdc++-v3/testsuite/26_numerics/stdckdint/extended.cc
  63118b59cc2533ace3ff2c6bbff4ec81  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/1.cc
  f390f86204baf313c67a2c534070bb22  libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/constexpr.cc
  240eca205b86e0fc7e983c75b2fd0687  libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/1.cc
*************** dc078d737467372d2b0426ec2f645cdf  libstd
*** 153044,153051 ****
  31de2e8abf3317853518773768f63f60  libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
  7e17087c597d5ceb6c3bee357ac73d1f  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/explicit_instantiation.cc
  06369b2af188c106a8fe347bc0410b3c  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/typedefs.cc
! 3a6dcafa753b14189081c19935cf7c22  libstdc++-v3/testsuite/Makefile.am
! ca53d248137509831ded9799784db6b8  libstdc++-v3/testsuite/Makefile.in
  d8d1d63efcb89bdc43f06ff05d8f3b8f  libstdc++-v3/testsuite/abi/30586.cc
  27472a7da5d420df6eceb879beb16116  libstdc++-v3/testsuite/abi/aligned_buffers.cc
  5b0c4ad16a491e0bdd230f10b9671442  libstdc++-v3/testsuite/abi/cxx_runtime_only_linkage.cc
--- 153172,153179 ----
  31de2e8abf3317853518773768f63f60  libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc
  7e17087c597d5ceb6c3bee357ac73d1f  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/explicit_instantiation.cc
  06369b2af188c106a8fe347bc0410b3c  libstdc++-v3/testsuite/30_threads/unique_lock/requirements/typedefs.cc
! 3660139a58a7bd9dcfa4b31fe031edda  libstdc++-v3/testsuite/Makefile.am
! a552305abaedd1f9743996828eb1e761  libstdc++-v3/testsuite/Makefile.in
  d8d1d63efcb89bdc43f06ff05d8f3b8f  libstdc++-v3/testsuite/abi/30586.cc
  27472a7da5d420df6eceb879beb16116  libstdc++-v3/testsuite/abi/aligned_buffers.cc
  5b0c4ad16a491e0bdd230f10b9671442  libstdc++-v3/testsuite/abi/cxx_runtime_only_linkage.cc
*************** b355773cc82e0e5036bba347dfda1d0d  libstd
*** 153990,153998 ****
  25c52ea03707db6a14d1c247bf5b2265  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/wchar_t/1.cc
  a6b263685ef489371877099687c56a81  libstdc++-v3/testsuite/ext/vstring/requirements/typedefs.cc
  0994b0bdd099a3dda63f7e4a254f28e5  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
! 1cbf73e75666c657e4aa45990e6aeb03  libstdc++-v3/testsuite/lib/dg-options.exp
  a974a2ccf1152b37304e5b3202056ace  libstdc++-v3/testsuite/lib/gdb-test.exp
! b97a5c50e53c281c9d425f011f6fd82a  libstdc++-v3/testsuite/lib/libstdc++.exp
  e5e6573751fab3a5e9e9bad9586da65e  libstdc++-v3/testsuite/lib/prune.exp
  33e43b63e93544d8165fe54e55d40041  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
  c7b1096d1cba1418bd68c171b66a64eb  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
--- 154118,154126 ----
  25c52ea03707db6a14d1c247bf5b2265  libstdc++-v3/testsuite/ext/vstring/requirements/explicit_instantiation/wchar_t/1.cc
  a6b263685ef489371877099687c56a81  libstdc++-v3/testsuite/ext/vstring/requirements/typedefs.cc
  0994b0bdd099a3dda63f7e4a254f28e5  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
! d9fe5004af958ef6371080258e741d7a  libstdc++-v3/testsuite/lib/dg-options.exp
  a974a2ccf1152b37304e5b3202056ace  libstdc++-v3/testsuite/lib/gdb-test.exp
! 70e8d46894f3a980e6e36c986d2cf6e0  libstdc++-v3/testsuite/lib/libstdc++.exp
  e5e6573751fab3a5e9e9bad9586da65e  libstdc++-v3/testsuite/lib/prune.exp
  33e43b63e93544d8165fe54e55d40041  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
  c7b1096d1cba1418bd68c171b66a64eb  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
*************** fbb9cb6aa1afed0d56fc6427306fa22e  libstd
*** 154227,154232 ****
--- 154355,154361 ----
  e46257417edb60880f2f4539034bfefe  libstdc++-v3/testsuite/std/concepts/concepts.callable/regular_invocable.cc
  ca94d547d32777414cb2658a3b86100b  libstdc++-v3/testsuite/std/concepts/concepts.callable/relation.cc
  cd1638d72ab32c3e7043d3272b7f5641  libstdc++-v3/testsuite/std/concepts/concepts.callable/strictweakorder.cc
+ 16b8bcbdda5942c005d23f858ab65e72  libstdc++-v3/testsuite/std/concepts/concepts.compare/move_only.cc
  a3aa3d586e77ebe62a22b2d42da1ac38  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/floating_point.cc
  4af4f0601495d614cce753507513341f  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/integral.cc
  72df2efd64e584c4d468a1f247c1e971  libstdc++-v3/testsuite/std/concepts/concepts.lang/concept.arithmetic/signed_integral.cc
*************** bd5779b644465dbdc75ed60bde08fbe5  libstd
*** 155151,155157 ****
  8e55c7c02f1c784bbcebb10b6a1040dd  libstdc++-v3/testsuite/util/io/prog_bar.cc
  b40e7e686448efbd1cff4b3a35330671  libstdc++-v3/testsuite/util/io/prog_bar.hpp
  c936728cecf14db4860b0afb2f6c7533  libstdc++-v3/testsuite/util/io/text_populate.hpp
! 0a637f162bc634be1e0e507465a59918  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc
  8e18a80d99a09350177abe2a855551bf  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.hpp
  6a3e0d5c97deb5ce67c6768f10fd28a4  libstdc++-v3/testsuite/util/io/xml.hpp
  820486d6cc4d1ba745c5e3f0d19121c7  libstdc++-v3/testsuite/util/io/xml_test_formatter.hpp
--- 155280,155286 ----
  8e55c7c02f1c784bbcebb10b6a1040dd  libstdc++-v3/testsuite/util/io/prog_bar.cc
  b40e7e686448efbd1cff4b3a35330671  libstdc++-v3/testsuite/util/io/prog_bar.hpp
  c936728cecf14db4860b0afb2f6c7533  libstdc++-v3/testsuite/util/io/text_populate.hpp
! 6fe9cc77d666e4514ed1823936689fef  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc
  8e18a80d99a09350177abe2a855551bf  libstdc++-v3/testsuite/util/io/verified_cmd_line_input.hpp
  6a3e0d5c97deb5ce67c6768f10fd28a4  libstdc++-v3/testsuite/util/io/xml.hpp
  820486d6cc4d1ba745c5e3f0d19121c7  libstdc++-v3/testsuite/util/io/xml_test_formatter.hpp
*************** ed3d1adcecea820c979cc9dcb2a10465  libstd
*** 155230,155236 ****
  2ee9777061e449a5c7ca5d294f695bac  libstdc++-v3/testsuite/util/testsuite_fs.h
  50e04be46c99fc9c2c5a00ea9f9e9d10  libstdc++-v3/testsuite/util/testsuite_greedy_ops.h
  3d3f95e4c126c7714834db5c046f0867  libstdc++-v3/testsuite/util/testsuite_hooks.cc
! c08d7419962b291852dd827d7d78f678  libstdc++-v3/testsuite/util/testsuite_hooks.h
  2cc9d485ece15882c52d8b6a9c1094e8  libstdc++-v3/testsuite/util/testsuite_io.h
  02e4c78c1c05b723078b35b3d46306fc  libstdc++-v3/testsuite/util/testsuite_iterators.h
  655166be8c731e7d0019b2d174d58142  libstdc++-v3/testsuite/util/testsuite_new_operators.h
--- 155359,155365 ----
  2ee9777061e449a5c7ca5d294f695bac  libstdc++-v3/testsuite/util/testsuite_fs.h
  50e04be46c99fc9c2c5a00ea9f9e9d10  libstdc++-v3/testsuite/util/testsuite_greedy_ops.h
  3d3f95e4c126c7714834db5c046f0867  libstdc++-v3/testsuite/util/testsuite_hooks.cc
! 72e822fc3de771b28f39311222aa0bc2  libstdc++-v3/testsuite/util/testsuite_hooks.h
  2cc9d485ece15882c52d8b6a9c1094e8  libstdc++-v3/testsuite/util/testsuite_io.h
  02e4c78c1c05b723078b35b3d46306fc  libstdc++-v3/testsuite/util/testsuite_iterators.h
  655166be8c731e7d0019b2d174d58142  libstdc++-v3/testsuite/util/testsuite_new_operators.h
diff -Nrcpad gcc-16-20251207/config/ChangeLog gcc-16-20251214/config/ChangeLog
*** gcc-16-20251207/config/ChangeLog	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/config/ChangeLog	Sun Dec 14 22:32:05 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-12-09  John Ericson  <git@johnericson.me>
+ 
+ 	* gthr.m4: Create new GCC_AC_THREAD_MODEL macro
+ 
  2025-11-30  Jose E. Marchesi  <jose.marchesi@oracle.com>
  
  	* acx.m4 (ACX_PROG_GA68): New defun.
diff -Nrcpad gcc-16-20251207/config/gthr.m4 gcc-16-20251214/config/gthr.m4
*** gcc-16-20251207/config/gthr.m4	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/config/gthr.m4	Sun Dec 14 22:32:05 2025
*************** dnl Public License, this file may be dis
*** 5,10 ****
--- 5,30 ----
  dnl that contains a configuration script generated by Autoconf, under
  dnl the same distribution terms as the rest of that program.
  
+ dnl Define thread model
+ 
+ dnl usage: GCC_AC_THREAD_MODEL
+ AC_DEFUN([GCC_AC_THREAD_MODEL],
+ [
+ # Specify the threading model for this GCC runtime library
+ # Pass with no value to take from compiler's metadata
+ # Pass with a value to specify a thread package
+ # 'single' means single threaded -- without threads.
+ AC_CACHE_CHECK([for the threading model used by GCC], [gcc_cv_target_thread_file], [
+   # Set new cache variable
+   gcc_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
+ ])
+ # Set variable name (not prefixed enough to be a good cache variable
+ # name) traditionally used for this purpose, to avoid having to change
+ # a bunch of configure scripts.
+ target_thread_file="$gcc_cv_target_thread_file"
+ ])
+ 
+ 
  dnl Define header location by thread model
  
  dnl usage: GCC_AC_THREAD_HEADER([thread_model])
*************** case $1 in
*** 23,28 ****
--- 43,51 ----
      vxworks)	thread_header=config/gthr-vxworks.h ;;
      win32)	thread_header=config/i386/gthr-win32.h ;;
      mcf)	thread_header=config/i386/gthr-mcf.h ;;
+     *)
+         AC_MSG_ERROR([No known header for threading model '$1'.])
+         ;;
  esac
  AC_SUBST(thread_header)
  ])
diff -Nrcpad gcc-16-20251207/contrib/ChangeLog gcc-16-20251214/contrib/ChangeLog
*** gcc-16-20251207/contrib/ChangeLog	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/contrib/ChangeLog	Sun Dec 14 22:32:05 2025
***************
*** 1,3 ****
--- 1,22 ----
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 	    Jiajie Chen  <c@jia.je>
+ 
+ 	* config-list.mk: Add loongarch32-linux-gnu*.
+ 
+ 2025-12-11  Joseph Myers  <josmyers@redhat.com>
+ 
+ 	* test_installed: Use config.sub to determine canonical target.
+ 
+ 2025-12-08  Joseph Myers  <josmyers@redhat.com>
+ 
+ 	* test_installed (--with-alt-cc=, --with-alt-cxx=)
+ 	(--with-compat-options=, --with-libiconv=): New options.
+ 
+ 2025-12-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* check_GNU_style_lib.py (check_GNU_style_file): Do not check
+ 	libstdc++ files.
+ 
  2025-12-06  Mark Zhuang  <mark.zhuang@spacemit.com>
  
  	* prepare-commit-msg: check --default-prefix
diff -Nrcpad gcc-16-20251207/contrib/check_GNU_style_lib.py gcc-16-20251214/contrib/check_GNU_style_lib.py
*** gcc-16-20251207/contrib/check_GNU_style_lib.py	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/contrib/check_GNU_style_lib.py	Sun Dec 14 22:32:05 2025
*************** def check_GNU_style_file(file, format):
*** 285,290 ****
--- 285,293 ----
          # Skip testsuite files
          if 'testsuite' in t or t.endswith('.py'):
              continue
+         # Libstdc++ does not use GNU style
+         if t.startswith('libstdc++-v3/'):
+             continue
  
          for hunk in pfile:
              delta = 0
diff -Nrcpad gcc-16-20251207/contrib/config-list.mk gcc-16-20251214/contrib/config-list.mk
*** gcc-16-20251207/contrib/config-list.mk	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/contrib/config-list.mk	Sun Dec 14 22:32:05 2025
*************** LIST = \
*** 64,69 ****
--- 64,70 ----
    ia64-linux ia64-hpuxOPT-enable-obsolete \
    ia64-hp-vmsOPT-enable-obsolete iq2000-elf lm32-elf \
    lm32-rtems lm32-uclinux \
+   loongarch32-linux-gnuf64 loongarch32-linux-gnuf32 loongarch32-linux-gnusf \
    loongarch64-linux-gnuf64 loongarch64-linux-gnuf32 loongarch64-linux-gnusf \
    m32c-elfOPT-enable-obsolete m32r-elf m32rle-elf \
    m68k-elf m68k-netbsdelf \
diff -Nrcpad gcc-16-20251207/contrib/test_installed gcc-16-20251214/contrib/test_installed
*** gcc-16-20251207/contrib/test_installed	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/contrib/test_installed	Sun Dec 14 22:32:05 2025
*************** if test -f site.exp; then
*** 42,47 ****
--- 42,48 ----
      exit 1
  fi
  
+ libiconv=-liconv
  while true; do
    case "$1" in
    --with-testsuite=*) testsuite=`echo "$1" | sed 's/[^=]*=//'`; shift;;
*************** while true; do
*** 51,56 ****
--- 52,61 ----
    --with-gcc=*) GCC_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
    --with-g++=*) GXX_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
    --with-gfortran=*) GFORTRAN_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+   --with-alt-cc=*) ALT_CC_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+   --with-alt-cxx=*) ALT_CXX_UNDER_TEST=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+   --with-compat-options=*) COMPAT_OPTIONS=`echo "$1" | sed 's/[^=]*=//'`; shift;;
+   --with-libiconv=*) libiconv=`echo "$1" | sed 's/[^=]*=//'`; shift;;
    --without-gcc) GCC_UNDER_TEST=no; shift;;
    --without-g++) GXX_UNDER_TEST=no; shift;;
    --without-gfortran) GFORTRAN_UNDER_TEST=no; shift;;
*************** Supported arguments:
*** 78,83 ****
--- 83,92 ----
  --with-gcc=/some/dir/bin/gcc  use specified gcc program [gcc]
  --with-g++=/some/dir/bin/g++  use specified g++ program [g++]
  --with-gfortran=/some/dir/bin/gfortran  use specified gfortran program [gfortran]
+ --with-alt-cc=/some/compiler  use specified alternative compiler in compat tests
+ --with-alt-cxx=/some/compiler use specified alternative compiler in compat tests
+ --with-compat-options=opts    use specified COMPAT_OPTIONS in compat tests
+ --with-libiconv=linker-args   use given arguments to link with iconv [-liconv]
  --without-gcc                 do not run gcc testsuite
  --without-g++                 do not run g++ testsuite
  --without-gfortran            do not run gfortran testsuite
*************** EOF
*** 95,113 ****
    *) break;;
    esac
  done
!   
  if test x"${testsuite+set}" != x"set" && test x"${srcdir+set}" != x"set"; then
!   file=$0
!   while [ -h $file ]; do
!     file=`ls -l $file | sed s/'.* -> '//`
!   done
!   srcdir=`CDPATH=. && cd \`echo "$file" | sed 's,/*[^/]*$,,;s,^$,.,'\`/.. >/dev/null && ${PWDCMD-pwd}`
  fi
  
  cat >site.exp <<EOF
  set rootme "."
  set tmpdir "${tmpdir-`${PWDCMD-pwd}`}"
  set srcdir "${testsuite-${srcdir}/gcc/testsuite}"
  set CFLAGS ""
  set CXXFLAGS ""
  set GCC_UNDER_TEST "${GCC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
--- 104,126 ----
    *) break;;
    esac
  done
! 
! # Determine the source directory to find config.sub, whether or not
! # that is also used to locate the testsuite sources.
! file=$0
! while [ -h $file ]; do
!   file=`ls -l $file | sed s/'.* -> '//`
! done
! top_srcdir=`CDPATH=. && cd \`echo "$file" | sed 's,/*[^/]*$,,;s,^$,.,'\`/.. >/dev/null && ${PWDCMD-pwd}`
  if test x"${testsuite+set}" != x"set" && test x"${srcdir+set}" != x"set"; then
!   srcdir=$top_srcdir
  fi
  
  cat >site.exp <<EOF
  set rootme "."
  set tmpdir "${tmpdir-`${PWDCMD-pwd}`}"
  set srcdir "${testsuite-${srcdir}/gcc/testsuite}"
+ set libiconv "$libiconv"
  set CFLAGS ""
  set CXXFLAGS ""
  set GCC_UNDER_TEST "${GCC_UNDER_TEST-${prefix}${prefix+/bin/}gcc}"
*************** set HOSTCFLAGS ""
*** 120,128 ****
  set HOSTCXXFLAGS ""
  EOF
  if test x${target} != x; then
!   echo "set target_triplet $target" >> site.exp
    echo "set target_alias $target" >> site.exp
  fi
  
  test x"${GCC_UNDER_TEST}" = x"no" || runtest --tool gcc ${1+"$@"}
  test x"${GXX_UNDER_TEST}" = x"no" || runtest --tool g++ ${1+"$@"}
--- 133,151 ----
  set HOSTCXXFLAGS ""
  EOF
  if test x${target} != x; then
!   target_canonical=`$top_srcdir/config.sub $target`
!   echo "set target_triplet $target_canonical" >> site.exp
    echo "set target_alias $target" >> site.exp
  fi
+ if test x"$ALT_CC_UNDER_TEST" != x; then
+   echo "set ALT_CC_UNDER_TEST \"${ALT_CC_UNDER_TEST}\"" >> site.exp
+ fi
+ if test x"$ALT_CXX_UNDER_TEST" != x; then
+   echo "set ALT_CXX_UNDER_TEST \"${ALT_CXX_UNDER_TEST}\"" >> site.exp
+ fi
+ if test x"$COMPAT_OPTIONS" != x; then
+   echo "set COMPAT_OPTIONS \"${COMPAT_OPTIONS}\"" >> site.exp
+ fi
  
  test x"${GCC_UNDER_TEST}" = x"no" || runtest --tool gcc ${1+"$@"}
  test x"${GXX_UNDER_TEST}" = x"no" || runtest --tool g++ ${1+"$@"}
diff -Nrcpad gcc-16-20251207/gcc/ChangeLog gcc-16-20251214/gcc/ChangeLog
*** gcc-16-20251207/gcc/ChangeLog	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ChangeLog	Sun Dec 14 22:32:05 2025
***************
*** 1,3 ****
--- 1,866 ----
+ 2025-12-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/46555
+ 	* tree-cfgcleanup.cc (execute_cleanup_cfg_post_optimizing):
+ 	Unconditionally set TODO_cleanup_cfg.
+ 
+ 2025-12-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* match.pd: Disable a few match patterns for !GIMPLE.
+ 
+ 2025-12-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122734
+ 	* tree-ssa-loop-ch.cc (should_duplicate_loop_header_p): Add new argument,
+ 	canbe_neverexecuted. When canbe_neverexecuted is true, return if a loop
+ 	exit is "never executed" like we are doing an invariant conditional.
+ 	(ch_base::copy_headers): Update call to should_duplicate_loop_header_p.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* config/alpha/alpha.opt.urls: Regenerated.
+ 	* config/arc/arc.opt.urls: Regenerated.
+ 	* config/arm/arm.opt.urls: Regenerated.
+ 	* config/bpf/bpf.opt.urls: Regenerated.
+ 	* config/c6x/c6x.opt.urls: Regenerated.
+ 	* config/cris/cris.opt.urls: Regenerated.
+ 	* config/csky/csky.opt.urls: Regenerated.
+ 	* config/h8300/h8300.opt.urls: Regenerated.
+ 	* config/i386/i386.opt.urls: Regenerated.
+ 	* config/ia64/ia64.opt.urls: Regenerated.
+ 	* config/lm32/lm32.opt.urls: Regenerated.
+ 	* config/loongarch/loongarch.opt.urls: Regenerated.
+ 	* config/lynx.opt.urls: Regenerated.
+ 	* config/m32r/m32r.opt.urls: Regenerated.
+ 	* config/m68k/m68k.opt.urls: Regenerated.
+ 	* config/mcore/mcore.opt.urls: Regenerated.
+ 	* config/microblaze/microblaze.opt.urls: Regenerated.
+ 	* config/mips/mips.opt.urls: Regenerated.
+ 	* config/mn10300/mn10300.opt.urls: Regenerated.
+ 	* config/moxie/moxie.opt.urls: Regenerated.
+ 	* config/msp430/msp430.opt.urls: Regenerated.
+ 	* config/nds32/nds32.opt.urls: Regenerated.
+ 	* config/or1k/elf.opt.urls: Regenerated.
+ 	* config/pa/pa-hpux.opt.urls: Regenerated.
+ 	* config/pa/pa.opt.urls: Regenerated.
+ 	* config/pdp11/pdp11.opt.urls: Regenerated.
+ 	* config/pru/pru.opt.urls: Regenerated.
+ 	* config/riscv/riscv.opt.urls: Regenerated.
+ 	* config/rs6000/rs6000.opt.urls: Regenerated.
+ 	* config/rs6000/sysv4.opt.urls: Regenerated.
+ 	* config/s390/s390.opt.urls: Regenerated.
+ 	* config/sh/sh.opt.urls: Regenerated.
+ 	* config/sparc/sparc.opt.urls: Regenerated.
+ 	* config/v850/v850.opt.urls: Regenerated.
+ 	* config/vax/vax.opt.urls: Regenerated.
+ 	* config/visium/visium.opt.urls: Regenerated.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <PRU Options>: Fix whitespace
+ 	in option list.
+ 	(PRU Options): Copy-editing.  Index and list negative option forms.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/pdp11/pdp11.opt (m40, m45): Add RejectNegative.
+ 	* doc/invoke.texi (Option Summary) <PDP-11 Options>: Remove
+ 	redundant -mno- forms from the list.
+ 	(PDP-11 Options): Fix some markup issues.  Merge documentation
+ 	of positive and negative forms of -mac0.  Index negative forms
+ 	of -msplit, -mlra.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/or1k/elf.opt (mnewlib): Mark obsolete option as
+ 	"Undocumented".
+ 	* config/or1k/or1k.opt (mcmov): Don't use future tense in doc string.
+ 	(msfimm): Likewise.
+ 	(mshftimm): Likewise.
+ 	* doc/invoke.texi (Option Summary) <OpenRISC Options>: Don't
+ 	document -mnewlib.
+ 	(OpenRISC Options): Likewise.  Add @opindex entry for
+ 	-mno-double-float.  Fix more instances of incorrect use of future
+ 	tense.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <Nvidia PTX Options>: Add
+ 	several missing options.
+ 	(Nvidia PTX Options): Correct index entry for -march-map.  List
+ 	negative forms of -moptimize, muniform-simt, and -mgomp.  Fix some
+ 	Texinfo markup issues.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <NDS32 Options>: Don't list
+ 	both positive and negative option forms.
+ 	(NDS32 Options): Consolidate separate entries for positive and
+ 	negative forms of the same option.  Document missing negative
+ 	forms in the same style.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/msp430/msp430.opt (mcpu): Mark deprecated option as
+ 	"Undocumented".
+ 	(mdevices-csv-loc=): Mark option not intended to be used by users
+ 	as "Undocumented".
+ 	* doc/invoke.texi (Option Summary) <MSP430 Options>: Fill in
+ 	argument syntax for options of the form -mfoo=@var{arg}.  Don't
+ 	list deprecated option -mcpu=.  Add missing entries for
+ 	-mwarn-devices-csv and -muse-lower-region-prefix.
+ 	(MSP430 Options): Similarly document argument syntax in the table
+ 	@item entries.  Add @opindex entries for negative forms.
+ 	Delete documentation of deprecated -mcpu= option.  Add
+ 	documentation for -muse-lower-region-prefix.  Markup and
+ 	copy-editing fixes throughout the section.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <MN10300 Options>: Remove
+ 	redundant -mno- forms from the list.
+ 	(MN10300 Options): Combine the documentation for -mmult-bug,
+ 	-mam33, -mliw, and -msetlb with the entries for the respective
+ 	negative forms.  List and index the negative forms -mno-am33-2,
+ 	-mno-am34, -mno-return-pointer-on-d0, -mno-mul.x.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <MMIX Options>: Remove redundant
+ 	-mno- forms from the list.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/mips/mips.opt (mnoasmopt): Mark as "Undocumented".
+ 	* doc/invoke.texi (Option Summary) <MIPS Options>: Add missing
+ 	entries for -mel/-meb.  Only list one of -mfoo/-mno-foo.
+ 	(MIPS Options):  Document -meb/-mel as synonyms for -EB/-EL.
+ 	Add missing @opindex entries.  Document -mmsa and -mfix4300.
+ 	Minor copy-editing for grammar and jargon issues.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/microblaze/microblaze.opt (Zxl-mode-bootstrap):
+ 	Mark as "Undocumented".
+ 	(Zxl-mode-executable): Likewise.
+ 	(Zxl-mode-novectors): Likewise.
+ 	(Zxl-mode-xilkernel): Likewise.
+ 	(Zxl-mode-xmdstub): Likewise.
+ 	(mxl-stack-check): Likewise.
+ 	(mno-clearbss): Likewise.
+ 	(mxl-mode-executable): Make help string more useful.
+ 	(mxl-mode-xmdstub): Likewise.
+ 	(mxl-mode-bootstrap): Likewise.
+ 	(mxl-mode-novectors): Likewise.
+ 	(mxl-mode-xilkernel): Mark as "Undocumented".
+ 	* doc/invoke.texi (Option Summary) <MicroBlaze Options>: Delete
+ 	entries for obsolete options now explicitly undocumented, and add
+ 	missing -mxl-prefetch option.
+ 	(MicroBlaze Options): Add missing @opindex entries for negative
+ 	option forms and list negative forms explicitly when appropriate.
+ 	Delete documentation for obsolete/deprecated options.  Add
+ 	missing @opindex entries for the m[no-]xml-mode- options.
+ 	Add missing documentation for -mxl-prefetch.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <MCore Options>: Remove
+ 	redundant -no options.
+ 	(MCore Options): Disambiguate documentation for
+ 	-mbig-endian/-mlittle-endian and -m210/-m340.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	PR target/119404
+ 	* config/m68k/m68k.opt (mlra): Fix typo in help string.
+ 	* doc/invoke.texi (Option Summary) <M680x0 Options>: Remove
+ 	redundant -mno- forms from the list.
+ 	(M680x0 Options): Combine documentation for -mshort, mbitfield,
+ 	-msep-data, -mid-shared-library with that for their respective
+ 	negatives that were formerly separately listed.  Add missing
+ 	@opindex entries.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <M32R/D Options>: Remove
+ 	redundant -mno entry.
+ 	(M32R/D Options): Regularize form of @opindex entries for
+ 	various options of the form -mfoo=@var{value}.  Combine
+ 	the documentation for -malign-loops and -mno-align-loops.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (M32C Options): Add missing @opindex for negative
+ 	form.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (Option Summary) <LoongArch Options>:
+ 	Remove redundant -mno forms from list.  Fix formatting so that
+ 	there is uniformly two spaces between options on the same line.
+ 	(LoongArch Options): Copy-editing for grammar, etc.  Add
+ 	@opindex for negative forms.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* doc/invoke.texi (LM32 Options): Add @opindex entries for negative
+ 	option forms.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/ia64/ia64.opt (msched-prefer-data-spec-insns): Mark as
+ 	explicitly "Undocumented".
+ 	(msched-prefer-non-control-spec-insns): Likewise.
+ 	* doc/invoke.texi (Option Summary) <IA-64 Options>: Remove
+ 	explicitly undocumented and redundant mno- forms from the list.
+ 	(IA-64 Options): Remove documentation for already-deleted option
+ 	-mfused-add and the two explicitly undocumented options.  Add
+ 	@opindex for negative forms and explicitly list the -mno-forms
+ 	of options that are enabled by default.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/pa/pa.opt (mbig-switch): Mark obsolete option as
+ 	"Undocumented".
+ 	(mjump-in-delay): Likewise.
+ 	(mlra): Likewise.
+ 	(mnosnake, msnake): Likewise.
+ 	* doc/invoke.texi (Option Summary) <HPPA Options>: Remove
+ 	deliberately undocumented options from list.  Remove redundant
+ 	negative/positive forms from list.  Fix formatting so there is
+ 	uniformly two spaces between options on the same line.
+ 	(HPPA Options): Remove documentation for obsolete options.
+ 	Add @opindex for negative forms.  Properly list -mwsio instead
+ 	of just referring to it in the -msio docs.  Light copy-editing to
+ 	fix markup, jargon, etc.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/h8300/h8300.opt (mexr, mno-exr): Add FIXME re ambiguity
+ 	for -mno-exr semantics.
+ 	* doc/extend.texi (H8/300 Function Attributes): Document
+ 	monitor and OS_Task attributes.
+ 	* doc/invoke.texi (Option Summary) <H8/300 Options}: Add -msx,
+ 	-ms2600, -mquickcall, -mslowbyte.  Combine -mexr and -mno-exr.
+ 	(H8/300 Options): Likewise.  Add @opindex entries for options
+ 	that have negative forms.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/arc/arc.opt: Mark -mbig-endian, -mlittle-endian,
+ 	-mmixed-code, -mno-mpy, -margonaut, -munalign-prob-threshold=,
+ 	-mannotate-align, -malign-call, -mRcq, -mRcw, -mbbit-peephole,
+ 	-mcompact-casesi, -mq-class, -mexpand-adddi, -mcrc, -mdsp-packa,
+ 	-mdvbf, -mtelephony, -mrtsc, -EB, -EL, -mrla, -mEA, and
+ 	-multcost= as "Undocumented".
+ 	* doc/invoke.texi: Remove documentation for the above options.
+ 	plus -mmac-d16 and -mmac-24 (which were already marked as
+ 	"Undocumented").  Likewise remove documentation for
+ 	-mbarrel_shifter, -mdpfp_compact, -mdpfp_fast, -mdsp_packa,
+ 	-mmac_24, -mmac_d16, -mspfp_compact, and -mspfp_fast, which
+ 	had already been deleted from arc.opt at some point.
+ 	Add index entries for the -mno- forms of remaining options that
+ 	have them.  Document positive forms of -mno-brcc and -mno-dpfp-lrsr.
+ 
+ 2025-12-13  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	PR other/122243
+ 	* config/arc/arc.opt (-mno-brcc, -mno-dpfp-lrsr): Redefine in
+ 	the positive sense.
+ 
+ 2025-12-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR ipa/122955
+ 	* cgraph.h (toplevel_node): Add next and previous fields.
+ 	Add chain_next and chain_prev to GTY.
+ 	(symtab_node): Remove next and previous field. Remove chain_next and chain_prev
+ 	from the GTY.
+ 	(asm_node): Remove next field.
+ 	(symtab_node::next_defined_symbol): Use save_as_a<symtab_node*> around next.
+ 	(symbol_table::unregister): Likewise
+ 	(FOR_EACH_SYMBOL): Likewise
+ 	(symbol_table::first_defined_symbol): Likewise
+ 	(symbol_table::first_variable): Likewise
+ 	(symbol_table::next_variable): Likewise
+ 	(symbol_table::first_static_initializer): Likewise
+ 	(symbol_table::next_static_initializer): Likewise
+ 	(symbol_table::first_defined_variable): Likewise
+ 	(symbol_table::next_defined_variable): Likewise
+ 	(symbol_table::first_defined_function): Likewise
+ 	(symbol_table::next_defined_function): Likewise
+ 	(symbol_table::first_function): Likewise
+ 	(symbol_table::next_function): Likewise
+ 	(symbol_table::first_function_with_gimple_body): Likewise
+ 	(symbol_table::next_function_with_gimple_body): Likewise
+ 	* cgraphunit.cc (analyze_functions): Likewise
+ 	(output_in_order): Likewise
+ 	* lto-streamer-out.cc (lto_output): Use save_as_a<asm_node*> around next.
+ 	* symtab.cc (symtab_node::verify_symtab_nodes): Likewise.
+ 
+ 2025-12-12  Chung-Lin Tang  <cltang@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 	    Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* gimplify.cc (gimplify_scan_omp_clauses): Handle uses_allocators
+ 	by printing a 'sorry, unimplemented' and removing it.
+ 	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_USES_ALLOCATORS.
+ 	* tree.cc (omp_clause_num_ops, omp_clause_code_name): Likewise.
+ 	* tree-pretty-print.cc (dump_omp_clause): Handle it.
+ 	* tree.h (OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR,
+ 	OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE,
+ 	OMP_CLAUSE_USES_ALLOCATORS_TRAITS): New.
+ 
+ 2025-12-12  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/103680
+ 	* tree-loop-distribution.cc (destroy_loop): Set probability
+ 	of the exit edge to be always.
+ 
+ 2025-12-12  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/103680
+ 	* tree-cfg.cc (make_forwarders_with_degenerate_phis): Fix
+ 	initial value of the count to new bb.
+ 
+ 2025-12-12  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390.cc (s390_expand_builtin): Warn about
+ 	non-overloaded deprecated builtins.
+ 
+ 2025-12-12  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390-c.cc (s390_adjust_builtin_arglist): Fix
+ 	builtin s390_vec_load_bndry for C++.
+ 
+ 2025-12-12  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* config/s390/s390-c.cc (s390_resolve_overloaded_builtin):
+ 	Perform array-to-pointer conversion for C++.
+ 
+ 2025-12-12  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/122003
+ 	* Makefile.in (ANALYZER_OBJS): Add analyzer/ops.o,
+ 	analyzer/supergraph-fixup-locations.o,
+ 	analyzer/supergraph-simplify.o, and analyzer/supergraph-sorting.o.
+ 	* digraph.h (dnode::add_in_edge): New.
+ 	(dnode::remove_in_edge): New.
+ 	(dnode::add_out_edge): New.
+ 	(dnode::remove_out_edge): New.
+ 	(dnode::m_preds): Make public.
+ 	(dnode::m_succs): Likewise.
+ 	(dnode::find_edge_idx): New.
+ 	(dedge::edge_t): New typedef.
+ 	(dedge::m_src): Make non-const.
+ 	(dedge::m_dest): Likewise.
+ 	(dedge::set_dest): New.
+ 	(digraph::add_any_extra_stmts): New.
+ 	(digraph<GraphTraits>::dump_dot_to_pp): Call it.
+ 	* doc/analyzer.texi: Update for rewrite of supergraph.
+ 	* doc/invoke.texi (fanalyzer-fine-grained): Make this as a no-op
+ 	preserved for backwards compatibility.
+ 	(fanalyzer-simplify-supergraph): Document new option.
+ 	(fdump-analyzer-supergraph): Update for changes to output.
+ 	* gdbhooks.py (AnaSupernodePrinter.to_string): Update for renaming
+ 	of supernode::m_index to supernode::m_id.
+ 	* system.h: Include <deque> if INCLUDE_DEQUE was defined.
+ 
+ 2025-12-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/121852
+ 	* rtlanal.cc (single_set_2): Only look for REG_UNUSED notes if
+ 	df && df_note, otherwise if df and SET_DEST is a pseudo with
+ 	DF_REG_USE_COUNT 0, assume it is unused as well.  Otherwise
+ 	assume it may be used.
+ 
+ 2025-12-12  Tejas Belagod  <tejas.belagod@arm.com>
+ 	    Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* config/aarch64/aarch64.cc (aarch64_instruction_selection): Flip
+ 	svbool_t == to != to avoid extra bit-inverse.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_block_move_loop): Change
+ 	length, align to unsigned.
+ 	(loongarch_expand_block_move): Ditto.
+ 
+ 2025-12-12  Jiajie Chen  <c@jia.je>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_emit_int_compare):
+ 	Call trunc_int_mode to ensure valid rhs.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* config/loongarch/predicates.md: Add CONSTM1_RTX for low_bitmask_operand.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* config/loongarch/larchintrin.h (__movgr2fcsr): Disable on soft float.
+ 	(__cacop_w): New.
+ 	(__lddir_d): Delete #error.
+ 	(__ldpte_d): Likewise.
+ 	(__crc_w_w_w): Disable on LA32
+ 	(__crc_w_d_w): Likewise.
+ 	(__crcc_w_w_w): Likewise.
+ 	* config/loongarch/loongarch-builtins.cc : Disable some builtin on LA32.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 	    Jiajie Chen  <c@jia.je>
+ 
+ 	* config/loongarch/loongarch-opts.cc (loongarch_target_option_override):
+ 	Delete opts->x_flag_pcc_struct_return and enable mstrict-align by
+ 	default on LA32.
+ 	* config/loongarch/loongarch.cc (loongarch_for_each_saved_reg): Save reg
+ 	depend on float abi.
+ 	(loongarch_explicit_relocs_p): Disable explicit relocs on LA32.
+ 	(loongarch_valid_offset_p): Disable const_imm16_operand with 4 byte aligned.
+ 	(loongarch_valid_lo_sum_p): Allow lo_sum to be used with DF in ilp32d.
+ 	(loongarch_valid_index_p): Disable ADDRESS_REG_REG on LA32.
+ 	(loongarch_legitimize_address): Disable mem_shadd_or_shadd_rtx_p on LA32.
+ 	(loongarch_output_move_index):  Assert TARGET_64BIT for ldx/stx.
+ 	(loongarch_output_move): Disable ldptr/stptr if offset is 0.
+ 	(loongarch_output_equal_conditional_branch): Disable beqz/bnez on LA32R.
+ 	(loongarch_trampoline_init): Change pcaddi to pcaddu12i.
+ 	(loongarch_get_separate_components): Disable ldptr/stptr on LA32.
+ 	(loongarch_c_mode_for_floating_type): Use TFmode for long double
+ 	regardless of target bitness.
+ 	(loongarch_bitint_type_info): Disable BitInt on LA32.
+ 	(loongarch_call_tls_get_addr): Use call30 on LA32.
+ 	(loongarch_split_move): Add split for DI, DF, TF.
+ 	* config/loongarch/loongarch.h (LA_LONG_DOUBLE_TYPE_SIZE): Set
+ 	LONG_DOUBLE_TYPE_SIZE to 128 regardless of target bitness.
+ 	(MAX_FIXED_MODE_SIZE): Set to 64 on LA32.
+ 	(DEFAULT_PCC_STRUCT_RETURN): New.
+ 	(STACK_BOUNDARY): Set to 128 on LA64 and LA32.
+ 	(LARCH_STACK_ALIGN): Set to 16 on LA64 and LA32.
+ 	(TRAMPOLINE_SIZE): Set to same value on LA64 and LA32.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 	    Jiajie Chen  <c@jia.je>
+ 
+ 	* config/loongarch/constraints.md: Disable k on LA32.
+ 	* config/loongarch/loongarch.md (*and<mode>3): Delete.
+ 	(*and<mode>3_extend): New.
+ 	(zero_extend<SHORT:mode><GPR:mode>2_la32r): New.
+ 	(extend<SHORT:mode><GPR:mode>2_la32r): New.
+ 	(extendqihi2_la32r): New.
+ 	(*movdi_32bit): Remove not working split, use existing
+ 	loongarch_split_move instead.
+ 	(move_doubleword_2_<mode>): New.
+ 	(load_low<mode>): New.
+ 	(load_high<mode>): New.
+ 	(store_word<mode>): New.
+ 	(movgr2frh<mode>): New.
+ 	(movfrh2gr<mode>): New.
+ 	* config/loongarch/predicates.md: Disable low_bitmask_operand and
+ 	ins_zero_bitmask_operand on LA32. Enable const_call_insn_operand on LA32.
+ 	* config/loongarch/sync.md (atomic_<amop><mode>): Change to define_expand.
+ 	(la64_atomic_<amop><mode>): New.
+ 	(la32_atomic_<amop>si): New.
+ 	(atomic_fetch_<amop><mode>): Change to define_expand.
+ 	(la64_atomic_fetch_<amop><mode>): New.
+ 	(la32_atomic_fetch_<amop>si): New.
+ 	(atomic_exchange<mode>): Change to define_expand.
+ 	(la64_atomic_exchange<mode>): New.
+ 	(la32_atomic_exchangesi): New.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 	    Jiajie Chen  <c@jia.je>
+ 
+ 	* config.gcc: Add target triple loongarch32-*-*-* and
+ 	corresponding abi ilp32f, ilp32d and ilp32s.
+ 	* config/loongarch/genopts/loongarch-strings: Add strings for
+ 	loongarch32 and ilp32 abi variants.
+ 	* config/loongarch/genopts/loongarch.opt.in: Add
+ 	-march=la32v1.0/la32rv1.0 and -mabi=ilp32d/ilp32f/ilp32s.
+ 	* config/loongarch/gnu-user.h: Add ilp32 abi variants to spec.
+ 	* config/loongarch/linux.h: Add ABI_LIBDIR for ilp32 abi
+ 	variants.
+ 	* config/loongarch/loongarch-c.cc (loongarch_define_unconditional_macros):
+ 	Add builtin definitions for loongarch32 target.
+ 	* config/loongarch/loongarch-def.cc: Add loongarch32 and ilp32
+ 	definitions.
+ 	* config/loongarch/loongarch-def.h: Add loongarch32 and ilp32
+ 	definitions.
+ 	* config/loongarch/loongarch-driver.h: Add ilp32 abi variants to
+ 	spec.
+ 	* config/loongarch/loongarch-opts.cc: Handle ilp32 abi variants.
+ 	* config/loongarch/loongarch-opts.h: Add loongarch32 case to
+ 	macros.
+ 	* config/loongarch/loongarch-str.h: Add loongarch32 and ilp32
+ 	strings.
+ 	* config/loongarch/loongarch.opt: Add -march=la32v1.0/la32rv1.0
+ 	and -mabi=ilp32d/ilp32f/ilp32s.
+ 	* config/loongarch/t-linux: Add ilp32 abi variants to multilib.
+ 	* doc/invoke.texi: Add LA32 arch and tune.
+ 
+ 2025-12-12  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	* common.opt.urls: Regenerate.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* config/arc/arc.cc (hwloop_optimize): Fix comment typo,
+ 	begining -> beginning.
+ 	* config/nds32/nds32-utils.cc (nds32::extract_pattern_from_insn):
+ 	Fix comment typo, funciton -> function.
+ 	* ipa-inline.cc (speculation_useful_p): Fix comment typo,
+ 	calll -> call.
+ 	* auto-profile.cc: Fix comment typos, implements -> implement,
+ 	inlning -> inlining, passe -> passes, form -> from, ambigous
+ 	-> ambiguous.
+ 	(afdo_hot_bb_threshod): Rename to ...
+ 	(afdo_hot_bb_threshold): ... this.
+ 	(maybe_hot_afdo_count_p): Adjust for the above change.
+ 	(function_instance::merge): Fix comment typo, hasnt -> hasn't.
+ 	(function_instance::offline_if_not_realized): Fix comment typo,
+ 	instancs -> instances.
+ 	(afdo_count_scale): Fix comment typo, reudce -> reduce.
+ 	(get_original_name): Fix comment typos, generetad -> generated,
+ 	sufix -> suffix.
+ 	(function_instance::get_function_instance): Fix dump message
+ 	typo, insteed -> instead.
+ 	(function_instance::merge): Fix comment typos, hasnt -> hasn't,
+ 	acounting -> accounting, calll -> call, begining -> beginning.
+ 	(function_instance::offline_if_in_set): Fix comment typo,
+ 	begining -> beginning.
+ 	(match_with_target): Fix comment typo, correspons -> corresponds.
+ 	(function_instance::match): Fix diagnostic typo, discrimnator
+ 	-> discriminator.
+ 	(autofdo_source_profile::offline_external_functions): Fix comment
+ 	typos, Doint -> Doing, distingush -> distinguish, shold -> should,
+ 	Poppulate -> Populate.  Fix dump message typo, suffxes -> suffixes.
+ 	(autofdo_source_profile::offline_unrealized_inlines): Fix comment
+ 	typo, Poppulate -> Populate.
+ 	(autofdo_source_profile::update_inlined_ind_target): Fix dump message
+ 	typo, funciton -> function.
+ 	(autofdo_source_profile::read): Fix comment typos, function_instace
+ 	-> function_instance, exixts -> exits.  Use afdo_hot_bb_threshold
+ 	instead of afdo_hot_bb_threshod.
+ 	(autofdo_source_profile::get_function_instance_by_inline_stack):
+ 	Fix dump message typo, locaction -> location.
+ 	(afdo_propagate_edge): Fix dump message typo, succesors -> successors.
+ 	(afdo_propagate): Fix comment typo, stablize -> stabilize.
+ 	(struct scale): Fix comment typo, descired -> desired.
+ 	(afdo_adjust_guessed_profile): Fix dump message typos, predecesor
+ 	-> predecessor, sucessor -> successor.  Fix comment typo, inprecise
+ 	-> imprecise.
+ 	(auto_profile): Fix comment typo, annoate -> annotate.
+ 	* tree-vect-slp.cc (vectorizable_slp_permutation_1): Fix comment typo,
+ 	cylical -> cyclical.
+ 	* except.cc (maybe_add_nop_after_section_switch): Fix comment typo,
+ 	begining -> beginning.
+ 	* tree-ssa-loop-ivcanon.cc (tree_unroll_loops_completely): Fix comment
+ 	typo, begining -> beginning.
+ 	* gcc.cc (insert_comments): Likewise.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* doc/extend.texi: Bump version and clarify implementation
+ 	status.
+ 
+ 2025-12-11  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/123014
+ 	* tree-vect-loop-manip.cc (vect_update_ivs_after_vectorizer): Detect
+ 	empty pre-header block.
+ 	(vect_do_peeling): Undo changes from PR122959.
+ 
+ 2025-12-11  Alfie Richards  <alfie.richards@arm.com>
+ 
+ 	* config/aarch64/aarch64.cc (aarch64_fndecl_abi): New function.
+ 	(aarch64_function_abi): New function.
+ 	(aarch64_function_arg_regno_p): Update to use aarch64_fndecl_abi.
+ 	(aarch64_output_mi_thunk): Likewise.
+ 	(aarch64_is_variant_pcs): Likewise.
+ 	(aarch64_set_current_function): Update to initialize pcs value.
+ 	* config/aarch64/aarch64.h (enum arm_pcs): Move location earlier in
+ 	file.
+ 	(machine_function) Add pcs value.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* doc/invoke.texi: Update docs for '-Wdeprecated-openmp'.
+ 
+ 2025-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/80881
+ 	* config/i386/i386.h (DEFAULT_TLS_SEG_OFFSET): New define.
+ 	* config/mingw/mingw32.h (DEFAULT_TLS_SEG_OFFSET): Likewise.
+ 	* config/i386/i386.cc (ix86_tls_index): Fix long line.
+ 	(legitimize_tls_address): Use get_thread_pointer, add comments and
+ 	fix long lines.
+ 	* config/i386/i386.md (*load_tp_<mode>): Use DEFAULT_TLS_SEG_OFFSET
+ 	(*load_tp_x32_zext): Likewise.
+ 	(*add_tp_<mode>): Likewise.
+ 	(*add_tp_x32_zext): Likewise.
+ 	* config/i386/predicates.md (pic_32bit_operand): Fix oversight.
+ 	(symbolic_operand): Accept UNSPEC_SECREL32 with or without offset.
+ 
+ 2025-12-10  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* config/i386/i386.md (lea peephole2): Add 3 new variants.
+ 
+ 2025-12-10  Jakub Jelinek  <jakub@redhat.com>
+ 	    Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/123069
+ 	* tree-vect-generic.cc (expand_vector_mult): Use
+ 	build_zero_cst (vectype) instead of build_int_cst (vectype, 0).
+ 
+ 2025-12-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* doc/invoke.texi (C++ Modules): Remove standard library header
+ 	units from missing pieces, mention importable header redirection.
+ 
+ 2025-12-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* config/sol2.h (PID_TYPE): Define.
+ 	* doc/tm.texi.in (Type Layout): Document PID_TYPE.
+ 	* doc/tm.texi: Regenerate.
+ 
+ 2025-12-09  John Ericson  <git@JohnEricson.me>
+ 
+ 	* Makefile.in: No longer include TARGET_SYSTEM_ROOT in
+ 	libgcc.mvars.
+ 
+ 2025-12-09  John Ericson  <git@JohnEricson.me>
+ 
+ 	* Makefile.in:: Remove NO_PIE_CFLAGS logic, since it is now in
+ 	libgcc.
+ 	* configure: Regenerate.
+ 	* configure.ac: Remove the enable_default_pie substitution, since
+ 	libgcc now has its own logic.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR tree-optimization/123074
+ 	* tree-vect-loop.cc: Reset LOOP_VINFO_USING_SELECT_VL_P.
+ 
+ 2025-12-09  Pan Li  <pan2.li@intel.com>
+ 
+ 	* config/riscv/predicates.md: Append operator lt to
+ 	the comparison_swappable_operator.
+ 	* config/riscv/riscv-v.cc (get_swapped_cmp_rtx_code): Add
+ 	swappable operator lt handing.
+ 
+ 2025-12-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/121230
+ 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost):
+ 	With FP mode and 387 math cost spill/reload.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* config/riscv/riscv.opt.urls:  Regenerate.
+ 
+ 2025-12-09  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* config/gcn/gcn.cc (gcn_init_cumulative_args): Only warn once.
+ 	Use "required" instead of "enabled" in the warning.
+ 	* config/gcn/mkoffload.cc (process_asm): Warn, don't error.
+ 	Use "required" instead of "on" in the warning.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR tree-optimization/122635
+ 	* gimple-fold.cc (enum mask_load_store_state): New enum.
+ 	(gimple_fold_partial_load_store_mem_ref): Only fold
+ 	"all active" loads/stores.
+ 	(partial_load_store_mask_state): New function to compute mask
+ 	state.
+ 	(gimple_fold_partial_load): Remove.
+ 	(gimple_fold_partial_load_store): New function.
+ 	(gimple_fold_partial_store): Remove.
+ 	(gimple_fold_call): Use new function.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* config/rs6000/predicates.md (lxvl_else_operand): New
+ 	predicate.
+ 	* config/rs6000/vsx.md: Add else operand.
+ 	* config/s390/predicates.md (vll_else_operand): New predicate.
+ 	* config/s390/vector.md: Add else operand.
+ 	* doc/md.texi: Document else operand.
+ 	* internal-fn.cc (internal_fn_len_index): Adjust IFN_LEN_LOAD.
+ 	(internal_fn_else_index): Add IFN_LEN_LOAD.
+ 	* optabs-tree.cc (target_supports_len_load_store_p): Get else
+ 	value for len_load.
+ 	* tree-vect-stmts.cc (vectorizable_load): Pun the else value
+ 	type.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* config/riscv/riscv-target-attr.cc (riscv_target_attr_parser::handle_max_vect):
+ 	New parser entry.
+ 	(riscv_target_attr_parser::update_settings): Set max-vect
+ 	option.
+ 	(riscv_process_one_target_attr): Change null-arg handling.
+ 	* config/riscv/riscv.cc (riscv_override_options_internal): Set
+ 	max-vect option.
+ 	* config/riscv/riscv.opt: Add -mmax-vectorization option.
+ 	* doc/extend.texi: Document new option.
+ 	* doc/invoke.texi: Ditto.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/123022
+ 	* config/riscv/vector.md: Add mode_idx attribute.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/115325
+ 	* config/riscv/riscv-c.cc (riscv_pragma_target_parse): New
+ 	function.
+ 	(riscv_register_pragmas): Register riscv_pragma_target_parse.
+ 	* config/riscv/riscv-protos.h (riscv_process_target_attr_for_pragma):
+ 	Declare.
+ 	(riscv_reset_previous_fndecl): Ditto.
+ 	* config/riscv/riscv-target-attr.cc (riscv_process_target_attr_for_pragma):
+ 	New function.
+ 	* config/riscv/riscv.cc (riscv_reset_previous_fndecl): Reset.
+ 	(riscv_option_save): New function.
+ 	(riscv_option_print): Ditto.
+ 	(riscv_get_interrupt_type): Adjust docs.
+ 	(TARGET_OPTION_SAVE): Implement.
+ 	(TARGET_OPTION_PRINT): Ditto.
+ 	* doc/extend.texi: Document that riscv can do target pragams.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* config/riscv/autovec.md (reduc_sbool_and_scal_<mode>): New
+ 	expander.
+ 	(reduc_sbool_ior_scal_<mode>): Ditto.
+ 	(reduc_sbool_xor_scal_<mode>): Ditto.
+ 	* config/riscv/riscv-protos.h (expand_mask_reduction): Declare.
+ 	* config/riscv/riscv-v.cc (expand_mask_reduction): New function.
+ 
+ 2025-12-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/123027
+ 	* config/i386/i386-expand.cc (ix86_expand_sse_fp_minmax):
+ 	With !HONOR_NANS we can handle LE by swapping and inverting.
+ 
+ 2025-12-08  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/46555
+ 	* tree-cfgcleanup.cc (execute_cleanup_cfg_post_optimizing):
+ 	Don't set todo to include cleanupcfg; do it manually.
+ 	Call make_forwarders_with_degenerate_phis if optimizing.
+ 
+ 2025-12-08  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-cfg.cc (make_forwarders_with_degenerate_phis): Add debug
+ 	dump.
+ 
+ 2025-12-08  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-dce.cc (sort_phi_args): Move to tree-cfg.cc.
+ 	(make_forwarders_with_degenerate_phis): Move to tree-cfg.cc.
+ 	(perform_tree_ssa_dce): Update for the updated return type
+ 	of make_forwarders_with_degenerate_phis.
+ 	* tree-cfg.cc (sort_phi_args): Moved from tree-ssa-dce.cc.
+ 	(make_forwarders_with_degenerate_phis): Moved from tree-ssa-dce.cc.
+ 	Update return type to bool and return true if an edge was split.
+ 	* tree-cfg.h (make_forwarders_with_degenerate_phis): New decl.
+ 
+ 2025-12-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR target/80881
+ 	* config/mingw/winnt.cc (mingw_pe_unique_section): Put two dollar
+ 	signs for TLS sections after the prefix.
+ 	(mingw_pe_asm_named_section): Deal with all TLS sections uniformly.
+ 
+ 2025-12-08  Ezra Sitorus  <Ezra.Sitorus@arm.com>
+ 
+ 	* config/aarch64/aarch64-cores.def (AARCH64_CORE): Add C1-Nano,
+ 	C1-Pro, C1-Premium and C1-Ultra.
+ 	* config/aarch64/aarch64-tune.md: Regenerate.
+ 	* doc/invoke.texi: Document C1 cores.
+ 
+ 2025-12-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123040
+ 	* tree-ssa-sccvn.cc (vn_nary_build_or_lookup_1): Only insert
+ 	nary results.
+ 
+ 2025-12-08  Josef Melcr  <josef.melcr@suse.com>
+ 
+ 	PR ipa/122798
+ 	* cgraph.cc (cgraph_edge::redirect_callee): Use
+ 	iterate_referring instead of referred_to_p.
+ 	* cgraphclones.cc (set_new_clone_decl_and_node_flags): Set local
+ 	to true iff the node does not have its address taken.
+ 
+ 2025-12-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123038
+ 	* tree-vect-patterns.cc (vect_recog_ctz_ffs_pattern): Reject
+ 	pattern for reductions when the call argument is used multiple
+ 	times.
+ 
+ 2025-12-08  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/123026
+ 	* config/aarch64/aarch64-simd.md (reduc_sbool_ior_scal_<mode>,
+ 	reduc_sbool_and_scal_<mode>): Fix tmp operands[1] override.
+ 
+ 2025-12-08  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/122868
+ 	* tree-vect-stmts.cc (vectorizable_load): Move check for invariant loads
+ 	down into the loop.
+ 
+ 2025-12-08  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/122343
+ 	* config/i386/sse.md (*<avx512>_cmp<mode>3_dup_op): Don't allow
+ 	2 volatile memory references.
+ 
+ 2025-12-07  Jason Merrill  <jason@redhat.com>
+ 
+ 	* config/darwin-c.cc (find_subframework_header): Use
+ 	_cpp_get_file_*.
+ 
+ 2025-12-07  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/122343
+ 	* common.opt: Add -ffuse-ops-with-volatile-access.
+ 	* common.opt.urls: Regenerated.
+ 	* recog.cc (general_operand): Allow volatile memory reference if
+ 	-ffuse-ops-with-volatile-access is enabled.
+ 	* simplify-rtx.cc (simplify_binary_operation_1): Keep PLUS for 2
+ 	volatile memory references.
+ 	* doc/invoke.texi: Document -ffuse-ops-with-volatile-access.
+ 
+ 2025-12-07  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* cselib.cc (dump_cselib_val): Split out of and rename to...
+ 	(dump_cselib_val_ptr): ... this.
+ 	(dump_cselib_table): Adjust.  Skip cselib_preserved_hash_table
+ 	when not allocated.
+ 
  2025-12-06  Alexandre Oliva  <oliva@adacore.com>
  
  	PR rtl-optimization/122947
diff -Nrcpad gcc-16-20251207/gcc/DATESTAMP gcc-16-20251214/gcc/DATESTAMP
*** gcc-16-20251207/gcc/DATESTAMP	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/DATESTAMP	Sun Dec 14 22:32:05 2025
***************
*** 1 ****
! 20251207
--- 1 ----
! 20251214
diff -Nrcpad gcc-16-20251207/gcc/Makefile.in gcc-16-20251214/gcc/Makefile.in
*** gcc-16-20251207/gcc/Makefile.in	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/Makefile.in	Sun Dec 14 22:32:05 2025
*************** ANALYZER_OBJS = \
*** 1358,1363 ****
--- 1358,1364 ----
  	analyzer/kf-analyzer.o \
  	analyzer/kf-lang-cp.o \
  	analyzer/known-function-manager.o \
+ 	analyzer/ops.o \
  	analyzer/pending-diagnostic.o \
  	analyzer/program-point.o \
  	analyzer/program-state.o \
*************** ANALYZER_OBJS = \
*** 1379,1384 ****
--- 1380,1388 ----
  	analyzer/state-purge.o \
  	analyzer/store.o \
  	analyzer/supergraph.o \
+ 	analyzer/supergraph-fixup-locations.o \
+ 	analyzer/supergraph-simplify.o \
+ 	analyzer/supergraph-sorting.o \
  	analyzer/svalue.o \
  	analyzer/symbol.o \
  	analyzer/trimmed-graph.o \
*************** libgcc.mvars: config.status Makefile spe
*** 2503,2515 ****
  	: > tmp-libgcc.mvars
  	echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars
  	echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars
- 	echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars
- 	if test @enable_default_pie@ = yes; then \
- 	  NO_PIE_CFLAGS="-fno-PIE"; \
- 	else \
- 	  NO_PIE_CFLAGS=; \
- 	fi; \
- 	echo NO_PIE_CFLAGS = "$$NO_PIE_CFLAGS" >> tmp-libgcc.mvars
  
  	mv tmp-libgcc.mvars libgcc.mvars
  
--- 2507,2512 ----
diff -Nrcpad gcc-16-20251207/gcc/ada/ChangeLog gcc-16-20251214/gcc/ada/ChangeLog
*** gcc-16-20251207/gcc/ada/ChangeLog	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ada/ChangeLog	Sun Dec 14 22:32:05 2025
***************
*** 1,3 ****
--- 1,34 ----
+ 2025-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123096
+ 	* exp_put_image.adb (Build_Record_Put_Image_Procedure): Call
+ 	Incomplete_Or_Partial_View with Partial_Only set to True.
+ 
+ 2025-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123062
+ 	* sem_ch12.adb (Analyze_Subprogram_Instantiation): Also propagate
+ 	the Convention and Is_Exported flag onto the anonymous actual.
+ 
+ 2025-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123088
+ 	* sem_aggr.adb (Resolve_Record_Aggregate): Add missing guard.
+ 
+ 2025-12-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/123037
+ 	* rtinit.c [__MINGW32__]: Include <stdlib.h> and not <windows.h>.
+ 	* rtfinal.c [__MINGW32__]: Do not include <windows.h>.
+ 
+ 2025-12-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/115349
+ 	* sem_attr.adb (Resolve_Attribute) <Attribute_Reduce>: Use the base
+ 	type as Accum_Type if the reducer is an operator from Standard and
+ 	the type is numeric.  Use the type of the first operand for other
+ 	operators.  Streamline the error message given for limited types.
+ 
  2025-12-06  Denis Mazzucato  <mazzucato@adacore.com>
  
  	* sem_attr.adb (Resolve_Attribute): Check if the reducer is a
diff -Nrcpad gcc-16-20251207/gcc/ada/exp_put_image.adb gcc-16-20251214/gcc/ada/exp_put_image.adb
*** gcc-16-20251207/gcc/ada/exp_put_image.adb	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ada/exp_put_image.adb	Sun Dec 14 22:32:05 2025
*************** package body Exp_Put_Image is
*** 1011,1017 ****
                 --  use the first copy instead.
  
                 Partial_View := Incomplete_Or_Partial_View
!                                  (Defining_Identifier (Type_Decl));
  
                 pragma Assert (Ekind (Partial_View) in
                                E_Private_Type
--- 1011,1018 ----
                 --  use the first copy instead.
  
                 Partial_View := Incomplete_Or_Partial_View
!                                  (Defining_Identifier (Type_Decl),
!                                   Partial_Only => True);
  
                 pragma Assert (Ekind (Partial_View) in
                                E_Private_Type
diff -Nrcpad gcc-16-20251207/gcc/ada/rtfinal.c gcc-16-20251214/gcc/ada/rtfinal.c
*** gcc-16-20251207/gcc/ada/rtfinal.c	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ada/rtfinal.c	Sun Dec 14 22:32:06 2025
*************** extern int __gnat_rt_init_count;
*** 46,54 ****
  /*  see initialize.c  */
  
  #if defined (__MINGW32__)
- #define WIN32_LEAN_AND_MEAN
  #include "mingw32.h"
- #include <windows.h>
  
  extern CRITICAL_SECTION ProcListCS;
  extern HANDLE ProcListEvt;
--- 46,52 ----
diff -Nrcpad gcc-16-20251207/gcc/ada/rtinit.c gcc-16-20251214/gcc/ada/rtinit.c
*** gcc-16-20251207/gcc/ada/rtinit.c	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ada/rtinit.c	Sun Dec 14 22:32:06 2025
*************** int __gnat_rt_init_count = 0;
*** 70,78 ****
     and finalize properly the run-time. */
  
  #if defined (__MINGW32__)
! #define WIN32_LEAN_AND_MEAN
  #include "mingw32.h"
- #include <windows.h>
  
  extern void __gnat_init_float (void);
  
--- 70,77 ----
     and finalize properly the run-time. */
  
  #if defined (__MINGW32__)
! #include <stdlib.h>
  #include "mingw32.h"
  
  extern void __gnat_init_float (void);
  
diff -Nrcpad gcc-16-20251207/gcc/ada/sem_aggr.adb gcc-16-20251214/gcc/ada/sem_aggr.adb
*** gcc-16-20251207/gcc/ada/sem_aggr.adb	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ada/sem_aggr.adb	Sun Dec 14 22:32:06 2025
*************** package body Sem_Aggr is
*** 6648,6654 ****
           else
              Record_Def := Type_Definition (Parent (Base_Type (Typ)));
  
!             if Null_Present (Record_Def) then
                 null;
  
              --  Explicitly add here mutably class-wide types because they do
--- 6648,6654 ----
           else
              Record_Def := Type_Definition (Parent (Base_Type (Typ)));
  
!             if No (Record_Def) or else Null_Present (Record_Def) then
                 null;
  
              --  Explicitly add here mutably class-wide types because they do
diff -Nrcpad gcc-16-20251207/gcc/ada/sem_attr.adb gcc-16-20251214/gcc/ada/sem_attr.adb
*** gcc-16-20251207/gcc/ada/sem_attr.adb	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ada/sem_attr.adb	Sun Dec 14 22:32:06 2025
*************** package body Sem_Attr is
*** 12919,12925 ****
  
                    --  Where the context is augmented with the iteration
                    --  variable I of the right type, and Init_Var of type
!                   --  Accum_Subtype. If the Reducer has both procedure and
                    --  function interpretations with the proper reducer profile
                    --  an ambiguity error is emitted. Note that, this could be a
                    --  false positive as the two may coexist without ambiguity
--- 12919,12925 ----
  
                    --  Where the context is augmented with the iteration
                    --  variable I of the right type, and Init_Var of type
!                   --  Accum_Typ. If the Reducer has both procedure and
                    --  function interpretations with the proper reducer profile
                    --  an ambiguity error is emitted. Note that, this could be a
                    --  false positive as the two may coexist without ambiguity
*************** package body Sem_Attr is
*** 13204,13210 ****
                    return;
                 end if;
  
!                --  If no error has been posted and the accumulation type is
                 --  constrained, then the resolution of the reducer can start.
  
                 if Nkind (Reducer_N) = N_Attribute_Reference then
--- 13204,13210 ----
                    return;
                 end if;
  
!                --  If no error has been posted and the accumulator type is
                 --  constrained, then the resolution of the reducer can start.
  
                 if Nkind (Reducer_N) = N_Attribute_Reference then
*************** package body Sem_Attr is
*** 13252,13295 ****
                    end if;
                 end if;
  
!                --  After resolving the reducer, determine the correct
!                --  Accum_Subtype: if the reducer is an attribute (Min or Max),
!                --  then the prefix type is the accumulation type.
  
                 if Nkind (Reducer_E) = N_Attribute_Reference then
!                   Accum_Typ := Etype (Prefix (Reducer_E));
  
!                --  If an operator from standard, then the type of its first
!                --  formal woudl be Any_Type, in this case we make sure we don't
!                --  use an universal type to avoid resolution problems later on.
  
!                elsif Ekind (Reducer_E) = E_Operator
!                  or else Scope (Reducer_E) = Standard_Standard
!                then
                    if Accum_Typ = Universal_Integer then
                       Accum_Typ := Standard_Integer;
                    elsif Accum_Typ = Universal_Real then
                       Accum_Typ := Standard_Float;
                    end if;
  
!                --  Otherwise, the Accum_Subtype is the subtype of the first
!                --  formal of the reducer subprogram RM 4.5.10(19/5).
  
                 else
                    Accum_Typ := Etype (First_Formal (Reducer_E));
                 end if;
                 Set_Etype (N, Accum_Typ);
  
!                --  Accumulation type must be nonlimited, RM 4.5.10(8/5)
  
                 if Is_Limited_Type (Accum_Typ) then
                    Error_Msg_N
!                     ("accumulated subtype of Reduce must be nonlimited", N);
  
!                --  If the Accum_Typ is an unconstrained array and the reducer
                 --  subprogram is a function then a Constraint_Error will be
!                --  raised at runtime as most computations will change its
!                --  length type during the reduction execution, RM 4.5.10(25/5).
                 --  For instance, this is the case with:
                 --    [...]'Reduce ("&", ...)
                 --  When the expression yields non-empty strings, the reduction
--- 13252,13301 ----
                    end if;
                 end if;
  
!                --  After resolving the reducer, determine Accum_Typ: if the
!                --  reducer is an attribute (Min or Max), then its prefix is
!                --  the accumulator type.
  
                 if Nkind (Reducer_E) = N_Attribute_Reference then
!                   Accum_Typ := Entity (Prefix (Reducer_E));
  
!                --  If the reducer is an operator from Standard, then the type
!                --  of its first operand would be Any_Type. In this case, make
!                --  sure we do not have an universal type to avoid resolution
!                --  problems later on, and use the base type of numeric types
!                --  to avoid spurious subtype mismatches for the initial value.
  
!                elsif Scope (Reducer_E) = Standard_Standard then
                    if Accum_Typ = Universal_Integer then
                       Accum_Typ := Standard_Integer;
                    elsif Accum_Typ = Universal_Real then
                       Accum_Typ := Standard_Float;
+                   elsif Is_Numeric_Type (Accum_Typ) then
+                      Accum_Typ := Base_Type (Accum_Typ);
                    end if;
  
!                --  Otherwise, Accum_Typ is the subtype of the first formal
!                --  of the reducer subprogram (RM 4.5.10(19/5)).
! 
!                elsif Ekind (Reducer_E) = E_Operator then
!                   Accum_Typ := Etype (Left_Opnd (Reducer_E));
  
                 else
                    Accum_Typ := Etype (First_Formal (Reducer_E));
                 end if;
+ 
                 Set_Etype (N, Accum_Typ);
  
!                --  The accumulator type must be nonlimited (RM 4.5.10(8/5))
  
                 if Is_Limited_Type (Accum_Typ) then
                    Error_Msg_N
!                     ("type of reduction expression must be nonlimited", N);
  
!                --  If Accum_Typ is an unconstrained array and the reducer
                 --  subprogram is a function then a Constraint_Error will be
!                --  raised at run time, as most computations will change its
!                --  length during the reduction execution (RM 4.5.10(25/5)).
                 --  For instance, this is the case with:
                 --    [...]'Reduce ("&", ...)
                 --  When the expression yields non-empty strings, the reduction
*************** package body Sem_Attr is
*** 13300,13306 ****
  
                 elsif Nkind (Reducer_E) /= N_Attribute_Reference
                   and then Ekind (Reducer_E) = E_Function
!                  and then not Is_Numeric_Type (Base_Type (Accum_Typ))
                   and then not Is_Constrained (Accum_Typ)
                 then
                    declare
--- 13306,13312 ----
  
                 elsif Nkind (Reducer_E) /= N_Attribute_Reference
                   and then Ekind (Reducer_E) = E_Function
!                  and then not Is_Numeric_Type (Accum_Typ)
                   and then not Is_Constrained (Accum_Typ)
                 then
                    declare
*************** package body Sem_Attr is
*** 13318,13323 ****
--- 13324,13330 ----
                 --  resolving the initial expression and array aggregate.
  
                 Resolve (Init_Value_Expr, Accum_Typ);
+ 
                 if Nkind (P) = N_Aggregate then
                    Resolve_Aggregate (P,
                      Make_Array_Type (Index => Standard_Positive,
diff -Nrcpad gcc-16-20251207/gcc/ada/sem_ch12.adb gcc-16-20251214/gcc/ada/sem_ch12.adb
*** gcc-16-20251207/gcc/ada/sem_ch12.adb	Sun Dec  7 22:32:06 2025
--- gcc-16-20251214/gcc/ada/sem_ch12.adb	Sun Dec 14 22:32:06 2025
*************** package body Sem_Ch12 is
*** 7090,7096 ****
--- 7090,7099 ----
             and then Convention (Gen_Unit) /= Convention_Intrinsic
           then
              Set_Convention (Act_Decl_Id, Convention (Gen_Unit));
+             Set_Convention (Anon_Id,     Convention (Gen_Unit));
+ 
              Set_Is_Exported (Act_Decl_Id, Is_Exported (Gen_Unit));
+             Set_Is_Exported (Anon_Id,     Is_Exported (Gen_Unit));
           end if;
  
           Generate_Definition (Act_Decl_Id);
diff -Nrcpad gcc-16-20251207/gcc/algol68/ChangeLog gcc-16-20251214/gcc/algol68/ChangeLog
*** gcc-16-20251207/gcc/algol68/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/ChangeLog	Sun Dec 14 22:32:06 2025
***************
*** 1,3 ****
--- 1,47 ----
+ 2025-12-13  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-bottom-up.cc (a68_bottom_up_coalesce_pub): Do not
+ 	mark defining entities as publicized.
+ 	* a68-parser-extract.cc (a68_extract_indicants): Mark public
+ 	defining entities.
+ 	(a68_extract_priorities): Likewise.
+ 	(a68_extract_operators): Likewise.
+ 	(a68_extract_identities): Likewise.
+ 	(a68_extract_variables): Likewise.
+ 	(a68_extract_proc_identities): Likewise.
+ 	(a68_extract_proc_variables): Likewise.
+ 
+ 2025-12-12  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-parser-scanner.cc (a68_lexical_analyser): New argument
+ 	empty_program.
+ 	* a68.h: Update prototype of a68_lexical_analyser.
+ 	* a68-parser.cc (a68_parser): Emit error for empty input files.
+ 
+ 2025-12-12  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	* ga68.texi (@opindex I): Expand.
+ 	(@oindex L): New.
+ 	* lang.opt.urls: Regenerate.
+ 
+ 2025-12-10  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* lang.opt: Add entry for OPT_L.
+ 
+ 2025-12-10  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-imports.cc (a68_try_packet_in_directory): do not try
+ 	extensionless packet files.
+ 
+ 2025-12-10  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-low-ints.cc (a68_int_sign): Avoid gimplifying val twice.
+ 	* a68-low-reals.cc (a68_real_sign): Likewise.
+ 
+ 2025-12-10  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* a68-low-prelude.cc (a68_lower_char_mult3): Fix asserts.
+ 
  2025-12-06  Jose E. Marchesi  <jose.marchesi@oracle.com>
  
  	PR algol68/123007
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-imports.cc gcc-16-20251214/gcc/algol68/a68-imports.cc
*** gcc-16-20251207/gcc/algol68/a68-imports.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-imports.cc	Sun Dec 14 22:32:06 2025
*************** static char *
*** 240,268 ****
  a68_try_packet_in_directory (const std::string &filename, size_t *psize)
  {
    std::string found_filename = filename;
!   int fd = open (found_filename.c_str(), O_RDONLY | O_BINARY);
! 
!   if (fd >= 0)
!     {
!       struct stat s;
!       if (fstat (fd, &s) >= 0 && S_ISDIR (s.st_mode))
! 	{
! 	  close (fd);
! 	  fd = -1;
! 	  errno = EISDIR;
! 	}
!     }
! 
    if (fd < 0)
!     {
!       if (errno != ENOENT && errno != EISDIR)
! 	a68_warning (NO_NODE, 0, "cannot open file Z for imports",
! 		     filename.c_str ());
! 
!       fd = a68_try_suffixes (&found_filename);
!       if (fd < 0)
! 	return NULL;
!     }
  
    /* The export data may not be in this file.  */
    char *exports = a68_find_export_data (found_filename, fd, psize);
--- 240,248 ----
  a68_try_packet_in_directory (const std::string &filename, size_t *psize)
  {
    std::string found_filename = filename;
!   int fd = a68_try_suffixes (&found_filename);
    if (fd < 0)
!     return NULL;
  
    /* The export data may not be in this file.  */
    char *exports = a68_find_export_data (found_filename, fd, psize);
*************** a68_try_packet_in_directory (const std::
*** 291,297 ****
     When FILENAME does start with ./ or ../, we use RELATIVE_IMPORT_PATH as a
     prefix.
  
!    When FILENAME does not exist, we try modifying FILENAME to find the file.
     We use the first of these which exists:
  
     - We append ".m68".
--- 271,278 ----
     When FILENAME does start with ./ or ../, we use RELATIVE_IMPORT_PATH as a
     prefix.
  
!    When FILENAME does not exist, we try
!    modifying FILENAME to find the file.
     We use the first of these which exists:
  
     - We append ".m68".
*************** a68_get_packet_exports (const std::strin
*** 357,363 ****
      {
        for (std::string path : A68_IMPORT_PATHS)
  	{
! 	  if (path.empty () && path[path.size () - 1] != '/')
  	    path += '/';
  	  path += fn;
  	  exports = a68_try_packet_in_directory (path, psize);
--- 338,344 ----
      {
        for (std::string path : A68_IMPORT_PATHS)
  	{
! 	  if (!path.empty () && path[path.size () - 1] != '/')
  	    path += '/';
  	  path += fn;
  	  exports = a68_try_packet_in_directory (path, psize);
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-low-ints.cc gcc-16-20251214/gcc/algol68/a68-low-ints.cc
*** gcc-16-20251207/gcc/algol68/a68-low-ints.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-low-ints.cc	Sun Dec 14 22:32:06 2025
*************** tree
*** 109,114 ****
--- 109,115 ----
  a68_int_sign (tree val)
  {
    tree zero = build_int_cst (TREE_TYPE (val), 0);
+   val = save_expr (val);
    return fold_build3 (COND_EXPR,
  		      a68_int_type,
  		      fold_build2 (EQ_EXPR, integer_type_node, val, zero),
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-low-prelude.cc gcc-16-20251214/gcc/algol68/a68-low-prelude.cc
*** gcc-16-20251207/gcc/algol68/a68-low-prelude.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-low-prelude.cc	Sun Dec 14 22:32:06 2025
*************** a68_lower_char_mult3 (NODE_T *p, LOW_CTX
*** 944,950 ****
  
    if (MOID (n1) == M_INT)
      {
!       gcc_assert (MOID (n2) == M_STRING || MOID (n2) == M_ROW_CHAR);
        return a68_string_mult (a68_string_from_char (a68_lower_tree (n2, ctx)),
  			      a68_lower_tree (n1, ctx));
      }
--- 944,950 ----
  
    if (MOID (n1) == M_INT)
      {
!       gcc_assert (MOID (n2) == M_CHAR);
        return a68_string_mult (a68_string_from_char (a68_lower_tree (n2, ctx)),
  			      a68_lower_tree (n1, ctx));
      }
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-low-reals.cc gcc-16-20251214/gcc/algol68/a68-low-reals.cc
*** gcc-16-20251207/gcc/algol68/a68-low-reals.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-low-reals.cc	Sun Dec 14 22:32:06 2025
*************** tree
*** 165,170 ****
--- 165,171 ----
  a68_real_sign (tree val)
  {
    tree zero = build_real (TREE_TYPE (val), dconst0);
+   val = save_expr (val);
    return fold_build3 (COND_EXPR,
  		      a68_int_type,
  		      build2 (EQ_EXPR, integer_type_node, val, zero),
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-parser-bottom-up.cc gcc-16-20251214/gcc/algol68/a68-parser-bottom-up.cc
*** gcc-16-20251207/gcc/algol68/a68-parser-bottom-up.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-parser-bottom-up.cc	Sun Dec 14 22:32:06 2025
*************** a68_rearrange_goto_less_jumps (NODE_T *p
*** 2981,2989 ****
  }
  
  /*
!  * Coalesce PUBLIC_SYMBOLs resulting from reductions, annotating the
!  * corresponding defining identifiers, indicators, operators and prios as
!  * publicized.
   */
  
  void
--- 2981,2989 ----
  }
  
  /*
!  * Remove PUBLIC_SYMBOLs resulting from reductions from the tree.  Note that
!  * the defining indicants, identifiers and operators have been already marked
!  * as publicized or not publicized by the extract routines.
   */
  
  void
*************** a68_bottom_up_coalesce_pub (NODE_T *p)
*** 3000,3022 ****
  	  if (SUB (p) != NO_NODE && IS (SUB (p), PUBLIC_SYMBOL))
  	    {
  	      NODE_T *public_symbol = SUB (p);
- 
- 	      /* Mark the defining entity as PUBlicized.  */
- 	      /* XXX handle joined declarations.  */
- 	      NODE_T *defining_entity = NEXT (NEXT (SUB (p)));
- 	      if (!a68_is_one_of (defining_entity,
- 				  DEFINING_INDICANT, DEFINING_IDENTIFIER, DEFINING_OPERATOR,
- 				  STOP))
- 		FORWARD (defining_entity);
- 	      gcc_assert (defining_entity != NO_NODE
- 			  && a68_is_one_of (defining_entity,
- 					    DEFINING_INDICANT,
- 					    DEFINING_IDENTIFIER,
- 					    DEFINING_OPERATOR,
- 					    STOP));
- 	      PUBLICIZED (defining_entity) = true;
- 
- 	      /* Unlink the PUBLIC_SYMBOL node and get rid of it.  */
  	      SUB (p) = NEXT (public_symbol);
  	      PREVIOUS (NEXT (public_symbol)) = NO_NODE;
  	    }
--- 3000,3005 ----
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-parser-extract.cc gcc-16-20251214/gcc/algol68/a68-parser-extract.cc
*** gcc-16-20251207/gcc/algol68/a68-parser-extract.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-parser-extract.cc	Sun Dec 14 22:32:06 2025
*************** a68_extract_indicants (NODE_T *p)
*** 385,393 ****
  	    }
  	  while (siga && q != NO_NODE && IS (q, COMMA_SYMBOL));
  	}
!       else if (IS (q, MODE_SYMBOL))
  	{
  	  bool siga = true;
  	  do
  	    {
  	      FORWARD (q);
--- 385,401 ----
  	    }
  	  while (siga && q != NO_NODE && IS (q, COMMA_SYMBOL));
  	}
!       else if (IS (q, MODE_SYMBOL) || a68_whether (q, PUBLIC_SYMBOL, MODE_SYMBOL, STOP))
  	{
  	  bool siga = true;
+ 	  bool is_public = false;
+ 
+ 	  if (IS (q, PUBLIC_SYMBOL))
+ 	    {
+ 	      is_public = true;
+ 	      FORWARD (q);
+ 	    }
+ 
  	  do
  	    {
  	      FORWARD (q);
*************** a68_extract_indicants (NODE_T *p)
*** 402,407 ****
--- 410,416 ----
  		  if (a68_add_mode (&TOP_MOID (&A68_JOB), INDICANT, 0, q, NO_MOID, NO_PACK) == NO_MOID)
  		    gcc_unreachable ();
  		  ATTRIBUTE (q) = DEFINING_INDICANT;
+ 		  PUBLICIZED (q) = is_public;
  		  FORWARD (q);
  		  ATTRIBUTE (q) = ALT_EQUALS_SYMBOL;
  		  q = skip_pack_declarer (NEXT (q));
*************** a68_extract_priorities (NODE_T *p)
*** 440,448 ****
    NODE_T *q = p;
    while (q != NO_NODE)
      {
!       if (IS (q, PRIO_SYMBOL))
  	{
  	  bool siga = true;
  	  do
  	    {
  	      FORWARD (q);
--- 449,465 ----
    NODE_T *q = p;
    while (q != NO_NODE)
      {
!       if (IS (q, PRIO_SYMBOL) || a68_whether (q, PUBLIC_SYMBOL, PRIO_SYMBOL, STOP))
  	{
  	  bool siga = true;
+ 	  bool is_public = false;
+ 
+ 	  if (IS (q, PUBLIC_SYMBOL))
+ 	    {
+ 	      is_public = true;
+ 	      FORWARD (q);
+ 	    }
+ 
  	  do
  	    {
  	      FORWARD (q);
*************** a68_extract_priorities (NODE_T *p)
*** 454,459 ****
--- 471,477 ----
  		  NODE_T *y = q;
  		  a68_error (q, "invalid operator tag");
  		  ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 		  PUBLICIZED (q) = is_public;
  		  /* Remove one superfluous operator, and hope it was only
  		     one.  */
  		  NEXT (q) = NEXT_NEXT (q);
*************** a68_extract_priorities (NODE_T *p)
*** 473,478 ****
--- 491,497 ----
  		{
  		  NODE_T *y = q;
  		  ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 		  PUBLICIZED (q) = is_public;
  		  FORWARD (q);
  		  ATTRIBUTE (q) = ALT_EQUALS_SYMBOL;
  		  FORWARD (q);
*************** a68_extract_priorities (NODE_T *p)
*** 491,496 ****
--- 510,516 ----
  		{
  		  NODE_T *y = q;
  		  ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 		  PUBLICIZED (q) = is_public;
  		  FORWARD (q);
  		  ATTRIBUTE (q) = ALT_EQUALS_SYMBOL;
  		  FORWARD (q);
*************** a68_extract_priorities (NODE_T *p)
*** 517,522 ****
--- 537,543 ----
  		      if (len > 2 && NSYMBOL (q)[len - 2] == ':' && NSYMBOL (q)[len - 3] != '=')
  			a68_error (q, "probably a missing symbol near invalid operator S");
  		      ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 		      PUBLICIZED (q) = is_public;
  		      insert_alt_equals (q);
  		      q = NEXT_NEXT (q);
  		      int k;
*************** a68_extract_operators (NODE_T *p)
*** 548,559 ****
  
    while (q != NO_NODE)
      {
!       if (!IS (q, OP_SYMBOL))
! 	FORWARD (q);
!       else
  	{
  	  bool siga = true;
  	  bool in_proc = true;
  	  /* Skip operator plan.  */
  	  if (NEXT (q) != NO_NODE && IS (NEXT (q), OPEN_SYMBOL))
  	    {
--- 569,586 ----
  
    while (q != NO_NODE)
      {
!       if (IS (q, OP_SYMBOL) || a68_whether (q, PUBLIC_SYMBOL, OP_SYMBOL, STOP))
  	{
  	  bool siga = true;
  	  bool in_proc = true;
+ 	  bool is_public = false;
+ 
+ 	  if (IS (q, PUBLIC_SYMBOL))
+ 	    {
+ 	      is_public = true;
+ 	      FORWARD (q);
+ 	    }
+ 
  	  /* Skip operator plan.  */
  	  if (NEXT (q) != NO_NODE && IS (NEXT (q), OPEN_SYMBOL))
  	    {
*************** a68_extract_operators (NODE_T *p)
*** 573,578 ****
--- 600,606 ----
  		    {
  		      a68_error (q, "invalid operator tag");
  		      ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 		      PUBLICIZED (q) = is_public;
  		      TAG_T *t = a68_add_tag (TABLE (p), OP_SYMBOL, q, NO_MOID, STOP);
  		      if (t == NO_TAG)
  			gcc_unreachable ();
*************** a68_extract_operators (NODE_T *p)
*** 588,593 ****
--- 616,622 ----
  			   || a68_whether (q, EQUALS_SYMBOL, EQUALS_SYMBOL, STOP))
  		    {
  		      ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 		      PUBLICIZED (q) = is_public;
  		      TAG_T *t = a68_add_tag (TABLE (p), OP_SYMBOL, q, NO_MOID, STOP);
  		      if (t == NO_TAG)
  			gcc_unreachable ();
*************** a68_extract_operators (NODE_T *p)
*** 603,608 ****
--- 632,638 ----
  		  else if (a68_whether (q, BOLD_TAG, EQUALS_SYMBOL, STOP))
  		    {
  		      ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 		      PUBLICIZED (q) = is_public;
  		      TAG_T *t = a68_add_tag (TABLE (p), OP_SYMBOL, q, NO_MOID, STOP);
  		      if (t == NO_TAG)
  			gcc_unreachable ();
*************** a68_extract_operators (NODE_T *p)
*** 625,630 ****
--- 655,661 ----
  			  if (len > 2 && NSYMBOL (q)[len - 2] == ':' && NSYMBOL (q)[len - 3] != '=')
  			    a68_error (q, "probably a missing symbol near invalid operator S");
  			  ATTRIBUTE (q) = DEFINING_OPERATOR;
+ 			  PUBLICIZED (q) = is_public;
  			  insert_alt_equals (q);
  			  TAG_T *t = a68_add_tag (TABLE (p), OP_SYMBOL, q, NO_MOID, STOP);
  			  if (t == NO_TAG)
*************** a68_extract_operators (NODE_T *p)
*** 642,647 ****
--- 673,680 ----
  	      while (siga && q != NO_NODE && IS (q, COMMA_SYMBOL));
  	    }
  	}
+       else
+ 	FORWARD (q);
      }
  }
  
*************** extract_identities (NODE_T *p)
*** 674,682 ****
  
    while (q != NO_NODE)
      {
!       if (a68_whether (q, DECLARER, IDENTIFIER, EQUALS_SYMBOL, STOP))
  	{
  	  bool siga = true;
  	  do
  	    {
  	      if (a68_whether ((FORWARD (q)), IDENTIFIER, EQUALS_SYMBOL, STOP))
--- 707,724 ----
  
    while (q != NO_NODE)
      {
!       if (a68_whether (q, DECLARER, IDENTIFIER, EQUALS_SYMBOL, STOP)
! 	  || a68_whether (q, PUBLIC_SYMBOL, DECLARER, IDENTIFIER, EQUALS_SYMBOL, STOP))
  	{
  	  bool siga = true;
+ 	  bool is_public = false;
+ 
+ 	  if (IS (q, PUBLIC_SYMBOL))
+ 	    {
+ 	      is_public = true;
+ 	      FORWARD (q);
+ 	    }
+ 
  	  do
  	    {
  	      if (a68_whether ((FORWARD (q)), IDENTIFIER, EQUALS_SYMBOL, STOP))
*************** extract_identities (NODE_T *p)
*** 685,690 ****
--- 727,733 ----
  		  if (tag == NO_TAG)
  		    gcc_unreachable ();
  		  ATTRIBUTE (q) = DEFINING_IDENTIFIER;
+ 		  PUBLICIZED (q) = is_public;
  		  FORWARD (q);
  		  ATTRIBUTE (q) = ALT_EQUALS_SYMBOL;
  		  q = skip_unit (q);
*************** extract_identities (NODE_T *p)
*** 696,701 ****
--- 739,745 ----
  		  if (a68_add_tag (TABLE (p), IDENTIFIER, q, NO_MOID, NORMAL_IDENTIFIER) == NO_TAG)
  		    gcc_unreachable ();
  		  ATTRIBUTE (q) = DEFINING_IDENTIFIER;
+ 		  PUBLICIZED (q) = is_public;
  		  ATTRIBUTE (FORWARD (q)) = ALT_EQUALS_SYMBOL;
  		  q = skip_unit (q);
  		}
*************** extract_variables (NODE_T *p)
*** 720,728 ****
      {
        if (a68_whether (q, HEAP_SYMBOL, DECLARER, IDENTIFIER, STOP)
  	  || a68_whether (q, LOC_SYMBOL, DECLARER, IDENTIFIER, STOP)
! 	  || a68_whether (q, DECLARER, IDENTIFIER, STOP))
  	{
! 	  if (!IS (q, DECLARER))
  	    FORWARD (q);
  
  	  bool siga = true;
--- 764,776 ----
      {
        if (a68_whether (q, HEAP_SYMBOL, DECLARER, IDENTIFIER, STOP)
  	  || a68_whether (q, LOC_SYMBOL, DECLARER, IDENTIFIER, STOP)
! 	  || a68_whether (q, DECLARER, IDENTIFIER, STOP)
! 	  || a68_whether (q, PUBLIC_SYMBOL, HEAP_SYMBOL, DECLARER, IDENTIFIER, STOP)
! 	  || a68_whether (q, PUBLIC_SYMBOL, LOC_SYMBOL, DECLARER, IDENTIFIER, STOP)
! 	  || a68_whether (q, PUBLIC_SYMBOL, DECLARER, IDENTIFIER, STOP))
  	{
! 	  bool is_public = IS (q, PUBLIC_SYMBOL);
! 	  while (!IS (q, DECLARER))
  	    FORWARD (q);
  
  	  bool siga = true;
*************** extract_variables (NODE_T *p)
*** 742,747 ****
--- 790,796 ----
  		    gcc_unreachable ();
  		  VARIABLE (tag) = true;
  		  ATTRIBUTE (q) = DEFINING_IDENTIFIER;
+ 		  PUBLICIZED (q) = is_public;
  		  q = skip_unit (q);
  		}
  	      else
*************** extract_proc_identities (NODE_T *p)
*** 763,771 ****
  
    while (q != NO_NODE)
      {
!       if (a68_whether (q, PROC_SYMBOL, IDENTIFIER, EQUALS_SYMBOL, STOP))
  	{
  	  bool siga = true;
  	  do
  	    {
  	      FORWARD (q);
--- 812,829 ----
  
    while (q != NO_NODE)
      {
!       if (a68_whether (q, PROC_SYMBOL, IDENTIFIER, EQUALS_SYMBOL, STOP)
! 	  || a68_whether (q, PUBLIC_SYMBOL, PROC_SYMBOL, IDENTIFIER, EQUALS_SYMBOL, STOP))
  	{
  	  bool siga = true;
+ 	  bool is_public = false;
+ 
+ 	  if (IS (q, PUBLIC_SYMBOL))
+ 	    {
+ 	      is_public = true;
+ 	      FORWARD (q);
+ 	    }
+ 
  	  do
  	    {
  	      FORWARD (q);
*************** extract_proc_identities (NODE_T *p)
*** 774,779 ****
--- 832,838 ----
  		  TAG_T *t = a68_add_tag (TABLE (p), IDENTIFIER, q, NO_MOID, NORMAL_IDENTIFIER);
  		  IN_PROC (t) = true;
  		  ATTRIBUTE (q) = DEFINING_IDENTIFIER;
+ 		  PUBLICIZED (q) = is_public;
  		  ATTRIBUTE (FORWARD (q)) = ALT_EQUALS_SYMBOL;
  		  q = skip_unit (q);
  		}
*************** extract_proc_identities (NODE_T *p)
*** 784,789 ****
--- 843,849 ----
  		  if (a68_add_tag (TABLE (p), IDENTIFIER, q, NO_MOID, NORMAL_IDENTIFIER) == NO_TAG)
  		    gcc_unreachable ();
  		  ATTRIBUTE (q) = DEFINING_IDENTIFIER;
+ 		  PUBLICIZED (q) = is_public;
  		  ATTRIBUTE (FORWARD (q)) = ALT_EQUALS_SYMBOL;
  		  q = skip_unit (q);
  		}
*************** extract_proc_variables (NODE_T *p)
*** 806,814 ****
  
    while (q != NO_NODE)
      {
!       if (a68_whether (q, PROC_SYMBOL, IDENTIFIER, STOP))
  	{
  	  bool siga = true;
  	  do
  	    {
  	      FORWARD (q);
--- 866,883 ----
  
    while (q != NO_NODE)
      {
!       if (a68_whether (q, PROC_SYMBOL, IDENTIFIER, STOP)
! 	  || a68_whether (q, PUBLIC_SYMBOL, PROC_SYMBOL, IDENTIFIER, STOP))
  	{
  	  bool siga = true;
+ 	  bool is_public = false;
+ 
+ 	  if (IS (q, PUBLIC_SYMBOL))
+ 	    {
+ 	      is_public = true;
+ 	      FORWARD (q);
+ 	    }
+ 
  	  do
  	    {
  	      FORWARD (q);
*************** extract_proc_variables (NODE_T *p)
*** 818,823 ****
--- 887,893 ----
  		  gcc_assert (tag != NO_TAG);
  		  VARIABLE (tag) = true;
  		  ATTRIBUTE (q) = DEFINING_IDENTIFIER;
+ 		  PUBLICIZED (q) = is_public;
  		  q = skip_unit (FORWARD (q));
  		}
  	      else if (a68_whether (q, IDENTIFIER, EQUALS_SYMBOL, STOP))
*************** extract_proc_variables (NODE_T *p)
*** 827,832 ****
--- 897,903 ----
  		  TAG_T *tag = a68_add_tag (TABLE (p), IDENTIFIER, q, NO_MOID, NORMAL_IDENTIFIER);
  		  gcc_assert (tag != NO_TAG);
  		  ATTRIBUTE (q) = DEFINING_IDENTIFIER;
+ 		  PUBLICIZED (q) = is_public;
  		  ATTRIBUTE (FORWARD (q)) = ASSIGN_SYMBOL;
  		  q = skip_unit (q);
  		} else
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-parser-scanner.cc gcc-16-20251214/gcc/algol68/a68-parser-scanner.cc
*** gcc-16-20251207/gcc/algol68/a68-parser-scanner.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-parser-scanner.cc	Sun Dec 14 22:32:06 2025
*************** read_source_file (const char *filename)
*** 328,339 ****
      fatal_error (UNKNOWN_LOCATION, "specified file %s is a directory",
  		 filename);
  
!   if ((source_file_size = get_source_size ()) == 0)
!     {
!       /* The source file is empty.  */
!       ret = false;
!       goto done;
!     }
  
    /* Allocate A68_PARSER (scan_buf), which is an auxiliary buffer used by the
       scanner known to be big enough to hold any string contained in the source
--- 328,334 ----
      fatal_error (UNKNOWN_LOCATION, "specified file %s is a directory",
  		 filename);
  
!   source_file_size = get_source_size ();
  
    /* Allocate A68_PARSER (scan_buf), which is an auxiliary buffer used by the
       scanner known to be big enough to hold any string contained in the source
*************** read_source_file (const char *filename)
*** 395,401 ****
    /* Include files.  */
    include_files (TOP_LINE (&A68_JOB));
  
-  done:
    if (fclose (FILE_SOURCE_FD (&A68_JOB)) != 0)
      gcc_unreachable ();
    return ret;
--- 390,395 ----
*************** tokenise_source (NODE_T **root, int leve
*** 2279,2285 ****
  /* Tokenise source file, build initial syntax tree.  */
  
  bool
! a68_lexical_analyser (const char *filename)
  {
    LINE_T *l = NO_LINE, *start_l = NO_LINE;
    char *s = NO_TEXT, *start_c = NO_TEXT;
--- 2273,2279 ----
  /* Tokenise source file, build initial syntax tree.  */
  
  bool
! a68_lexical_analyser (const char *filename, bool *empty_program)
  {
    LINE_T *l = NO_LINE, *start_l = NO_LINE;
    char *s = NO_TEXT, *start_c = NO_TEXT;
*************** a68_lexical_analyser (const char *filena
*** 2295,2300 ****
--- 2289,2311 ----
      s = STRING (l);
    tokenise_source (&root, 0, false, &l, &s, &start_l, &start_c);
  
+   /* Detemine whether the actual file contents resulted in some token.  This is
+      used in order to provide better diagnostics for empty source files or
+      files containing only comments or pragmats.  These are not valid Algol 68
+      packets.  */
+ 
+   *empty_program = true;
+   for (NODE_T *p = TOP_NODE (&A68_JOB); p != NO_NODE; FORWARD (p))
+     {
+       LINE_T *l = LINE (INFO (p));
+       if (strcmp (FILENAME (l), "prelude") != 0
+ 	  && strcmp (FILENAME (l), "postlude") != 0)
+ 	{
+ 	  *empty_program = false;
+ 	  break;
+ 	}
+     }
+ 
    /* If the source is a prelude packet then we should remove the prelude and
       postlude nodes from the token stream.  We distinguish these nodes by
       location.
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68-parser.cc gcc-16-20251214/gcc/algol68/a68-parser.cc
*** gcc-16-20251207/gcc/algol68/a68-parser.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68-parser.cc	Sun Dec 14 22:32:06 2025
*************** a68_parser (const char *filename)
*** 454,470 ****
    /* Tokeniser.  */
    if (ERROR_COUNT (&A68_JOB) == 0)
      {
!       bool ok = a68_lexical_analyser (filename);
  
        if (!ok)
  	return;
  
!       /* An empty file is not a valid program.  */
!       if (TOP_NODE (&A68_JOB) == NO_NODE)
! 	{
! 	  a68_error (NO_NODE, "file is empty, expected a program");
! 	  return;
! 	}
  
        TREE_LISTING_SAFE (&A68_JOB) = true;
        renum = 0;
--- 454,468 ----
    /* Tokeniser.  */
    if (ERROR_COUNT (&A68_JOB) == 0)
      {
!       bool empty_program;
!       bool ok = a68_lexical_analyser (filename, &empty_program);
  
        if (!ok)
  	return;
  
!       if (empty_program)
! 	a68_error (NO_NODE,
! 		   "particular program or prelude packet not found in source file");
  
        TREE_LISTING_SAFE (&A68_JOB) = true;
        renum = 0;
diff -Nrcpad gcc-16-20251207/gcc/algol68/a68.h gcc-16-20251214/gcc/algol68/a68.h
*** gcc-16-20251207/gcc/algol68/a68.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/a68.h	Sun Dec 14 22:32:06 2025
*************** void a68_scan_error (LINE_T *u, char *v,
*** 280,286 ****
  
  /* a68-parser-scanner.cc  */
  
! bool a68_lexical_analyser (const char *filename);
  
  /* a68-parser.cc  */
  
--- 280,286 ----
  
  /* a68-parser-scanner.cc  */
  
! bool a68_lexical_analyser (const char *filename, bool *empty_file);
  
  /* a68-parser.cc  */
  
diff -Nrcpad gcc-16-20251207/gcc/algol68/ga68.texi gcc-16-20251214/gcc/algol68/ga68.texi
*** gcc-16-20251207/gcc/algol68/ga68.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/ga68.texi	Sun Dec 14 22:32:06 2025
*************** other parts of the compiler:
*** 207,215 ****
  @opindex I
  @item -I@var{dir}
  Add the directory @var{dir} to the list of directories to be searched
! for files when processing the @ref{pragmat include}. Multiple
  @option{-I} options can be used, and the directories specified are
! scanned in left-to-right order, as with @command{gcc}.
  
  @end table
  
--- 207,226 ----
  @opindex I
  @item -I@var{dir}
  Add the directory @var{dir} to the list of directories to be searched
! for files when processing the @ref{pragmat include}.  Multiple
  @option{-I} options can be used, and the directories specified are
! scanned in left-to-right order, as with @command{gcc}.  The directory
! will also be added to the list of directories to be searched for module
! interface-definitions @ref{Module activation}.
! 
! @opindex L
! @item -L@var{dir}
! Add the directory @var{dir} to the list of directories to be searched
! for module interface-definitions @ref{Module activation}.  Multiple
! @option{-L} options can be used, and the directories specified are
! scanned in left-to-right order, as with @command{gcc}.  The directory
! will also be added to the list of library search directories, as with
! @command{gcc}.
  
  @end table
  
diff -Nrcpad gcc-16-20251207/gcc/algol68/lang.opt gcc-16-20251214/gcc/algol68/lang.opt
*** gcc-16-20251207/gcc/algol68/lang.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/lang.opt	Sun Dec 14 22:32:06 2025
*************** I
*** 28,33 ****
--- 28,37 ----
  Algol68 Joined Separate
  ; Documented in c-family/c.opt
  
+ L
+ Algol68 Joined Separate
+ ; Not documented
+ 
  Wextensions
  Algol68 Warning Var(warn_algol68_extensions) LangEnabledBy(Algol68, Wextra)
  Warn for usage of non-portable extensions of Algol 68.
diff -Nrcpad gcc-16-20251207/gcc/algol68/lang.opt.urls gcc-16-20251214/gcc/algol68/lang.opt.urls
*** gcc-16-20251207/gcc/algol68/lang.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/algol68/lang.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 3,8 ****
--- 3,11 ----
  I
  UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-I)
  
+ L
+ UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-L)
+ 
  Wextensions
  LangUrlSuffix_Algol68(ga68/Warnings-options.html#index-Wextensions)
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/ChangeLog gcc-16-20251214/gcc/analyzer/ChangeLog
*** gcc-16-20251207/gcc/analyzer/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/ChangeLog	Sun Dec 14 22:32:06 2025
***************
*** 1,3 ****
--- 1,924 ----
+ 2025-12-12  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* analyzer.opt.urls: Regenerate.
+ 
+ 2025-12-12  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/122003
+ 	* analyzer-logging.h (class log_nesting_level): New.
+ 	(log_nesting_level::log_nesting_level): New.
+ 	(log_nesting_level::~log_nesting_level): New.
+ 	* analyzer.cc (is_cxa_end_catch_p): New.
+ 	* analyzer.opt (fdump-analyzer-callgraph): Make this as a no-op
+ 	preserved for backwards compatibility.
+ 	(fanalyzer-fine-grained): Likewise.
+ 	(fanalyzer-simplify-supergraph): New.
+ 	* bounds-checking.cc (strip_types): Update for changes to
+ 	widening_svalue.
+ 	* call-details.h: Include "pending-diagnostic.h".
+ 	* call-info.cc (custom_edge_info::get_dot_attrs): New.
+ 	(call_info::add_events_to_path): Add pending_diagnostic & param.
+ 	Fix indentation.
+ 	* call-info.h (call_info::add_events_to_path): Add
+ 	pending_diagnostic & param.
+ 	* call-string.cc (call_string::element_t::operator==): Reimplement.
+ 	(call_string::element_t::cmp): New.
+ 	(call_string::element_t::get_caller_function): Likewise.
+ 	(call_string::element_t::get_callee_function): Likewise.
+ 	(call_string::element_t::get_call_snode_in_caller): New.
+ 	(call_string::element_t::get_return_snode_in_caller): New.
+ 	(call_string::element_t::get_call_stmt): New.
+ 	(call_string::print): Update for new implementation.
+ 	(call_string::to_json): Likewise.
+ 	(call_string::push_call): Likewise.
+ 	(call_string::count_occurrences_of_function): Likewise.
+ 	(call_string::cmp): Likewise.
+ 	(call_string::get_callee_node): Delete.
+ 	(call_string::get_caller_node): Convert into...
+ 	(call_string::get_return_node_in_caller): ...this new function.
+ 	(call_string::validate): Update for new implementation.
+ 	(call_string::recursive_log): Likewise.
+ 	* call-string.h (class call_superedge): Delete forward decl.
+ 	(class return_superedge): Likewise.
+ 	(class call_and_return_op): New forward decl.
+ 	(struct call_string::element_t): Reimplement using
+ 	call_and_return_op, rather than relying on interprocedural edges
+ 	in the supergraph.
+ 	(class call_string): Likewise.
+ 	* call-summary.cc (call_summary::get_fndecl): Reimplement.
+ 	(call_summary_replay::convert_svalue_from_summary_1): Update for
+ 	changes to widening_svalue.
+ 	* checker-event.cc (event_kind_to_string): Update for renamings
+ 	of event_kind::{call_edge -> call_} and
+ 	event_kind::{return_edge -> return_}.
+ 	(region_creation_event_debug::print_desc): Update for change to
+ 	event_loc_info.
+ 	(state_change_event::state_change_event): Pass in event_loc_info
+ 	rather than stack_depth, and pass it to checker_event ctor.
+ 	(superedge_event::get_callgraph_superedge): Delete.
+ 	(superedge_event::should_filter_p): Reimplement in terms of
+ 	get_any_cfg_edge.
+ 	(superedge_event::get_call_and_return_op): New.
+ 	(superedge_event::superedge_event): Drop m_eedge and
+ 	m_critical_state.  Add assertion that the superedge is non-null.
+ 	(cfg_edge_event::get_cfg_superedge): Delete.
+ 	(cfg_edge_event::cfg_edge_event): Add "op" param, and remove
+ 	assertion refering to kinds of superedge.
+ 	(cfg_edge_event::get_meaning): Reimplement without
+ 	cfg_superedge.
+ 	(cfg_edge_event::get_cfg_edge): New.
+ 	(start_cfg_edge_event::print_desc): Use m_op.  Update for renaming
+ 	of superedge::m_index to superedge::m_id.
+ 	(start_cfg_edge_event::maybe_describe_condition): Reimplement in
+ 	ops.cc as gcond_edge_op::maybe_describe_condition.
+ 	(start_cfg_edge_event::should_print_expr_p): Reimplement in ops.cc
+ 	as gcond_edge_op::should_print_expr_p.
+ 	(call_event::call_event): Update for renaming of event_kind.  Drop
+ 	assertion about superedge kind.
+ 	(call_event::print_desc): Update for consolidation of m_var and
+ 	m_critical_state into a struct.
+ 	(return_event::return_event): Inherit directly from checker_event.
+ 	Drop assertion referring to kinds of superedge.  Initialize m_edge
+ 	and m_call_and_return_op.
+ 	(return_event::print_desc): Update for change to m_critical_state.
+ 	* checker-event.h (enum class event_kind): Rename call_edge to
+ 	call_, and return_edge to return_.
+ 	(state_change_event::state_change_event): Update for changes to
+ 	location-handling in base class ctor.
+ 	(state_change_event::record_critical_state): Drop this, moving
+ 	it to special-cases in the subclasses that need it.
+ 	(state_change_event::get_callgraph_superedge): Delete.
+ 	(superedge_event::get_call_and_return_op): New vfunc decl.
+ 	(superedge_event::m_var, superedge_event::m_critical_state): Drop
+ 	these fields from this class, combining them into a new struct
+ 	and moving the fields to the interprocedural event subclasses
+ 	where they make sense.
+ 	(cfg_edge_event::get_cfg_superedge): Delete.
+ 	(cfg_edge_event::get_cfg_edge): Add.
+ 	(cfg_edge_event::cfg_edge_event): Update for changes to location
+ 	handling in base class ctor.  Add "op".
+ 	(cfg_edge_event::m_op): New field.
+ 	(start_cfg_edge_event::start_cfg_edge_event): Update for changes
+ 	to base class ctor.
+ 	(start_cfg_edge_event::maybe_describe_condition): Drop.
+ 	(end_cfg_edge_event::end_cfg_edge_event): Update for changes to
+ 	base class ctor.
+ 	(catch_cfg_edge_event::catch_cfg_edge_event): Likewise.
+ 	(struct critical_state): New struct.
+ 	(call_event::record_critical_state): New decl.
+ 	(call_event::m_critical_state): New field.
+ 	(class return_event): Inherit from checker_event, rather than
+ 	superedge_event.
+ 	(return_event::get_call_and_return_op): New.
+ 	(return_event::record_critical_state): New.
+ 	(return_event::m_call_and_return_op): New field.
+ 	(return_event::m_critical_state): New field.
+ 	* common.h: Define INCLUDE_SET.
+ 	(class cfg_superedge): Drop forward decl.
+ 	(class switch_cfg_superedge): Likewise.
+ 	(class eh_dispatch_cfg_superedge): Likewise.
+ 	(class eh_dispatch_try_cfg_superedge): Likewise.
+ 	(class eh_dispatch_allowed_cfg_superedge): Likewise.
+ 	(class callgraph_superedge): Likewise.
+ 	(class call_superedge): Likewise.
+ 	(class return_superedge): Likewise.
+ 	(class stmt_finder): Likewise.
+ 	(class function_point): Likewise.
+ 	(class feasibility_state): New forward decl.
+ 	(class uncertainty_t): Likewise.
+ 	(useful_location_p): New.
+ 	(known_function::check_any_preconditions): New.
+ 	(custom_edge_info::get_dot_attrs): New decl.
+ 	(custom_edge_info::add_events_to_path): Add param
+ 	"pending_diagnostic &pd".
+ 	(is_cxa_end_catch_p): New decl.
+ 	* constraint-manager.cc
+ 	(bounded_ranges_manager::get_or_create_ranges_for_switch): Delete.
+ 	(bounded_ranges_manager::create_ranges_for_switch): Delete.
+ 	* constraint-manager.h
+ 	(bounded_ranges_manager::get_or_create_ranges_for_switch): Delete
+ 	decl.
+ 	(bounded_ranges_manager::create_ranges_for_switch): Likewise.
+ 	(bounded_ranges_manager::make_case_label_ranges): Make public for
+ 	use by ops code.
+ 	(bounded_ranges_manager::edge_cache_t): Delete.
+ 	(bounded_ranges_manager::m_edge_cache): Delete.
+ 	* diagnostic-manager.cc (pending_location::pending_location): New
+ 	ctor implementations.
+ 	(pending_location::to_json): New.
+ 	(epath_finder::get_best_epath): Rename param to "target_enode".
+ 	Drop param "target_stmt".  Update for renaming of
+ 	supernode::m_index to m_id.
+ 	(epath_finder::explore_feasible_paths): Drop param "target_stmt".
+ 	(process_worklist_item): Likewise.
+ 	(saved_diagnostic::saved_diagnostic): Pass in param "ploc" by
+ 	rvalue reference and store it in m_ploc.  Drop m_stmt_finder and
+ 	other fields made redundant by m_ploc.
+ 	(saved_diagnostic::get_supernode): New.
+ 	(saved_diagnostic::operator==): Update for changes to
+ 	location-tracking.
+ 	(saved_diagnostic::to_json): Update.
+ 	(saved_diagnostic::dump_as_dot_node): Drop m_stmt.
+ 	(saved_diagnostic::calc_best_epath): Update for change to
+ 	location-tracking.
+ 	(saved_diagnostic::supercedes_p): Likewise.
+ 	(saved_diagnostic::maybe_add_sarif_properties): Likewise.
+ 	(get_emission_location): Delete.
+ 	(diagnostic_manager::add_diagnostic): Pass "ploc" by rvalue
+ 	reference, moving it to the saved_diagnostic.  Update early
+ 	rejection check, and call fixup_location before-hand.
+ 	(class dedupe_key): Drop m_stmt field, and update for changes
+ 	to saved_diagnostic.
+ 	(dedupe_winners::add): Call get_best_epath here, and call
+ 	fixer_for_epath on it.
+ 	(diagnostic_manager::emit_saved_diagnostics): Update for
+ 	changes to saved_diagnostic and supernode.
+ 	(diagnostic_manager::emit_saved_diagnostic): Likewise.
+ 	Use the pending_location from the saved_diagnostic for the
+ 	location of the final event, and for the primary location of the
+ 	diagnostic itself.
+ 	(diagnostic_manager::build_emission_path): Use useful_location_p.
+ 	(state_change_event_creator::on_global_state_change): Update for
+ 	changes to location-tracking.
+ 	(state_change_event_creator::on_state_change): Likewise.
+ 	(struct null_assignment_sm_context): Reimplement within ops.cc.
+ 	(diagnostic_manager::add_events_for_eedge): Reimplement.
+ 	(diagnostic_manager::add_events_for_superedge): Delete in favor of
+ 	control_flow_op::add_any_events_for_eedge.
+ 	(diagnostic_manager::prune_for_sm_diagnostic): Update call/return
+ 	for event_kind renamings, and to use call_and_return_op rathern
+ 	than callgraph_superedge.
+ 	(diagnostic_manager::consolidate_conditions): Port from
+ 	cfg_superedge to get_cfg_edge.
+ 	* diagnostic-manager.h: Include "analyzer/supergraph.h" and
+ 	"analyzer/event-loc-info.h".
+ 	(struct pending_location): Move decl earlier in file.  Replace
+ 	the existing specified ctors with 3 new ones.  Add comments.
+ 	(class pending_location::fixer_for_epath): New.
+ 	(pending_location::get_location): New.
+ 	(pending_location::to_json): New decl.
+ 	(pending_location::m_snode): Drop redundant field.
+ 	(pending_location::m_event_loc_info): New field, replacing m_stmt
+ 	and m_loc.
+ 	(pending_location::m_finder): Replace with...
+ 	(pending_location::m_fixer_for_epath): ...this new field.
+ 	(make_ploc_fixer_for_epath_for_leak_diagnostic): New decl.
+ 	(saved_diagnostic::saved_diagnostic): Pass in param "ploc" by
+ 	rvalue reference and store it in m_ploc.
+ 	(saved_diagnostic::get_supernode): New.
+ 	(saved_diagnostic::m_ploc): New field, replacing m_enode,
+ 	m_snode, m_stmt, m_stmt_finder, and m_loc.
+ 	(diagnostic_manager::add_diagnostic): Pass ploc as rvalue
+ 	reference.
+ 	(diagnostic_manager::add_events_for_superedge): Delete decl.
+ 	* engine.cc: Include "gimple-predict.h" and
+ 	"analyzer/impl-sm-context.h".
+ 	(impl_region_model_context::impl_region_model_context): Drop
+ 	stmt_finder.
+ 	(impl_region_model_context::warn): Convert to...
+ 	(impl_region_model_context::warn_at): ...this.
+ 	(class impl_sm_context): Move to impl-sm-context.h.
+ 	(impl_region_model_context::get_state_map_by_name): Drop
+ 	m_stmt_finder.
+ 	(class leak_stmt_finder): Reimplement as...
+ 	(class leak_ploc_fixer_for_epath): ...this.
+ 	(make_ploc_fixer_for_epath_for_leak_diagnostic): New.
+ 	(returning_from_function_p): Update for supergraph changes.
+ 	(impl_region_model_context::on_state_leak): Port from
+ 	leak_stmt_finder to leak_ploc_fixer_for_epath.
+ 	(impl_region_model_context::on_condition): Update for
+ 	location-handling changes.
+ 	(impl_region_model_context::on_bounded_ranges): Likewise.
+ 	(impl_region_model_context::on_phi): Likewise.
+ 	(impl_region_model_context::get_pending_location_for_diag): New.
+ 	(exploded_node::status_to_str): Add status::special.
+ 	(exploded_node::get_processed_stmt): Delete.
+ 	(exploded_node::dump_dot): Elide state if we have a single
+ 	predecessor  and the state hasn't changed.
+ 	(exploded_node::dump_processed_stmts): Delete.
+ 	(exploded_node::on_stmt): Delete, reimplementing in ops.cc as
+ 	gimple_stmt_op::execute_on_state, call_and_return_op::execute, and
+ 	operation::handle_on_stmt_for_state_machines.
+ 	(exploded_node::on_stmt_pre): Delete, reimplementing in ops.cc as
+ 	call_and_return_op::make.
+ 	(exploded_node::on_stmt_post): Delete.
+ 	(class call_summary_edge_info): Move to ops.cc.
+ 	(exploded_node::replay_call_summaries): Delete.
+ 	(exploded_node::replay_call_summary): Delete.
+ 	(exploded_node::on_edge): Delete.
+ 	(exploded_node::on_longjmp): Eliminate ambiguous "setjmp_point"
+ 	and "next_point" in favor of "point_before_setjmp" and
+ 	"point_after_setjmp".
+ 	(exploded_graph::unwind_from_exception): Update for changes to
+ 	program_point.
+ 	(exploded_node::on_throw): Convert "after_throw_point" to a param.
+ 	(exploded_node::on_resx): Delete.
+ 	(exploded_node::detect_leaks): Update for renaming of
+ 	supernode::return_p to supernode::exit_p, and drop stmt param of
+ 	impl_region_model_context ctor.
+ 	(dynamic_call_info_t::update_model): Delete.
+ 	(dynamic_call_info_t::add_events_to_path): Delete.
+ 	(interprocedural_call::print): New.
+ 	(interprocedural_call::get_dot_attrs): New.
+ 	(interprocedural_call::update_state): New.
+ 	(interprocedural_call::update_model): New.
+ 	(interprocedural_call::add_events_to_path): New.
+ 	(interprocedural_return::print): New.
+ 	(interprocedural_return::get_dot_attrs): New.
+ 	(interprocedural_return::update_state): New.
+ 	(interprocedural_return::update_model): New.
+ 	(interprocedural_return::add_events_to_path): New.
+ 	(rewind_info_t::add_events_to_path): Add pending_diagnostic &
+ 	param.
+ 	(exploded_edge::dump_dot_label): Drop superedge kinds.  Show
+ 	op vs no-op.  Flush before printing any superedge label, and
+ 	escape that label.
+ 	(exploded_edge::maybe_get_stmt): New.
+ 	(exploded_edge::maybe_get_op): New.
+ 	(stats::stats): Update for change to m_num_nodes;
+ 	(stats::log): Likewise.
+ 	(stats::dump): Likewise.
+ 	(stats::get_total_enodes): Likewise.
+ 	(strongly_connected_components::strongly_connected_components):
+ 	Update for changes to supergraph.
+ 	(strongly_connected_components::dump): Show the stack.  Update for
+ 	changes to supernode.
+ 	(strongly_connected_components::to_json): Update for changes to
+ 	supergraph.
+ 	(strongly_connected_components::strong_connect): Rename "index" to
+ 	"id".  Drop superedge kinds.
+ 	(worklist::key_t::cmp): Compare BB indexes before snode ids.
+ 	Drop function_point.
+ 	(exploded_graph::exploded_graph): Update stats initialization.
+ 	(tainted_args_function_info::update_model): Reimplement.
+ 	(tainted_args_function_info::add_events_to_path): Add param.
+ 	(exploded_graph::get_or_create_node): Check for recursion limit
+ 	here, rather than in program_point::on_edge and
+ 	exploded_graph::maybe_create_dynamic_call.  Only merge state
+ 	for points with state_merge_at_p.  Update stats tracking for
+ 	changes to supergraph.  Fix wording of log of state.
+ 	(exploded_graph::get_or_create_per_call_string_data): Update for
+ 	supergraph changes.
+ 	(tainted_args_call_info::update_model): Reimplement.
+ 	(tainted_args_call_info::add_events_to_path): Add param.
+ 	(exploded_graph::process_worklist): Drop assertions that nodes
+ 	have no successors, due to some cases during unwinding exceptions.
+ 	Update call to maybe_process_run_of_before_supernode_enodes to
+ 	call to maybe_process_run_of_enodes, and only at points for
+ 	which state_merge_at_p.  Reimplement "too complex" check.
+ 	(exploded_graph::maybe_process_run_of_before_supernode_enodes):
+ 	Convert to...
+ 	(exploded_graph::maybe_process_run_of_enodes): ...this.  Only
+ 	consider nodes with a single successor in the supergraph and for
+ 	which that superedge supports_bulk_merge_p.  Port state updates to
+ 	using operation::update_state_for_bulk_merger.
+ 	(stmt_requires_new_enode_p): Delete.
+ 	(state_change_requires_new_enode_p): Delete.
+ 	(exploded_graph::maybe_create_dynamic_call): Delete.
+ 	(class impl_path_context): Reimplement in ops.cc.
+ 	(class jump_through_null): Move to region-model.cc.
+ 	(exploded_graph::process_node): Use location_t from supernode,
+ 	rather than trying to have a stmt associated with a supernode.
+ 	Drop switch on program_point kind, instead using the operation, if any,
+ 	from the superedge.
+ 	(exploded_graph::get_or_create_function_stats): Update computation
+ 	of num_supernodes for the function.
+ 	(exploded_graph::print_bar_charts): Update for supergraph changes.
+ 	(exploded_graph::dump_stats): Likewise.
+ 	(exploded_graph::dump_states_for_supernode): Delete.
+ 	(exploded_graph::to_json): Update comment.
+ 	(exploded_path::find_stmt_backwards): Update for supergraph
+ 	reimplementation.
+ 	(exploded_path::feasible_p): Drop "last_stmt".
+ 	(feasibility_state::maybe_update_for_edge): Move most of
+ 	implementation to ops and custom_edge_infos.
+ 	(feasibility_state::update_for_stmt): Delete.
+ 	(supernode_cluster::dump_dot): Update for supernode changes.
+ 	(supernode_cluster::cmp_ptr_ptr): Likewise.
+ 	(exploded_graph::dump_exploded_nodes): Update for
+ 	location-handling changes, and for changes to supergraph
+ 	representation.
+ 	(class viz_callgraph_node): Delete
+ 	(class viz_callgraph_edge): Delete.
+ 	(class viz_callgraph): Delete.
+ 	(class viz_callgraph_cluster): Delete.
+ 	(struct viz_callgraph_traits): Delete.
+ 	(dump_callgraph): Delete.
+ 	(exploded_graph_annotator::exploded_graph_annotator): Update for
+ 	supernode::m_index becoming supernode:m_id.
+ 	(exploded_graph_annotator::add_node_annotations): Reimplement to
+ 	show enodes within the node for the supernode.
+ 	(exploded_graph_annotator::print_enode_port): New.
+ 	(exploded_graph_annotator::print_enode): Add port.
+ 	(exploded_graph_annotator::print_saved_diagnostic): Drop stmt.
+ 	(exploded_graph_annotator::m_enodes_per_snodes): Convert to...
+ 	(exploded_graph_annotator::m_enodes_per_snode_id): ...this, using
+ 	std::vector.
+ 	(maybe_dump_supergraph): New.
+ 	(impl_run_checkers): Create region_model_manager before supergraph
+ 	and pass it to supergraph ctor.  Dump the original form of the
+ 	supergraph, then call fixup_locations, simplify, and sort_nodes on
+ 	the supergraph, dumping it at each stage.  Drop dump_callgraph.
+ 	Replace dump to "NAME.supergraph-eg.dot" with dump to
+ 	"NAME.supergraph.N.eg.dot".
+ 	* event-loc-info.h (event_loc_info::event_loc_info): Add ctors taking
+ 	const exploded_node * and const program_point &.
+ 	* exploded-graph.h: Add include of "analyzer/region-model.h".
+ 	(impl_region_model_context::impl_region_model_context): Add default
+ 	for "stmt" param. Drop "stmt_finder" param.
+ 	(impl_region_model_context::warn): Convert to...
+ 	(impl_region_model_context::warn_at): ...this.
+ 	(impl_region_model_context::get_pending_location_for_diag): New.
+ 	(impl_region_model_context::m_stmt_finder): Drop.
+ 	(struct exploded_node::on_stmt_flags): Drop.
+ 	(exploded_node::on_stmt): Drop.
+ 	(exploded_node::on_stmt_pre): Drop.
+ 	(exploded_node::on_stmt_post): Drop.
+ 	(exploded_node::replay_call_summaries): Drop.
+ 	(exploded_node::replay_call_summary): Drop.
+ 	(exploded_node::on_edge): Drop.
+ 	(exploded_node::on_throw): Add "after_throw_point" param.
+ 	(exploded_node::on_resx): Drop.
+ 	(exploded_node::get_location): New.
+ 	(exploded_node::get_stmt): Drop.
+ 	(exploded_node::get_processed_stmt): Drop.
+ 	(exploded_node::maybe_get_stmt): New decl.
+ 	(exploded_node::maybe_get_op): New decl.
+ 	(class dynamic_call_info_t): Delete.
+ 	(class interprocedural_call): New.
+ 	(class interprocedural_return): New.
+ 	(rewind_info_t::add_events_to_path): Add pending_diagnostic &
+ 	param.
+ 	(rewind_info_t::get_setjmp_point): Replace with...
+ 	(rewind_info_t::get_point_before_setjmp): ...this...
+ 	(rewind_info_t::get_point_after_setjmp): ...and this.
+ 	(stats::m_num_nodes): Convert from an array to a plain int.
+ 	(class strongly_connected_components): Convert from index to id
+ 	throughout.
+ 	(exploded_graph::maybe_process_run_of_before_supernode_enodes):
+ 	Replace with...
+ 	(exploded_graph::maybe_process_run_of_enodes): ...this.
+ 	(exploded_graph::maybe_create_dynamic_call): Delete.
+ 	(exploded_graph::save_diagnostic): Drop stmt_finder param.
+ 	(exploded_graph::dump_states_for_supernode): Drop.
+ 	(exploded_graph::m_PK_AFTER_SUPERNODE_per_snode): Drop.
+ 	(class feasibility_problem): Drop "m_last_stmt".
+ 	(feasibility_state::update_for_stmt): Drop.
+ 	(feasibility_state::get_model): Add non-const accessor.
+ 	(feasibility_state::get_snodes_visited): New accessor.
+ 	(class stmt_finder): Drop.
+ 	* feasible-graph.cc (feasible_node::dump_dot): Drop call to
+ 	dump_processed_stmts.
+ 	(feasible_node::get_state_at_stmt): Drop.
+ 	* impl-sm-context.h: New file, adapted from material in engine.cc.
+ 	* infinite-loop.cc
+ 	(perpetual_start_cfg_edge_event::perpetual_start_cfg_edge_event):
+ 	Add "op" param.
+ 	(perpetual_start_cfg_edge_event::print_desc): Use m_op to describe
+ 	condition.
+ 	(looping_back_event::looping_back_event): Add "op" param.
+ 	(infinite_loop_diagnostic::maybe_add_custom_events_for_superedge):
+ 	Convert to...
+ 	(infinite_loop_diagnostic::maybe_add_custom_events_for_eedge):
+ 	...this.
+ 	(infinite_loop_diagnostic::add_final_event): Port from
+ 	cfg_superedge to get_any_cfg_edge and operations.  Update for
+ 	location-handling changes.
+ 	(get_in_edge_back_edge): Port from cfg_superedge to
+ 	get_any_cfg_edge.
+ 	(starts_infinite_loop_p): Update for location-handling changes.
+ 	(exploded_graph::detect_infinite_loops): Remove redundant params.
+ 	* infinite-recursion.cc
+ 	(infinite_recursion_diagnostic::add_final_event): Update for
+ 	location-handling changes.
+ 	(infinite_recursion_diagnostic::check_valid_fpath_p): Drop gimple
+ 	param.
+ 	(infinite_recursion_diagnostic::fedge_uses_conjured_svalue_p):
+ 	Port from cfg_superedge to operations.
+ 	(is_entrypoint_p): Update for supergraph changes.
+ 	(exploded_graph::detect_infinite_recursion): Update for
+ 	location-handling changes.
+ 	* kf-lang-cp.cc (kf_operator_new::impl_call_pre): Split out
+ 	code to handle placement-new into...
+ 	(kf_operator_new::check_any_preconditions): ...this...
+ 	(kf_operator_new::get_sized_region_for_placement_new): ...and
+ 	this.
+ 	* ops.cc: New file, albeit with material adatpted from old
+ 	implementation.
+ 	* ops.h: Likewise.
+ 	* pending-diagnostic.cc (pending_diagnostic::add_call_event): Add
+ 	gcall param.  Update for changes to location-handling.
+ 	* pending-diagnostic.h
+ 	(pending_diagnostic::maybe_add_custom_events_for_superedge):
+ 	Convert to...
+ 	(pending_diagnostic::maybe_add_custom_events_for_eedge): ...this.
+ 	(pending_diagnostic::add_call_event): Add "call_stmt" param.
+ 	(pending_diagnostic::check_valid_fpath_p): Drop stmt param.
+ 	* program-point.cc (point_kind_to_string): Delete.
+ 	(function_point::function_point): Delete.
+ 	(function_point::print): Delete.
+ 	(function_point::hash): Delete.
+ 	(function_point::get_function): Delete.
+ 	(function_point::get_stmt): Delete.
+ 	(function_point::get_location): Delete.
+ 	(function_point::final_stmt_p): Delete.
+ 	(function_point::from_function_entry): Delete.
+ 	(function_point::before_supernode): Delete.
+ 	(function_point::print_source_line): Convert to...
+ 	(program_point::print_source_line): ...this.
+ 	(program_point::print): Reimplement.
+ 	(program_point::to_json): Likewise.
+ 	(program_point::push_to_call_stack): Delete.
+ 	(program_point::hash): Reimplement.
+ 	(program_point::get_function_at_depth): Likewise.
+ 	(program_point::on_edge): Delete.
+ 	(function_point::cmp_within_supernode_1): Delete.
+ 	(function_point::cmp_within_supernode): Delete.
+ 	(function_point::cmp): Delete.
+ 	(function_point::cmp_ptr): Delete.
+ 	(function_point::next_stmt): Delete.
+ 	(function_point::get_next): Delete.
+ 	(program_point::origin): Update.
+ 	(program_point::from_function_entry): Update.
+ 	(program_point::get_next): Delete.
+ 	(selftest::test_function_point_equality): Delete.
+ 	(selftest::test_function_point_ordering): Delete.
+ 	(selftest::test_program_point_equality): Update for changes to
+ 	program_point.
+ 	(selftest::analyzer_program_point_cc_tests): Don't call deleted
+ 	function_point tests.
+ 	* program-point.h: Include "analyzer/supergraph.h".
+ 	(class exploded_graph): Drop forward decl.
+ 	(enum point_kind): Drop.
+ 	(point_kind_to_string): Drop decl.
+ 	(class function_point): Delete.
+ 	(program_point::program_point): Take a const supernode *
+ 	rather than a const function_point &.
+ 	(program_point::print_source_line): New decl.
+ 	(program_point::operator==): Update.
+ 	(program_point::get_function_point): Drop.
+ 	(program_point::get_supernode): Reimplement.
+ 	(program_point::get_function): Reimplement.
+ 	(program_point::get_fndecl): Reimplement.
+ 	(program_point::get_stmt): Drop.
+ 	(program_point::get_location): Reimplement.
+ 	(program_point::get_kind): Drop.
+ 	(program_point::get_from_edge): Drop.
+ 	(program_point::get_stmt_idx): Drop.
+ 	(program_point::get_stack_depth): Update.
+ 	(program_point::state_merge_at_p): New.
+ 	(program_point::before_supernode): Drop.
+ 	(program_point::before_stmt): Drop.
+ 	(program_point::after_supernode): Drop.
+ 	(program_point::empty): Drop.
+ 	(program_point::deleted): Drop.
+ 	(program_point::on_edge): Drop.
+ 	(program_point::push_to_call_stack): Drop.
+ 	(program_point::next_stmt): Drop.
+ 	(program_point::get_next): Drop.
+ 	(program_point::m_function_point): Replace with...
+ 	(program_point::m_snode): ...this.
+ 	* program-state.cc (program_state::on_edge): Delete.
+ 	(program_state::push_call): Delete.
+ 	(program_state::returning_call): Delete.
+ 	(program_state::prune_for_point): Port from function_point to
+ 	supernode.  Drop stmt param to impl_region_model_context ctor.
+ 	(selftest::test_sm_state_map): Update for engine borrowing rather
+ 	owning the region_model_manager.
+ 	(selftest::test_program_state_1): Likewise.
+ 	(selftest::test_program_state_2): Likewise.
+ 	(selftest::test_program_state_merging): Likewise.
+ 	(selftest::test_program_state_merging_2): Likewise.
+ 	* program-state.h (program_state::push_call): Delete decl.
+ 	(program_state::returning_call): Delete decl.
+ 	(program_state::on_edge): Delete decl.
+ 	* region-model-manager.cc (region_model_manager::maybe_fold_unaryop):
+ 	Only fold constants if we have a type.
+ 	(region_model_manager::get_or_create_widening_svalue): Port from
+ 	function_point to supernode.
+ 	* region-model-manager.h
+ 	(region_model_manager::get_or_create_widening_svalue): Likewise.
+ 	* region-model.cc
+ 	(poisoned_value_diagnostic::check_valid_fpath_p): Drop code for
+ 	handling function_points within an snode.
+ 	(exception_thrown_from_unrecognized_call::add_events_to_path): Add
+ 	pending_diagnostic param.
+ 	(class jump_through_null): Move here from engine.cc.
+ 	(region_model::on_call_pre): Check for jump through null here,
+ 	rather than in exploded_graph::process_node.
+ 	(region_model::on_setjmp): Add superedge param and pass it to
+ 	setjmp_record ctor.
+ 	(region_model::handle_phi): Delete, in favor of
+ 	phis_for_edge_op::update_state in ops.cc.
+ 	(region_model::update_for_phis): Likewise.
+ 	(region_model::maybe_update_for_edge): Delete.
+ 	(region_model::update_for_call_superedge): Delete.
+ 	(region_model::update_for_return_superedge): Delete.
+ 	(region_model::apply_constraints_for_gcond): Reimplement in ops.cc as
+ 	gcond_edge_op::apply_constraints.
+ 	(has_nondefault_case_for_value_p): Move to ops.cc.
+ 	(has_nondefault_cases_for_all_enum_values_p): Move to ops.cc
+ 	(region_model::apply_constraints_for_gswitch): Reimplement in
+ 	ops.cc as switch_case_op::apply_constraints.
+ 	(class rejected_eh_dispatch): Move to ops.cc.
+ 	(exception_matches_type_p): Move to ops.cc.
+ 	(matches_any_exception_type_p): Move to ops.cc.
+ 	(region_model::apply_constraints_for_eh_dispatch): Reimplement in
+ 	ops.cc as eh_dispatch_edge_op::apply_constraints.
+ 	(region_model::apply_constraints_for_eh_dispatch_try): Reimplement
+ 	in ops.cc as eh_dispatch_try_edge_op::apply_eh_constraints.
+ 	(region_model::apply_constraints_for_eh_dispatch_allowed):
+ 	Reimplement in ops.cc as
+ 	eh_dispatch_allowed_edge_op::apply_eh_constraints.
+ 	(region_model::apply_constraints_for_ggoto): Reimplement in ops.cc
+ 	as ggoto_edge_op::apply_constraints.
+ 	(caller_context::warn): Replace with...
+ 	(caller_context::get_pending_location_for_diag): ...this.
+ 	(region_model::get_or_create_region_for_heap_alloc): Fix
+ 	indentation.
+ 	(region_model_context::warn): New, replacing vfunc with
+ 	shared code that calls get_pending_location_for_diag and warn_at
+ 	vfuncs.
+ 	(engine::engine): Borrow m_mgr rather than own it.
+ 	(seldtest::test_state_merging): Update test for ptrs to different
+ 	base regions becoming unmergeable.
+ 	(selftest::test_widening_constraints): Port from function_point to
+ 	supernode.
+ 	* region-model.h: Include "analyzer/diagnostic-manager.h".
+ 	(region_model::on_setjmp): Add superedge param.
+ 	(region_model::void update_for_phis): Drop decl.
+ 	(region_model::handle_phi): Drop decl.
+ 	(region_model::maybe_update_for_edge): Drop decl.
+ 	(region_model::apply_constraints_for_eh_dispatch_try): Drop decl.
+ 	(region_model::apply_constraints_for_eh_dispatch_allowed): Drop
+ 	decl.
+ 	(region_model::update_for_call_superedge): Drop decl.
+ 	(region_model::update_for_return_superedge): Drop decl.
+ 	(region_model::apply_constraints_for_gcond): Drop decl.
+ 	(region_model::apply_constraints_for_gswitch): Drop decl.
+ 	(region_model::apply_constraints_for_ggoto): Drop decl.
+ 	(region_model::apply_constraints_for_eh_dispatch): Drop decl.
+ 	(region_model_context::warn): Convert from vfunc to func.
+ 	(region_model_context::get_pending_location_for_diag): New vfunc.
+ 	(region_model_context::warn_at): New vfunc.
+ 	(class noop_region_model_context): Update for changes to
+ 	region_model_context.
+ 	(class region_model_context_decorator): Likewise.
+ 	(class annotating_context): Likewise.
+ 	(struct model_merger): Port from function_point to supernode.
+ 	(class engine): Borrow m_mgr rather than own it.
+ 	(class test_region_model_context): Update for changes to
+ 	region_model_context.
+ 	* region.cc (frame_region::get_region_for_local): Update for
+ 	change to supergraph.
+ 	* sm-fd.cc: Drop redundant params throughout.  Pass stmt
+ 	rather than node to the various on_ calls.
+ 	* sm-file.cc: Drop redundant params throughout.
+ 	(register_known_file_functions): Register "*_unlocked" versions of
+ 	functions that I'd missed.
+ 	* sm-malloc.cc: Drop redundant params throughout.
+ 	(deref_before_check::loop_header_p): Reimplement cfg_superedge
+ 	check.
+ 	(malloc_state_machine::on_stmt): Move attribute-handling to...
+ 	(malloc_state_machine::check_call_preconditions): ...this new
+ 	function.
+ 	(maybe_complain_about_deref_before_check): Use
+ 	sm_ctxt.get_emission_location when checking for inlining.
+ 	* sm-pattern-test.cc: Drop redundant params throughout.
+ 	* sm-sensitive.cc: Likewise.
+ 	* sm-signal.cc: Likewise.
+ 	* sm-taint.cc: Likewise.
+ 	* sm.cc: Fix unused param warnings.
+ 	* sm.h: Include "analyzer/analyzer-logging.h".  Drop redundant
+ 	params throughout.
+ 	(state_machine::check_call_preconditions): New vfunc.
+ 	(sm_context::get_state): Drop "stmt" args.
+ 	(sm_context::set_next_state): Likewise.
+ 	(sm_context::on_transition): Drop "stmt" and "node" args.
+ 	(sm_context::warn): Likewise.
+ 	(sm_context::get_emission_location): New vfunc.
+ 	* state-purge.cc: Define INCLUDE_SET.
+ 	(class gimple_op_visitor): Replace function_point and function
+ 	with superedge.
+ 	(state_purge_map::state_purge_map): Iterate through ops on edges,
+ 	rather than on stmts in supernodes.
+ 	(state_purge_map::on_duplicated_node): New.
+ 	(state_purge_map::get_or_create_data_for_decl): Use supernode
+ 	rather than function_point.
+ 	(state_purge_per_ssa_name::state_purge_per_ssa_name): Likewise.
+ 	(state_purge_per_ssa_name::needed_at_point_p): Replace with...
+ 	(state_purge_per_ssa_name::needed_at_supernode_p): ...this.
+ 	(state_purge_per_ssa_name::before_use_stmt): Delete.
+ 	(state_purge_per_ssa_name::add_to_worklist): Use supernode rather
+ 	than function_point.
+ 	(name_used_by_phis_p): Delete.
+ 	(state_purge_per_ssa_name::process_point): Replace with...
+ 	(state_purge_per_ssa_name::process_supernode): ...this.
+ 	(state_purge_per_ssa_name::on_duplicated_node): New.
+ 	(state_purge_per_decl::state_purge_per_decl): Use supernode rather
+ 	than function_point.
+ 	(state_purge_per_decl::add_needed_at): Likewise.
+ 	(state_purge_per_decl::add_pointed_to_at): Likewise.
+ 	(state_purge_per_decl::process_worklists): Likewise.
+ 	(state_purge_per_decl::add_to_worklist): Likewise.
+ 	(state_purge_per_decl::process_point_backwards): Replace with...
+ 	(state_purge_per_decl::process_supernode_backwards): ...this.
+ 	(state_purge_per_decl::process_point_forwards): Replace with...
+ 	(state_purge_per_decl::process_supernode_forwards): ...this.
+ 	(state_purge_per_decl::needed_at_point_p): Replace with...
+ 	(state_purge_per_decl::needed_at_supernode_p): ...this.
+ 	(state_purge_per_decl::on_duplicated_node): New.
+ 	(print_vec_of_names): Drop "within_table" param.
+ 	(state_purge_annotator::add_stmt_annotations): Drop.
+ 	(state_purge_annotator::add_node_annotations): Reimplement.
+ 	* state-purge.h: Convert throughout from function_point to
+ 	supernode.
+ 	(state_purge_map::on_duplicated_node): New decl.
+ 	(state_purge_per_ssa_name::on_duplicated_node): Likewise.
+ 	(state_purge_per_decl::on_duplicated_node): Likewise.
+ 	* store.cc (needs_loop_replay_fixup_p): New.
+ 	(store::loop_replay_fixup): Use it rather than checking for
+ 	SK_WIDENING.
+ 	* supergraph-fixup-locations.cc: New file.
+ 	* supergraph-manipulation.h: New file.
+ 	* supergraph-simplify.cc: New file.
+ 	* supergraph-sorting.cc: New file.
+ 	* supergraph.cc: Define INCLUDE_DEQUE.  Drop include of
+ 	"tree-dfa.h".  Include "diagnostics/file-cache.h"
+ 	and "analyzer/exploded-graph.h".
+ 	(supergraph_call_edge): Delete.
+ 	(control_flow_stmt_p): New.
+ 	(supergraph::supergraph): Add "mgr" param.  Initialize
+ 	m_next_snode_id.  Reimplement.
+ 	(supergraph::populate_for_basic_block): New.
+ 	(supergraph::dump_dot_to_pp): Add auto_cfun sentinel.
+ 	Split up nodes using loop information from the original CFG,
+ 	then by basic block.  Call the node_annotator's
+ 	add_extra_objects vfunc.
+ 	(supergraph::dump_dot_to_gv_for_loop): New.
+ 	(supergraph::dump_dot_to_gv_for_bb): New, based on code in
+ 	dump_dot_to_pp.
+ 	(supergraph::add_node): Drop "returning_call" and "phi_nodes"
+ 	params. Add logger param and logging.  Use m_next_snode_id to
+ 	allow for node deletion.
+ 	(supergraph::add_cfg_edge): Delete.
+ 	(supergraph::add_call_superedge): Delete.
+ 	(supergraph::add_return_superedge): Delete.
+ 	(supergraph::delete_nodes): New.
+ 	(supergraph::add_sedges_for_cfg_edge): New.
+ 	(supernode::dump_dot): Drop output cluster, moving
+ 	add_node_annotations to within the dot node.  Show any SCC id.
+ 	Show m_preserve_p and m_state_merger_node.  Update for renaming of
+ 	supernode::return_p to supernode::exit_p.  Highlight nodes without
+ 	source location information.  Show m_loc and m_stmt_loc.  Show
+ 	source lines, with color for highlight.
+ 	(supernode::dump_dot_id): Update.
+ 	(supernode::to_json): Update.
+ 	(supernode::get_start_location): Delete.
+ 	(supernode::get_end_location): Delete.
+ 	(supernode::get_stmt_index): Delete.
+ 	(supernode::get_label): Delete.
+ 	(edge_kind_to_string): Delete.
+ 	(superedge::dump): Update for supernode::m_index becoming m_id.
+ 	(superedge::dump_dot): Drop ltail/lhead attrs.  Flush after
+ 	dumping the label.
+ 	(superedge::to_json): Reimplement.
+ 	(superedge::get_any_cfg_edge): Delete.
+ 	(superedge::get_any_callgraph_edge): Delete.
+ 	(superedge::preserve_p): New.
+ 	(superedge::supports_bulk_merge_p): New.
+ 	(cfg_superedge::dump_label_to_pp): Delete.
+ 	(superedge::dump_label_to_pp): New.
+ 	(cfg_superedge::get_phi_arg_idx): Delete.
+ 	(cfg_superedge::get_phi_arg): Delete.
+ 	(switch_cfg_superedge::switch_cfg_superedge): Delete.
+ 	(switch_cfg_superedge::dump_label_to_pp): Delete.
+ 	(switch_cfg_superedge::implicitly_created_default_p): Delete.
+ 	(get_catch): Move to ops.cc.
+ 	(eh_dispatch_cfg_superedge::make): Delete in favor of
+ 	eh_dispatch_edge_op::make.
+ 	(eh_dispatch_cfg_superedge::eh_dispatch_cfg_superedge): Delete.
+ 	(eh_dispatch_cfg_superedge::get_eh_status): Delete.
+ 	(eh_dispatch_try_cfg_superedge::dump_label_to_pp): Delete.
+ 	(eh_dispatch_try_cfg_superedge::apply_constraints): Delete.
+ 	(eh_dispatch_allowed_cfg_superedge::eh_dispatch_allowed_cfg_superedge):
+ 	Delete.
+ 	(eh_dispatch_allowed_cfg_superedge::dump_label_to_pp): Delete.
+ 	(eh_dispatch_allowed_cfg_superedge::apply_constraints): Delete.
+ 	(callgraph_superedge::dump_label_to_pp): Delete.
+ 	(callgraph_superedge::get_callee_function): Delete.
+ 	(callgraph_superedge::get_caller_function): Delete
+ 	(callgraph_superedge::get_callee_decl): Delete
+ 	(callgraph_superedge::get_call_stmt): Delete
+ 	(callgraph_superedge::get_caller_decl): Delete
+ 	(callgraph_superedge::get_arg_for_parm): Delete in favor of
+ 	call_and_return_op::get_arg_for_parm in ops.cc.
+ 	(callgraph_superedge::get_parm_for_arg): Delete in favor of
+ 	call_and_return_op::get_parm_for_arg in ops.cc.
+ 	(callgraph_superedge::map_expr_from_caller_to_callee): Delete in
+ 	favor of call_and_return_op::map_expr_from_caller_to_callee in
+ 	ops.cc.
+ 	(callgraph_superedge::map_expr_from_callee_to_caller): Delete in
+ 	favor of call_and_return_op::map_expr_from_callee_to_caller in
+ 	ops.cc.
+ 	* supergraph.h: Include "cfgloop.h" and "analyzer/ops.h".
+ 	(enum edge_kind): Delete.
+ 	(struct supergraph_traits::dump_args_t): Add m_eg.
+ 	(class supergraph): Rewrite leading comment.
+ 	(supergraph::supergraph): Add "mgr" param.
+ 	(supergraph::get_node_for_function_entry): Reimplement.
+ 	(supergraph::get_node_for_function_exit): Reimplement.
+ 	(supergraph::get_node_for_block): Convert to...
+ 	(supergraph::get_initial_node_for_block): ...this.
+ 	(supergraph::get_caller_next_node): Delete.
+ 	(supergraph::get_edge_for_call): Delete.
+ 	(supergraph::get_edge_for_return): Delete.
+ 	(supergraph::get_intraprocedural_edge_for_call): Delete.
+ 	(supergraph::get_edge_for_cfg_edge): Delete.
+ 	(supergraph::get_supernode_for_stmt): Delete.
+ 	(supergraph::get_final_node_for_block): New.
+ 	(supergraph::get_supernode_for_stmt): New.
+ 	(supergraph::get_superedge_for_phis): New.
+ 	(supergraph::get_node_by_index): Delete.
+ 	(supergraph::add_node): Drop "returning_call" and "phi_nodes"
+ 	params.  Add logger param.
+ 	(supergraph::add_cfg_edge): Delete.
+ 	(supergraph::add_call_superedge): Delete.
+ 	(supergraph::add_return_superedge): Delete.
+ 	(supergraph::log_stats): New decl.
+ 	(supergraph::delete_nodes): New decl.
+ 	(supergraph::fixup_locations): New decl.
+ 	(supergraph::simplify): New decl.
+ 	(supergraph::sort_nodes): New decl.
+ 	(supergraph::populate_for_basic_block): New decl.
+ 	(supergraph::add_sedges_for_cfg_edge): New decl.
+ 	(supergraph::dump_dot_to_gv_for_loop): New decl.
+ 	(supergraph::dump_dot_to_gv_for_bb): New decl.
+ 	(supergraph::reorder_nodes_and_ids): New decl.
+ 	(supergraph::bb_to_node_t): Make private.
+ 	(supergraph::m_bb_to_initial_node): Make private.
+ 	(supergraph::m_bb_to_final_node): Make private.
+ 	(supergraph::cgraph_edge_to_node_t): Delete typedef.
+ 	(supergraph::m_cgraph_edge_to_caller_prev_node): Delete.
+ 	(supergraph::m_cgraph_edge_to_caller_next_node): Delete.
+ 	(supergraph::cfg_edge_to_cfg_superedge_t): Delete typedef.
+ 	(supergraph::m_cfg_edge_to_cfg_superedge): Delete.
+ 	(supergraph::cgraph_edge_to_call_superedge_t): Delete typedef.
+ 	(supergraph::m_cgraph_edge_to_call_superedge): Delete
+ 	(supergraph::cgraph_edge_to_return_superedge_t): Delete typedef.
+ 	(supergraph::m_cgraph_edge_to_return_superedge): Delete.
+ 	(supergraph::cgraph_edge_to_intraproc_superedge_t): Delete
+ 	typedef.
+ 	(supergraph::m_cgraph_edge_to_intraproc_superedge): Delete.
+ 	(supergraph::stmt_to_node_t): Delete typedef.
+ 	(supergraph::m_stmt_to_node_t): Replace with...
+ 	(supergraph::m_node_for_stmt): ...this.
+ 	(supergraph::m_edges_for_phis): New field.
+ 	(supergraph::m_next_snode_id): New field.
+ 	(supergraph::m_snode_by_id): New field.
+ 	(supernode::supernode): Drop "returning_call" and "phi_nodes"
+ 	params.  Convert "index" to "id".  Update for changes to fields.
+ 	(supernode::return_p): Rename for clarity to...
+ 	(supernode::exit_p): ...this.
+ 	(supernode::get_start_location): Delete.
+ 	(supernode::get_end_location): Delete.
+ 	(supernode::start_phis): Delete.
+ 	(supernode::get_returning_call): Delete.
+ 	(supernode::print): New.
+ 	(supernode::get_last_stmt): Delete.
+ 	(supernode::get_final_call): Delete.
+ 	(supernode::get_stmt_index): Delete.
+ 	(supernode::get_location): New.
+ 	(supernode::get_label): Convert to trivial accessor.
+ 	(supernode::preserve_p): New.
+ 	(supernode::m_returning_call): Drop field.
+ 	(supernode::m_phi_nodes): Drop field.
+ 	(supernode::m_stmts): Drop field.
+ 	(supernode::m_index): Replace with...
+ 	(supernode::m_id): ...this.
+ 	(supernode::m_loc): New field.
+ 	(supernode::m_stmt_loc): New field.
+ 	(supernode::m_original_id): New field.
+ 	(supernode::m_label): New field.
+ 	(supernode::m_preserve_p): New field.
+ 	(supernode::m_state_merger_node): New field.
+ 	(class superedge): Update leading comment.
+ 	(superedge::superedge): Make public rather than protected.  Drop
+ 	"kind" param.  Add "op" and "cfg_edge" params.  Assert that edge
+ 	is intraprocedural.
+ 	(superedge::m_kind): Drop field.
+ 	(superedge::m_op): New field.
+ 	(superedge::m_cfg_edge): New field.
+ 	(superedge::dump_label_to_pp): Make non-virtual.
+ 	(superedge::get_op): New.
+ 	(superedge::set_op): New.
+ 	(superedge::get_kind): Drop.
+ 	(superedge::get_dest_snode): New accessor.
+ 	(superedge::dyn_cast_cfg_superedge): Delete.
+ 	(superedge::dyn_cast_switch_cfg_superedge): Delete
+ 	(superedge::dyn_cast_eh_dispatch_cfg_superedge): Delete
+ 	(superedge::dyn_cast_eh_dispatch_try_cfg_superedge): Delete
+ 	(superedge::dyn_cast_eh_dispatch_allowed_cfg_superedge): Delete
+ 	(superedge::dyn_cast_callgraph_superedge): Delete
+ 	(superedge::dyn_cast_callgraph_superedge): Delete
+ 	(superedge::dyn_cast_call_superedge): Delete
+ 	(superedge::dyn_cast_call_superedge): Delete
+ 	(superedge::dyn_cast_return_superedge): Delete
+ 	(superedge::dyn_cast_return_superedge): Delete
+ 	(superedge::get_any_cfg_edge): Convert to trivial accessor.
+ 	(superedge::get_any_callgraph_edge): Drop.
+ 	(superedge::preserve_p): New.
+ 	(superedge::supports_bulk_merge_p): New.
+ 	(class callgraph_superedge): Drop.
+ 	(is_a_helper <const callgraph_superedge *>::test): Drop.
+ 	(class call_superedge): Drop.
+ 	(is_a_helper <const call_superedge *>::test): Drop.
+ 	(class return_superedge): Drop.
+ 	(is_a_helper <const return_superedge *>::test): Drop.
+ 	(class cfg_superedge): Drop.
+ 	(class switch_cfg_superedge): Drop.
+ 	(is_a_helper <const switch_cfg_superedge *>::test): Drop.
+ 	(class eh_dispatch_cfg_superedge): Drop.
+ 	(is_a_helper <const eh_dispatch_cfg_superedge *>::test): Drop.
+ 	(class eh_dispatch_try_cfg_superedge): Drop.
+ 	(is_a_helper <const eh_dispatch_try_cfg_superedge *>::test): Drop.
+ 	(class eh_dispatch_allowed_cfg_superedge): Drop.
+ 	(is_a_helper <const eh_dispatch_allowed_cfg_superedge *>::test):
+ 	Drop.
+ 	(dot_annotator::~dot_annotator): Use "= default;".
+ 	(dot_annotator::add_node_annotations): Drop return value and
+ 	"within_table" param.
+ 	(dot_annotator::add_stmt_annotations): Drop.
+ 	(dot_annotator::add_after_node_annotations): Drop.
+ 	(dot_annotator::add_extra_objects): New.
+ 	(supergraph_call_edge): Delete decl.
+ 	(get_ultimate_function_for_cgraph_edge): Delete decl.
+ 	* svalue.cc (svalue::can_merge_p): Reject attempts to merge
+ 	pointers that point to different base regions, except for the case
+ 	where both are string literals.  Update for point change in
+ 	widening_svalue.
+ 	(svalue::cmp_ptr): Update for point change to widening_svalue.
+ 	(widening_svalue::dump_to_pp): Likewise.
+ 	(widening_svalue::print_dump_widget_label): Likewise.
+ 	* svalue.h (struct setjmp_record): Add m_sedge.
+ 	(class widening_svalue): Replace function_point m_point with
+ 	const supernode *m_snode throughout.
+ 	* varargs.cc (va_list_state_machine::on_stmt): Drop redundant
+ 	param.
+ 	(va_list_state_machine::on_va_start): Likewise.  Update for change
+ 	to get_state.
+ 	(va_list_state_machine::check_for_ended_va_list): Likewise.
+ 	(va_list_state_machine::on_va_copy): Likewise.
+ 	(va_list_state_machine::on_va_arg): Likewise.
+ 	(va_list_state_machine::on_va_end): Likewise.
+ 	(va_arg_diagnostic::add_call_event): Update for changes to
+ 	location-tracking.
+ 
+ 2025-12-07  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	* kf.cc (register_known_functions): Remove duplicate calls to
+ 	register_atomic_builtins and register_varargs_builtins.
+ 
  2025-11-28  Jakub Jelinek  <jakub@redhat.com>
  
  	* known-function-manager.cc (known_function_manager::add): Avoid
diff -Nrcpad gcc-16-20251207/gcc/analyzer/analyzer-logging.h gcc-16-20251214/gcc/analyzer/analyzer-logging.h
*** gcc-16-20251207/gcc/analyzer/analyzer-logging.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/analyzer-logging.h	Sun Dec 14 22:32:06 2025
*************** log_scope::~log_scope ()
*** 139,144 ****
--- 139,185 ----
      }
  }
  
+ class log_nesting_level
+ {
+ public:
+   log_nesting_level (logger *logger, const char *fmt, ...)
+     ATTRIBUTE_GCC_DIAG(3, 4);
+   ~log_nesting_level ();
+ 
+ private:
+   logger *m_logger;
+ };
+ 
+ inline
+ log_nesting_level::log_nesting_level (logger *logger, const char *fmt, ...)
+ : m_logger (logger)
+ {
+   if (logger)
+     {
+       va_list ap;
+       va_start (ap, fmt);
+ 
+       logger->start_log_line ();
+       logger->log_va_partial (fmt, &ap);
+       logger->end_log_line ();
+ 
+       logger->inc_indent ();
+ 
+       va_end (ap);
+     }
+ }
+ 
+ 
+ /* The destructor for log_nesting_level; essentially the opposite of
+    the constructor.  */
+ 
+ inline
+ log_nesting_level::~log_nesting_level ()
+ {
+   if (m_logger)
+     m_logger->dec_indent ();
+ }
+ 
  /* A log_user is something that potentially uses a logger (which could be
     nullptr).
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/analyzer.cc gcc-16-20251214/gcc/analyzer/analyzer.cc
*** gcc-16-20251207/gcc/analyzer/analyzer.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/analyzer.cc	Sun Dec 14 22:32:06 2025
*************** is_cxa_rethrow_p (const gcall &call)
*** 469,474 ****
--- 469,484 ----
    return is_named_call_p (fndecl, "__cxa_rethrow");
  }
  
+ bool
+ is_cxa_end_catch_p (const gcall &call)
+ {
+   tree fndecl = gimple_call_fndecl (&call);
+   if (!fndecl)
+     return false;
+ 
+   return is_named_call_p (fndecl, "__cxa_end_catch");
+ }
+ 
  /* For a CALL that matched is_special_named_call_p or is_named_call_p for
     some name, return a name for the called function suitable for use in
     diagnostics (stripping the leading underscores).  */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/analyzer.opt gcc-16-20251214/gcc/analyzer/analyzer.opt
*** gcc-16-20251207/gcc/analyzer/analyzer.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/analyzer.opt	Sun Dec 14 22:32:06 2025
*************** Common Var(flag_analyzer_debug_text_art)
*** 287,294 ****
  Add extra annotations to diagrams.
  
  fanalyzer-fine-grained
! Common Var(flag_analyzer_fine_grained) Init(0)
! Avoid combining multiple statements into one exploded edge.
  
  fanalyzer-feasibility
  Common Var(flag_analyzer_feasibility) Init(1)
--- 287,294 ----
  Add extra annotations to diagrams.
  
  fanalyzer-fine-grained
! Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fanalyzer-feasibility
  Common Var(flag_analyzer_feasibility) Init(1)
*************** fanalyzer-show-duplicate-count
*** 298,303 ****
--- 298,307 ----
  Common Var(flag_analyzer_show_duplicate_count) Init(0)
  Issue a note when diagnostics are deduplicated.
  
+ fanalyzer-simplify-supergraph
+ Common Var(flag_analyzer_simplify_supergraph) Init(1)
+ Simplify the supergraph before analyzing it.
+ 
  fanalyzer-state-purge
  Common Var(flag_analyzer_state_purge) Init(1)
  Purge unneeded state during analysis.
*************** Common RejectNegative Var(flag_dump_anal
*** 347,354 ****
  Dump various analyzer internals to stderr.
  
  fdump-analyzer-callgraph
! Common RejectNegative Var(flag_dump_analyzer_callgraph)
! Dump analyzer-specific call graph information to a SRCFILE.callgraph.dot file.
  
  fdump-analyzer-exploded-graph
  Common RejectNegative Var(flag_dump_analyzer_exploded_graph)
--- 351,358 ----
  Dump various analyzer internals to stderr.
  
  fdump-analyzer-callgraph
! Common Ignore
! Does nothing. Preserved for backward compatibility.
  
  fdump-analyzer-exploded-graph
  Common RejectNegative Var(flag_dump_analyzer_exploded_graph)
diff -Nrcpad gcc-16-20251207/gcc/analyzer/analyzer.opt.urls gcc-16-20251214/gcc/analyzer/analyzer.opt.urls
*** gcc-16-20251207/gcc/analyzer/analyzer.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/analyzer.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/Static-Analyzer-Options.ht
*** 171,176 ****
--- 171,179 ----
  fanalyzer-show-duplicate-count
  UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-show-duplicate-count)
  
+ fanalyzer-simplify-supergraph
+ UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-simplify-supergraph)
+ 
  fanalyzer-state-purge
  UrlSuffix(gcc/Static-Analyzer-Options.html#index-fanalyzer-state-purge)
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/bounds-checking.cc gcc-16-20251214/gcc/analyzer/bounds-checking.cc
*** gcc-16-20251207/gcc/analyzer/bounds-checking.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/bounds-checking.cc	Sun Dec 14 22:32:06 2025
*************** strip_types (const svalue *sval,
*** 1327,1333 ****
  	const widening_svalue *widening_sval = (const widening_svalue *)sval;
  	return mgr.get_or_create_widening_svalue
  	  (NULL_TREE,
! 	   widening_sval->get_point (),
  	   strip_types (widening_sval->get_base_svalue (), mgr),
  	   strip_types (widening_sval->get_iter_svalue (), mgr));
        }
--- 1327,1333 ----
  	const widening_svalue *widening_sval = (const widening_svalue *)sval;
  	return mgr.get_or_create_widening_svalue
  	  (NULL_TREE,
! 	   widening_sval->get_snode (),
  	   strip_types (widening_sval->get_base_svalue (), mgr),
  	   strip_types (widening_sval->get_iter_svalue (), mgr));
        }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/call-details.h gcc-16-20251214/gcc/analyzer/call-details.h
*** gcc-16-20251207/gcc/analyzer/call-details.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/call-details.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 21,26 ****
--- 21,28 ----
  #ifndef GCC_ANALYZER_CALL_DETAILS_H
  #define GCC_ANALYZER_CALL_DETAILS_H
  
+ #include "pending-diagnostic.h"
+ 
  namespace ana {
  
  /* Helper class for handling calls to functions with known behavior.  */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/call-info.cc gcc-16-20251214/gcc/analyzer/call-info.cc
*** gcc-16-20251207/gcc/analyzer/call-info.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/call-info.cc	Sun Dec 14 22:32:06 2025
*************** custom_edge_info::update_state (program_
*** 58,63 ****
--- 58,71 ----
    return update_model (state->m_region_model, eedge, ctxt);
  }
  
+ void
+ custom_edge_info::get_dot_attrs (const char *&out_style,
+ 				 const char *&out_color) const
+ {
+   out_color = "red";
+   out_style = "\"dotted\"";
+ }
+ 
  /* Base implementation of custom_edge_info::create_enode vfunc.  */
  
  exploded_node *
*************** call_info::print (pretty_printer *pp) co
*** 87,93 ****
  
  void
  call_info::add_events_to_path (checker_path *emission_path,
! 			       const exploded_edge &eedge) const
  {
    class call_event : public custom_event
    {
--- 95,102 ----
  
  void
  call_info::add_events_to_path (checker_path *emission_path,
! 			       const exploded_edge &eedge,
! 			       pending_diagnostic &) const
  {
    class call_event : public custom_event
    {
*************** call_info::add_events_to_path (checker_p
*** 114,122 ****
  
    emission_path->add_event
      (std::make_unique<call_event> (event_loc_info (get_call_stmt ().location,
! 					      caller_fndecl,
! 					      stack_depth),
! 			      this));
  }
  
  /* Recreate a call_details instance from this call_info.  */
--- 123,131 ----
  
    emission_path->add_event
      (std::make_unique<call_event> (event_loc_info (get_call_stmt ().location,
! 						   caller_fndecl,
! 						   stack_depth),
! 				   this));
  }
  
  /* Recreate a call_details instance from this call_info.  */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/call-info.h gcc-16-20251214/gcc/analyzer/call-info.h
*** gcc-16-20251207/gcc/analyzer/call-info.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/call-info.h	Sun Dec 14 22:32:06 2025
*************** class call_info : public custom_edge_inf
*** 32,38 ****
  public:
    void print (pretty_printer *pp) const override;
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge) const override;
  
    const gcall &get_call_stmt () const { return m_call_stmt; }
    tree get_fndecl () const { return m_fndecl; }
--- 32,39 ----
  public:
    void print (pretty_printer *pp) const override;
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge,
! 			   pending_diagnostic &pd) const override;
  
    const gcall &get_call_stmt () const { return m_call_stmt; }
    tree get_fndecl () const { return m_fndecl; }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/call-string.cc gcc-16-20251214/gcc/analyzer/call-string.cc
*** gcc-16-20251207/gcc/analyzer/call-string.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/call-string.cc	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 39,45 ****
  bool
  call_string::element_t::operator== (const call_string::element_t &other) const
  {
!   return (m_caller == other.m_caller && m_callee == other.m_callee);
  }
  
  /* call_string::element_t's inequality operator.  */
--- 39,46 ----
  bool
  call_string::element_t::operator== (const call_string::element_t &other) const
  {
!   return (m_call_sedge == other.m_call_sedge
! 	  && m_called_fun == other.m_called_fun);
  }
  
  /* call_string::element_t's inequality operator.  */
*************** call_string::element_t::operator!= (cons
*** 49,64 ****
    return !(*this == other);
  }
  
  function *
  call_string::element_t::get_caller_function () const
  {
!   return m_caller->get_function ();
  }
  
! function *
! call_string::element_t::get_callee_function () const
  {
!   return m_callee->get_function ();
  }
  
  /* Print this to PP.  */
--- 50,90 ----
    return !(*this == other);
  }
  
+ int
+ call_string::element_t::cmp (const element_t &a, const element_t &b)
+ {
+   if (int src_id_cmp = (a.m_call_sedge->m_src->m_id
+ 			- b.m_call_sedge->m_src->m_id))
+     return src_id_cmp;
+ 
+   /* We don't expect multiple call sedges with the same src.  */
+   gcc_assert (a.m_call_sedge->m_dest == b.m_call_sedge->m_dest);
+ 
+   return a.m_called_fun->funcdef_no - b.m_called_fun->funcdef_no;
+ }
+ 
  function *
  call_string::element_t::get_caller_function () const
  {
!   return m_call_sedge->m_src->get_function ();
  }
  
! const supernode *
! call_string::element_t::get_call_snode_in_caller () const
  {
!   return m_call_sedge->m_src;
! }
! 
! const supernode *
! call_string::element_t::get_return_snode_in_caller () const
! {
!   return m_call_sedge->m_dest;
! }
! 
! const gcall &
! call_string::element_t::get_call_stmt () const
! {
!   return m_call_op->get_gcall ();
  }
  
  /* Print this to PP.  */
*************** call_string::print (pretty_printer *pp)
*** 75,91 ****
        if (i > 0)
  	pp_string (pp, ", ");
        pp_printf (pp, "(SN: %i -> SN: %i in %s)",
! 		 e->m_callee->m_index, e->m_caller->m_index,
! 		 function_name (e->m_caller->m_fun));
      }
  
    pp_string (pp, "]");
  }
  
  /* Return a new json::array of the form
!    [{"src_snode_idx" : int,
!      "dst_snode_idx" : int,
!      "funcname" : str},
       ...for each element in the callstring].  */
  
  std::unique_ptr<json::value>
--- 101,118 ----
        if (i > 0)
  	pp_string (pp, ", ");
        pp_printf (pp, "(SN: %i -> SN: %i in %s)",
! 		 e->get_call_snode_in_caller ()->m_id,
! 		 e->get_return_snode_in_caller ()->m_id,
! 		 function_name (e->get_caller_function ()));
      }
  
    pp_string (pp, "]");
  }
  
  /* Return a new json::array of the form
!    [{"call_sedge_src" : int,
!      "call_sedge_dest" : int,
!      "called_fun" : str},
       ...for each element in the callstring].  */
  
  std::unique_ptr<json::value>
*************** call_string::to_json () const
*** 96,131 ****
    for (const call_string::element_t &e : m_elements)
      {
        auto e_obj = std::make_unique<json::object> ();
!       e_obj->set_integer ("src_snode_idx", e.m_callee->m_index);
!       e_obj->set_integer ("dst_snode_idx", e.m_caller->m_index);
!       e_obj->set_string ("funcname", function_name (e.m_caller->m_fun));
        arr->append (std::move (e_obj));
      }
  
    return arr;
  }
  
- /* Get or create the call_string resulting from pushing the return
-    superedge for CALL_SEDGE onto the end of this call_string.  */
- 
- const call_string *
- call_string::push_call (const supergraph &sg,
- 			const call_superedge *call_sedge) const
- {
-   gcc_assert (call_sedge);
-   const return_superedge *return_sedge = call_sedge->get_edge_for_return (sg);
-   gcc_assert (return_sedge);
-   return push_call (return_sedge->m_dest, return_sedge->m_src);
- }
  
  /* Get or create the call_string resulting from pushing the call
     (caller, callee) onto the end of this call_string.  */
  
  const call_string *
! call_string::push_call (const supernode *caller,
! 			const supernode *callee) const
  {
!   call_string::element_t e (caller, callee);
  
    if (const call_string **slot = m_children.get (e))
      return *slot;
--- 123,147 ----
    for (const call_string::element_t &e : m_elements)
      {
        auto e_obj = std::make_unique<json::object> ();
!       e_obj->set_integer ("call_sedge_src", e.m_call_sedge->m_src->m_id);
!       e_obj->set_integer ("call_sedge_dest", e.m_call_sedge->m_dest->m_id);
!       e_obj->set_string ("called_fun", function_name (e.m_called_fun));
        arr->append (std::move (e_obj));
      }
  
    return arr;
  }
  
  
  /* Get or create the call_string resulting from pushing the call
     (caller, callee) onto the end of this call_string.  */
  
  const call_string *
! call_string::push_call (const superedge &call_sedge,
! 			const call_and_return_op &call_op,
! 			function &called_fun) const
  {
!   call_string::element_t e (&call_sedge, &call_op, &called_fun);
  
    if (const call_string **slot = m_children.get (e))
      return *slot;
*************** call_string::count_occurrences_of_functi
*** 160,169 ****
    int result = 0;
    for (const call_string::element_t &e : m_elements)
      {
-       if (e.get_callee_function () == fun)
- 	result++;
        if (e.get_caller_function () == fun)
  	result++;
      }
    return result;
  }
--- 176,185 ----
    int result = 0;
    for (const call_string::element_t &e : m_elements)
      {
        if (e.get_caller_function () == fun)
  	result++;
+       if (e.get_callee_function () == fun)
+ 	result++;
      }
    return result;
  }
*************** call_string::cmp (const call_string &a,
*** 196,212 ****
        if (i >= len_b)
  	return -1;
  
!       /* Otherwise, compare the node pairs.  */
!       const call_string::element_t a_node_pair = a[i];
!       const call_string::element_t b_node_pair = b[i];
!       int src_cmp
! 	= a_node_pair.m_callee->m_index - b_node_pair.m_callee->m_index;
!       if (src_cmp)
! 	return src_cmp;
!       int dest_cmp
! 	= a_node_pair.m_caller->m_index - b_node_pair.m_caller->m_index;
!       if (dest_cmp)
! 	return dest_cmp;
        i++;
        // TODO: test coverage for this
      }
--- 212,220 ----
        if (i >= len_b)
  	return -1;
  
!       /* Otherwise, compare the elements.  */
!       if (int element_cmp = call_string::element_t::cmp (a[i], b[i]))
! 	return element_cmp;
        i++;
        // TODO: test coverage for this
      }
*************** call_string::cmp_ptr_ptr (const void *pa
*** 222,245 ****
    return cmp (*cs_a, *cs_b);
  }
  
- /* Return the pointer to callee of the topmost call in the stack,
-    or nullptr if stack is empty.  */
- const supernode *
- call_string::get_callee_node () const
- {
-   if(m_elements.is_empty ())
-     return nullptr;
-   return m_elements[m_elements.length () - 1].m_callee;
- }
- 
  /* Return the pointer to caller of the topmost call in the stack,
     or nullptr if stack is empty.  */
  const supernode *
! call_string::get_caller_node () const
  {
    if(m_elements.is_empty ())
      return nullptr;
!   return m_elements[m_elements.length () - 1].m_caller;
  }
  
  /* Assert that this object is sane.  */
--- 230,243 ----
    return cmp (*cs_a, *cs_b);
  }
  
  /* Return the pointer to caller of the topmost call in the stack,
     or nullptr if stack is empty.  */
  const supernode *
! call_string::get_return_node_in_caller () const
  {
    if(m_elements.is_empty ())
      return nullptr;
!   return m_elements[m_elements.length () - 1].get_return_snode_in_caller ();
  }
  
  /* Assert that this object is sane.  */
*************** call_string::validate () const
*** 252,266 ****
    return;
  #endif
  
!   gcc_assert (m_parent || m_elements.length () == 0);
  
-   /* Each entry's "caller" should be the "callee" of the previous entry.  */
    call_string::element_t *e;
    int i;
    FOR_EACH_VEC_ELT (m_elements, i, e)
!     if (i > 0)
!       gcc_assert (e->get_caller_function () ==
! 		  m_elements[i - 1].get_callee_function ());
  }
  
  /* ctor for the root/empty call_string.  */
--- 250,269 ----
    return;
  #endif
  
!   gcc_assert ((m_parent != nullptr)
! 	      ^ (m_elements.length () == 0));
  
    call_string::element_t *e;
    int i;
    FOR_EACH_VEC_ELT (m_elements, i, e)
!     {
!       gcc_assert (e->m_call_op == e->m_call_sedge->get_op ());
!       /* Each entry's "caller" should be the "callee" of the
! 	 previous entry.  */
!       if (i > 0)
! 	gcc_assert (e->get_caller_function () ==
! 		    m_elements[i - 1].get_callee_function ());
!     }
  }
  
  /* ctor for the root/empty call_string.  */
*************** call_string::recursive_log (logger *logg
*** 308,315 ****
        /* Log the final element in detail.  */
        const element_t *e = &m_elements[m_elements.length () - 1];
        pp_printf (pp, "(SN: %i -> SN: %i in %s)]",
! 		 e->m_callee->m_index, e->m_caller->m_index,
! 		 function_name (e->m_caller->m_fun));
      }
    else
      pp_string (pp, "[]");
--- 311,319 ----
        /* Log the final element in detail.  */
        const element_t *e = &m_elements[m_elements.length () - 1];
        pp_printf (pp, "(SN: %i -> SN: %i in %s)]",
! 		 e->m_call_sedge->m_src->m_id,
! 		 e->m_call_sedge->m_dest->m_id,
! 		 function_name (e->get_caller_function ()));
      }
    else
      pp_string (pp, "[]");
diff -Nrcpad gcc-16-20251207/gcc/analyzer/call-string.h gcc-16-20251214/gcc/analyzer/call-string.h
*** gcc-16-20251207/gcc/analyzer/call-string.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/call-string.h	Sun Dec 14 22:32:06 2025
*************** namespace ana {
*** 25,44 ****
  
  class supergraph;
  class supernode;
! class call_superedge;
! class return_superedge;
! 
  
! /* A string of return_superedge pointers, representing a call stack
!    at a program point.
  
     This is used to ensure that we generate interprocedurally valid paths
     i.e. that we return to the same callsite that called us.
  
-    The class stores returning calls ( which may be represented by a
-    returning superedge ). We do so because this is what we need to compare
-    against.
- 
     Instances of call_string are consolidated by the region_model_manager,
     which effectively owns them: it owns the root/empty call_string, and each
     call_string instance tracks its children, lazily creating them on demand,
--- 25,37 ----
  
  class supergraph;
  class supernode;
!   class call_and_return_op;
  
! /* A string of "elements" representing a call stack at a program point.
  
     This is used to ensure that we generate interprocedurally valid paths
     i.e. that we return to the same callsite that called us.
  
     Instances of call_string are consolidated by the region_model_manager,
     which effectively owns them: it owns the root/empty call_string, and each
     call_string instance tracks its children, lazily creating them on demand,
*************** class call_string
*** 49,73 ****
  public:
    /* A struct representing an element in the call_string.
  
!    Each element represents a path from m_callee to m_caller which represents
!    returning from function.  */
  
    struct element_t
    {
!     element_t (const supernode *caller, const supernode *callee)
!     :  m_caller (caller), m_callee (callee)
      {
      }
  
      bool operator== (const element_t &other) const;
      bool operator!= (const element_t &other) const;
  
      /* Accessors */
      function *get_caller_function () const;
!     function *get_callee_function () const;
  
!     const supernode *m_caller;
!     const supernode *m_callee;
    };
  
    void print (pretty_printer *pp) const;
--- 42,78 ----
  public:
    /* A struct representing an element in the call_string.
  
!      Each element represents a "call superedge" within the caller for which
!      the op was a call_and_return_op.
!      Returning from the callee to the caller will involve creating a custom
!      exploded edge from the exit supernode in the callee to the destination
!      of the call superedge within the caller.  */
  
    struct element_t
    {
!     element_t (const superedge *call_sedge,
! 	       const call_and_return_op *call_op,
! 	       function *called_fun)
!     :  m_call_sedge (call_sedge), m_call_op (call_op),
!        m_called_fun (called_fun)
      {
      }
  
      bool operator== (const element_t &other) const;
      bool operator!= (const element_t &other) const;
  
+     static int cmp (const element_t &a, const element_t &b);
+ 
      /* Accessors */
      function *get_caller_function () const;
!     function *get_callee_function () const { return m_called_fun; }
!     const supernode *get_call_snode_in_caller () const;
!     const supernode *get_return_snode_in_caller () const;
!     const gcall &get_call_stmt () const;
  
!     const superedge *m_call_sedge;
!     const call_and_return_op *m_call_op;
!     function *m_called_fun;
    };
  
    void print (pretty_printer *pp) const;
*************** public:
*** 76,86 ****
  
    bool empty_p () const { return m_elements.is_empty (); }
  
!   const call_string *push_call (const supergraph &sg,
! 				const call_superedge *sedge) const;
! 
!   const call_string *push_call (const supernode *src,
! 				const supernode *dest) const;
    const call_string *get_parent () const { return m_parent; }
  
    int calc_recursion_depth () const;
--- 81,89 ----
  
    bool empty_p () const { return m_elements.is_empty (); }
  
!   const call_string *push_call (const superedge &call_sedge,
! 				const call_and_return_op &call_op,
! 				function &called_fun) const;
    const call_string *get_parent () const { return m_parent; }
  
    int calc_recursion_depth () const;
*************** public:
*** 91,99 ****
    static int cmp_ptr_ptr (const void *, const void *);
  
    /* Accessors */
! 
!   const supernode *get_callee_node () const;
!   const supernode *get_caller_node () const;
    unsigned length () const { return m_elements.length (); }
    element_t operator[] (unsigned idx) const
    {
--- 94,100 ----
    static int cmp_ptr_ptr (const void *, const void *);
  
    /* Accessors */
!   const supernode *get_return_node_in_caller () const;
    unsigned length () const { return m_elements.length (); }
    element_t operator[] (unsigned idx) const
    {
*************** private:
*** 119,126 ****
      static inline hashval_t hash (const key_type &k)
      {
        inchash::hash hstate;
!       hstate.add_ptr (k.m_caller);
!       hstate.add_ptr (k.m_callee);
        return hstate.end ();
      }
      static inline bool equal_keys (const key_type &k1, const key_type &k2)
--- 120,126 ----
      static inline hashval_t hash (const key_type &k)
      {
        inchash::hash hstate;
!       hstate.add_ptr (k.m_call_sedge);
        return hstate.end ();
      }
      static inline bool equal_keys (const key_type &k1, const key_type &k2)
*************** private:
*** 129,153 ****
      }
      template <typename T> static inline void remove (T &entry)
      {
!       entry.m_key = element_t (nullptr, nullptr);
      }
      static const bool empty_zero_p = true;
      template <typename T> static inline bool is_empty (const T &entry)
      {
!       return entry.m_key.m_caller == nullptr;
      }
      template <typename T> static inline bool is_deleted (const T &entry)
      {
!       return entry.m_key.m_caller == reinterpret_cast<const supernode *> (1);
      }
      template <typename T> static inline void mark_empty (T &entry)
      {
!       entry.m_key = element_t (nullptr, nullptr);
        entry.m_value = nullptr;
      }
      template <typename T> static inline void mark_deleted (T &entry)
      {
!       entry.m_key.m_caller = reinterpret_cast<const supernode *> (1);
      }
    };
  
--- 129,153 ----
      }
      template <typename T> static inline void remove (T &entry)
      {
!       entry.m_key = element_t (nullptr, nullptr, nullptr);
      }
      static const bool empty_zero_p = true;
      template <typename T> static inline bool is_empty (const T &entry)
      {
!       return entry.m_key.m_call_sedge == nullptr;
      }
      template <typename T> static inline bool is_deleted (const T &entry)
      {
!       return entry.m_key.m_call_sedge == reinterpret_cast<const superedge *> (1);
      }
      template <typename T> static inline void mark_empty (T &entry)
      {
!       entry.m_key = element_t (nullptr, nullptr, nullptr);
        entry.m_value = nullptr;
      }
      template <typename T> static inline void mark_deleted (T &entry)
      {
!        entry.m_key.m_call_sedge = reinterpret_cast<const superedge *> (1);
      }
    };
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/call-summary.cc gcc-16-20251214/gcc/analyzer/call-summary.cc
*** gcc-16-20251207/gcc/analyzer/call-summary.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/call-summary.cc	Sun Dec 14 22:32:06 2025
*************** call_summary::get_state () const
*** 38,44 ****
  tree
  call_summary::get_fndecl () const
  {
!   return m_enode->get_point ().get_fndecl ();
  }
  
  label_text
--- 38,44 ----
  tree
  call_summary::get_fndecl () const
  {
!   return m_enode->get_function ()->decl;
  }
  
  label_text
*************** call_summary_replay::convert_svalue_from
*** 393,399 ****
        {
  	const widening_svalue *widening_summary_sval
  	  = as_a <const widening_svalue *> (summary_sval);
! 	const function_point &point = widening_summary_sval->get_point ();
  	const svalue *summary_base_sval
  	  = widening_summary_sval->get_base_svalue ();
  	const svalue *caller_base_sval
--- 393,399 ----
        {
  	const widening_svalue *widening_summary_sval
  	  = as_a <const widening_svalue *> (summary_sval);
! 	const supernode *snode = widening_summary_sval->get_snode ();
  	const svalue *summary_base_sval
  	  = widening_summary_sval->get_base_svalue ();
  	const svalue *caller_base_sval
*************** call_summary_replay::convert_svalue_from
*** 411,417 ****
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_widening_svalue
  	  (summary_iter_sval->get_type (),
! 	   point,
  	   caller_base_sval,
  	   caller_iter_sval);
        }
--- 411,417 ----
  	region_model_manager *mgr = get_manager ();
  	return mgr->get_or_create_widening_svalue
  	  (summary_iter_sval->get_type (),
! 	   snode,
  	   caller_base_sval,
  	   caller_iter_sval);
        }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/checker-event.cc gcc-16-20251214/gcc/analyzer/checker-event.cc
*** gcc-16-20251207/gcc/analyzer/checker-event.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/checker-event.cc	Sun Dec 14 22:32:06 2025
*************** event_kind_to_string (enum event_kind ek
*** 77,86 ****
        return "end_cfg_edge";
      case event_kind::catch_:
        return "catch";
!     case event_kind::call_edge:
!       return "call_edge";
!     case event_kind::return_edge:
!       return "return_edge";
      case event_kind::start_consolidated_cfg_edges:
        return "start_consolidated_cfg_edges";
      case event_kind::end_consolidated_cfg_edges:
--- 77,86 ----
        return "end_cfg_edge";
      case event_kind::catch_:
        return "catch";
!     case event_kind::call_:
!       return "call";
!     case event_kind::return_:
!       return "return";
      case event_kind::start_consolidated_cfg_edges:
        return "start_consolidated_cfg_edges";
      case event_kind::end_consolidated_cfg_edges:
*************** region_creation_event_debug::print_desc
*** 379,386 ****
  function_entry_event::function_entry_event (const program_point &dst_point,
  					    const program_state &state)
  : checker_event (event_kind::function_entry,
! 		 event_loc_info (dst_point.get_supernode
! 				   ()->get_start_location (),
  				 dst_point.get_fndecl (),
  				 dst_point.get_stack_depth ())),
    m_state (state)
--- 379,385 ----
  function_entry_event::function_entry_event (const program_point &dst_point,
  					    const program_state &state)
  : checker_event (event_kind::function_entry,
! 		 event_loc_info (dst_point.get_location (),
  				 dst_point.get_fndecl (),
  				 dst_point.get_stack_depth ())),
    m_state (state)
*************** function_entry_event::get_meaning () con
*** 411,419 ****
  
  /* state_change_event's ctor.  */
  
! state_change_event::state_change_event (const supernode *node,
  					const gimple *stmt,
- 					int stack_depth,
  					const state_machine &sm,
  					const svalue *sval,
  					state_machine::state_t from,
--- 410,417 ----
  
  /* state_change_event's ctor.  */
  
! state_change_event::state_change_event (const event_loc_info &loc_info,
  					const gimple *stmt,
  					const state_machine &sm,
  					const svalue *sval,
  					state_machine::state_t from,
*************** state_change_event::state_change_event (
*** 421,431 ****
  					const svalue *origin,
  					const program_state &dst_state,
  					const exploded_node *enode)
! : checker_event (event_kind::state_change,
! 		 event_loc_info (stmt->location,
! 				 node->m_fun->decl,
! 				 stack_depth)),
!   m_node (node), m_stmt (stmt), m_sm (sm),
    m_sval (sval), m_from (from), m_to (to),
    m_origin (origin),
    m_dst_state (dst_state),
--- 419,427 ----
  					const svalue *origin,
  					const program_state &dst_state,
  					const exploded_node *enode)
! : checker_event (event_kind::state_change, loc_info),
!   m_stmt (stmt),
!   m_sm (sm),
    m_sval (sval), m_from (from), m_to (to),
    m_origin (origin),
    m_dst_state (dst_state),
*************** maybe_add_sarif_properties (diagnostics:
*** 551,593 ****
  #undef PROPERTY_PREFIX
  }
  
- /* Get the callgraph_superedge for this superedge_event, which must be
-    for an interprocedural edge, rather than a CFG edge.  */
- 
- const callgraph_superedge&
- superedge_event::get_callgraph_superedge () const
- {
-   gcc_assert (m_sedge->m_kind != SUPEREDGE_CFG_EDGE);
-   return *m_sedge->dyn_cast_callgraph_superedge ();
- }
- 
  /* Determine if this event should be filtered at the given verbosity
     level.  */
  
  bool
  superedge_event::should_filter_p (int verbosity) const
  {
!   switch (m_sedge->m_kind)
      {
!     case SUPEREDGE_CFG_EDGE:
!       {
! 	if (verbosity < 2)
! 	  return true;
! 
! 	if (verbosity < 4)
! 	  {
! 	    /* Filter events with empty descriptions.  This ought to filter
! 	       FALLTHRU, but retain true/false/switch edges.  */
! 	    auto pp = global_dc->clone_printer ();
! 	    print_desc (*pp.get ());
! 	    if (pp_formatted_text (pp.get ()) [0] == '\0')
! 	      return true;
! 	  }
!       }
!       break;
  
!     default:
!       break;
      }
    return false;
  }
--- 547,572 ----
  #undef PROPERTY_PREFIX
  }
  
  /* Determine if this event should be filtered at the given verbosity
     level.  */
  
  bool
  superedge_event::should_filter_p (int verbosity) const
  {
!   if (m_sedge->get_any_cfg_edge ())
      {
!       if (verbosity < 2)
! 	return true;
  
!       if (verbosity < 4)
! 	{
! 	  /* Filter events with empty descriptions.  This ought to filter
! 	     FALLTHRU, but retain true/false/switch edges.  */
! 	  auto pp = global_dc->clone_printer ();
! 	  print_desc (*pp.get ());
! 	  if (pp_formatted_text (pp.get ()) [0] == '\0')
! 	    return true;
! 	}
      }
    return false;
  }
*************** superedge_event::get_program_state () co
*** 598,634 ****
    return &m_eedge.m_dest->get_state ();
  }
  
  /* superedge_event's ctor.  */
  
  superedge_event::superedge_event (enum event_kind kind,
  				  const exploded_edge &eedge,
  				  const event_loc_info &loc_info)
  : checker_event (kind, loc_info),
!   m_eedge (eedge), m_sedge (eedge.m_sedge),
!   m_var (NULL_TREE), m_critical_state (0)
  {
!   /* Note that m_sedge can be nullptr for e.g. jumps through
!      function pointers.  */
  }
  
  /* class cfg_edge_event : public superedge_event.  */
  
- /* Get the cfg_superedge for this cfg_edge_event.  */
- 
- const cfg_superedge &
- cfg_edge_event::get_cfg_superedge () const
- {
-   return *m_sedge->dyn_cast_cfg_superedge ();
- }
- 
  /* cfg_edge_event's ctor.  */
  
  cfg_edge_event::cfg_edge_event (enum event_kind kind,
  				const exploded_edge &eedge,
! 				const event_loc_info &loc_info)
! : superedge_event (kind, eedge, loc_info)
  {
-   gcc_assert (eedge.m_sedge->m_kind == SUPEREDGE_CFG_EDGE);
  }
  
  /* Implementation of diagnostics::paths::event::get_meaning vfunc for
--- 577,613 ----
    return &m_eedge.m_dest->get_state ();
  }
  
+ const call_and_return_op *
+ superedge_event::get_call_and_return_op () const
+ {
+   if (m_sedge)
+     if (auto base_op = m_sedge->get_op ())
+       return base_op->dyn_cast_call_and_return_op ();
+   return nullptr;
+ }
+ 
  /* superedge_event's ctor.  */
  
  superedge_event::superedge_event (enum event_kind kind,
  				  const exploded_edge &eedge,
  				  const event_loc_info &loc_info)
  : checker_event (kind, loc_info),
!   m_eedge (eedge), m_sedge (eedge.m_sedge)
  {
!   gcc_assert (m_sedge);
  }
  
  /* class cfg_edge_event : public superedge_event.  */
  
  /* cfg_edge_event's ctor.  */
  
  cfg_edge_event::cfg_edge_event (enum event_kind kind,
  				const exploded_edge &eedge,
! 				const event_loc_info &loc_info,
! 				const control_flow_op *op)
! : superedge_event (kind, eedge, loc_info),
!   m_op (op)
  {
  }
  
  /* Implementation of diagnostics::paths::event::get_meaning vfunc for
*************** cfg_edge_event::cfg_edge_event (enum eve
*** 637,649 ****
  diagnostics::paths::event::meaning
  cfg_edge_event::get_meaning () const
  {
!   const cfg_superedge& cfg_sedge = get_cfg_superedge ();
!   if (cfg_sedge.true_value_p ())
!     return meaning (verb::branch, property::true_);
!   else if (cfg_sedge.false_value_p ())
!     return meaning (verb::branch, property::false_);
!   else
!     return meaning ();
  }
  
  /* class start_cfg_edge_event : public cfg_edge_event.  */
--- 616,635 ----
  diagnostics::paths::event::meaning
  cfg_edge_event::get_meaning () const
  {
!   if (::edge e = get_cfg_edge ())
!     {
!       if (e->flags & EDGE_TRUE_VALUE)
! 	return meaning (verb::branch, property::true_);
!       else if (e->flags & EDGE_FALSE_VALUE)
! 	return meaning (verb::branch, property::false_);
!     }
!   return meaning ();
! }
! 
! ::edge
! cfg_edge_event::get_cfg_edge () const
! {
!   return m_sedge->get_any_cfg_edge ();
  }
  
  /* class start_cfg_edge_event : public cfg_edge_event.  */
*************** start_cfg_edge_event::print_desc (pretty
*** 675,683 ****
    label_text edge_desc (m_sedge->get_description (user_facing));
    if (user_facing)
      {
!       if (edge_desc.get () && strlen (edge_desc.get ()) > 0)
  	{
! 	  label_text cond_desc = maybe_describe_condition (pp_show_color (&pp));
  	  label_text result;
  	  if (cond_desc.get ())
  	    pp_printf (&pp,
--- 661,672 ----
    label_text edge_desc (m_sedge->get_description (user_facing));
    if (user_facing)
      {
!       if (edge_desc.get ()
! 	  && strlen (edge_desc.get ()) > 0
! 	  && m_op)
  	{
! 	  label_text cond_desc
! 	    = m_op->maybe_describe_condition (pp_show_color (&pp));
  	  label_text result;
  	  if (cond_desc.get ())
  	    pp_printf (&pp,
*************** start_cfg_edge_event::print_desc (pretty
*** 695,837 ****
  	return pp_printf (&pp,
  			  "taking %qs edge SN:%i -> SN:%i",
  			  edge_desc.get (),
! 			  m_sedge->m_src->m_index,
! 			  m_sedge->m_dest->m_index);
        else
  	return pp_printf (&pp,
  			  "taking edge SN:%i -> SN:%i",
! 			  m_sedge->m_src->m_index,
! 			  m_sedge->m_dest->m_index);
!     }
! }
! 
! /* Attempt to generate a description of any condition that holds at this edge.
! 
!    The intent is to make the user-facing messages more clear, especially for
!    cases where there's a single or double-negative, such as
!    when describing the false branch of an inverted condition.
! 
!    For example, rather than printing just:
! 
!       |  if (!ptr)
!       |     ~
!       |     |
!       |     (1) following 'false' branch...
! 
!    it's clearer to spell out the condition that holds:
! 
!       |  if (!ptr)
!       |     ~
!       |     |
!       |     (1) following 'false' branch (when 'ptr' is non-NULL)...
!                                           ^^^^^^^^^^^^^^^^^^^^^^
! 
!    In the above example, this function would generate the highlighted
!    string: "when 'ptr' is non-NULL".
! 
!    If the edge is not a condition, or it's not clear that a description of
!    the condition would be helpful to the user, return NULL.  */
! 
! label_text
! start_cfg_edge_event::maybe_describe_condition (bool can_colorize) const
! {
!   const cfg_superedge& cfg_sedge = get_cfg_superedge ();
! 
!   if (cfg_sedge.true_value_p () || cfg_sedge.false_value_p ())
!     {
!       const gimple *last_stmt = m_sedge->m_src->get_last_stmt ();
!       if (const gcond *cond_stmt = dyn_cast <const gcond *> (last_stmt))
! 	{
! 	  enum tree_code op = gimple_cond_code (cond_stmt);
! 	  tree lhs = gimple_cond_lhs (cond_stmt);
! 	  tree rhs = gimple_cond_rhs (cond_stmt);
! 	  if (cfg_sedge.false_value_p ())
! 	    op = invert_tree_comparison (op, false /* honor_nans */);
! 	  return maybe_describe_condition (can_colorize,
! 					   lhs, op, rhs);
! 	}
!     }
!   return label_text::borrow (nullptr);
! }
! 
! /* Subroutine of maybe_describe_condition above.
! 
!    Attempt to generate a user-facing description of the condition
!    LHS OP RHS, but only if it is likely to make it easier for the
!    user to understand a condition.  */
! 
! label_text
! start_cfg_edge_event::maybe_describe_condition (bool can_colorize,
! 						tree lhs,
! 						enum tree_code op,
! 						tree rhs)
! {
!   /* In theory we could just build a tree via
!        fold_build2 (op, boolean_type_node, lhs, rhs)
!      and print it with %qE on it, but this leads to warts such as
!      parenthesizing vars, such as '(i) <= 9', and uses of '<unknown>'.  */
! 
!   /* Special-case: describe testing the result of strcmp, as figuring
!      out what the "true" or "false" path is can be confusing to the user.  */
!   if (TREE_CODE (lhs) == SSA_NAME
!       && zerop (rhs))
!     {
!       if (gcall *call = dyn_cast <gcall *> (SSA_NAME_DEF_STMT (lhs)))
! 	if (is_special_named_call_p (*call, "strcmp", 2))
! 	  {
! 	    if (op == EQ_EXPR)
! 	      return label_text::borrow ("when the strings are equal");
! 	    if (op == NE_EXPR)
! 	      return label_text::borrow ("when the strings are non-equal");
! 	  }
!     }
! 
!   /* Only attempt to generate text for sufficiently simple expressions.  */
!   if (!should_print_expr_p (lhs))
!     return label_text::borrow (nullptr);
!   if (!should_print_expr_p (rhs))
!     return label_text::borrow (nullptr);
! 
!   /* Special cases for pointer comparisons against NULL.  */
!   if (POINTER_TYPE_P (TREE_TYPE (lhs))
!       && POINTER_TYPE_P (TREE_TYPE (rhs))
!       && zerop (rhs))
!     {
!       if (op == EQ_EXPR)
! 	return make_label_text (can_colorize, "when %qE is NULL",
! 				lhs);
!       if (op == NE_EXPR)
! 	return make_label_text (can_colorize, "when %qE is non-NULL",
! 				lhs);
      }
- 
-   return make_label_text (can_colorize, "when %<%E %s %E%>",
- 			  lhs, op_symbol_code (op), rhs);
- }
- 
- /* Subroutine of maybe_describe_condition.
- 
-    Return true if EXPR is we will get suitable user-facing output
-    from %E on it.  */
- 
- bool
- start_cfg_edge_event::should_print_expr_p (tree expr)
- {
-   if (TREE_CODE (expr) == SSA_NAME)
-     {
-       if (SSA_NAME_VAR (expr))
- 	return should_print_expr_p (SSA_NAME_VAR (expr));
-       else
- 	return false;
-     }
- 
-   if (DECL_P (expr))
-     return true;
- 
-   if (CONSTANT_CLASS_P (expr))
-     return true;
- 
-   return false;
  }
  
  /* class catch_cfg_edge_event : public cfg_edge_event.  */
--- 684,697 ----
  	return pp_printf (&pp,
  			  "taking %qs edge SN:%i -> SN:%i",
  			  edge_desc.get (),
! 			  m_sedge->m_src->m_id,
! 			  m_sedge->m_dest->m_id);
        else
  	return pp_printf (&pp,
  			  "taking edge SN:%i -> SN:%i",
! 			  m_sedge->m_src->m_id,
! 			  m_sedge->m_dest->m_id);
      }
  }
  
  /* class catch_cfg_edge_event : public cfg_edge_event.  */
*************** catch_cfg_edge_event::get_meaning () con
*** 848,858 ****
  
  call_event::call_event (const exploded_edge &eedge,
  			const event_loc_info &loc_info)
! : superedge_event (event_kind::call_edge, eedge, loc_info)
  {
-   if (eedge.m_sedge)
-     gcc_assert (eedge.m_sedge->m_kind == SUPEREDGE_CALL);
- 
     m_src_snode = eedge.m_src->get_supernode ();
     m_dest_snode = eedge.m_dest->get_supernode ();
  }
--- 708,715 ----
  
  call_event::call_event (const exploded_edge &eedge,
  			const event_loc_info &loc_info)
! : superedge_event (event_kind::call_, eedge, loc_info)
  {
     m_src_snode = eedge.m_src->get_supernode ();
     m_dest_snode = eedge.m_dest->get_supernode ();
  }
*************** call_event::call_event (const exploded_e
*** 871,884 ****
  void
  call_event::print_desc (pretty_printer &pp) const
  {
!   if (m_critical_state && m_pending_diagnostic)
      {
!       gcc_assert (m_var);
!       tree var = fixup_tree_for_diagnostic (m_var);
        evdesc::call_with_state evd (m_src_snode->m_fun->decl,
  				   m_dest_snode->m_fun->decl,
  				   var,
! 				   m_critical_state);
        if (m_pending_diagnostic->describe_call_with_state (pp, evd))
  	return;
      }
--- 728,741 ----
  void
  call_event::print_desc (pretty_printer &pp) const
  {
!   if (m_critical_state.m_state && m_pending_diagnostic)
      {
!       gcc_assert (m_critical_state.m_var);
!       tree var = fixup_tree_for_diagnostic (m_critical_state.m_var);
        evdesc::call_with_state evd (m_src_snode->m_fun->decl,
  				   m_dest_snode->m_fun->decl,
  				   var,
! 				   m_critical_state.m_state);
        if (m_pending_diagnostic->describe_call_with_state (pp, evd))
  	return;
      }
*************** call_event::get_program_state () const
*** 926,944 ****
    return &m_eedge.m_src->get_state ();
  }
  
! /* class return_event : public superedge_event.  */
  
  /* return_event's ctor.  */
  
  return_event::return_event (const exploded_edge &eedge,
  			    const event_loc_info &loc_info)
! : superedge_event (event_kind::return_edge, eedge, loc_info)
  {
-   if (eedge.m_sedge)
-     gcc_assert (eedge.m_sedge->m_kind == SUPEREDGE_RETURN);
- 
    m_src_snode = eedge.m_src->get_supernode ();
    m_dest_snode = eedge.m_dest->get_supernode ();
  }
  
  /* Implementation of diagnostics::paths::event::print_desc vfunc for
--- 783,801 ----
    return &m_eedge.m_src->get_state ();
  }
  
! /* class return_event : public checker_event.  */
  
  /* return_event's ctor.  */
  
  return_event::return_event (const exploded_edge &eedge,
  			    const event_loc_info &loc_info)
! : checker_event (event_kind::return_, loc_info),
!   m_eedge (eedge)
  {
    m_src_snode = eedge.m_src->get_supernode ();
    m_dest_snode = eedge.m_dest->get_supernode ();
+   m_call_and_return_op
+     = eedge.m_src->get_point ().get_call_string ().get_top_of_stack ().m_call_op;
  }
  
  /* Implementation of diagnostics::paths::event::print_desc vfunc for
*************** return_event::print_desc (pretty_printer
*** 959,969 ****
        state involved in the pending diagnostic, give the pending
        diagnostic a chance to describe this return (in terms of
        itself).  */
!   if (m_critical_state && m_pending_diagnostic)
      {
        evdesc::return_of_state evd (m_dest_snode->m_fun->decl,
  				   m_src_snode->m_fun->decl,
! 				   m_critical_state);
        if (m_pending_diagnostic->describe_return_of_state (pp, evd))
  	return;
      }
--- 816,826 ----
        state involved in the pending diagnostic, give the pending
        diagnostic a chance to describe this return (in terms of
        itself).  */
!   if (m_critical_state.m_state && m_pending_diagnostic)
      {
        evdesc::return_of_state evd (m_dest_snode->m_fun->decl,
  				   m_src_snode->m_fun->decl,
! 				   m_critical_state.m_state);
        if (m_pending_diagnostic->describe_return_of_state (pp, evd))
  	return;
      }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/checker-event.h gcc-16-20251214/gcc/analyzer/checker-event.h
*** gcc-16-20251207/gcc/analyzer/checker-event.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/checker-event.h	Sun Dec 14 22:32:06 2025
*************** enum class event_kind
*** 42,49 ****
    start_cfg_edge,
    end_cfg_edge,
    catch_,
!   call_edge,
!   return_edge,
    start_consolidated_cfg_edges,
    end_consolidated_cfg_edges,
    inlined_call,
--- 42,49 ----
    start_cfg_edge,
    end_cfg_edge,
    catch_,
!   call_,
!   return_,
    start_consolidated_cfg_edges,
    end_consolidated_cfg_edges,
    inlined_call,
*************** extern const char *event_kind_to_string
*** 76,83 ****
  	   start_cfg_edge_event (event_kind::start_cfg_edge)
  	   end_cfg_edge_event (event_kind::end_cfg_edge)
  	   catch_cfg_edge_event (event_kind::catch_cfg_edge)
!          call_event (event_kind::call_edge)
!          return_edge (event_kind::return_edge)
         start_consolidated_cfg_edges_event (event_kind::start_consolidated_cfg_edges)
         end_consolidated_cfg_edges_event (event_kind::end_consolidated_cfg_edges)
         inlined_call_event (event_kind::inlined_call)
--- 76,83 ----
  	   start_cfg_edge_event (event_kind::start_cfg_edge)
  	   end_cfg_edge_event (event_kind::end_cfg_edge)
  	   catch_cfg_edge_event (event_kind::catch_cfg_edge)
! 	 call_event (event_kind::call_)
!        return_event (event_kind::return_)
         start_consolidated_cfg_edges_event (event_kind::start_consolidated_cfg_edges)
         end_consolidated_cfg_edges_event (event_kind::end_consolidated_cfg_edges)
         inlined_call_event (event_kind::inlined_call)
*************** private:
*** 381,388 ****
  class state_change_event : public checker_event
  {
  public:
!   state_change_event (const supernode *node, const gimple *stmt,
! 		      int stack_depth,
  		      const state_machine &sm,
  		      const svalue *sval,
  		      state_machine::state_t from,
--- 381,388 ----
  class state_change_event : public checker_event
  {
  public:
!   state_change_event (const event_loc_info &loc_info,
! 		      const gimple *stmt,
  		      const state_machine &sm,
  		      const svalue *sval,
  		      state_machine::state_t from,
*************** public:
*** 407,413 ****
  
    const exploded_node *get_exploded_node () const { return m_enode; }
  
-   const supernode *m_node;
    const gimple *m_stmt;
    const state_machine &m_sm;
    const svalue *m_sval;
--- 407,412 ----
*************** public:
*** 429,451 ****
  			      diagnostics::sarif_object &thread_flow_loc_obj)
      const override;
  
-   /* Mark this edge event as being either an interprocedural call or
-      return in which VAR is in STATE, and that this is critical to the
-      diagnostic (so that print_desc can attempt to get a better description
-      from any pending_diagnostic).  */
-   void record_critical_state (tree var, state_machine::state_t state)
-   {
-     m_var = var;
-     m_critical_state = state;
-   }
- 
-   const callgraph_superedge& get_callgraph_superedge () const;
- 
    bool should_filter_p (int verbosity) const;
  
    const program_state *
    get_program_state () const override;
  
   protected:
    superedge_event (enum event_kind kind, const exploded_edge &eedge,
  		   const event_loc_info &loc_info);
--- 428,441 ----
  			      diagnostics::sarif_object &thread_flow_loc_obj)
      const override;
  
    bool should_filter_p (int verbosity) const;
  
    const program_state *
    get_program_state () const override;
  
+   virtual const call_and_return_op *
+   get_call_and_return_op () const;
+ 
   protected:
    superedge_event (enum event_kind kind, const exploded_edge &eedge,
  		   const event_loc_info &loc_info);
*************** public:
*** 453,460 ****
   public:
    const exploded_edge &m_eedge;
    const superedge *m_sedge;
-   tree m_var;
-   state_machine::state_t m_critical_state;
  };
  
  /* An abstract event subclass for when a CFG edge is followed; it has two
--- 443,448 ----
*************** class cfg_edge_event : public superedge_
*** 466,476 ****
  public:
    meaning get_meaning () const override;
  
!   const cfg_superedge& get_cfg_superedge () const;
  
   protected:
!   cfg_edge_event (enum event_kind kind, const exploded_edge &eedge,
! 		  const event_loc_info &loc_info);
  };
  
  /* A concrete event subclass for the start of a CFG edge
--- 454,468 ----
  public:
    meaning get_meaning () const override;
  
!   ::edge get_cfg_edge () const;
  
   protected:
!   cfg_edge_event (enum event_kind kind,
! 		  const exploded_edge &eedge,
! 		  const event_loc_info &loc_info,
! 		  const control_flow_op *op);
! 
!   const control_flow_op *m_op;
  };
  
  /* A concrete event subclass for the start of a CFG edge
*************** class start_cfg_edge_event : public cfg_
*** 480,501 ****
  {
  public:
    start_cfg_edge_event (const exploded_edge &eedge,
! 			const event_loc_info &loc_info)
!   : cfg_edge_event (event_kind::start_cfg_edge, eedge, loc_info)
    {
    }
  
    void print_desc (pretty_printer &pp) const override;
    bool connect_to_next_event_p () const final override { return true; }
  
- protected:
-   label_text maybe_describe_condition (bool can_colorize) const;
- 
  private:
-   static label_text maybe_describe_condition (bool can_colorize,
- 					      tree lhs,
- 					      enum tree_code op,
- 					      tree rhs);
    static bool should_print_expr_p (tree);
  };
  
--- 472,487 ----
  {
  public:
    start_cfg_edge_event (const exploded_edge &eedge,
! 			const event_loc_info &loc_info,
! 			const control_flow_op *op)
!   : cfg_edge_event (event_kind::start_cfg_edge, eedge, loc_info, op)
    {
    }
  
    void print_desc (pretty_printer &pp) const override;
    bool connect_to_next_event_p () const final override { return true; }
  
  private:
    static bool should_print_expr_p (tree);
  };
  
*************** class end_cfg_edge_event : public cfg_ed
*** 506,513 ****
  {
  public:
    end_cfg_edge_event (const exploded_edge &eedge,
! 		      const event_loc_info &loc_info)
!   : cfg_edge_event (event_kind::end_cfg_edge, eedge, loc_info)
    {
    }
  
--- 492,500 ----
  {
  public:
    end_cfg_edge_event (const exploded_edge &eedge,
! 		      const event_loc_info &loc_info,
! 		      const control_flow_op *op)
!   : cfg_edge_event (event_kind::end_cfg_edge, eedge, loc_info, op)
    {
    }
  
*************** class catch_cfg_edge_event : public cfg_
*** 525,532 ****
  public:
    catch_cfg_edge_event (const exploded_edge &eedge,
  			const event_loc_info &loc_info,
  			tree type)
!   : cfg_edge_event (event_kind::catch_, eedge, loc_info),
      m_type (type)
    {
    }
--- 512,520 ----
  public:
    catch_cfg_edge_event (const exploded_edge &eedge,
  			const event_loc_info &loc_info,
+ 			const control_flow_op &op,
  			tree type)
!   : cfg_edge_event (event_kind::catch_, eedge, loc_info, &op),
      m_type (type)
    {
    }
*************** private:
*** 545,550 ****
--- 533,555 ----
    tree m_type;
  };
  
+ struct critical_state
+ {
+   critical_state ()
+   : m_var (NULL_TREE),
+     m_state (nullptr)
+   {
+   }
+   critical_state (tree var, state_machine::state_t state)
+   : m_var (var),
+     m_state (state)
+   {
+   }
+ 
+   tree m_var;
+   state_machine::state_t m_state;
+ };
+ 
  /* A concrete event subclass for an interprocedural call.  */
  
  class call_event : public superedge_event
*************** public:
*** 561,577 ****
    const program_state *
    get_program_state () const final override;
  
  protected:
    tree get_caller_fndecl () const;
    tree get_callee_fndecl () const;
  
    const supernode *m_src_snode;
    const supernode *m_dest_snode;
  };
  
  /* A concrete event subclass for an interprocedural return.  */
  
! class return_event : public superedge_event
  {
  public:
    return_event (const exploded_edge &eedge,
--- 566,592 ----
    const program_state *
    get_program_state () const final override;
  
+   /* Mark this edge event as being either an interprocedural call or
+      return in which VAR is in STATE, and that this is critical to the
+      diagnostic (so that print_desc can attempt to get a better description
+      from any pending_diagnostic).  */
+   void record_critical_state (tree var, state_machine::state_t state)
+   {
+     m_critical_state = critical_state (var, state);
+   }
+ 
  protected:
    tree get_caller_fndecl () const;
    tree get_callee_fndecl () const;
  
    const supernode *m_src_snode;
    const supernode *m_dest_snode;
+   critical_state m_critical_state;
  };
  
  /* A concrete event subclass for an interprocedural return.  */
  
! class return_event : public checker_event
  {
  public:
    return_event (const exploded_edge &eedge,
*************** public:
*** 582,589 ****
--- 597,622 ----
  
    bool is_return_p () const final override;
  
+   const call_and_return_op *
+   get_call_and_return_op () const
+   {
+     return m_call_and_return_op;
+   }
+ 
+   /* Mark this edge event as being either an interprocedural call or
+      return in which VAR is in STATE, and that this is critical to the
+      diagnostic (so that print_desc can attempt to get a better description
+      from any pending_diagnostic).  */
+   void record_critical_state (tree var, state_machine::state_t state)
+   {
+     m_critical_state = critical_state (var, state);
+   }
+ 
+   const exploded_edge &m_eedge;
    const supernode *m_src_snode;
    const supernode *m_dest_snode;
+   const call_and_return_op *m_call_and_return_op;
+   critical_state m_critical_state;
  };
  
  /* A concrete event subclass for the start of a consolidated run of CFG
diff -Nrcpad gcc-16-20251207/gcc/analyzer/common.h gcc-16-20251214/gcc/analyzer/common.h
*** gcc-16-20251207/gcc/analyzer/common.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/common.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 23,28 ****
--- 23,29 ----
  
  #include "config.h"
  #define INCLUDE_MAP
+ #define INCLUDE_SET
  #define INCLUDE_STRING
  #define INCLUDE_VECTOR
  #include "system.h"
*************** namespace ana {
*** 49,62 ****
  class supergraph;
  class supernode;
  class superedge;
-   class cfg_superedge;
-     class switch_cfg_superedge;
-     class eh_dispatch_cfg_superedge;
-       class eh_dispatch_try_cfg_superedge;
-       class eh_dispatch_allowed_cfg_superedge;
-   class callgraph_superedge;
-     class call_superedge;
-     class return_superedge;
  
  class svalue;
    class region_svalue;
--- 50,55 ----
*************** class checker_event;
*** 119,132 ****
  class checker_path;
  class extrinsic_state;
  class sm_state_map;
- class stmt_finder;
  class program_point;
- class function_point;
  class program_state;
  class exploded_graph;
  class exploded_node;
  class exploded_edge;
  class feasibility_problem;
  class exploded_cluster;
  class exploded_path;
  class analysis_plan;
--- 112,124 ----
  class checker_path;
  class extrinsic_state;
  class sm_state_map;
  class program_point;
  class program_state;
  class exploded_graph;
  class exploded_node;
  class exploded_edge;
  class feasibility_problem;
+ class feasibility_state;
  class exploded_cluster;
  class exploded_path;
  class analysis_plan;
*************** class call_summary;
*** 145,150 ****
--- 137,143 ----
  class call_summary_replay;
  struct per_function_data;
  struct interesting_t;
+ class uncertainty_t;
  
  class feasible_node;
  
*************** extern int tree_cmp (const void *p1, con
*** 163,168 ****
--- 156,167 ----
  extern tree fixup_tree_for_diagnostic (tree);
  extern tree get_diagnostic_tree_for_gassign (const gassign *);
  
+ inline bool
+ useful_location_p (location_t loc)
+ {
+   return get_pure_location (loc) != UNKNOWN_LOCATION;
+ }
+ 
  /* A tree, extended with stack frame information for locals, so that
     we can distinguish between different values of locals within a potentially
     recursive callstack.  */
*************** class known_function
*** 296,301 ****
--- 295,309 ----
  public:
    virtual ~known_function () {}
    virtual bool matches_call_types_p (const call_details &cd) const = 0;
+ 
+   /* A hook for performing additional checks on the expected state
+      at a call.  */
+   virtual void
+   check_any_preconditions (const call_details &) const
+   {
+     // no-op
+   }
+ 
    virtual void impl_call_pre (const call_details &) const
    {
      return;
*************** public:
*** 388,393 ****
--- 396,405 ----
    /* Hook for making .dot label more readable.  */
    virtual void print (pretty_printer *pp) const = 0;
  
+   virtual void
+   get_dot_attrs (const char *&out_style,
+ 		 const char *&out_color) const;
+ 
    /* Hook for updating STATE when handling bifurcation.  */
    virtual bool update_state (program_state *state,
  			     const exploded_edge *eedge,
*************** public:
*** 400,406 ****
  			     region_model_context *ctxt) const = 0;
  
    virtual void add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge) const = 0;
  
    virtual exploded_node *create_enode (exploded_graph &eg,
  				       const program_point &point,
--- 412,419 ----
  			     region_model_context *ctxt) const = 0;
  
    virtual void add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge,
! 				   pending_diagnostic &pd) const = 0;
  
    virtual exploded_node *create_enode (exploded_graph &eg,
  				       const program_point &point,
*************** extern bool is_longjmp_call_p (const gca
*** 485,490 ****
--- 498,504 ----
  extern bool is_placement_new_p (const gcall &call);
  extern bool is_cxa_throw_p (const gcall &call);
  extern bool is_cxa_rethrow_p (const gcall &call);
+ extern bool is_cxa_end_catch_p (const gcall &call);
  
  extern const char *get_user_facing_name (const gcall &call);
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/constraint-manager.cc gcc-16-20251214/gcc/analyzer/constraint-manager.cc
*** gcc-16-20251207/gcc/analyzer/constraint-manager.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/constraint-manager.cc	Sun Dec 14 22:32:06 2025
*************** bounded_ranges_manager::consolidate (bou
*** 930,982 ****
    return inst;
  }
  
- /* Get the bounded_ranges instance for EDGE of SWITCH_STMT,
-    creating it if necessary, and caching it by edge.  */
- 
- const bounded_ranges *
- bounded_ranges_manager::
- get_or_create_ranges_for_switch (const switch_cfg_superedge *edge,
- 				 const gswitch *switch_stmt)
- {
-   /* Look in per-edge cache.  */
-   if (const bounded_ranges ** slot = m_edge_cache.get (edge))
-     return *slot;
- 
-   /* Not yet in cache.  */
-   const bounded_ranges *all_cases_ranges
-     = create_ranges_for_switch (*edge, switch_stmt);
-   m_edge_cache.put (edge, all_cases_ranges);
-   return all_cases_ranges;
- }
- 
- /* Get the bounded_ranges instance for EDGE of SWITCH_STMT,
-    creating it if necessary, for edges for which the per-edge
-    cache has not yet been populated.  */
- 
- const bounded_ranges *
- bounded_ranges_manager::
- create_ranges_for_switch (const switch_cfg_superedge &edge,
- 			  const gswitch *switch_stmt)
- {
-   /* Get the ranges for each case label.  */
-   auto_vec <const bounded_ranges *> case_ranges_vec
-     (gimple_switch_num_labels (switch_stmt));
- 
-   for (tree case_label : edge.get_case_labels ())
-     {
-       /* Get the ranges for this case label.  */
-       const bounded_ranges *case_ranges
- 	= make_case_label_ranges (switch_stmt, case_label);
-       case_ranges_vec.quick_push (case_ranges);
-     }
- 
-   /* Combine all the ranges for each case label into a single collection
-      of ranges.  */
-   const bounded_ranges *all_cases_ranges
-     = get_or_create_union (case_ranges_vec);
-   return all_cases_ranges;
- }
- 
  /* Get the bounded_ranges instance for CASE_LABEL within
     SWITCH_STMT.  */
  
--- 930,935 ----
diff -Nrcpad gcc-16-20251207/gcc/analyzer/constraint-manager.h gcc-16-20251214/gcc/analyzer/constraint-manager.h
*** gcc-16-20251207/gcc/analyzer/constraint-manager.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/constraint-manager.h	Sun Dec 14 22:32:06 2025
*************** template <> struct default_hash_traits<b
*** 172,191 ****
  
  namespace ana {
  
! /* An object to own and consolidate bounded_ranges instances.
!    This also caches the mapping from switch_cfg_superedge
!    bounded_ranges instances, so that get_or_create_ranges_for_switch is
!    memoized.  */
  
  class bounded_ranges_manager
  {
  public:
    ~bounded_ranges_manager ();
  
-   const bounded_ranges *
-   get_or_create_ranges_for_switch (const switch_cfg_superedge *edge,
- 				   const gswitch *switch_stmt);
- 
    const bounded_ranges *get_or_create_empty ();
    const bounded_ranges *get_or_create_point (const_tree value);
    const bounded_ranges *get_or_create_range (const_tree lower_bound,
--- 172,184 ----
  
  namespace ana {
  
! /* An object to own and consolidate bounded_ranges instances.  */
  
  class bounded_ranges_manager
  {
  public:
    ~bounded_ranges_manager ();
  
    const bounded_ranges *get_or_create_empty ();
    const bounded_ranges *get_or_create_point (const_tree value);
    const bounded_ranges *get_or_create_range (const_tree lower_bound,
*************** public:
*** 200,214 ****
  
    void log_stats (logger *logger, bool show_objs) const;
  
- private:
-   const bounded_ranges *
-   create_ranges_for_switch (const switch_cfg_superedge &edge,
- 			    const gswitch *switch_stmt);
- 
    const bounded_ranges *
    make_case_label_ranges (const gswitch *switch_stmt,
  			  tree case_label);
  
    const bounded_ranges *consolidate (bounded_ranges *);
  
    struct hash_traits_t : public typed_noop_remove<bounded_ranges *>
--- 193,203 ----
  
    void log_stats (logger *logger, bool show_objs) const;
  
    const bounded_ranges *
    make_case_label_ranges (const gswitch *switch_stmt,
  			  tree case_label);
  
+ private:
    const bounded_ranges *consolidate (bounded_ranges *);
  
    struct hash_traits_t : public typed_noop_remove<bounded_ranges *>
*************** private:
*** 241,250 ****
    };
    typedef hash_map<bounded_ranges *, bounded_ranges *, traits_t> map_t;
    map_t m_map;
- 
-   typedef hash_map<const switch_cfg_superedge *,
- 		   const bounded_ranges *> edge_cache_t;
-   edge_cache_t m_edge_cache;
  };
  
  /* An equivalence class within a constraint manager: a set of
--- 230,235 ----
diff -Nrcpad gcc-16-20251207/gcc/analyzer/diagnostic-manager.cc gcc-16-20251214/gcc/analyzer/diagnostic-manager.cc
*** gcc-16-20251207/gcc/analyzer/diagnostic-manager.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/diagnostic-manager.cc	Sun Dec 14 22:32:06 2025
*************** namespace ana {
*** 52,57 ****
--- 52,90 ----
  
  class feasible_worklist;
  
+ // struct pending_location
+ 
+ pending_location::pending_location ()
+ : m_enode (nullptr),
+   m_event_loc_info (UNKNOWN_LOCATION, NULL_TREE, 0)
+ {
+ }
+ 
+ pending_location::pending_location (exploded_node *enode)
+ : m_enode (enode),
+   m_event_loc_info (enode)
+ {
+ }
+ 
+ pending_location::pending_location (exploded_node *enode,
+ 				    location_t loc)
+ : m_enode (enode),
+   m_event_loc_info (enode)
+ {
+   m_event_loc_info.m_loc = loc;
+ }
+ 
+ std::unique_ptr<json::object>
+ pending_location::to_json () const
+ {
+   auto ploc_obj = std::make_unique<json::object> ();
+ 
+   if (m_enode)
+     ploc_obj->set_integer ("enode", m_enode->m_index);
+   // TODO: also store m_event_loc_info
+   return ploc_obj;
+ }
+ 
  /* State for finding the shortest feasible exploded_path for a
     saved_diagnostic.
     This is shared between all diagnostics, so that we avoid repeating work.  */
*************** public:
*** 76,82 ****
  
    std::unique_ptr<exploded_path>
    get_best_epath (const exploded_node *target_enode,
- 		  const gimple *target_stmt,
  		  const pending_diagnostic &pd,
  		  const char *desc, unsigned diag_idx,
  		  std::unique_ptr<feasibility_problem> *out_problem);
--- 109,114 ----
*************** private:
*** 86,92 ****
  
    std::unique_ptr<exploded_path>
    explore_feasible_paths (const exploded_node *target_enode,
- 			  const gimple *target_stmt,
  			  const pending_diagnostic &pd,
  			  const char *desc, unsigned diag_idx);
    bool
--- 118,123 ----
*************** private:
*** 94,100 ****
  			 const trimmed_graph &tg,
  			 feasible_graph *fg,
  			 const exploded_node *target_enode,
- 			 const gimple *target_stmt,
  			 const pending_diagnostic &pd,
  			 unsigned diag_idx,
  			 std::unique_ptr<exploded_path> *out_best_path) const;
--- 125,130 ----
*************** private:
*** 116,127 ****
  
  /* class epath_finder.  */
  
! /* Get the "best" exploded_path for reaching ENODE from the origin,
     returning ownership of it to the caller.
  
-    If TARGET_STMT is non-NULL, then check for reaching that stmt
-    within ENODE.
- 
     Ideally we want to report the shortest feasible path.
     Return nullptr if we could not find a feasible path
     (when flag_analyzer_feasibility is true).
--- 146,154 ----
  
  /* class epath_finder.  */
  
! /* Get the "best" exploded_path for reaching TARGET_ENODE from the origin,
     returning ownership of it to the caller.
  
     Ideally we want to report the shortest feasible path.
     Return nullptr if we could not find a feasible path
     (when flag_analyzer_feasibility is true).
*************** private:
*** 134,141 ****
     Write any feasibility_problem to *OUT_PROBLEM.  */
  
  std::unique_ptr<exploded_path>
! epath_finder::get_best_epath (const exploded_node *enode,
! 			      const gimple *target_stmt,
  			      const pending_diagnostic &pd,
  			      const char *desc, unsigned diag_idx,
  			      std::unique_ptr<feasibility_problem> *out_problem)
--- 161,167 ----
     Write any feasibility_problem to *OUT_PROBLEM.  */
  
  std::unique_ptr<exploded_path>
! epath_finder::get_best_epath (const exploded_node *target_enode,
  			      const pending_diagnostic &pd,
  			      const char *desc, unsigned diag_idx,
  			      std::unique_ptr<feasibility_problem> *out_problem)
*************** epath_finder::get_best_epath (const expl
*** 143,152 ****
    logger *logger = get_logger ();
    LOG_SCOPE (logger);
  
!   unsigned snode_idx = enode->get_supernode ()->m_index;
    if (logger)
      logger->log ("considering %qs at EN: %i, SN: %i (sd: %i)",
! 		 desc, enode->m_index, snode_idx, diag_idx);
  
    /* State-merging means that not every path in the egraph corresponds
       to a feasible one w.r.t. states.
--- 169,178 ----
    logger *logger = get_logger ();
    LOG_SCOPE (logger);
  
!   unsigned snode_id = target_enode->get_supernode ()->m_id;
    if (logger)
      logger->log ("considering %qs at EN: %i, SN: %i (sd: %i)",
! 		 desc, target_enode->m_index, snode_id, diag_idx);
  
    /* State-merging means that not every path in the egraph corresponds
       to a feasible one w.r.t. states.
*************** epath_finder::get_best_epath (const expl
*** 160,171 ****
        if (logger)
  	logger->log ("trying to find shortest feasible path");
        if (std::unique_ptr<exploded_path> epath
! 	    = explore_feasible_paths (enode, target_stmt, pd, desc, diag_idx))
  	{
  	  if (logger)
  	    logger->log ("accepting %qs at EN: %i, SN: %i (sd: %i)"
  			 " with feasible path (length: %i)",
! 			 desc, enode->m_index, snode_idx, diag_idx,
  			 epath->length ());
  	  return epath;
  	}
--- 186,197 ----
        if (logger)
  	logger->log ("trying to find shortest feasible path");
        if (std::unique_ptr<exploded_path> epath
! 	    = explore_feasible_paths (target_enode, pd, desc, diag_idx))
  	{
  	  if (logger)
  	    logger->log ("accepting %qs at EN: %i, SN: %i (sd: %i)"
  			 " with feasible path (length: %i)",
! 			 desc, target_enode->m_index, snode_id, diag_idx,
  			 epath->length ());
  	  return epath;
  	}
*************** epath_finder::get_best_epath (const expl
*** 174,180 ****
  	  if (logger)
  	    logger->log ("rejecting %qs at EN: %i, SN: %i (sd: %i)"
  			 " due to not finding feasible path",
! 			 desc, enode->m_index, snode_idx, diag_idx);
  	  return nullptr;
  	}
      }
--- 200,206 ----
  	  if (logger)
  	    logger->log ("rejecting %qs at EN: %i, SN: %i (sd: %i)"
  			 " due to not finding feasible path",
! 			 desc, target_enode->m_index, snode_id, diag_idx);
  	  return nullptr;
  	}
      }
*************** epath_finder::get_best_epath (const expl
*** 188,201 ****
        if (logger)
  	logger->log ("trying to find shortest path ignoring feasibility");
        gcc_assert (m_sep);
!       std::unique_ptr<exploded_path> epath
! 	= std::make_unique<exploded_path> (m_sep->get_shortest_path (enode));
        if (epath->feasible_p (logger, out_problem, m_eg.get_engine (), &m_eg))
  	{
  	  if (logger)
  	    logger->log ("accepting %qs at EN: %i, SN: %i (sn: %i)"
  			 " with feasible path (length: %i)",
! 			 desc, enode->m_index, snode_idx, diag_idx,
  			 epath->length ());
  	}
        else
--- 214,228 ----
        if (logger)
  	logger->log ("trying to find shortest path ignoring feasibility");
        gcc_assert (m_sep);
!       auto epath
! 	= std::make_unique<exploded_path>
! 	    (m_sep->get_shortest_path (target_enode));
        if (epath->feasible_p (logger, out_problem, m_eg.get_engine (), &m_eg))
  	{
  	  if (logger)
  	    logger->log ("accepting %qs at EN: %i, SN: %i (sn: %i)"
  			 " with feasible path (length: %i)",
! 			 desc, target_enode->m_index, snode_id, diag_idx,
  			 epath->length ());
  	}
        else
*************** epath_finder::get_best_epath (const expl
*** 203,209 ****
  	  if (logger)
  	    logger->log ("accepting %qs at EN: %i, SN: %i (sn: %i) (length: %i)"
  			 " despite infeasible path (due to %qs)",
! 			 desc, enode->m_index, snode_idx, diag_idx,
  			 epath->length (),
  			 "-fno-analyzer-feasibility");
  	}
--- 230,236 ----
  	  if (logger)
  	    logger->log ("accepting %qs at EN: %i, SN: %i (sn: %i) (length: %i)"
  			 " despite infeasible path (due to %qs)",
! 			 desc, target_enode->m_index, snode_id, diag_idx,
  			 epath->length (),
  			 "-fno-analyzer-feasibility");
  	}
*************** private:
*** 330,338 ****
     TARGET_ENODE by iteratively building a feasible_graph, in which
     every path to a feasible_node is feasible by construction.
  
-    If TARGET_STMT is non-NULL, then check for reaching that stmt
-    within TARGET_ENODE.
- 
     We effectively explore the tree of feasible paths in order of shortest
     path until we either find a feasible path to TARGET_ENODE, or hit
     a limit and give up.
--- 357,362 ----
*************** private:
*** 376,382 ****
  
  std::unique_ptr<exploded_path>
  epath_finder::explore_feasible_paths (const exploded_node *target_enode,
- 				      const gimple *target_stmt,
  				      const pending_diagnostic &pd,
  				      const char *desc, unsigned diag_idx)
  {
--- 400,405 ----
*************** epath_finder::explore_feasible_paths (co
*** 419,425 ****
    {
      auto_checking_feasibility sentinel (mgr);
  
!     while (process_worklist_item (&worklist, tg, &fg, target_enode, target_stmt,
  				  pd, diag_idx, &best_path))
        {
  	/* Empty; the work is done within process_worklist_item.  */
--- 442,448 ----
    {
      auto_checking_feasibility sentinel (mgr);
  
!     while (process_worklist_item (&worklist, tg, &fg, target_enode,
  				  pd, diag_idx, &best_path))
        {
  	/* Empty; the work is done within process_worklist_item.  */
*************** process_worklist_item (feasible_worklist
*** 464,470 ****
  		       const trimmed_graph &tg,
  		       feasible_graph *fg,
  		       const exploded_node *target_enode,
- 		       const gimple *target_stmt,
  		       const pending_diagnostic &pd,
  		       unsigned diag_idx,
  		       std::unique_ptr<exploded_path> *out_best_path) const
--- 487,492 ----
*************** process_worklist_item (feasible_worklist
*** 523,529 ****
  			     " (length: %i)",
  			     target_enode->m_index, diag_idx,
  			     succ_fnode->get_path_length ());
! 	      if (!pd.check_valid_fpath_p (*succ_fnode, target_stmt))
  		{
  		  if (logger)
  		    logger->log ("rejecting feasible path due to"
--- 545,551 ----
  			     " (length: %i)",
  			     target_enode->m_index, diag_idx,
  			     succ_fnode->get_path_length ());
! 	      if (!pd.check_valid_fpath_p (*succ_fnode))
  		{
  		  if (logger)
  		    logger->log ("rejecting feasible path due to"
*************** epath_finder::dump_feasible_path (const
*** 654,671 ****
  /* saved_diagnostic's ctor.  */
  
  saved_diagnostic::saved_diagnostic (const state_machine *sm,
! 				    const pending_location &ploc,
  				    tree var,
  				    const svalue *sval,
  				    state_machine::state_t state,
  				    std::unique_ptr<pending_diagnostic> d,
  				    unsigned idx)
! : m_sm (sm), m_enode (ploc.m_enode), m_snode (ploc.m_snode),
!   m_stmt (ploc.m_stmt),
!   /* stmt_finder could be on-stack; we want our own copy that can
!      outlive that.  */
!   m_stmt_finder (ploc.m_finder ? ploc.m_finder->clone () : nullptr),
!   m_loc (ploc.m_loc),
    m_var (var), m_sval (sval), m_state (state),
    m_d (std::move (d)), m_trailing_eedge (nullptr),
    m_idx (idx),
--- 676,689 ----
  /* saved_diagnostic's ctor.  */
  
  saved_diagnostic::saved_diagnostic (const state_machine *sm,
! 				    pending_location &&ploc,
  				    tree var,
  				    const svalue *sval,
  				    state_machine::state_t state,
  				    std::unique_ptr<pending_diagnostic> d,
  				    unsigned idx)
! : m_sm (sm),
!   m_ploc (std::move (ploc)),
    m_var (var), m_sval (sval), m_state (state),
    m_d (std::move (d)), m_trailing_eedge (nullptr),
    m_idx (idx),
*************** saved_diagnostic::saved_diagnostic (cons
*** 674,680 ****
  {
    /* We must have an enode in order to be able to look for paths
       through the exploded_graph to this diagnostic.  */
!   gcc_assert (m_enode);
  }
  
  bool
--- 692,704 ----
  {
    /* We must have an enode in order to be able to look for paths
       through the exploded_graph to this diagnostic.  */
!   gcc_assert (m_ploc.m_enode);
! }
! 
! const supernode *
! saved_diagnostic::get_supernode () const
! {
!   return m_ploc.m_enode->get_supernode ();
  }
  
  bool
*************** saved_diagnostic::operator== (const save
*** 692,701 ****
  
    return (m_sm == other.m_sm
  	  /* We don't compare m_enode.  */
! 	  && m_snode == other.m_snode
! 	  && m_stmt == other.m_stmt
! 	  /* We don't compare m_stmt_finder.  */
! 	  && m_loc == other.m_loc
  	  && pending_diagnostic::same_tree_p (m_var, other.m_var)
  	  && m_state == other.m_state
  	  && m_d->equal_p (*other.m_d)
--- 716,724 ----
  
    return (m_sm == other.m_sm
  	  /* We don't compare m_enode.  */
! 	  && get_supernode () == other.get_supernode ()
! 	  && (m_ploc.m_event_loc_info.m_loc
! 	      == other.m_ploc.m_event_loc_info.m_loc)
  	  && pending_diagnostic::same_tree_p (m_var, other.m_var)
  	  && m_state == other.m_state
  	  && m_d->equal_p (*other.m_d)
*************** saved_diagnostic::add_event (std::unique
*** 722,729 ****
  
  /* Return a new json::object of the form
     {"sm": optional str,
!     "enode": int,
!     "snode": int,
      "sval": optional str,
      "state": optional str,
      "path_length": optional int,
--- 745,751 ----
  
  /* Return a new json::object of the form
     {"sm": optional str,
!     "ploc": {},
      "sval": optional str,
      "state": optional str,
      "path_length": optional int,
*************** saved_diagnostic::to_json () const
*** 737,744 ****
  
    if (m_sm)
      sd_obj->set_string ("sm", m_sm->get_name ());
!   sd_obj->set_integer ("enode", m_enode->m_index);
!   sd_obj->set_integer ("snode", m_snode->m_index);
    if (m_sval)
      sd_obj->set ("sval", m_sval->to_json ());
    if (m_state)
--- 759,765 ----
  
    if (m_sm)
      sd_obj->set_string ("sm", m_sm->get_name ());
!   sd_obj->set ("ploc", m_ploc.to_json ());
    if (m_sval)
      sd_obj->set ("sval", m_sval->to_json ());
    if (m_state)
*************** saved_diagnostic::to_json () const
*** 748,763 ****
    sd_obj->set_string ("pending_diagnostic", m_d->get_kind ());
    sd_obj->set_integer ("idx", m_idx);
  
-   /* We're not yet JSONifying the following fields:
-      const gimple *m_stmt;
-      stmt_finder *m_stmt_finder;
-      tree m_var;
-      exploded_edge *m_trailing_eedge;
-      enum status m_status;
-      feasibility_problem *m_problem;
-      auto_delete_vec <pending_note> m_notes;
-   */
- 
    return sd_obj;
  }
  
--- 769,774 ----
*************** saved_diagnostic::dump_as_dot_node (pret
*** 792,803 ****
  	}
        pp_newline (pp);
      }
-   if (m_stmt)
-     {
-       pp_string (pp, "stmt: ");
-       pp_gimple_stmt_1 (pp, m_stmt, 0, (dump_flags_t)0);
-       pp_newline (pp);
-     }
    if (m_var)
      pp_printf (pp, "var: %qE\n", m_var);
    if (m_sval)
--- 803,808 ----
*************** saved_diagnostic::dump_as_dot_node (pret
*** 823,832 ****
      }
  }
  
! /* Use PF to find the best exploded_path for this saved_diagnostic,
     and store it in m_best_epath.
-    If we don't have a specific location in m_loc and m_stmt is still nullptr,
-    use m_stmt_finder on the epath to populate m_stmt.
     Return true if a best path was found.  */
  
  bool
--- 828,835 ----
      }
  }
  
! /* Use PF to find the best exploded_path for this saved_diagnostic, if any,
     and store it in m_best_epath.
     Return true if a best path was found.  */
  
  bool
*************** saved_diagnostic::calc_best_epath (epath
*** 836,842 ****
    LOG_SCOPE (logger);
    m_problem = nullptr;
  
!   m_best_epath = pf->get_best_epath (m_enode, m_stmt,
  				     *m_d, m_d->get_kind (), m_idx,
  				     &m_problem);
  
--- 839,845 ----
    LOG_SCOPE (logger);
    m_problem = nullptr;
  
!   m_best_epath = pf->get_best_epath (m_ploc.m_enode,
  				     *m_d, m_d->get_kind (), m_idx,
  				     &m_problem);
  
*************** saved_diagnostic::calc_best_epath (epath
*** 845,859 ****
      return false;
  
    gcc_assert (m_best_epath);
-   if (m_loc == UNKNOWN_LOCATION)
-     {
-       if (m_stmt == nullptr)
- 	{
- 	  gcc_assert (m_stmt_finder);
- 	  m_stmt = m_stmt_finder->find_stmt (*m_best_epath);
- 	}
-       gcc_assert (m_stmt);
-     }
  
    return true;
  }
--- 848,853 ----
*************** compatible_epath_p (const exploded_path
*** 976,984 ****
  bool
  saved_diagnostic::supercedes_p (const saved_diagnostic &other) const
  {
!   /* They should be at the same stmt.  */
!   if (m_stmt != other.m_stmt)
      return false;
    /* return early if OTHER won't be superseded anyway.  */
    if (!m_d->supercedes_p (*other.m_d))
      return false;
--- 970,978 ----
  bool
  saved_diagnostic::supercedes_p (const saved_diagnostic &other) const
  {
!   if (get_supernode () != other.get_supernode ())
      return false;
+ 
    /* return early if OTHER won't be superseded anyway.  */
    if (!m_d->supercedes_p (*other.m_d))
      return false;
*************** maybe_add_sarif_properties (diagnostics:
*** 1022,1035 ****
  #define PROPERTY_PREFIX "gcc/analyzer/saved_diagnostic/"
    if (m_sm)
      props.set_string (PROPERTY_PREFIX "sm", m_sm->get_name ());
!   props.set_integer (PROPERTY_PREFIX "enode", m_enode->m_index);
!   props.set_integer (PROPERTY_PREFIX "snode", m_snode->m_index);
!   if (m_stmt)
!     {
!       pretty_printer pp;
!       pp_gimple_stmt_1 (&pp, m_stmt, 0, (dump_flags_t)0);
!       props.set_string (PROPERTY_PREFIX "stmt", pp_formatted_text (&pp));
!     }
    if (m_var)
      props.set (PROPERTY_PREFIX "var", tree_to_json (m_var));
    if (m_sval)
--- 1016,1022 ----
  #define PROPERTY_PREFIX "gcc/analyzer/saved_diagnostic/"
    if (m_sm)
      props.set_string (PROPERTY_PREFIX "sm", m_sm->get_name ());
!   props.set (PROPERTY_PREFIX "ploc", m_ploc.to_json ());
    if (m_var)
      props.set (PROPERTY_PREFIX "var", tree_to_json (m_var));
    if (m_sval)
*************** private:
*** 1115,1134 ****
    const feasibility_problem *m_feasibility_problem;
  };
  
- /* Determine the emission location for PD at STMT in FUN.  */
- 
- static location_t
- get_emission_location (const gimple *stmt, function *fun,
- 		       const pending_diagnostic &pd)
- {
-   location_t loc = get_stmt_location (stmt, fun);
- 
-   /* Allow the pending_diagnostic to fix up the location.  */
-   loc = pd.fixup_location (loc, true);
- 
-   return loc;
- }
- 
  /* class diagnostic_manager.  */
  
  /* diagnostic_manager's ctor.  */
--- 1102,1107 ----
*************** diagnostic_manager::diagnostic_manager (
*** 1145,1151 ****
  
  bool
  diagnostic_manager::add_diagnostic (const state_machine *sm,
! 				    const pending_location &ploc,
  				    tree var,
  				    const svalue *sval,
  				    state_machine::state_t state,
--- 1118,1124 ----
  
  bool
  diagnostic_manager::add_diagnostic (const state_machine *sm,
! 				    pending_location &&ploc,
  				    tree var,
  				    const svalue *sval,
  				    state_machine::state_t state,
*************** diagnostic_manager::add_diagnostic (cons
*** 1158,1190 ****
    gcc_assert (ploc.m_enode);
  
    /* If this warning is ultimately going to be rejected by a -Wno-analyzer-*
!      flag, reject it now.
!      We can only do this for diagnostics where we already know the stmt,
!      and thus can determine the emission location.  */
!   if (ploc.m_stmt)
!     {
!       location_t loc
! 	= get_emission_location (ploc.m_stmt, ploc.m_snode->m_fun, *d);
!       int option = d->get_controlling_option ();
!       if (!warning_enabled_at (loc, option))
! 	{
! 	  if (get_logger ())
! 	    get_logger ()->log ("rejecting disabled warning %qs",
! 				d->get_kind ());
! 	  m_num_disabled_diagnostics++;
! 	  return false;
! 	}
!     }
  
    saved_diagnostic *sd
!     = new saved_diagnostic (sm, ploc, var, sval, state, std::move (d),
  			    m_saved_diagnostics.length ());
    m_saved_diagnostics.safe_push (sd);
!   ploc.m_enode->add_diagnostic (sd);
    if (get_logger ())
      log ("adding saved diagnostic %i at SN %i to EN %i: %qs",
  	 sd->get_index (),
! 	 ploc.m_snode->m_index, ploc.m_enode->m_index, sd->m_d->get_kind ());
    return true;
  }
  
--- 1131,1167 ----
    gcc_assert (ploc.m_enode);
  
    /* If this warning is ultimately going to be rejected by a -Wno-analyzer-*
!      flag, reject it now.  */
!   {
!     location_t loc = ploc.m_event_loc_info.m_loc;
!     loc = d->fixup_location (loc, true);
!     int option = d->get_controlling_option ();
!     if (!warning_enabled_at (loc, option))
!       {
! 	if (get_logger ())
! 	  get_logger ()->log ("rejecting disabled warning %qs",
! 			      d->get_kind ());
! 	m_num_disabled_diagnostics++;
! 	return false;
!       }
!   }
  
    saved_diagnostic *sd
!     = new saved_diagnostic (sm,
! 			    std::move (ploc),
! 			    var,
! 			    sval,
! 			    state,
! 			    std::move (d),
  			    m_saved_diagnostics.length ());
    m_saved_diagnostics.safe_push (sd);
!   sd->m_ploc.m_enode->add_diagnostic (sd);
    if (get_logger ())
      log ("adding saved diagnostic %i at SN %i to EN %i: %qs",
  	 sd->get_index (),
! 	 sd->get_supernode ()->m_id,
! 	 sd->m_ploc.m_enode->m_index,
! 	 sd->m_d->get_kind ());
    return true;
  }
  
*************** diagnostic_manager::add_diagnostic (cons
*** 1193,1203 ****
     Take ownership of D (or delete it).  */
  
  bool
! diagnostic_manager::add_diagnostic (const pending_location &ploc,
  				    std::unique_ptr<pending_diagnostic> d)
  {
    gcc_assert (ploc.m_enode);
!   return add_diagnostic (nullptr, ploc, NULL_TREE, nullptr, 0, std::move (d));
  }
  
  /* Add PN to the most recent saved_diagnostic.  */
--- 1170,1181 ----
     Take ownership of D (or delete it).  */
  
  bool
! diagnostic_manager::add_diagnostic (pending_location &&ploc,
  				    std::unique_ptr<pending_diagnostic> d)
  {
    gcc_assert (ploc.m_enode);
!   return add_diagnostic (nullptr, std::move (ploc),
! 			 NULL_TREE, nullptr, 0, std::move (d));
  }
  
  /* Add PN to the most recent saved_diagnostic.  */
*************** class dedupe_key
*** 1257,1288 ****
  {
  public:
    dedupe_key (const saved_diagnostic &sd)
!   : m_sd (sd), m_stmt (sd.m_stmt), m_loc (sd.m_loc)
    {
-     gcc_assert (m_stmt || m_loc != UNKNOWN_LOCATION);
    }
  
    hashval_t hash () const
    {
      inchash::hash hstate;
-     hstate.add_ptr (m_stmt);
      // TODO: m_sd
      return hstate.end ();
    }
    bool operator== (const dedupe_key &other) const
    {
      return (m_sd == other.m_sd
- 	    && m_stmt == other.m_stmt
  	    && m_loc == other.m_loc);
    }
  
!   location_t get_location () const
!   {
!     if (m_loc != UNKNOWN_LOCATION)
!       return m_loc;
!     gcc_assert (m_stmt);
!     return m_stmt->location;
!   }
  
    /* A qsort comparator for use by dedupe_winners::emit_best
       to sort them into location_t order.  */
--- 1235,1258 ----
  {
  public:
    dedupe_key (const saved_diagnostic &sd)
!   : m_sd (sd),
!     m_loc (sd.m_ploc.m_event_loc_info.m_loc)
    {
    }
  
    hashval_t hash () const
    {
      inchash::hash hstate;
      // TODO: m_sd
      return hstate.end ();
    }
    bool operator== (const dedupe_key &other) const
    {
      return (m_sd == other.m_sd
  	    && m_loc == other.m_loc);
    }
  
!   location_t get_location () const { return m_loc; }
  
    /* A qsort comparator for use by dedupe_winners::emit_best
       to sort them into location_t order.  */
*************** public:
*** 1308,1314 ****
    }
  
    const saved_diagnostic &m_sd;
-   const gimple *m_stmt;
    location_t m_loc;
  };
  
--- 1278,1283 ----
*************** public:
*** 1384,1389 ****
--- 1353,1366 ----
      if (!sd->calc_best_epath (pf))
        return;
  
+     const exploded_path *epath = sd->get_best_epath ();
+     gcc_assert (epath);
+ 
+     /* Now we have an exploded path, use it for pending_locations that are
+        affected by such things, and for deduplication.  */
+     if (sd->m_ploc.m_fixer_for_epath)
+       sd->m_ploc.m_fixer_for_epath->fixup_for_epath (*epath, sd->m_ploc);
+ 
      dedupe_key *key = new dedupe_key (*sd);
      if (saved_diagnostic **slot = m_map.get (key))
        {
*************** diagnostic_manager::emit_saved_diagnosti
*** 1512,1519 ****
        saved_diagnostic *sd;
        FOR_EACH_VEC_ELT (m_saved_diagnostics, i, sd)
  	log ("[%i] sd: %qs at EN: %i, SN: %i",
! 	     i, sd->m_d->get_kind (), sd->m_enode->m_index,
! 	     sd->m_snode->m_index);
      }
  
    if (m_saved_diagnostics.length () == 0)
--- 1489,1496 ----
        saved_diagnostic *sd;
        FOR_EACH_VEC_ELT (m_saved_diagnostics, i, sd)
  	log ("[%i] sd: %qs at EN: %i, SN: %i",
! 	     i, sd->m_d->get_kind (), sd->m_ploc.m_enode->m_index,
! 	     sd->get_supernode ()->m_id);
      }
  
    if (m_saved_diagnostics.length () == 0)
*************** diagnostic_manager::emit_saved_diagnosti
*** 1574,1580 ****
  {
    LOG_SCOPE (get_logger ());
    log ("sd[%i]: %qs at SN: %i",
!        sd.get_index (), sd.m_d->get_kind (), sd.m_snode->m_index);
    log ("num dupes: %i", sd.get_num_dupes ());
  
    const exploded_path *epath = sd.get_best_epath ();
--- 1551,1557 ----
  {
    LOG_SCOPE (get_logger ());
    log ("sd[%i]: %qs at SN: %i",
!        sd.get_index (), sd.m_d->get_kind (), sd.get_supernode ()->m_id);
    log ("num dupes: %i", sd.get_num_dupes ());
  
    const exploded_path *epath = sd.get_best_epath ();
*************** diagnostic_manager::emit_saved_diagnosti
*** 1600,1618 ****
       generated.  These don't get pruned, as they are probably pertinent.  */
    sd.add_any_saved_events (emission_path);
  
!   /* Add a final event to the path, covering the diagnostic itself.
!      We use the final enode from the epath, which might be different from
!      the sd.m_enode, as the dedupe code doesn't care about enodes, just
!      snodes.  */
    {
      const exploded_node *const enode = epath->get_final_enode ();
!     const gimple *stmt = sd.m_stmt;
!     event_loc_info loc_info (get_stmt_location (stmt, enode->get_function ()),
! 			     enode->get_function ()->decl,
! 			     enode->get_stack_depth ());
!     if (sd.m_stmt_finder)
!       sd.m_stmt_finder->update_event_loc_info (loc_info);
!     sd.m_d->add_final_event (sd.m_sm, enode, loc_info,
  			     sd.m_var, sd.m_state, &emission_path);
    }
  
--- 1577,1586 ----
       generated.  These don't get pruned, as they are probably pertinent.  */
    sd.add_any_saved_events (emission_path);
  
!   /* Add a final event to the path, covering the diagnostic itself.  */
    {
      const exploded_node *const enode = epath->get_final_enode ();
!     sd.m_d->add_final_event (sd.m_sm, enode, sd.m_ploc.m_event_loc_info,
  			     sd.m_var, sd.m_state, &emission_path);
    }
  
*************** diagnostic_manager::emit_saved_diagnosti
*** 1626,1634 ****
  
    emission_path.prepare_for_emission (sd.m_d.get ());
  
!   location_t loc = sd.m_loc;
!   if (loc == UNKNOWN_LOCATION)
!     loc = get_emission_location (sd.m_stmt, sd.m_snode->m_fun, *sd.m_d);
  
    /* Allow the pending_diagnostic to fix up the locations of events.  */
    emission_path.fixup_locations (sd.m_d.get ());
--- 1594,1601 ----
  
    emission_path.prepare_for_emission (sd.m_d.get ());
  
!   location_t loc = sd.m_ploc.m_event_loc_info.m_loc;
!   loc = sd.m_d->fixup_location (loc, true);
  
    /* Allow the pending_diagnostic to fix up the locations of events.  */
    emission_path.fixup_locations (sd.m_d.get ());
*************** diagnostic_manager::emit_saved_diagnosti
*** 1637,1643 ****
    rich_loc.set_path (&emission_path);
  
    auto_diagnostic_group d;
!   auto_cfun sentinel (sd.m_snode->m_fun);
    pending_diagnostic_metadata m (sd);
    diagnostic_emission_context diag_ctxt (sd, rich_loc, m, get_logger ());
    if (sd.m_d->emit (diag_ctxt))
--- 1604,1610 ----
    rich_loc.set_path (&emission_path);
  
    auto_diagnostic_group d;
!   auto_cfun sentinel (sd.get_supernode ()->m_fun);
    pending_diagnostic_metadata m (sd);
    diagnostic_emission_context diag_ctxt (sd, rich_loc, m, get_logger ());
    if (sd.m_d->emit (diag_ctxt))
*************** diagnostic_manager::build_emission_path
*** 1700,1706 ****
  	    const region *base_reg = reg->get_base_region ();
  	    if (tree decl = base_reg->maybe_get_decl ())
  	      if (DECL_P (decl)
! 		  && DECL_SOURCE_LOCATION (decl) != UNKNOWN_LOCATION)
  		{
  		  emission_path->add_region_creation_events
  		    (pb.get_pending_diagnostic (),
--- 1667,1673 ----
  	    const region *base_reg = reg->get_base_region ();
  	    if (tree decl = base_reg->maybe_get_decl ())
  	      if (DECL_P (decl)
! 		  && useful_location_p (DECL_SOURCE_LOCATION (decl)))
  		{
  		  emission_path->add_region_creation_events
  		    (pb.get_pending_diagnostic (),
*************** public:
*** 1810,1828 ****
      if (&sm != m_pb.get_sm ())
        return false;
      const exploded_node *src_node = m_eedge.m_src;
-     const program_point &src_point = src_node->get_point ();
-     const int src_stack_depth = src_point.get_stack_depth ();
      const exploded_node *dst_node = m_eedge.m_dest;
!     const gimple *stmt = src_point.get_stmt ();
!     const supernode *supernode = src_point.get_supernode ();
      const program_state &dst_state = dst_node->get_state ();
  
-     int stack_depth = src_stack_depth;
- 
      m_emission_path->add_event
!       (std::make_unique<state_change_event> (supernode,
  					     stmt,
- 					     stack_depth,
  					     sm,
  					     nullptr,
  					     src_sm_val,
--- 1777,1789 ----
      if (&sm != m_pb.get_sm ())
        return false;
      const exploded_node *src_node = m_eedge.m_src;
      const exploded_node *dst_node = m_eedge.m_dest;
!     const gimple *stmt = m_eedge.maybe_get_stmt ();
      const program_state &dst_state = dst_node->get_state ();
  
      m_emission_path->add_event
!       (std::make_unique<state_change_event> (m_eedge.m_src,
  					     stmt,
  					     sm,
  					     nullptr,
  					     src_sm_val,
*************** public:
*** 1841,1873 ****
    {
      if (&sm != m_pb.get_sm ())
        return false;
      const exploded_node *src_node = m_eedge.m_src;
-     const program_point &src_point = src_node->get_point ();
-     const int src_stack_depth = src_point.get_stack_depth ();
      const exploded_node *dst_node = m_eedge.m_dest;
!     const gimple *stmt = src_point.get_stmt ();
!     const supernode *supernode = src_point.get_supernode ();
      const program_state &dst_state = dst_node->get_state ();
  
-     int stack_depth = src_stack_depth;
- 
-     if (m_eedge.m_sedge
- 	&& m_eedge.m_sedge->m_kind == SUPEREDGE_CFG_EDGE)
-       {
- 	supernode = src_point.get_supernode ();
- 	stmt = supernode->get_last_stmt ();
- 	stack_depth = src_stack_depth;
-       }
- 
-     /* Bulletproofing for state changes at calls/returns;
-        TODO: is there a better way? */
-     if (!stmt)
-       return false;
- 
      m_emission_path->add_event
!       (std::make_unique<state_change_event> (supernode,
  					     stmt,
- 					     stack_depth,
  					     sm,
  					     sval,
  					     src_sm_val,
--- 1802,1816 ----
    {
      if (&sm != m_pb.get_sm ())
        return false;
+ 
      const exploded_node *src_node = m_eedge.m_src;
      const exploded_node *dst_node = m_eedge.m_dest;
!     const gimple *stmt = m_eedge.maybe_get_stmt ();
      const program_state &dst_state = dst_node->get_state ();
  
      m_emission_path->add_event
!       (std::make_unique<state_change_event> (m_eedge.m_src,
  					     stmt,
  					     sm,
  					     sval,
  					     src_sm_val,
*************** for_each_state_change (const program_sta
*** 1944,2128 ****
    return false;
  }
  
- /* An sm_context for adding state_change_event on assignments to NULL,
-    where the default state isn't m_start.  Storing such state in the
-    sm_state_map would lead to bloat of the exploded_graph, so we want
-    to leave it as a default state, and inject state change events here
-    when we have a diagnostic.
-    Find transitions of constants, for handling on_zero_assignment.  */
- 
- struct null_assignment_sm_context : public sm_context
- {
-   null_assignment_sm_context (int sm_idx,
- 			      const state_machine &sm,
- 			      const program_state *old_state,
- 			      const program_state *new_state,
- 			      const gimple *stmt,
- 			      const program_point *point,
- 			      checker_path *emission_path,
- 			      const extrinsic_state &ext_state)
-   : sm_context (sm_idx, sm), m_old_state (old_state), m_new_state (new_state),
-     m_stmt (stmt), m_point (point), m_emission_path (emission_path),
-     m_ext_state (ext_state)
-   {
-   }
- 
-   tree get_fndecl_for_call (const gcall &/*call*/) final override
-   {
-     return NULL_TREE;
-   }
- 
-   state_machine::state_t get_state (const gimple *stmt ATTRIBUTE_UNUSED,
- 				    tree var) final override
-   {
-     const svalue *var_old_sval
-       = m_old_state->m_region_model->get_rvalue (var, nullptr);
-     const sm_state_map *old_smap = m_old_state->m_checker_states[m_sm_idx];
- 
-     state_machine::state_t current
-       = old_smap->get_state (var_old_sval, m_ext_state);
- 
-     return current;
-   }
- 
-   state_machine::state_t get_state (const gimple *stmt ATTRIBUTE_UNUSED,
- 				    const svalue *sval) final override
-   {
-     const sm_state_map *old_smap = m_old_state->m_checker_states[m_sm_idx];
-     state_machine::state_t current = old_smap->get_state (sval, m_ext_state);
-     return current;
-   }
- 
-   void set_next_state (const gimple *stmt,
- 		       tree var,
- 		       state_machine::state_t to,
- 		       tree origin ATTRIBUTE_UNUSED) final override
-   {
-     state_machine::state_t from = get_state (stmt, var);
-     if (from != m_sm.get_start_state ())
-       return;
-     if (!is_transition_to_null (to))
-       return;
- 
-     const svalue *var_new_sval
-       = m_new_state->m_region_model->get_rvalue (var, nullptr);
- 
-     const supernode *supernode = m_point->get_supernode ();
-     int stack_depth = m_point->get_stack_depth ();
- 
-     m_emission_path->add_event
-       (std::make_unique<state_change_event> (supernode,
- 					     m_stmt,
- 					     stack_depth,
- 					     m_sm,
- 					     var_new_sval,
- 					     from, to,
- 					     nullptr,
- 					     *m_new_state,
- 					     nullptr));
-   }
- 
-   void set_next_state (const gimple *stmt,
- 		       const svalue *sval,
- 		       state_machine::state_t to,
- 		       tree origin ATTRIBUTE_UNUSED) final override
-   {
-     state_machine::state_t from = get_state (stmt, sval);
-     if (from != m_sm.get_start_state ())
-       return;
-     if (!is_transition_to_null (to))
-       return;
- 
-     const supernode *supernode = m_point->get_supernode ();
-     int stack_depth = m_point->get_stack_depth ();
- 
-     m_emission_path->add_event
-       (std::make_unique<state_change_event> (supernode,
- 					     m_stmt,
- 					     stack_depth,
- 					     m_sm,
- 					     sval,
- 					     from, to,
- 					     nullptr,
- 					     *m_new_state,
- 					     nullptr));
-   }
- 
-   void warn (const supernode *, const gimple *,
- 	     tree, std::unique_ptr<pending_diagnostic>) final override
-   {
-   }
-   void warn (const supernode *, const gimple *,
- 	     const svalue *, std::unique_ptr<pending_diagnostic>) final override
-   {
-   }
- 
-   tree get_diagnostic_tree (tree expr) final override
-   {
-     return expr;
-   }
- 
-   tree get_diagnostic_tree (const svalue *sval) final override
-   {
-     return m_new_state->m_region_model->get_representative_tree (sval);
-   }
- 
-   state_machine::state_t get_global_state () const final override
-   {
-     return 0;
-   }
- 
-   void set_global_state (state_machine::state_t) final override
-   {
-     /* No-op.  */
-   }
- 
-   void clear_all_per_svalue_state () final override
-   {
-     /* No-op.  */
-   }
- 
-   void on_custom_transition (custom_transition *) final override
-   {
-   }
- 
-   tree is_zero_assignment (const gimple *stmt) final override
-   {
-     const gassign *assign_stmt = dyn_cast <const gassign *> (stmt);
-     if (!assign_stmt)
-      return NULL_TREE;
-     if (const svalue *sval
- 	= m_new_state->m_region_model->get_gassign_result (assign_stmt, nullptr))
-       if (tree cst = sval->maybe_get_constant ())
- 	if (::zerop(cst))
- 	  return gimple_assign_lhs (assign_stmt);
-     return NULL_TREE;
-   }
- 
-   const program_state *get_old_program_state () const final override
-   {
-     return m_old_state;
-   }
-   const program_state *get_new_program_state () const final override
-   {
-     return m_new_state;
-   }
- 
-   /* We only care about transitions to the "null" state
-      within sm-malloc.  Special-case this.  */
-   static bool is_transition_to_null (state_machine::state_t s)
-   {
-     return !strcmp (s->get_name (), "null");
-   }
- 
-   const program_state *m_old_state;
-   const program_state *m_new_state;
-   const gimple *m_stmt;
-   const program_point *m_point;
-   checker_path *m_emission_path;
-   const extrinsic_state &m_ext_state;
- };
- 
  /* Subroutine of diagnostic_manager::build_emission_path.
     Add any events for EEDGE to EMISSION_PATH.  */
  
--- 1887,1892 ----
*************** diagnostic_manager::add_events_for_eedge
*** 2172,2284 ****
    for_each_state_change (src_state, dst_state, pb.get_ext_state (),
  			 &visitor);
  
    /* Allow non-standard edges to add events, e.g. when rewinding from
       longjmp to a setjmp.  */
    if (eedge.m_custom_info)
!     eedge.m_custom_info->add_events_to_path (emission_path, eedge);
  
!   /* Add events for superedges, function entries, and for statements.  */
!   switch (dst_point.get_kind ())
      {
!     default:
!       break;
!     case PK_BEFORE_SUPERNODE:
!       if (src_point.get_kind () == PK_AFTER_SUPERNODE)
! 	{
! 	  if (eedge.m_sedge)
! 	    add_events_for_superedge (pb, eedge, emission_path);
! 	}
!       /* Add function entry events.  */
!       if (dst_point.get_supernode ()->entry_p ())
  	{
! 	  pb.get_pending_diagnostic ()->add_function_entry_event
! 	    (eedge, emission_path);
! 	  /* Create region_creation_events for on-stack regions within
! 	     this frame.  */
! 	  if (interest)
! 	    {
! 	      unsigned i;
! 	      const region *reg;
! 	      FOR_EACH_VEC_ELT (interest->m_region_creation, i, reg)
! 		if (const frame_region *frame = reg->maybe_get_frame_region ())
! 		  if (frame->get_fndecl () == dst_point.get_fndecl ())
! 		    {
! 		      const region *base_reg = reg->get_base_region ();
! 		      if (tree decl = base_reg->maybe_get_decl ())
! 			if (DECL_P (decl)
! 			    && DECL_SOURCE_LOCATION (decl) != UNKNOWN_LOCATION)
! 			  {
! 			    emission_path->add_region_creation_events
! 			      (pb.get_pending_diagnostic (),
! 			       reg, dst_state.m_region_model,
! 			       event_loc_info (DECL_SOURCE_LOCATION (decl),
! 					       dst_point.get_fndecl (),
! 					       dst_stack_depth),
! 			       m_verbosity > 3);
! 			  }
! 		    }
! 	    }
! 	}
!       break;
!     case PK_BEFORE_STMT:
!       {
! 	const gimple *stmt = dst_point.get_stmt ();
! 	const gcall *call = dyn_cast <const gcall *> (stmt);
! 	if (call && is_setjmp_call_p (*call))
! 	  emission_path->add_event
! 	    (std::make_unique<setjmp_event>
! 	       (event_loc_info (stmt->location,
! 				dst_point.get_fndecl (),
! 				dst_stack_depth),
! 		dst_node,
! 		*call));
! 	else
! 	  emission_path->add_event
! 	    (std::make_unique<statement_event> (stmt,
! 						dst_point.get_fndecl (),
! 						dst_stack_depth, dst_state));
! 
! 	/* Create state change events for assignment to NULL.
! 	   Iterate through the stmts in dst_enode, adding state change
! 	   events for them.  */
! 	if (dst_state.m_region_model)
! 	  {
! 	    log_scope s (get_logger (), "processing run of stmts");
! 	    program_state iter_state (dst_state);
! 	    program_point iter_point (dst_point);
! 	    while (1)
! 	      {
! 		const gimple *stmt = iter_point.get_stmt ();
! 		if (const gassign *assign = dyn_cast<const gassign *> (stmt))
! 		  {
! 		    const extrinsic_state &ext_state = pb.get_ext_state ();
! 		    program_state old_state (iter_state);
! 		    iter_state.m_region_model->on_assignment (assign, nullptr);
! 		    for (unsigned i = 0; i < ext_state.get_num_checkers (); i++)
  		      {
! 			const state_machine &sm = ext_state.get_sm (i);
! 			null_assignment_sm_context sm_ctxt (i, sm,
! 							    &old_state,
! 							    &iter_state,
! 							    stmt,
! 							    &iter_point,
! 							    emission_path,
! 							    pb.get_ext_state ());
! 			sm.on_stmt (sm_ctxt, dst_point.get_supernode (), stmt);
! 			// TODO: what about phi nodes?
  		      }
! 		  }
! 		iter_point.next_stmt ();
! 		if (iter_point.get_kind () == PK_AFTER_SUPERNODE
! 		    || (dst_node->m_succs.length () > 1
! 			&& (iter_point
! 			    == dst_node->m_succs[0]->m_dest->get_point ())))
! 		  break;
! 	      }
! 
! 	  }
!       }
!       break;
      }
  
    /* Look for changes in dynamic extents, which will identify
--- 1936,1992 ----
    for_each_state_change (src_state, dst_state, pb.get_ext_state (),
  			 &visitor);
  
+   /* Give diagnostics an opportunity to inject extra events, or
+      to override the rest of this function.  */
+   pending_diagnostic *pd = pb.get_pending_diagnostic ();
+   if (pd->maybe_add_custom_events_for_eedge (eedge, emission_path))
+     return;
+ 
    /* Allow non-standard edges to add events, e.g. when rewinding from
       longjmp to a setjmp.  */
    if (eedge.m_custom_info)
!     eedge.m_custom_info->add_events_to_path (emission_path, eedge, *pd);
  
!   /* Don't add events for insignificant edges at verbosity levels below 3.  */
!   if (m_verbosity < 3)
!     if (!significant_edge_p (pb, eedge))
!       return;
! 
!   /* Add events for operations.  */
!   if (eedge.m_sedge)
!     if (auto op = eedge.m_sedge->get_op ())
!       op->add_any_events_for_eedge (eedge, *emission_path);
! 
!   /* Add events for function entry.  */
!   if (dst_point.get_supernode ()->entry_p ())
      {
!       pb.get_pending_diagnostic ()->add_function_entry_event
! 	(eedge, emission_path);
!       /* Create region_creation_events for on-stack regions within
! 	 this frame.  */
!       if (interest)
  	{
! 	  unsigned i;
! 	  const region *reg;
! 	  FOR_EACH_VEC_ELT (interest->m_region_creation, i, reg)
! 	    if (const frame_region *frame = reg->maybe_get_frame_region ())
! 	      if (frame->get_fndecl () == dst_point.get_fndecl ())
! 		{
! 		  const region *base_reg = reg->get_base_region ();
! 		  if (tree decl = base_reg->maybe_get_decl ())
! 		    if (DECL_P (decl)
! 			&& useful_location_p (DECL_SOURCE_LOCATION (decl)))
  		      {
! 			emission_path->add_region_creation_events
! 			  (pb.get_pending_diagnostic (),
! 			   reg, dst_state.m_region_model,
! 			   event_loc_info (DECL_SOURCE_LOCATION (decl),
! 					   dst_point.get_fndecl (),
! 					   dst_stack_depth),
! 			   m_verbosity > 3);
  		      }
! 		}
! 	}
      }
  
    /* Look for changes in dynamic extents, which will identify
*************** diagnostic_manager::significant_edge_p (
*** 2408,2529 ****
    return true;
  }
  
- /* Subroutine of diagnostic_manager::add_events_for_eedge
-    where EEDGE has an underlying superedge i.e. a CFG edge,
-    or an interprocedural call/return.
-    Add any events for the superedge to EMISSION_PATH.  */
- 
- void
- diagnostic_manager::add_events_for_superedge (const path_builder &pb,
- 					      const exploded_edge &eedge,
- 					      checker_path *emission_path)
-   const
- {
-   gcc_assert (eedge.m_sedge);
- 
-   /* Give diagnostics an opportunity to override this function.  */
-   pending_diagnostic *pd = pb.get_pending_diagnostic ();
-   if (pd->maybe_add_custom_events_for_superedge (eedge, emission_path))
-     return;
- 
-   /* Don't add events for insignificant edges at verbosity levels below 3.  */
-   if (m_verbosity < 3)
-     if (!significant_edge_p (pb, eedge))
-       return;
- 
-   const exploded_node *src_node = eedge.m_src;
-   const program_point &src_point = src_node->get_point ();
-   const exploded_node *dst_node = eedge.m_dest;
-   const program_point &dst_point = dst_node->get_point ();
-   const int src_stack_depth = src_point.get_stack_depth ();
-   const int dst_stack_depth = dst_point.get_stack_depth ();
-   const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt ();
- 
-   switch (eedge.m_sedge->m_kind)
-     {
-     case SUPEREDGE_CFG_EDGE:
-       {
- 	if (auto eh_dispatch_try_sedge
- 	      = eedge.m_sedge->dyn_cast_eh_dispatch_try_cfg_superedge ())
- 	  {
- 	    if (eh_dispatch_try_sedge->get_eh_catch ())
- 	      {
- 		const region_model *model = src_node->get_state ().m_region_model;
- 		auto curr_thrown_exception_node
- 		  = model->get_current_thrown_exception ();
- 		gcc_assert (curr_thrown_exception_node);
- 		tree type = curr_thrown_exception_node->maybe_get_type ();
- 		emission_path->add_event
- 		  (std::make_unique<catch_cfg_edge_event>
- 		   (eedge,
- 		    event_loc_info (dst_point.get_supernode ()->get_start_location (),
- 				    dst_point.get_fndecl (),
- 				    dst_stack_depth),
- 		    type));
- 		return;
- 	      }
- 	    else
- 	      {
- 		/* We have the "uncaught exception" sedge, from eh_dispatch
- 		   to a block containing resx.
- 		   Don't add any events for this, so that we can consolidate
- 		   adjacent stack unwinding events.  */
- 		return;
- 	      }
- 	  }
- 
- 	emission_path->add_event
- 	  (std::make_unique<start_cfg_edge_event>
- 	     (eedge,
- 	      event_loc_info
- 		(last_stmt ? last_stmt->location : UNKNOWN_LOCATION,
- 		 src_point.get_fndecl (),
- 		 src_stack_depth)));
- 	emission_path->add_event
- 	  (std::make_unique<end_cfg_edge_event>
- 	     (eedge,
- 	      event_loc_info (dst_point.get_supernode ()->get_start_location (),
- 			      dst_point.get_fndecl (),
- 			      dst_stack_depth)));
-       }
-       break;
- 
-     case SUPEREDGE_CALL:
-       pd->add_call_event (eedge, emission_path);
-       break;
- 
-     case SUPEREDGE_INTRAPROCEDURAL_CALL:
-       {
- 	/* TODO: add a subclass for this, or generate events for the
- 	   summary.  */
- 	emission_path->add_event
- 	  (std::make_unique<debug_event>
- 	     (event_loc_info (last_stmt
- 			      ? last_stmt->location
- 			      : UNKNOWN_LOCATION,
- 			      src_point.get_fndecl (),
- 			      src_stack_depth),
- 	      "call summary"));
-       }
-       break;
- 
-     case SUPEREDGE_RETURN:
-       {
- 	const return_superedge *return_edge
- 	  = as_a <const return_superedge *> (eedge.m_sedge);
- 
- 	const gcall &call_stmt = return_edge->get_call_stmt ();
- 	emission_path->add_event
- 	  (std::make_unique<return_event>
- 	     (eedge,
- 	      event_loc_info (call_stmt.location,
- 			      dst_point.get_fndecl (),
- 			      dst_stack_depth)));
-       }
-       break;
-     }
- }
- 
  /* Prune PATH, based on the verbosity level, to the most pertinent
     events for a diagnostic that involves VAR ending in state STATE
     (for state machine SM).
--- 2116,2121 ----
*************** diagnostic_manager::prune_for_sm_diagnos
*** 2742,2748 ****
  	  /* Don't filter these.  */
  	  break;
  
! 	case event_kind::call_edge:
  	  {
  	    call_event *event = (call_event *)base_event;
  	    const region_model *callee_model
--- 2334,2340 ----
  	  /* Don't filter these.  */
  	  break;
  
! 	case event_kind::call_:
  	  {
  	    call_event *event = (call_event *)base_event;
  	    const region_model *callee_model
*************** diagnostic_manager::prune_for_sm_diagnos
*** 2753,2770 ****
  	    callsite_expr expr;
  
  	    tree caller_var;
!             if(event->m_sedge)
!               {
!                 const callgraph_superedge& cg_superedge
!                   = event->get_callgraph_superedge ();
!                 if (cg_superedge.m_cedge)
! 	          caller_var
! 	            = cg_superedge.map_expr_from_callee_to_caller (callee_var,
!                                                                    &expr);
!                 else
!                   caller_var = caller_model->get_representative_tree (sval);
!               }
!             else
  	      caller_var = caller_model->get_representative_tree (sval);
  
  	    if (caller_var)
--- 2345,2360 ----
  	    callsite_expr expr;
  
  	    tree caller_var;
! 	    if (auto op = event->get_call_and_return_op ())
! 	      {
! 		tree callee_fndecl
! 		  = event->m_eedge.m_dest->get_point ().get_fndecl ();
! 		caller_var
! 		  = op->map_expr_from_callee_to_caller (callee_fndecl,
! 							callee_var,
! 							&expr);
! 	      }
! 	    else
  	      caller_var = caller_model->get_representative_tree (sval);
  
  	    if (caller_var)
*************** diagnostic_manager::prune_for_sm_diagnos
*** 2783,2789 ****
  	  }
  	  break;
  
! 	case event_kind::return_edge:
  	  {
  	    if (sval)
  	      {
--- 2373,2379 ----
  	  }
  	  break;
  
! 	case event_kind::return_:
  	  {
  	    if (sval)
  	      {
*************** diagnostic_manager::prune_for_sm_diagnos
*** 2795,2814 ****
                    = event->m_eedge.m_src->get_state ().m_region_model;
  		callsite_expr expr;
  
!                 tree callee_var;
!                 if (event->m_sedge)
!                   {
!                     const callgraph_superedge& cg_superedge
!                       = event->get_callgraph_superedge ();
!                     if (cg_superedge.m_cedge)
!                       callee_var
!                         = cg_superedge.map_expr_from_caller_to_callee (caller_var,
!                                                                        &expr);
!                     else
!                       callee_var = callee_model->get_representative_tree (sval);
!                   }
!                 else
!                   callee_var = callee_model->get_representative_tree (sval);
  
  		if (callee_var)
  		  {
--- 2385,2403 ----
                    = event->m_eedge.m_src->get_state ().m_region_model;
  		callsite_expr expr;
  
! 		tree callee_var;
! 
! 		if (auto op = event->get_call_and_return_op ())
! 		  {
! 		    tree callee_fndecl
! 		      = event->m_eedge.m_src->get_point ().get_fndecl ();
! 		    callee_var
! 		      = op->map_expr_from_caller_to_callee (callee_fndecl,
! 							    caller_var,
! 							    &expr);
! 		  }
! 		else
! 		  callee_var = callee_model->get_representative_tree (sval);
  
  		if (callee_var)
  		  {
*************** diagnostic_manager::consolidate_conditio
*** 3118,3132 ****
  	  gcc_assert (old_start_ev->get_kind () == event_kind::start_cfg_edge);
  	  const start_cfg_edge_event *old_start_cfg_ev
  	    = (const start_cfg_edge_event *)old_start_ev;
- 	  const cfg_superedge& first_cfg_sedge
- 	    = old_start_cfg_ev->get_cfg_superedge ();
  	  bool edge_sense;
! 	  if (first_cfg_sedge.true_value_p ())
! 	    edge_sense = true;
! 	  else if (first_cfg_sedge.false_value_p ())
! 	    edge_sense = false;
! 	  else
! 	    continue;
  
  	  /* Find a run of CFG start/end event pairs from
  	       [start_idx, next_idx)
--- 2707,2722 ----
  	  gcc_assert (old_start_ev->get_kind () == event_kind::start_cfg_edge);
  	  const start_cfg_edge_event *old_start_cfg_ev
  	    = (const start_cfg_edge_event *)old_start_ev;
  	  bool edge_sense;
! 	  if (::edge e = old_start_cfg_ev->get_cfg_edge ())
! 	    {
! 	      if (e->flags & EDGE_TRUE_VALUE)
! 		edge_sense = true;
! 	      else if (e->flags & EDGE_FALSE_VALUE)
! 		edge_sense = false;
! 	      else
! 		continue;
! 	    }
  
  	  /* Find a run of CFG start/end event pairs from
  	       [start_idx, next_idx)
*************** diagnostic_manager::consolidate_conditio
*** 3141,3156 ****
  	      gcc_assert (iter_ev->get_kind () == event_kind::start_cfg_edge);
  	      const start_cfg_edge_event *iter_cfg_ev
  		= (const start_cfg_edge_event *)iter_ev;
! 	      const cfg_superedge& iter_cfg_sedge
! 		= iter_cfg_ev->get_cfg_superedge ();
  	      if (edge_sense)
  		{
! 		  if (!iter_cfg_sedge.true_value_p ())
  		    break;
  		}
  	      else
  		{
! 		  if (!iter_cfg_sedge.false_value_p ())
  		    break;
  		}
  	      next_idx += 2;
--- 2731,2747 ----
  	      gcc_assert (iter_ev->get_kind () == event_kind::start_cfg_edge);
  	      const start_cfg_edge_event *iter_cfg_ev
  		= (const start_cfg_edge_event *)iter_ev;
! 	      ::edge e = iter_cfg_ev->get_cfg_edge ();
! 	      if (!e)
! 		break;
  	      if (edge_sense)
  		{
! 		  if (!(e->flags & EDGE_TRUE_VALUE))
  		    break;
  		}
  	      else
  		{
! 		  if (!(e->flags & EDGE_FALSE_VALUE))
  		    break;
  		}
  	      next_idx += 2;
diff -Nrcpad gcc-16-20251207/gcc/analyzer/diagnostic-manager.h gcc-16-20251214/gcc/analyzer/diagnostic-manager.h
*** gcc-16-20251207/gcc/analyzer/diagnostic-manager.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/diagnostic-manager.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 21,37 ****
  #ifndef GCC_ANALYZER_DIAGNOSTIC_MANAGER_H
  #define GCC_ANALYZER_DIAGNOSTIC_MANAGER_H
  
  namespace ana {
  
  class epath_finder;
  
  /* A to-be-emitted diagnostic stored within diagnostic_manager.  */
  
  class saved_diagnostic
  {
  public:
    saved_diagnostic (const state_machine *sm,
! 		    const pending_location &ploc,
  		    tree var, const svalue *sval,
  		    state_machine::state_t state,
  		    std::unique_ptr<pending_diagnostic> d,
--- 21,85 ----
  #ifndef GCC_ANALYZER_DIAGNOSTIC_MANAGER_H
  #define GCC_ANALYZER_DIAGNOSTIC_MANAGER_H
  
+ #include "analyzer/supergraph.h"
+ #include "analyzer/event-loc-info.h"
+ 
  namespace ana {
  
  class epath_finder;
  
+ /* A bundle of information capturing where a pending_diagnostic should
+    be emitted.  */
+ 
+ struct pending_location
+ {
+ public:
+   class fixer_for_epath
+   {
+   public:
+     virtual ~fixer_for_epath () = default;
+ 
+     virtual void
+     fixup_for_epath (const exploded_path &epath,
+ 		     pending_location &ploc) const = 0;
+   };
+ 
+   pending_location ();
+   pending_location (exploded_node *enode);
+   pending_location (exploded_node *enode,
+ 		    location_t loc);
+ 
+   location_t get_location () const
+   {
+     return m_event_loc_info.m_loc;
+   }
+ 
+   std::unique_ptr<json::object> to_json () const;
+ 
+   /* The enode with which a diagnostic is to be associated,
+      for tracking feasibility.  */
+   exploded_node *m_enode;
+ 
+   /* Information to use for the location of the warning,
+      and for the location of the "final warning" in the path.  */
+   event_loc_info m_event_loc_info;
+ 
+   /* Optional hook for use when eventually emitting the diagnostic
+      for fixing up m_event_loc_info based on the specific epath.  */
+   std::unique_ptr<fixer_for_epath> m_fixer_for_epath;
+ };
+ 
+ extern std::unique_ptr<pending_location::fixer_for_epath>
+ make_ploc_fixer_for_epath_for_leak_diagnostic (const exploded_graph &eg,
+ 					       tree var);
+ 
  /* A to-be-emitted diagnostic stored within diagnostic_manager.  */
  
  class saved_diagnostic
  {
  public:
    saved_diagnostic (const state_machine *sm,
! 		    pending_location &&ploc,
  		    tree var, const svalue *sval,
  		    state_machine::state_t state,
  		    std::unique_ptr<pending_diagnostic> d,
*************** public:
*** 70,82 ****
    void
    maybe_add_sarif_properties (diagnostics::sarif_object &result_obj) const;
  
    //private:
    const state_machine *m_sm;
!   const exploded_node *m_enode;
!   const supernode *m_snode;
!   const gimple *m_stmt;
!   std::unique_ptr<stmt_finder> m_stmt_finder;
!   location_t m_loc;
    tree m_var;
    const svalue *m_sval;
    state_machine::state_t m_state;
--- 118,128 ----
    void
    maybe_add_sarif_properties (diagnostics::sarif_object &result_obj) const;
  
+   const supernode *get_supernode () const;
+ 
    //private:
    const state_machine *m_sm;
!   pending_location m_ploc;
    tree m_var;
    const svalue *m_sval;
    state_machine::state_t m_state;
*************** private:
*** 102,147 ****
  
  class path_builder;
  
- /* A bundle of information capturing where a pending_diagnostic should
-    be emitted.  */
- 
- struct pending_location
- {
- public:
-   pending_location (exploded_node *enode,
- 		    const supernode *snode,
- 		    const gimple *stmt,
- 		    const stmt_finder *finder)
-   : m_enode (enode),
-     m_snode (snode),
-     m_stmt (stmt),
-     m_finder (finder),
-     m_loc (UNKNOWN_LOCATION)
-   {
-     gcc_assert (m_stmt || m_finder);
-   }
- 
-   /* ctor for cases where we have a location_t but there isn't any
-      gimple stmt associated with the diagnostic.  */
- 
-   pending_location (exploded_node *enode,
- 		    const supernode *snode,
- 		    location_t loc)
-   : m_enode (enode),
-     m_snode (snode),
-     m_stmt (nullptr),
-     m_finder (nullptr),
-     m_loc (loc)
-   {
-   }
- 
-   exploded_node *m_enode;
-   const supernode *m_snode;
-   const gimple *m_stmt;
-   const stmt_finder *m_finder;
-   location_t m_loc;
- };
- 
  /* A class with responsibility for saving pending diagnostics, so that
     they can be emitted after the exploded_graph is complete.
     This lets us de-duplicate diagnostics, and find the shortest path
--- 148,153 ----
*************** public:
*** 161,173 ****
    std::unique_ptr<json::object> to_json () const;
  
    bool add_diagnostic (const state_machine *sm,
! 		       const pending_location &ploc,
  		       tree var,
  		       const svalue *sval,
  		       state_machine::state_t state,
  		       std::unique_ptr<pending_diagnostic> d);
  
!   bool add_diagnostic (const pending_location &ploc,
  		       std::unique_ptr<pending_diagnostic> d);
  
    void add_note (std::unique_ptr<pending_note> pn);
--- 167,179 ----
    std::unique_ptr<json::object> to_json () const;
  
    bool add_diagnostic (const state_machine *sm,
! 		       pending_location &&ploc,
  		       tree var,
  		       const svalue *sval,
  		       state_machine::state_t state,
  		       std::unique_ptr<pending_diagnostic> d);
  
!   bool add_diagnostic (pending_location &&ploc,
  		       std::unique_ptr<pending_diagnostic> d);
  
    void add_note (std::unique_ptr<pending_note> pn);
*************** private:
*** 212,221 ****
    bool significant_edge_p (const path_builder &pb,
  			   const exploded_edge &eedge) const;
  
-   void add_events_for_superedge (const path_builder &pb,
- 				 const exploded_edge &eedge,
- 				 checker_path *emission_path) const;
- 
    void prune_path (checker_path *path,
  		   const state_machine *sm,
  		   const svalue *sval,
--- 218,223 ----
diff -Nrcpad gcc-16-20251207/gcc/analyzer/engine.cc gcc-16-20251214/gcc/analyzer/engine.cc
*** gcc-16-20251207/gcc/analyzer/engine.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/engine.cc	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 34,39 ****
--- 34,40 ----
  #include "stringpool.h"
  #include "attribs.h"
  #include "tree-dfa.h"
+ #include "gimple-predict.h"
  
  #include "text-art/dump.h"
  
*************** along with GCC; see the file COPYING3.
*** 56,61 ****
--- 57,63 ----
  #include "analyzer/call-info.h"
  #include "analyzer/known-function-manager.h"
  #include "analyzer/call-summary.h"
+ #include "analyzer/impl-sm-context.h"
  
  /* For an overview, see gcc/doc/analyzer.texi.  */
  
*************** impl_region_model_context (exploded_grap
*** 73,86 ****
  			   uncertainty_t *uncertainty,
  			   path_context *path_ctxt,
  			   const gimple *stmt,
- 			   stmt_finder *stmt_finder,
  			   bool *out_could_have_done_work)
  : m_eg (&eg), m_logger (eg.get_logger ()),
    m_enode_for_diag (enode_for_diag),
    m_old_state (old_state),
    m_new_state (new_state),
    m_stmt (stmt),
-   m_stmt_finder (stmt_finder),
    m_ext_state (eg.get_ext_state ()),
    m_uncertainty (uncertainty),
    m_path_ctxt (path_ctxt),
--- 75,86 ----
*************** impl_region_model_context (program_state
*** 97,103 ****
    m_old_state (nullptr),
    m_new_state (state),
    m_stmt (nullptr),
-   m_stmt_finder (nullptr),
    m_ext_state (ext_state),
    m_uncertainty (uncertainty),
    m_path_ctxt (nullptr),
--- 97,102 ----
*************** impl_region_model_context (program_state
*** 106,130 ****
  }
  
  bool
! impl_region_model_context::warn (std::unique_ptr<pending_diagnostic> d,
! 				 const stmt_finder *custom_finder)
  {
    LOG_FUNC (get_logger ());
-   auto curr_stmt_finder = custom_finder ? custom_finder : m_stmt_finder;
-   if (m_stmt == nullptr && curr_stmt_finder == nullptr)
-     {
-       if (get_logger ())
- 	get_logger ()->log ("rejecting diagnostic: no stmt");
-       return false;
-     }
    if (m_eg)
      {
        bool terminate_path = d->terminate_path_p ();
!       pending_location ploc (m_enode_for_diag,
! 			     m_enode_for_diag->get_supernode (),
! 			     m_stmt,
! 			     curr_stmt_finder);
!       if (m_eg->get_diagnostic_manager ().add_diagnostic (ploc,
  							  std::move (d)))
  	{
  	  if (m_path_ctxt
--- 105,118 ----
  }
  
  bool
! impl_region_model_context::warn_at (std::unique_ptr<pending_diagnostic> d,
! 				    pending_location &&ploc)
  {
    LOG_FUNC (get_logger ());
    if (m_eg)
      {
        bool terminate_path = d->terminate_path_p ();
!       if (m_eg->get_diagnostic_manager ().add_diagnostic (std::move (ploc),
  							  std::move (d)))
  	{
  	  if (m_path_ctxt
*************** setjmp_svalue::get_enode_index () const
*** 279,549 ****
    return m_setjmp_record.m_enode->m_index;
  }
  
- /* Concrete implementation of sm_context, wiring it up to the rest of this
-    file.  */
- 
- class impl_sm_context : public sm_context
- {
- public:
-   impl_sm_context (exploded_graph &eg,
- 		   int sm_idx,
- 		   const state_machine &sm,
- 		   exploded_node *enode_for_diag,
- 		   const program_state *old_state,
- 		   program_state *new_state,
- 		   const sm_state_map *old_smap,
- 		   sm_state_map *new_smap,
- 		   path_context *path_ctxt,
- 		   const stmt_finder *stmt_finder = nullptr,
- 		   bool unknown_side_effects = false)
-   : sm_context (sm_idx, sm),
-     m_logger (eg.get_logger ()),
-     m_eg (eg), m_enode_for_diag (enode_for_diag),
-     m_old_state (old_state), m_new_state (new_state),
-     m_old_smap (old_smap), m_new_smap (new_smap),
-     m_path_ctxt (path_ctxt),
-     m_stmt_finder (stmt_finder),
-     m_unknown_side_effects (unknown_side_effects)
-   {
-   }
- 
-   logger *get_logger () const { return m_logger.get_logger (); }
- 
-   tree get_fndecl_for_call (const gcall &call) final override
-   {
-     impl_region_model_context old_ctxt
-       (m_eg, m_enode_for_diag, nullptr, nullptr, nullptr/*m_enode->get_state ()*/,
-        nullptr, &call);
-     region_model *model = m_new_state->m_region_model;
-     return model->get_fndecl_for_call (call, &old_ctxt);
-   }
- 
-   state_machine::state_t get_state (const gimple *stmt ATTRIBUTE_UNUSED,
- 				    tree var) final override
-   {
-     logger * const logger = get_logger ();
-     LOG_FUNC (logger);
-     /* Use nullptr ctxt on this get_rvalue call to avoid triggering
-        uninitialized value warnings.  */
-     const svalue *var_old_sval
-       = m_old_state->m_region_model->get_rvalue (var, nullptr);
- 
-     state_machine::state_t current
-       = m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ());
-     return current;
-   }
-   state_machine::state_t get_state (const gimple *stmt ATTRIBUTE_UNUSED,
- 				    const svalue *sval) final override
-   {
-     logger * const logger = get_logger ();
-     LOG_FUNC (logger);
-     state_machine::state_t current
-       = m_old_smap->get_state (sval, m_eg.get_ext_state ());
-     return current;
-   }
- 
- 
-   void set_next_state (const gimple *,
- 		       tree var,
- 		       state_machine::state_t to,
- 		       tree origin) final override
-   {
-     logger * const logger = get_logger ();
-     LOG_FUNC (logger);
-     const svalue *var_new_sval
-       = m_new_state->m_region_model->get_rvalue (var, nullptr);
-     const svalue *origin_new_sval
-       = m_new_state->m_region_model->get_rvalue (origin, nullptr);
- 
-     /* We use the new sval here to avoid issues with uninitialized values.  */
-     state_machine::state_t current
-       = m_old_smap->get_state (var_new_sval, m_eg.get_ext_state ());
-     if (logger)
-       logger->log ("%s: state transition of %qE: %s -> %s",
- 		   m_sm.get_name (),
- 		   var,
- 		   current->get_name (),
- 		   to->get_name ());
-     m_new_smap->set_state (m_new_state->m_region_model, var_new_sval,
- 			   to, origin_new_sval, m_eg.get_ext_state ());
-   }
- 
-   void set_next_state (const gimple *stmt,
- 		       const svalue *sval,
- 		       state_machine::state_t to,
- 		       tree origin) final override
-   {
-     logger * const logger = get_logger ();
-     LOG_FUNC (logger);
-     impl_region_model_context old_ctxt
-       (m_eg, m_enode_for_diag, nullptr, nullptr, nullptr/*m_enode->get_state ()*/,
-        nullptr, stmt);
- 
-     const svalue *origin_new_sval
-       = m_new_state->m_region_model->get_rvalue (origin, nullptr);
- 
-     state_machine::state_t current
-       = m_old_smap->get_state (sval, m_eg.get_ext_state ());
-     if (logger)
-       {
- 	logger->start_log_line ();
- 	logger->log_partial ("%s: state transition of ",
- 			     m_sm.get_name ());
- 	sval->dump_to_pp (logger->get_printer (), true);
- 	logger->log_partial (": %s -> %s",
- 			     current->get_name (),
- 			     to->get_name ());
- 	logger->end_log_line ();
-       }
-     m_new_smap->set_state (m_new_state->m_region_model, sval,
- 			   to, origin_new_sval, m_eg.get_ext_state ());
-   }
- 
-   void warn (const supernode *snode, const gimple *stmt,
- 	     tree var,
- 	     std::unique_ptr<pending_diagnostic> d) final override
-   {
-     LOG_FUNC (get_logger ());
-     gcc_assert (d);
-     const svalue *var_old_sval
-       = m_old_state->m_region_model->get_rvalue (var, nullptr);
-     state_machine::state_t current
-       = (var
- 	 ? m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ())
- 	 : m_old_smap->get_global_state ());
-     bool terminate_path = d->terminate_path_p ();
-     pending_location ploc (m_enode_for_diag, snode, stmt, m_stmt_finder);
-     m_eg.get_diagnostic_manager ().add_diagnostic
-       (&m_sm, ploc,
-        var, var_old_sval, current, std::move (d));
-     if (m_path_ctxt
- 	&& terminate_path
- 	&& flag_analyzer_suppress_followups)
-       m_path_ctxt->terminate_path ();
-   }
- 
-   void warn (const supernode *snode, const gimple *stmt,
- 	     const svalue *sval,
- 	     std::unique_ptr<pending_diagnostic> d) final override
-   {
-     LOG_FUNC (get_logger ());
-     gcc_assert (d);
-     state_machine::state_t current
-       = (sval
- 	 ? m_old_smap->get_state (sval, m_eg.get_ext_state ())
- 	 : m_old_smap->get_global_state ());
-     bool terminate_path = d->terminate_path_p ();
-     pending_location ploc (m_enode_for_diag, snode, stmt, m_stmt_finder);
-     m_eg.get_diagnostic_manager ().add_diagnostic
-       (&m_sm, ploc,
-        NULL_TREE, sval, current, std::move (d));
-     if (m_path_ctxt
- 	&& terminate_path
- 	&& flag_analyzer_suppress_followups)
-       m_path_ctxt->terminate_path ();
-   }
- 
-   /* Hook for picking more readable trees for SSA names of temporaries,
-      so that rather than e.g.
-        "double-free of '<unknown>'"
-      we can print:
-        "double-free of 'inbuf.data'".  */
- 
-   tree get_diagnostic_tree (tree expr) final override
-   {
-     /* Only for SSA_NAMEs of temporaries; otherwise, return EXPR, as it's
-        likely to be the least surprising tree to report.  */
-     if (TREE_CODE (expr) != SSA_NAME)
-       return expr;
-     if (SSA_NAME_VAR (expr) != NULL)
-       return expr;
- 
-     gcc_assert (m_new_state);
-     const svalue *sval = m_new_state->m_region_model->get_rvalue (expr, nullptr);
-     /* Find trees for all regions storing the value.  */
-     if (tree t = m_new_state->m_region_model->get_representative_tree (sval))
-       return t;
-     else
-       return expr;
-   }
- 
-   tree get_diagnostic_tree (const svalue *sval) final override
-   {
-     return m_new_state->m_region_model->get_representative_tree (sval);
-   }
- 
-   state_machine::state_t get_global_state () const final override
-   {
-     return m_old_state->m_checker_states[m_sm_idx]->get_global_state ();
-   }
- 
-   void set_global_state (state_machine::state_t state) final override
-   {
-     m_new_state->m_checker_states[m_sm_idx]->set_global_state (state);
-   }
- 
-   void clear_all_per_svalue_state () final override
-   {
-     m_new_state->m_checker_states[m_sm_idx]->clear_all_per_svalue_state ();
-   }
- 
-   void on_custom_transition (custom_transition *transition) final override
-   {
-     transition->impl_transition (&m_eg,
- 				 const_cast<exploded_node *> (m_enode_for_diag),
- 				 m_sm_idx);
-   }
- 
-   tree is_zero_assignment (const gimple *stmt) final override
-   {
-     const gassign *assign_stmt = dyn_cast <const gassign *> (stmt);
-     if (!assign_stmt)
-      return NULL_TREE;
-     impl_region_model_context old_ctxt
-       (m_eg, m_enode_for_diag, m_old_state, m_new_state, nullptr, nullptr, stmt);
-     if (const svalue *sval
- 	= m_new_state->m_region_model->get_gassign_result (assign_stmt,
- 							    &old_ctxt))
-       if (tree cst = sval->maybe_get_constant ())
- 	if (::zerop(cst))
- 	  return gimple_assign_lhs (assign_stmt);
-     return NULL_TREE;
-   }
- 
-   path_context *get_path_context () const final override
-   {
-     return m_path_ctxt;
-   }
- 
-   bool unknown_side_effects_p () const final override
-   {
-     return m_unknown_side_effects;
-   }
- 
-   const program_state *get_old_program_state () const final override
-   {
-     return m_old_state;
-   }
- 
-   const program_state *get_new_program_state () const final override
-   {
-     return m_new_state;
-   }
- 
-   log_user m_logger;
-   exploded_graph &m_eg;
-   exploded_node *m_enode_for_diag;
-   const program_state *m_old_state;
-   program_state *m_new_state;
-   const sm_state_map *m_old_smap;
-   sm_state_map *m_new_smap;
-   path_context *m_path_ctxt;
-   const stmt_finder *m_stmt_finder;
- 
-   /* Are we handling an external function with unknown side effects?  */
-   bool m_unknown_side_effects;
- };
- 
  bool
  impl_region_model_context::
  get_state_map_by_name (const char *name,
--- 267,272 ----
*************** get_state_map_by_name (const char *name,
*** 579,682 ****
  					     old_smap,
  					     new_smap,
  					     m_path_ctxt,
- 					     m_stmt_finder,
  					     false);
      }
    return true;
  }
  
! /* Subclass of stmt_finder for finding the best stmt to report the leak at,
!    given the emission path.  */
  
! class leak_stmt_finder : public stmt_finder
  {
  public:
!   leak_stmt_finder (const exploded_graph &eg, tree var)
!   : m_eg (eg), m_var (var) {}
! 
!   std::unique_ptr<stmt_finder> clone () const final override
!   {
!     return std::make_unique<leak_stmt_finder> (m_eg, m_var);
!   }
  
!   const gimple *find_stmt (const exploded_path &epath)
!     final override
    {
      logger * const logger = m_eg.get_logger ();
      LOG_FUNC (logger);
  
      if (m_var && TREE_CODE (m_var) == SSA_NAME)
        {
  	/* Locate the final write to this SSA name in the path.  */
  	const gimple *def_stmt = SSA_NAME_DEF_STMT (m_var);
  
  	int idx_of_def_stmt;
! 	bool found = epath.find_stmt_backwards (def_stmt, &idx_of_def_stmt);
! 	if (!found)
! 	  goto not_found;
  
! 	/* What was the next write to the underlying var
! 	   after the SSA name was set? (if any).  */
  
! 	for (unsigned idx = idx_of_def_stmt + 1;
! 	     idx < epath.m_edges.length ();
! 	     ++idx)
  	  {
- 	    const exploded_edge *eedge = epath.m_edges[idx];
  	    if (logger)
- 	      logger->log ("eedge[%i]: EN %i -> EN %i",
- 			   idx,
- 			   eedge->m_src->m_index,
- 			   eedge->m_dest->m_index);
- 	    const exploded_node *dst_node = eedge->m_dest;
- 	    const program_point &dst_point = dst_node->get_point ();
- 	    const gimple *stmt = dst_point.get_stmt ();
- 	    if (!stmt)
- 	      continue;
- 	    if (const gassign *assign = dyn_cast <const gassign *> (stmt))
  	      {
! 		tree lhs = gimple_assign_lhs (assign);
! 		if (TREE_CODE (lhs) == SSA_NAME
! 		    && SSA_NAME_VAR (lhs) == SSA_NAME_VAR (m_var))
! 		  return assign;
  	      }
  	  }
        }
  
!   not_found:
  
!     /* Look backwards for the first statement with a location.  */
!     int i;
      const exploded_edge *eedge;
!     FOR_EACH_VEC_ELT_REVERSE (epath.m_edges, i, eedge)
        {
! 	if (logger)
! 	  logger->log ("eedge[%i]: EN %i -> EN %i",
! 		       i,
! 		       eedge->m_src->m_index,
! 		       eedge->m_dest->m_index);
! 	const exploded_node *dst_node = eedge->m_dest;
! 	const program_point &dst_point = dst_node->get_point ();
! 	const gimple *stmt = dst_point.get_stmt ();
! 	if (stmt)
! 	  if (get_pure_location (stmt->location) != UNKNOWN_LOCATION)
! 	    return stmt;
        }
! 
!     gcc_unreachable ();
!     return nullptr;
    }
  
!   void update_event_loc_info (event_loc_info &) final override
    {
!     /* No-op.  */
    }
  
- private:
    const exploded_graph &m_eg;
    tree m_var;
  };
  
  /* A measurement of how good EXPR is for presenting to the user, so
     that e.g. we can say prefer printing
       "leak of 'tmp.m_ptr'"
--- 302,553 ----
  					     old_smap,
  					     new_smap,
  					     m_path_ctxt,
  					     false);
      }
    return true;
  }
  
! /* Subclass of pending_location::fixer_for_epath for finding the best stmt
!    to report the leak at, given the emission path.  */
  
! class leak_ploc_fixer_for_epath : public pending_location::fixer_for_epath
  {
  public:
!   leak_ploc_fixer_for_epath (const exploded_graph &eg, tree var)
!   : m_eg (eg), m_var (var)
!   {}
  
!   void
!   fixup_for_epath (const exploded_path &epath,
! 		   pending_location &ploc) const final override
    {
      logger * const logger = m_eg.get_logger ();
      LOG_FUNC (logger);
  
+     /* Handle the interprocedural case where we leak the retval at a return
+        because the caller discards the return value.  */
+     if (m_var
+ 	&& TREE_CODE (m_var) == RESULT_DECL)
+       {
+ 	auto &point = ploc.m_enode->get_point ();
+ 	if (point.get_stack_depth () > 1)
+ 	  if (point.get_supernode ()->exit_p ())
+ 	    {
+ 	      /* Get the program_point for the call within the caller.  */
+ 	      auto &cs = point.get_call_string ();
+ 	      auto caller_snode = cs.get_return_node_in_caller ();
+ 	      gcc_assert (caller_snode);
+ 	      program_point caller_point (caller_snode, *cs.get_parent ());
+ 	      ploc.m_event_loc_info = event_loc_info (caller_point);
+ 	      return;
+ 	    }
+       }
+ 
+     /* Handle the case where we have e.g.:
+        |   var = malloc (N);
+        |   var = NULL;
+        which with SSA becomes e.g.:
+        |   var_0 = malloc (N);
+        |   var_1 = nullptr;
+        and thus leads to the leak being found at the enode where "var_0" goes
+        out of scope.
+        Fix up the location of the leak to report it at the write of NULL.  */
      if (m_var && TREE_CODE (m_var) == SSA_NAME)
        {
+ 	log_scope sentinel (logger, "looking for write to sibling SSA name");
  	/* Locate the final write to this SSA name in the path.  */
  	const gimple *def_stmt = SSA_NAME_DEF_STMT (m_var);
  
  	int idx_of_def_stmt;
! 	if (epath.find_stmt_backwards (def_stmt, &idx_of_def_stmt))
! 	  {
! 	    /* What was the next write to the underlying var
! 	       after the SSA name was set? (if any).  */
  
! 	    for (unsigned idx = idx_of_def_stmt + 1;
! 		 idx < epath.m_edges.length ();
! 		 ++idx)
! 	      {
! 		const exploded_edge *eedge = epath.m_edges[idx];
! 		if (logger)
! 		  logger->log ("eedge[%i]: EN %i -> EN %i",
! 			       idx,
! 			       eedge->m_src->m_index,
! 			       eedge->m_dest->m_index);
! 		const gimple *stmt = eedge->maybe_get_stmt ();
! 		if (!stmt)
! 		  continue;
! 		if (const gassign *assign = dyn_cast <const gassign *> (stmt))
! 		  {
! 		    tree lhs = gimple_assign_lhs (assign);
! 		    if (TREE_CODE (lhs) == SSA_NAME
! 			&& SSA_NAME_VAR (lhs) == SSA_NAME_VAR (m_var))
! 		      {
! 			if (logger)
! 			  logger->log ("using location 0%lx from gassign",
! 				       assign->location);
! 			ploc.m_event_loc_info.m_loc = assign->location;
! 			return;
! 		      }
! 		  }
! 	      }
! 	  }
!       }
  
!     /* If the epath ends at a function exit node, the location is at
!        the final "}".  Try walking backward along EPATH, looking for a
!        the first suitable stmt with a better location.  */
!     gcc_assert (ploc.m_enode->get_supernode ());
!     const greturn *return_stmt = nullptr;
!     if (ploc.m_enode->get_supernode ()->exit_p ()
! 	&& has_return_stmt_p (epath, return_stmt, logger))
!       {
! 	/* If we have "return SSA_NAME;" on EPATH, keep track of the
! 	   pertinent SSA name as we walk backwards through EPATH.  */
! 	tree retval = NULL_TREE;
! 	if (return_stmt)
! 	  retval = gimple_return_retval (return_stmt);
! 
! 	log_scope sentinel (logger, "walking backward along epath");
! 	int idx;
! 	const exploded_edge *eedge;
! 	FOR_EACH_VEC_ELT_REVERSE (epath.m_edges, idx, eedge)
  	  {
  	    if (logger)
  	      {
! 		logger->log ("eedge[%i]: EN %i -> EN %i",
! 			     idx,
! 			     eedge->m_src->m_index,
! 			     eedge->m_dest->m_index);
! 		if (retval)
! 		  logger->log ("  retval: %qE", retval);
! 	      }
! 	    if (auto op = eedge->maybe_get_op ())
! 	      {
! 		if (retval)
! 		  if (auto phis = op->dyn_cast_phis_for_edge_op ())
! 		    {
! 		      for (auto iter : phis->get_pairs ())
! 			if (retval == iter.m_dst)
! 			  {
! 			    /* We have "PHI(RETVAL = SRC);"
! 			       Track SRC instead  */
! 			    retval = iter.m_src;
! 			    if (logger)
! 			      logger->log ("updating retval to %qE", retval);
! 			  }
! 		    }
! 		if (const gimple *stmt = op->maybe_get_stmt ())
! 		  if (consider_stmt_location_p (*stmt, retval))
! 		    if (useful_location_p (stmt->location))
! 		      {
! 			if (logger)
! 			  logger->log ("using location 0x%lx from stmt",
! 				       stmt->location);
! 			ploc.m_event_loc_info.m_loc = stmt->location;
! 			return;
! 		      }
  	      }
  	  }
        }
+   }
  
! private:
!   static bool
!   has_return_stmt_p (const exploded_path &epath,
! 		     const greturn *&out_greturn,
! 		     logger *logger)
!   {
!     LOG_SCOPE (logger);
  
!     int idx;
      const exploded_edge *eedge;
!     FOR_EACH_VEC_ELT_REVERSE (epath.m_edges, idx, eedge)
        {
! 	if (eedge->m_src->get_stack_depth ()
! 	    != eedge->m_dest->get_stack_depth ())
! 	  {
! 	    /* We have interprocedural activity, and
! 	       presumably are no longer in the function where
! 	       EPATH terminates.
! 	       Give up.  */
! 	    return false;
! 	  }
! 	if (auto op = eedge->maybe_get_op ())
! 	  {
! 	    switch (op->get_kind ())
! 	      {
! 	      default:
! 		break;
! 	      case operation::kind::return_stmt:
! 		if (logger)
! 		  logger->log ("found return_stmt");
! 		out_greturn = &((const greturn_op *)op)->get_greturn ();
! 		return true;
! 	      case operation::kind::predict_stmt:
! 		{
! 		  auto &stmt = ((const gimple_stmt_op *)op)->get_stmt ();
! 		  switch (gimple_predict_predictor (&stmt))
! 		    {
! 		    case PRED_TREE_EARLY_RETURN:
! 		      /* Assume this is due to a "return;" in the user's
! 			 code.  */
! 		      if (logger)
! 			logger->log ("assuming a return: PRED_TREE_EARLY_RETURN");
! 		      return true;
! 		    default:
! 		      break;
! 		    }
! 		}
! 		break;
! 	      }
! 	  }
        }
!     return false;
    }
  
!   /* When certain statements show up on the epath of a leak
!      at an exit node, if they have locations, these locations
!      tend to be better locations for the leak.
!      Return true for such statements (but without checking their
!      locations).  */
!   static bool
!   consider_stmt_location_p (const gimple &stmt,
! 			    tree retval)
    {
!     if (retval && TREE_CODE (retval) == SSA_NAME)
!       if (&stmt == SSA_NAME_DEF_STMT (retval))
! 	return true;
! 
!     switch (stmt.code)
!       {
!       default:
! 	break;
!       case GIMPLE_CALL:
! 	{
! 	  const gcall &call = *as_a <const gcall *> (&stmt);
! 	  if (is_cxa_end_catch_p (call))
! 	    return true;
! 	}
! 	break;
!       case GIMPLE_PREDICT:
!       case GIMPLE_RETURN:
! 	return true;
!       }
!     return false;
    }
  
    const exploded_graph &m_eg;
    tree m_var;
  };
  
+ std::unique_ptr<pending_location::fixer_for_epath>
+ make_ploc_fixer_for_epath_for_leak_diagnostic (const exploded_graph &eg,
+ 					  tree var)
+ {
+   return std::make_unique<leak_ploc_fixer_for_epath> (eg, var);
+ }
+ 
  /* A measurement of how good EXPR is for presenting to the user, so
     that e.g. we can say prefer printing
       "leak of 'tmp.m_ptr'"
*************** returning_from_function_p (const superno
*** 831,843 ****
    const supernode *iter = snode;
    while (true)
      {
!       if (iter->return_p ())
  	return true;
        if (iter->m_succs.length () != 1)
  	return false;
        const superedge *sedge = iter->m_succs[0];
!       if (sedge->get_kind () != SUPEREDGE_CFG_EDGE)
! 	return false;
        iter = sedge->m_dest;
  
        /* Impose a limit to ensure we terminate for pathological cases.
--- 702,717 ----
    const supernode *iter = snode;
    while (true)
      {
!       if (iter->exit_p ())
  	return true;
        if (iter->m_succs.length () != 1)
  	return false;
        const superedge *sedge = iter->m_succs[0];
! 
!       if (auto op = sedge->get_op ())
! 	if (op->get_kind () == operation::kind::return_stmt)
! 	  return true;
! 
        iter = sedge->m_dest;
  
        /* Impose a limit to ensure we terminate for pathological cases.
*************** returning_from_function_p (const superno
*** 851,857 ****
  	   return _val;
  
  	   EXIT BB.*/
!       if (++count > 3)
  	return false;
      }
  }
--- 725,731 ----
  	   return _val;
  
  	   EXIT BB.*/
!       if (++count > 4)
  	return false;
      }
  }
*************** impl_region_model_context::on_state_leak
*** 907,913 ****
  	logger->log ("best leaked_tree: NULL");
      }
  
-   leak_stmt_finder stmt_finder (*m_eg, leaked_tree);
    gcc_assert (m_enode_for_diag);
  
    /* Don't complain about leaks when returning from "main".  */
--- 781,786 ----
*************** impl_region_model_context::on_state_leak
*** 928,939 ****
  						       m_new_state);
    if (pd)
      {
!       pending_location ploc (m_enode_for_diag,
! 			     m_enode_for_diag->get_supernode (),
! 			     m_stmt,
! 			     &stmt_finder);
        m_eg->get_diagnostic_manager ().add_diagnostic
! 	(&sm, ploc,
  	 leaked_tree_for_diag, sval, state, std::move (pd));
      }
  }
--- 801,811 ----
  						       m_new_state);
    if (pd)
      {
!       pending_location ploc (get_pending_location_for_diag ());
!       ploc.m_fixer_for_epath
! 	= std::make_unique<leak_ploc_fixer_for_epath> (*m_eg, leaked_tree);
        m_eg->get_diagnostic_manager ().add_diagnostic
! 	(&sm, std::move (ploc),
  	 leaked_tree_for_diag, sval, state, std::move (pd));
      }
  }
*************** impl_region_model_context::on_condition
*** 957,968 ****
  			       m_old_state->m_checker_states[sm_idx],
  			       m_new_state->m_checker_states[sm_idx],
  			       m_path_ctxt);
!       sm.on_condition (sm_ctxt,
! 		       (m_enode_for_diag
! 			? m_enode_for_diag->get_supernode ()
! 			: nullptr),
! 		       m_stmt,
! 		       lhs, op, rhs);
      }
  }
  
--- 829,835 ----
  			       m_old_state->m_checker_states[sm_idx],
  			       m_new_state->m_checker_states[sm_idx],
  			       m_path_ctxt);
!       sm.on_condition (sm_ctxt, lhs, op, rhs);
      }
  }
  
*************** impl_region_model_context::on_bounded_ra
*** 984,994 ****
  			       m_old_state->m_checker_states[sm_idx],
  			       m_new_state->m_checker_states[sm_idx],
  			       m_path_ctxt);
!       sm.on_bounded_ranges (sm_ctxt,
! 			    (m_enode_for_diag
! 			     ? m_enode_for_diag->get_supernode ()
! 			     : nullptr),
! 			    m_stmt, sval, ranges);
      }
  }
  
--- 851,857 ----
  			       m_old_state->m_checker_states[sm_idx],
  			       m_new_state->m_checker_states[sm_idx],
  			       m_path_ctxt);
!       sm.on_bounded_ranges (sm_ctxt, sval, ranges);
      }
  }
  
*************** impl_region_model_context::on_phi (const
*** 1025,1031 ****
  			       m_old_state->m_checker_states[sm_idx],
  			       m_new_state->m_checker_states[sm_idx],
  			       m_path_ctxt);
!       sm.on_phi (sm_ctxt, m_enode_for_diag->get_supernode (), phi, rhs);
      }
  }
  
--- 888,894 ----
  			       m_old_state->m_checker_states[sm_idx],
  			       m_new_state->m_checker_states[sm_idx],
  			       m_path_ctxt);
!       sm.on_phi (sm_ctxt, phi, rhs);
      }
  }
  
*************** impl_region_model_context::maybe_did_wor
*** 1059,1064 ****
--- 922,936 ----
      *m_out_could_have_done_work = true;
  }
  
+ pending_location
+ impl_region_model_context::get_pending_location_for_diag () const
+ {
+   if (m_stmt && useful_location_p (m_stmt->location))
+     return pending_location (m_enode_for_diag, m_stmt->location);
+   else
+     return pending_location (m_enode_for_diag);
+ }
+ 
  /* struct point_and_state.  */
  
  /* Assert that this object is sane.  */
*************** exploded_node::status_to_str (enum statu
*** 1198,1203 ****
--- 1070,1076 ----
      default: gcc_unreachable ();
      case status::worklist: return "worklist";
      case status::processed: return "processed";
+     case status::special: return "special";
      case status::merger: return "merger";
      case status::bulk_merged: return "bulk_merged";
      }
*************** exploded_node::exploded_node (const poin
*** 1213,1235 ****
    gcc_checking_assert (ps.get_state ().m_region_model->canonicalized_p ());
  }
  
- /* Get the stmt that was processed in this enode at index IDX.
-    IDX is an index within the stmts processed at this enode, rather
-    than within those of the supernode.  */
- 
- const gimple *
- exploded_node::get_processed_stmt (unsigned idx) const
- {
-   gcc_assert (idx < m_num_processed_stmts);
-   const program_point &point = get_point ();
-   gcc_assert (point.get_kind () == PK_BEFORE_STMT);
-   const supernode *snode = get_supernode ();
-   const unsigned int point_stmt_idx = point.get_stmt_idx ();
-   const unsigned int idx_within_snode = point_stmt_idx + idx;
-   const gimple *stmt = snode->m_stmts[idx_within_snode];
-   return stmt;
- }
- 
  /* For use by dump_dot, get a value for the .dot "fillcolor" attribute.
     Colorize by sm-state, to make it easier to see how sm-state propagates
     through the exploded_graph.  */
--- 1086,1091 ----
*************** exploded_node::dump_dot (graphviz_out *g
*** 1297,1308 ****
        m_ps.get_point ().print (pp, f);
        pp_newline (pp);
  
!       const extrinsic_state &ext_state = args.m_eg.get_ext_state ();
!       const program_state &state = m_ps.get_state ();
!       state.dump_to_pp (ext_state, false, true, pp);
!       pp_newline (pp);
  
!       dump_processed_stmts (pp);
      }
  
    dump_saved_diagnostics (pp);
--- 1153,1173 ----
        m_ps.get_point ().print (pp, f);
        pp_newline (pp);
  
!       bool show_state = true;
  
!       /* Don't show the state if we have a single predecessor
! 	 and the state hasn't changed.  */
!       if (m_preds.length () == 1
! 	  && get_state () == m_preds[0]->m_src->get_state ())
! 	show_state = false;
! 
!       if (show_state)
! 	{
! 	  const extrinsic_state &ext_state = args.m_eg.get_ext_state ();
! 	  const program_state &state = m_ps.get_state ();
! 	  state.dump_to_pp (ext_state, false, true, pp);
! 	  pp_newline (pp);
! 	}
      }
  
    dump_saved_diagnostics (pp);
*************** exploded_node::dump_dot (graphviz_out *g
*** 1336,1366 ****
    pp_flush (pp);
  }
  
- /* Show any stmts that were processed within this enode,
-    and their index within the supernode.  */
- void
- exploded_node::dump_processed_stmts (pretty_printer *pp) const
- {
-   if (m_num_processed_stmts > 0)
-     {
-       const program_point &point = get_point ();
-       gcc_assert (point.get_kind () == PK_BEFORE_STMT);
-       const supernode *snode = get_supernode ();
-       const unsigned int point_stmt_idx = point.get_stmt_idx ();
- 
-       pp_printf (pp, "stmts: %i", m_num_processed_stmts);
-       pp_newline (pp);
-       for (unsigned i = 0; i < m_num_processed_stmts; i++)
- 	{
- 	  const unsigned int idx_within_snode = point_stmt_idx + i;
- 	  const gimple *stmt = snode->m_stmts[idx_within_snode];
- 	  pp_printf (pp, "  %i: ", idx_within_snode);
- 	  pp_gimple_stmt_1 (pp, stmt, 0, (dump_flags_t)0);
- 	  pp_newline (pp);
- 	}
-     }
- }
- 
  /* Dump any saved_diagnostics at this enode to PP.  */
  
  void
--- 1201,1206 ----
*************** fndecl_has_gimple_body_p (tree fndecl)
*** 1460,1818 ****
  
  namespace ana {
  
- /* Modify STATE in place, applying the effects of the stmt at this node's
-    point.  */
- 
- exploded_node::on_stmt_flags
- exploded_node::on_stmt (exploded_graph &eg,
- 			const supernode *snode,
- 			const gimple *stmt,
- 			program_state *state,
- 			uncertainty_t *uncertainty,
- 			bool *out_could_have_done_work,
- 			path_context *path_ctxt)
- {
-   logger *logger = eg.get_logger ();
-   LOG_SCOPE (logger);
-   if (logger)
-     {
-       logger->start_log_line ();
-       pp_gimple_stmt_1 (logger->get_printer (), stmt, 0, (dump_flags_t)0);
-       logger->end_log_line ();
-     }
- 
-   /* Update input_location in case of ICE: make it easier to track down which
-      source construct we're failing to handle.  */
-   input_location = stmt->location;
- 
-   gcc_assert (state->m_region_model);
- 
-   /* Preserve the old state.  It is used here for looking
-      up old checker states, for determining state transitions, and
-      also within impl_region_model_context and impl_sm_context for
-      going from tree to svalue_id.  */
-   const program_state old_state (*state);
- 
-   impl_region_model_context ctxt (eg, this,
- 				  &old_state, state, uncertainty,
- 				  path_ctxt, stmt, nullptr,
- 				  out_could_have_done_work);
- 
-   /* Handle call summaries here.  */
-   if (cgraph_edge *cgedge
- 	  = supergraph_call_edge (snode->get_function (), stmt))
-     if (eg.get_analysis_plan ().use_summary_p (cgedge))
-       {
- 	function *called_fn = get_ultimate_function_for_cgraph_edge (cgedge);
- 	per_function_data *called_fn_data
- 	  = eg.get_per_function_data (called_fn);
- 	if (called_fn_data)
- 	  {
- 	    gcc_assert (called_fn);
- 	    return replay_call_summaries (eg,
- 					  snode,
- 					  *as_a <const gcall *> (stmt),
- 					  state,
- 					  path_ctxt,
- 					  *called_fn,
- 					  *called_fn_data,
- 					  &ctxt);
- 	  }
-       }
- 
-   bool unknown_side_effects = false;
-   bool terminate_path = false;
- 
-   on_stmt_pre (eg, stmt, state, &terminate_path,
- 	       &unknown_side_effects, &ctxt);
- 
-   if (terminate_path)
-     return on_stmt_flags::terminate_path ();
- 
-   int sm_idx;
-   sm_state_map *smap;
-   FOR_EACH_VEC_ELT (old_state.m_checker_states, sm_idx, smap)
-     {
-       const state_machine &sm = eg.get_ext_state ().get_sm (sm_idx);
-       const sm_state_map *old_smap
- 	= old_state.m_checker_states[sm_idx];
-       sm_state_map *new_smap = state->m_checker_states[sm_idx];
-       impl_sm_context sm_ctxt (eg, sm_idx, sm, this, &old_state, state,
- 			       old_smap, new_smap, path_ctxt, nullptr,
- 			       unknown_side_effects);
- 
-       /* Allow the state_machine to handle the stmt.  */
-       if (sm.on_stmt (sm_ctxt, snode, stmt))
- 	unknown_side_effects = false;
-     }
- 
-   if (path_ctxt->terminate_path_p ())
-     return on_stmt_flags::terminate_path ();
- 
-   on_stmt_post (stmt, state, unknown_side_effects, &ctxt);
- 
-   return on_stmt_flags ();
- }
- 
- /* Handle the pre-sm-state part of STMT, modifying STATE in-place.
-    Write true to *OUT_TERMINATE_PATH if the path should be terminated.
-    Write true to *OUT_UNKNOWN_SIDE_EFFECTS if the stmt has unknown
-    side effects.  */
- 
- void
- exploded_node::on_stmt_pre (exploded_graph &eg,
- 			    const gimple *stmt,
- 			    program_state *state,
- 			    bool *out_terminate_path,
- 			    bool *out_unknown_side_effects,
- 			    region_model_context *ctxt)
- {
-   /* Handle special-case calls that require the full program_state.  */
-   if (const gcall *call_stmt = dyn_cast <const gcall *> (stmt))
-     {
-       const gcall &call = *call_stmt;
-       if (is_special_named_call_p (call, "__analyzer_dump", 0))
- 	{
- 	  /* Handle the builtin "__analyzer_dump" by dumping state
- 	     to stderr.  */
- 	  state->dump (eg.get_ext_state (), true);
- 	  return;
- 	}
-       else if (is_special_named_call_p (call, "__analyzer_dump_sarif", 0))
- 	{
- 	  state->dump_sarif (eg.get_ext_state ());
- 	  return;
- 	}
-       else if (is_special_named_call_p (call, "__analyzer_dump_dot", 0))
- 	{
- 	  state->dump_dot (eg.get_ext_state ());
- 	  return;
- 	}
-       else if (is_special_named_call_p (call, "__analyzer_dump_state", 2))
- 	{
- 	  state->impl_call_analyzer_dump_state (call, eg.get_ext_state (),
- 						ctxt);
- 	  return;
- 	}
-       else if (is_setjmp_call_p (call))
- 	{
- 	  state->m_region_model->on_setjmp (call, this, ctxt);
- 	  if (ctxt)
- 	    ctxt->maybe_did_work ();
- 	  return;
- 	}
-       else if (is_longjmp_call_p (call))
- 	{
- 	  on_longjmp (eg, call, state, ctxt);
- 	  *out_terminate_path = true;
- 	  if (ctxt)
- 	    ctxt->maybe_did_work ();
- 	  return;
- 	}
-       else if (is_cxa_throw_p (call))
- 	{
- 	  on_throw (eg, call, state, false, ctxt);
- 	  *out_terminate_path = true;
- 	  return;
- 	}
-       else if (is_cxa_rethrow_p (call))
- 	{
- 	  on_throw (eg, call, state, true, ctxt);
- 	  *out_terminate_path = true;
- 	  return;
- 	}
-     }
-   else if (const gresx *resx = dyn_cast <const gresx *> (stmt))
-     {
-       on_resx (eg, *resx, state, ctxt);
-       *out_terminate_path = true;
-       return;
-     }
- 
-   /* Otherwise, defer to m_region_model.  */
-   state->m_region_model->on_stmt_pre (stmt,
- 				      out_unknown_side_effects,
- 				      ctxt);
- }
- 
- /* Handle the post-sm-state part of STMT, modifying STATE in-place.  */
- 
- void
- exploded_node::on_stmt_post (const gimple *stmt,
- 			     program_state *state,
- 			     bool unknown_side_effects,
- 			     region_model_context *ctxt)
- {
-   if (const gcall *call = dyn_cast <const gcall *> (stmt))
-     state->m_region_model->on_call_post (*call, unknown_side_effects, ctxt);
- }
- 
- /* A concrete call_info subclass representing a replay of a call summary.  */
- 
- class call_summary_edge_info : public call_info
- {
- public:
-   call_summary_edge_info (const call_details &cd,
- 			  const function &called_fn,
- 			  call_summary &summary,
- 			  const extrinsic_state &ext_state)
-   : call_info (cd, called_fn),
-     m_called_fn (called_fn),
-     m_summary (summary),
-     m_ext_state (ext_state)
-   {}
- 
-   bool update_state (program_state *state,
- 		     const exploded_edge *,
- 		     region_model_context *ctxt) const final override
-   {
-     /* Update STATE based on summary_end_state.  */
-     call_details cd (get_call_details (state->m_region_model, ctxt));
-     call_summary_replay r (cd, m_called_fn, m_summary, m_ext_state);
-     const program_state &summary_end_state = m_summary.get_state ();
-     return state->replay_call_summary (r, summary_end_state);
-   }
- 
-   bool update_model (region_model *model,
- 		     const exploded_edge *,
- 		     region_model_context *ctxt) const final override
-   {
-     /* Update STATE based on summary_end_state.  */
-     call_details cd (get_call_details (model, ctxt));
-     call_summary_replay r (cd, m_called_fn, m_summary, m_ext_state);
-     const program_state &summary_end_state = m_summary.get_state ();
-     model->replay_call_summary (r, *summary_end_state.m_region_model);
-     return true;
-   }
- 
-   void print_desc (pretty_printer &pp) const final override
-   {
-     pp_string (&pp, m_summary.get_desc ().get ());
-   }
- 
- private:
-   const function &m_called_fn;
-   call_summary &m_summary;
-   const extrinsic_state &m_ext_state;
- };
- 
- /* Use PATH_CTXT to bifurcate, which when handled will add custom edges
-    for a replay of the various feasible summaries in CALLED_FN_DATA.  */
- 
- exploded_node::on_stmt_flags
- exploded_node::replay_call_summaries (exploded_graph &eg,
- 				      const supernode *snode,
- 				      const gcall &call_stmt,
- 				      program_state *state,
- 				      path_context *path_ctxt,
- 				      const function &called_fn,
- 				      per_function_data &called_fn_data,
- 				      region_model_context *ctxt)
- {
-   logger *logger = eg.get_logger ();
-   LOG_SCOPE (logger);
- 
-   /* Each summary will call bifurcate on the PATH_CTXT.  */
-   for (auto summary : called_fn_data.m_summaries)
-     {
-       gcc_assert (summary);
-       replay_call_summary (eg, snode, call_stmt, state,
- 			   path_ctxt, called_fn, *summary, ctxt);
-     }
-   path_ctxt->terminate_path ();
- 
-   return on_stmt_flags ();
- }
- 
- /* Use PATH_CTXT to bifurcate, which when handled will add a
-    custom edge for a replay of SUMMARY, if the summary's
-    conditions are feasible based on the current state.  */
- 
- void
- exploded_node::replay_call_summary (exploded_graph &eg,
- 				    const supernode *snode,
- 				    const gcall &call_stmt,
- 				    program_state *old_state,
- 				    path_context *path_ctxt,
- 				    const function &called_fn,
- 				    call_summary &summary,
- 				    region_model_context *ctxt)
- {
-   logger *logger = eg.get_logger ();
-   LOG_SCOPE (logger);
-   gcc_assert (snode);
-   gcc_assert (old_state);
- 
-   if (logger)
-     logger->log ("using %s as summary for call to %qE from %qE",
- 		 summary.get_desc ().get (),
- 		 called_fn.decl,
- 		 snode->get_function ()->decl);
-   const extrinsic_state &ext_state = eg.get_ext_state ();
-   const program_state &summary_end_state = summary.get_state ();
-   if (logger)
-     {
-       pretty_printer *pp = logger->get_printer ();
- 
-       logger->start_log_line ();
-       pp_string (pp, "callsite state: ");
-       old_state->dump_to_pp (ext_state, true, false, pp);
-       logger->end_log_line ();
- 
-       logger->start_log_line ();
-       pp_string (pp, "summary end state: ");
-       summary_end_state.dump_to_pp (ext_state, true, false, pp);
-       logger->end_log_line ();
-     }
- 
-   program_state new_state (*old_state);
- 
-   call_details cd (call_stmt, new_state.m_region_model, ctxt);
-   call_summary_replay r (cd, called_fn, summary, ext_state);
- 
-   if (path_ctxt)
-     path_ctxt->bifurcate
-       (std::make_unique<call_summary_edge_info> (cd,
- 						 called_fn,
- 						 summary,
- 						 ext_state));
- }
- 
- 
- /* Consider the effect of following superedge SUCC from this node.
- 
-    Return true if it's feasible to follow the edge, or false
-    if it's infeasible.
- 
-    Examples: if it's the "true" branch within
-    a CFG and we know the conditional is false, we know it's infeasible.
-    If it's one of multiple interprocedual "return" edges, then only
-    the edge back to the most recent callsite is feasible.
- 
-    Update NEXT_STATE accordingly (e.g. to record that a condition was
-    true or false, or that the NULL-ness of a pointer has been checked,
-    pushing/popping stack frames, etc).
- 
-    Update NEXT_POINT accordingly (updating the call string).  */
- 
- bool
- exploded_node::on_edge (exploded_graph &eg,
- 			const superedge *succ,
- 			program_point *next_point,
- 			program_state *next_state,
- 			uncertainty_t *uncertainty)
- {
-   LOG_FUNC (eg.get_logger ());
- 
-   if (!next_point->on_edge (eg, succ))
-     return false;
- 
-   if (!next_state->on_edge (eg, this, succ, uncertainty))
-     return false;
- 
-   return true;
- }
- 
  /* Verify that the stack at LONGJMP_POINT is still valid, given a call
     to "setjmp" at SETJMP_POINT - the stack frame that "setjmp" was
     called in must still be valid.
--- 1300,1305 ----
*************** public:
*** 1874,1881 ****
    }
  
    bool
!   maybe_add_custom_events_for_superedge (const exploded_edge &eedge,
! 					 checker_path *emission_path)
      final override
    {
      /* Detect exactly when the stack first becomes invalid,
--- 1361,1368 ----
    }
  
    bool
!   maybe_add_custom_events_for_eedge (const exploded_edge &eedge,
! 				     checker_path *emission_path)
      final override
    {
      /* Detect exactly when the stack first becomes invalid,
*************** exploded_node::on_longjmp (exploded_grap
*** 1963,1983 ****
    rewind_info_t rewind_info (tmp_setjmp_record, longjmp_call);
  
    const gcall &setjmp_call = rewind_info.get_setjmp_call ();
!   const program_point &setjmp_point = rewind_info.get_setjmp_point ();
  
    const program_point &longjmp_point = get_point ();
  
    /* Verify that the setjmp's call_stack hasn't been popped.  */
!   if (!valid_longjmp_stack_p (longjmp_point, setjmp_point))
      {
        ctxt->warn (std::make_unique<stale_jmp_buf> (setjmp_call,
  						   longjmp_call,
! 						   setjmp_point));
        return;
      }
  
    gcc_assert (longjmp_point.get_stack_depth ()
! 	      >= setjmp_point.get_stack_depth ());
  
    /* Update the state for use by the destination node.  */
  
--- 1450,1471 ----
    rewind_info_t rewind_info (tmp_setjmp_record, longjmp_call);
  
    const gcall &setjmp_call = rewind_info.get_setjmp_call ();
!   const program_point point_before_setjmp = rewind_info.get_point_before_setjmp ();
!   const program_point point_after_setjmp = rewind_info.get_point_after_setjmp ();
  
    const program_point &longjmp_point = get_point ();
  
    /* Verify that the setjmp's call_stack hasn't been popped.  */
!   if (!valid_longjmp_stack_p (longjmp_point, point_after_setjmp))
      {
        ctxt->warn (std::make_unique<stale_jmp_buf> (setjmp_call,
  						   longjmp_call,
! 						   point_before_setjmp));
        return;
      }
  
    gcc_assert (longjmp_point.get_stack_depth ()
! 	      >= point_after_setjmp.get_stack_depth ());
  
    /* Update the state for use by the destination node.  */
  
*************** exploded_node::on_longjmp (exploded_grap
*** 1988,2005 ****
    unsigned prev_num_diagnostics = dm->get_num_diagnostics ();
  
    new_region_model->on_longjmp (longjmp_call, setjmp_call,
! 				setjmp_point.get_stack_depth (), ctxt);
  
    /* Detect leaks in the new state relative to the old state.  */
    program_state::detect_leaks (get_state (), *new_state, nullptr,
  				eg.get_ext_state (), ctxt);
- 
-   program_point next_point
-     = program_point::after_supernode (setjmp_point.get_supernode (),
- 				      setjmp_point.get_call_string ());
- 
    exploded_node *next
!     = eg.get_or_create_node (next_point, *new_state, this);
  
    /* Create custom exploded_edge for a longjmp.  */
    if (next)
--- 1476,1488 ----
    unsigned prev_num_diagnostics = dm->get_num_diagnostics ();
  
    new_region_model->on_longjmp (longjmp_call, setjmp_call,
! 				point_after_setjmp.get_stack_depth (), ctxt);
  
    /* Detect leaks in the new state relative to the old state.  */
    program_state::detect_leaks (get_state (), *new_state, nullptr,
  				eg.get_ext_state (), ctxt);
    exploded_node *next
!     = eg.get_or_create_node (point_after_setjmp, *new_state, this);
  
    /* Create custom exploded_edge for a longjmp.  */
    if (next)
*************** public:
*** 2111,2117 ****
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge) const final override
    {
      const exploded_node *dst_node = eedge.m_dest;
      const program_point &dst_point = dst_node->get_point ();
--- 1594,1601 ----
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge,
! 			   pending_diagnostic &) const final override
    {
      const exploded_node *dst_node = eedge.m_dest;
      const program_point &dst_point = dst_node->get_point ();
*************** public:
*** 2160,2166 ****
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge) const final override
    {
      const exploded_node *src_node = eedge.m_src;
      const program_point &src_point = src_node->get_point ();
--- 1644,1651 ----
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge,
! 			   pending_diagnostic &) const final override
    {
      const exploded_node *src_node = eedge.m_src;
      const program_point &src_point = src_node->get_point ();
*************** exploded_graph::unwind_from_exception (e
*** 2224,2232 ****
  	     Assume we have an out-edge flagged with EH leading to
  	     code for dispatch to catch handlers.  */
  	  const program_point next_point
! 	    = program_point::before_supernode (sedge->m_dest,
! 					       sedge,
! 					       iter_enode->get_point ().get_call_string ());
  	  exploded_node *next_enode
  	    = get_or_create_node (next_point,
  				  iter_enode->get_state (),
--- 1709,1716 ----
  	     Assume we have an out-edge flagged with EH leading to
  	     code for dispatch to catch handlers.  */
  	  const program_point next_point
! 	    (sedge->m_dest,
! 	     iter_enode->get_point ().get_call_string ());
  	  exploded_node *next_enode
  	    = get_or_create_node (next_point,
  				  iter_enode->get_state (),
*************** exploded_graph::unwind_from_exception (e
*** 2278,2285 ****
  	    {
  	      /* Nested function in analysis: unwinding to
  		 the callsite in the analysis (or beyond).  */
! 	      program_point unwound_point
! 		= program_point::after_supernode (cs.get_caller_node (), cs);
  	      unwound_point.pop_from_call_stack ();
  
  	      exploded_node *after_unwind_enode
--- 1762,1768 ----
  	    {
  	      /* Nested function in analysis: unwinding to
  		 the callsite in the analysis (or beyond).  */
! 	      program_point unwound_point (cs.get_return_node_in_caller (), cs);
  	      unwound_point.pop_from_call_stack ();
  
  	      exploded_node *after_unwind_enode
*************** exploded_graph::unwind_from_exception (e
*** 2313,2318 ****
--- 1796,1802 ----
  void
  exploded_node::on_throw (exploded_graph &eg,
  			 const gcall &throw_call,
+ 			 const program_point &after_throw_point,
  			 program_state *new_state,
  			 bool is_rethrow,
  			 region_model_context *ctxt)
*************** exploded_node::on_throw (exploded_graph
*** 2333,2344 ****
        const svalue *tinfo_sval = cd.get_arg_svalue (1);
        type = tinfo_sval->maybe_get_type_from_typeinfo ();
      }
    auto throw_edge_info
      = std::make_unique<throw_custom_edge> (cd, type, is_rethrow);
    throw_edge_info->update_model (model, nullptr, ctxt);
  
-   program_point after_throw_point = get_point ().get_next ();
- 
    exploded_node *after_throw_enode
      = eg.get_or_create_node (after_throw_point, *new_state, this,
  			     /* Don't add to worklist; we process
--- 1817,1827 ----
        const svalue *tinfo_sval = cd.get_arg_svalue (1);
        type = tinfo_sval->maybe_get_type_from_typeinfo ();
      }
+ 
    auto throw_edge_info
      = std::make_unique<throw_custom_edge> (cd, type, is_rethrow);
    throw_edge_info->update_model (model, nullptr, ctxt);
  
    exploded_node *after_throw_enode
      = eg.get_or_create_node (after_throw_point, *new_state, this,
  			     /* Don't add to worklist; we process
*************** exploded_node::on_throw (exploded_graph
*** 2355,2376 ****
    eg.unwind_from_exception (*after_throw_enode, &throw_call, ctxt);
  }
  
- /* Handle a gimple "resx" statement by adding eedges and enode.
-    that unwind to the next eh_dispatch statement, if any.  Only
-    the final enode is added to the worklist.  */
- 
- void
- exploded_node::on_resx (exploded_graph &eg,
- 			const gresx &/*resx*/,
- 			program_state */*new_state*/,
- 			region_model_context *ctxt)
- {
-   eg.unwind_from_exception (*this,
- 			    nullptr,
- 			    ctxt);
- }
- 
- 
  /* Subroutine of exploded_graph::process_node for finding the successors
     of the supernode for a function exit basic block.
  
--- 1838,1843 ----
*************** exploded_node::detect_leaks (exploded_gr
*** 2382,2388 ****
  {
    LOG_FUNC_1 (eg.get_logger (), "EN: %i", m_index);
  
!   gcc_assert (get_point ().get_supernode ()->return_p ());
  
    /* If we're not a "top-level" function, do nothing; pop_frame
       will be called when handling the return superedge.  */
--- 1849,1855 ----
  {
    LOG_FUNC_1 (eg.get_logger (), "EN: %i", m_index);
  
!   gcc_assert (get_point ().get_supernode ()->exit_p ());
  
    /* If we're not a "top-level" function, do nothing; pop_frame
       will be called when handling the return superedge.  */
*************** exploded_node::detect_leaks (exploded_gr
*** 2403,2409 ****
    uncertainty_t uncertainty;
    impl_region_model_context ctxt (eg, this,
  				  &old_state, &new_state, &uncertainty, nullptr,
! 				  get_stmt ());
    const svalue *result = nullptr;
    new_state.m_region_model->pop_frame (nullptr, &result, &ctxt, nullptr);
    program_state::detect_leaks (old_state, new_state, result,
--- 1870,1876 ----
    uncertainty_t uncertainty;
    impl_region_model_context ctxt (eg, this,
  				  &old_state, &new_state, &uncertainty, nullptr,
! 				  nullptr);
    const svalue *result = nullptr;
    new_state.m_region_model->pop_frame (nullptr, &result, &ctxt, nullptr);
    program_state::detect_leaks (old_state, new_state, result,
*************** exploded_node::dump_succs_and_preds (FIL
*** 2437,2492 ****
    }
  }
  
! /* class dynamic_call_info_t : public custom_edge_info.  */
  
! /* Implementation of custom_edge_info::update_model vfunc
!    for dynamic_call_info_t.
  
!    Update state for a dynamically discovered call (or return), by pushing
!    or popping the a frame for the appropriate function.  */
  
  bool
! dynamic_call_info_t::update_model (region_model *model,
! 				   const exploded_edge *eedge,
! 				   region_model_context *ctxt) const
  {
!   gcc_assert (eedge);
!   if (m_is_returning_call)
!     model->update_for_return_gcall (m_dynamic_call, ctxt);
!   else
!     {
!       function *callee = eedge->m_dest->get_function ();
!       model->update_for_gcall (m_dynamic_call, ctxt, callee);
!     }
    return true;
  }
  
! /* Implementation of custom_edge_info::add_events_to_path vfunc
!    for dynamic_call_info_t.  */
  
  void
! dynamic_call_info_t::add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge) const
  {
!   const exploded_node *src_node = eedge.m_src;
!   const program_point &src_point = src_node->get_point ();
!   const int src_stack_depth = src_point.get_stack_depth ();
!   const exploded_node *dest_node = eedge.m_dest;
!   const program_point &dest_point = dest_node->get_point ();
!   const int dest_stack_depth = dest_point.get_stack_depth ();
  
!   if (m_is_returning_call)
!     emission_path->add_event
!       (std::make_unique<return_event> (eedge,
! 				       event_loc_info (m_dynamic_call.location,
! 						       dest_point.get_fndecl (),
! 						       dest_stack_depth)));
!   else
!     emission_path->add_event
!       (std::make_unique<call_event> (eedge,
! 				     event_loc_info (m_dynamic_call.location,
! 						     src_point.get_fndecl (),
! 						     src_stack_depth)));
  }
  
  /* class rewind_info_t : public custom_edge_info.  */
--- 1904,1995 ----
    }
  }
  
! // class interprocedural_call : public custom_edge_info
  
! void
! interprocedural_call::print (pretty_printer *pp) const
! {
!   pp_string (pp, "call to ");
!   pp_gimple_stmt_1 (pp, &m_call_stmt, 0, (dump_flags_t)0);
! }
  
! void
! interprocedural_call::get_dot_attrs (const char *&/*out_style*/,
! 				     const char *&out_color) const
! {
!   out_color = "red";
! }
  
  bool
! interprocedural_call::update_state (program_state *state,
! 				    const exploded_edge *eedge,
! 				    region_model_context *ctxt) const
  {
!   return update_model (state->m_region_model, eedge, ctxt);
! }
! 
! bool
! interprocedural_call::update_model (region_model *model,
! 				    const exploded_edge */*eedge*/,
! 				    region_model_context *ctxt) const
! {
!   model->update_for_gcall (m_call_stmt, ctxt, &m_callee_fun);
    return true;
  }
  
! void
! interprocedural_call::add_events_to_path (checker_path *emission_path,
! 					  const exploded_edge &eedge,
! 					  pending_diagnostic &pd) const
! {
!   pd.add_call_event (eedge, m_call_stmt, *emission_path);
! }
! 
! // class interprocedural_return : public custom_edge_info
  
  void
! interprocedural_return::print (pretty_printer *pp) const
  {
!   pp_string (pp, "return from ");
!   pp_gimple_stmt_1 (pp, &m_call_stmt, 0, (dump_flags_t)0);
! }
  
! void
! interprocedural_return::get_dot_attrs (const char *&/*out_style*/,
! 				       const char *&out_color) const
! {
!   out_color = "green";
! }
! 
! bool
! interprocedural_return::update_state (program_state *state,
! 				      const exploded_edge *eedge,
! 				      region_model_context *ctxt) const
! {
!   return update_model (state->m_region_model, eedge, ctxt);
! }
! 
! bool
! interprocedural_return::update_model (region_model *model,
! 				      const exploded_edge */*eedge*/,
! 				      region_model_context *ctxt) const
! {
!   model->update_for_return_gcall (m_call_stmt, ctxt);
!   return true;
! }
! 
! void
! interprocedural_return::add_events_to_path (checker_path *emission_path,
! 					    const exploded_edge &eedge,
! 					    pending_diagnostic &) const
! {
!   const program_point &dst_point = eedge.m_dest->get_point ();
!   emission_path->add_event
!     (std::make_unique<return_event>
!        (eedge,
! 	event_loc_info (m_call_stmt.location,
! 			dst_point.get_fndecl (),
! 			dst_point.get_stack_depth ())));
  }
  
  /* class rewind_info_t : public custom_edge_info.  */
*************** rewind_info_t::update_model (region_mode
*** 2521,2527 ****
  
  void
  rewind_info_t::add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge) const
  {
    const exploded_node *src_node = eedge.m_src;
    const program_point &src_point = src_node->get_point ();
--- 2024,2031 ----
  
  void
  rewind_info_t::add_events_to_path (checker_path *emission_path,
! 				   const exploded_edge &eedge,
! 				   pending_diagnostic &) const
  {
    const exploded_node *src_node = eedge.m_src;
    const program_point &src_point = src_node->get_point ();
*************** exploded_edge::dump_dot_label (pretty_pr
*** 2585,2618 ****
    const char *constraint = "true";
  
    if (m_sedge)
-     switch (m_sedge->m_kind)
-       {
-       default:
- 	gcc_unreachable ();
-       case SUPEREDGE_CFG_EDGE:
- 	break;
-       case SUPEREDGE_CALL:
- 	color = "red";
- 	//constraint = "false";
- 	break;
-       case SUPEREDGE_RETURN:
- 	color = "green";
- 	//constraint = "false";
- 	break;
-       case SUPEREDGE_INTRAPROCEDURAL_CALL:
- 	style = "\"dotted\"";
- 	break;
-       }
-   if (m_custom_info)
      {
!       color = "red";
!       style = "\"dotted\"";
      }
  
    pp_printf (pp,
  	     (" [style=%s, color=%s, weight=%d, constraint=%s,"
  	      " headlabel=\""),
  	     style, color, weight, constraint);
  
    if (m_sedge)
      m_sedge->dump_label_to_pp (pp, false);
--- 2089,2108 ----
    const char *constraint = "true";
  
    if (m_sedge)
      {
!       if (m_sedge->get_op ())
! 	style = "\"solid\"";
!       else
! 	style = "\"dotted\"";
      }
+   if (m_custom_info)
+     m_custom_info->get_dot_attrs (style, color);
  
    pp_printf (pp,
  	     (" [style=%s, color=%s, weight=%d, constraint=%s,"
  	      " headlabel=\""),
  	     style, color, weight, constraint);
+   pp_flush (pp);
  
    if (m_sedge)
      m_sedge->dump_label_to_pp (pp, false);
*************** exploded_edge::dump_dot_label (pretty_pr
*** 2622,2628 ****
    pp_printf (pp, "%s",
  	     could_do_work_p () ? "(could do work)" : "DOES NO WORK");
  
!   //pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/false);
  
    pp_printf (pp, "\"];\n");
  }
--- 2112,2118 ----
    pp_printf (pp, "%s",
  	     could_do_work_p () ? "(could do work)" : "DOES NO WORK");
  
!   pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/false);
  
    pp_printf (pp, "\"];\n");
  }
*************** exploded_edge::to_json () const
*** 2651,2667 ****
    return eedge_obj;
  }
  
  /* struct stats.  */
  
  /* stats' ctor.  */
  
  stats::stats (int num_supernodes)
! : m_node_reuse_count (0),
    m_node_reuse_after_merge_count (0),
    m_num_supernodes (num_supernodes)
  {
-   for (int i = 0; i < NUM_POINT_KINDS; i++)
-     m_num_nodes[i] = 0;
  }
  
  /* Log these stats in multiline form to LOGGER.  */
--- 2141,2173 ----
    return eedge_obj;
  }
  
+ const gimple *
+ exploded_edge::maybe_get_stmt () const
+ {
+   auto op = maybe_get_op ();
+   if (!op)
+     return nullptr;
+   return op->maybe_get_stmt ();
+ }
+ 
+ const operation *
+ exploded_edge::maybe_get_op () const
+ {
+   if (!m_sedge)
+     return nullptr;
+   return m_sedge->get_op ();
+ }
+ 
  /* struct stats.  */
  
  /* stats' ctor.  */
  
  stats::stats (int num_supernodes)
! : m_num_nodes (0),
!   m_node_reuse_count (0),
    m_node_reuse_after_merge_count (0),
    m_num_supernodes (num_supernodes)
  {
  }
  
  /* Log these stats in multiline form to LOGGER.  */
*************** void
*** 2670,2680 ****
  stats::log (logger *logger) const
  {
    gcc_assert (logger);
!   for (int i = 0; i < NUM_POINT_KINDS; i++)
!     if (m_num_nodes[i] > 0)
!       logger->log ("m_num_nodes[%s]: %i",
! 		   point_kind_to_string (static_cast <enum point_kind> (i)),
! 		   m_num_nodes[i]);
    logger->log ("m_node_reuse_count: %i", m_node_reuse_count);
    logger->log ("m_node_reuse_after_merge_count: %i",
  	       m_node_reuse_after_merge_count);
--- 2176,2182 ----
  stats::log (logger *logger) const
  {
    gcc_assert (logger);
!   logger->log ("m_num_nodes: %i", m_num_nodes);
    logger->log ("m_node_reuse_count: %i", m_node_reuse_count);
    logger->log ("m_node_reuse_after_merge_count: %i",
  	       m_node_reuse_after_merge_count);
*************** stats::log (logger *logger) const
*** 2685,2702 ****
  void
  stats::dump (FILE *out) const
  {
!   for (int i = 0; i < NUM_POINT_KINDS; i++)
!     if (m_num_nodes[i] > 0)
!       fprintf (out, "m_num_nodes[%s]: %i\n",
! 	       point_kind_to_string (static_cast <enum point_kind> (i)),
! 	       m_num_nodes[i]);
    fprintf (out, "m_node_reuse_count: %i\n", m_node_reuse_count);
    fprintf (out, "m_node_reuse_after_merge_count: %i\n",
  	   m_node_reuse_after_merge_count);
  
    if (m_num_supernodes > 0)
!     fprintf (out, "PK_AFTER_SUPERNODE nodes per supernode: %.2f\n",
! 	     (float)m_num_nodes[PK_AFTER_SUPERNODE] / (float)m_num_supernodes);
  }
  
  /* Return the total number of enodes recorded within this object.  */
--- 2187,2200 ----
  void
  stats::dump (FILE *out) const
  {
!   fprintf (out, "m_num_nodes: %i\n", m_num_nodes);
    fprintf (out, "m_node_reuse_count: %i\n", m_node_reuse_count);
    fprintf (out, "m_node_reuse_after_merge_count: %i\n",
  	   m_node_reuse_after_merge_count);
  
    if (m_num_supernodes > 0)
!     fprintf (out, "enodes per supernode: %.2f\n",
! 	     (float)m_num_nodes / (float)m_num_supernodes);
  }
  
  /* Return the total number of enodes recorded within this object.  */
*************** stats::dump (FILE *out) const
*** 2704,2713 ****
  int
  stats::get_total_enodes () const
  {
!   int result = 0;
!   for (int i = 0; i < NUM_POINT_KINDS; i++)
!     result += m_num_nodes[i];
!   return result;
  }
  
  /* struct per_function_data.  */
--- 2202,2208 ----
  int
  stats::get_total_enodes () const
  {
!   return m_num_nodes;
  }
  
  /* struct per_function_data.  */
*************** per_function_data::add_call_summary (exp
*** 2728,2744 ****
  
  strongly_connected_components::
  strongly_connected_components (const supergraph &sg, logger *logger)
! : m_sg (sg), m_per_node (m_sg.num_nodes ())
  {
    LOG_SCOPE (logger);
    auto_timevar tv (TV_ANALYZER_SCC);
  
!   for (int i = 0; i < m_sg.num_nodes (); i++)
      m_per_node.quick_push (per_node_data ());
  
!   for (int i = 0; i < m_sg.num_nodes (); i++)
!     if (m_per_node[i].m_index == -1)
!       strong_connect (i);
  
    if (0)
      dump ();
--- 2223,2239 ----
  
  strongly_connected_components::
  strongly_connected_components (const supergraph &sg, logger *logger)
! : m_sg (sg), m_per_node (m_sg.m_nodes.length ())
  {
    LOG_SCOPE (logger);
    auto_timevar tv (TV_ANALYZER_SCC);
  
!   for (int i = 0; i < m_sg.m_nodes.length (); i++)
      m_per_node.quick_push (per_node_data ());
  
!   for (auto snode : m_sg.m_nodes)
!     if (m_per_node[snode->m_id].m_id == -1)
!       strong_connect (snode->m_id, logger);
  
    if (0)
      dump ();
*************** strongly_connected_components (const sup
*** 2749,2759 ****
  DEBUG_FUNCTION void
  strongly_connected_components::dump () const
  {
!   for (int i = 0; i < m_sg.num_nodes (); i++)
      {
        const per_node_data &v = m_per_node[i];
        fprintf (stderr, "SN %i: index: %i lowlink: %i on_stack: %i\n",
! 	       i, v.m_index, v.m_lowlink, v.m_on_stack);
      }
  }
  
--- 2244,2265 ----
  DEBUG_FUNCTION void
  strongly_connected_components::dump () const
  {
!   fprintf (stderr, "Stack: [");
!   bool first = true;
!   for (auto i : m_stack)
!     {
!       if (first)
! 	first = false;
!       else
! 	fprintf (stderr, ", ");
!       fprintf (stderr, "%i", i);
!     }
!   fprintf (stderr, "]\n");
!   for (int i = 0; i < m_sg.m_nodes.length (); i++)
      {
        const per_node_data &v = m_per_node[i];
        fprintf (stderr, "SN %i: index: %i lowlink: %i on_stack: %i\n",
! 	       i, v.m_id, v.m_lowlink, v.m_on_stack);
      }
  }
  
*************** std::unique_ptr<json::array>
*** 2763,2769 ****
  strongly_connected_components::to_json () const
  {
    auto scc_arr = std::make_unique<json::array> ();
!   for (int i = 0; i < m_sg.num_nodes (); i++)
      scc_arr->append (std::make_unique<json::integer_number> (get_scc_id (i)));
    return scc_arr;
  }
--- 2269,2275 ----
  strongly_connected_components::to_json () const
  {
    auto scc_arr = std::make_unique<json::array> ();
!   for (int i = 0; i < m_sg.m_nodes.length (); i++)
      scc_arr->append (std::make_unique<json::integer_number> (get_scc_id (i)));
    return scc_arr;
  }
*************** strongly_connected_components::to_json (
*** 2772,2803 ****
     SCC algorithm.  */
  
  void
! strongly_connected_components::strong_connect (unsigned index)
  {
!   supernode *v_snode = m_sg.get_node_by_index (index);
  
    /* Set the depth index for v to the smallest unused index.  */
!   per_node_data *v = &m_per_node[index];
!   v->m_index = index;
!   v->m_lowlink = index;
!   m_stack.safe_push (index);
    v->m_on_stack = true;
!   index++;
  
    /* Consider successors of v.  */
    unsigned i;
    superedge *sedge;
    FOR_EACH_VEC_ELT (v_snode->m_succs, i, sedge)
      {
-       if (sedge->get_kind () != SUPEREDGE_CFG_EDGE
- 	  && sedge->get_kind () != SUPEREDGE_INTRAPROCEDURAL_CALL)
- 	continue;
        supernode *w_snode = sedge->m_dest;
!       per_node_data *w = &m_per_node[w_snode->m_index];
!       if (w->m_index == -1)
  	{
  	  /* Successor w has not yet been visited; recurse on it.  */
! 	  strong_connect (w_snode->m_index);
  	  v->m_lowlink = MIN (v->m_lowlink, w->m_lowlink);
  	}
        else if (w->m_on_stack)
--- 2278,2309 ----
     SCC algorithm.  */
  
  void
! strongly_connected_components::strong_connect (unsigned id,
! 					       logger *logger)
  {
!   supernode *v_snode = m_sg.m_nodes[id];
!   if (!v_snode)
!     return;
  
    /* Set the depth index for v to the smallest unused index.  */
!   per_node_data *v = &m_per_node[id];
!   v->m_id = id;
!   v->m_lowlink = id;
!   m_stack.safe_push (id);
    v->m_on_stack = true;
!   id++;
  
    /* Consider successors of v.  */
    unsigned i;
    superedge *sedge;
    FOR_EACH_VEC_ELT (v_snode->m_succs, i, sedge)
      {
        supernode *w_snode = sedge->m_dest;
!       per_node_data *w = &m_per_node[w_snode->m_id];
!       if (w->m_id == -1)
  	{
  	  /* Successor w has not yet been visited; recurse on it.  */
! 	  strong_connect (w_snode->m_id, logger);
  	  v->m_lowlink = MIN (v->m_lowlink, w->m_lowlink);
  	}
        else if (w->m_on_stack)
*************** strongly_connected_components::strong_co
*** 2805,2823 ****
  	  /* Successor w is in stack S and hence in the current SCC
  	     If w is not on stack, then (v, w) is a cross-edge in the DFS
  	     tree and must be ignored.  */
! 	  v->m_lowlink = MIN (v->m_lowlink, w->m_index);
  	}
      }
  
    /* If v is a root node, pop the stack and generate an SCC.  */
  
!   if (v->m_lowlink == v->m_index)
      {
        per_node_data *w;
        do {
! 	int idx = m_stack.pop ();
! 	w = &m_per_node[idx];
  	w->m_on_stack = false;
        } while (w != v);
      }
  }
--- 2311,2333 ----
  	  /* Successor w is in stack S and hence in the current SCC
  	     If w is not on stack, then (v, w) is a cross-edge in the DFS
  	     tree and must be ignored.  */
! 	  v->m_lowlink = MIN (v->m_lowlink, w->m_id);
  	}
      }
  
    /* If v is a root node, pop the stack and generate an SCC.  */
  
!   if (v->m_lowlink == v->m_id)
      {
+       if (logger)
+ 	logger->log ("got SCC root node: SN %i", v->m_id);
        per_node_data *w;
        do {
! 	int id = m_stack.pop ();
! 	w = &m_per_node[id];
  	w->m_on_stack = false;
+ 	if (logger)
+ 	  logger->log ("  popping SN %i", w->m_id);
        } while (w != v);
      }
  }
*************** worklist::key_t::cmp (const worklist::ke
*** 2940,2957 ****
      return 1;
    /* Neither are nullptr.  */
    gcc_assert (snode_a && snode_b);
!   if (snode_a->m_index != snode_b->m_index)
!     return snode_a->m_index - snode_b->m_index;
  
    gcc_assert (snode_a == snode_b);
  
-   /* Order within supernode via program point.  */
-   int within_snode_cmp
-     = function_point::cmp_within_supernode (point_a.get_function_point (),
- 					    point_b.get_function_point ());
-   if (within_snode_cmp)
-     return within_snode_cmp;
- 
    /* Otherwise, we ought to have the same program_point.  */
    gcc_assert (point_a == point_b);
  
--- 2450,2462 ----
      return 1;
    /* Neither are nullptr.  */
    gcc_assert (snode_a && snode_b);
!   if (snode_a->m_bb->index != snode_b->m_bb->index)
!     return snode_a->m_bb->index - snode_b->m_bb->index;
!   if (snode_a->m_id != snode_b->m_id)
!     return snode_a->m_id - snode_b->m_id;
  
    gcc_assert (snode_a == snode_b);
  
    /* Otherwise, we ought to have the same program_point.  */
    gcc_assert (point_a == point_b);
  
*************** exploded_graph::exploded_graph (const su
*** 3006,3020 ****
    m_purge_map (purge_map),
    m_plan (plan),
    m_diagnostic_manager (logger, ext_state.get_engine (), verbosity),
!   m_global_stats (m_sg.num_nodes ()),
!   m_functionless_stats (m_sg.num_nodes ()),
!   m_PK_AFTER_SUPERNODE_per_snode (m_sg.num_nodes ())
  {
    m_origin = get_or_create_node
      (program_point::origin (*ext_state.get_model_manager ()),
       program_state (ext_state), nullptr);
-   for (int i = 0; i < m_sg.num_nodes (); i++)
-     m_PK_AFTER_SUPERNODE_per_snode.quick_push (i);
  }
  
  /* exploded_graph's dtor.  */
--- 2511,2522 ----
    m_purge_map (purge_map),
    m_plan (plan),
    m_diagnostic_manager (logger, ext_state.get_engine (), verbosity),
!   m_global_stats (m_sg.m_nodes.length ()),
!   m_functionless_stats (m_sg.m_nodes.length ())
  {
    m_origin = get_or_create_node
      (program_point::origin (*ext_state.get_model_manager ()),
       program_state (ext_state), nullptr);
  }
  
  /* exploded_graph's dtor.  */
*************** public:
*** 3121,3136 ****
      pp_string (pp, "call to tainted_args function");
    };
  
!   bool update_model (region_model *,
! 		     const exploded_edge *,
! 		     region_model_context *) const final override
    {
!     /* No-op.  */
      return true;
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &) const final override
    {
      emission_path->add_event
        (std::make_unique<tainted_args_function_custom_event>
--- 2623,2641 ----
      pp_string (pp, "call to tainted_args function");
    };
  
!   bool update_model (region_model *model,
! 		     const exploded_edge *eedge,
! 		     region_model_context *ctxt) const final override
    {
!     function *fun = eedge->m_dest->get_function ();
!     gcc_assert (fun);
!     model->push_frame (*fun, nullptr, nullptr, ctxt);
      return true;
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &,
! 			   pending_diagnostic &) const final override
    {
      emission_path->add_event
        (std::make_unique<tainted_args_function_custom_event>
*************** exploded_graph::get_or_create_node (cons
*** 3231,3236 ****
--- 2736,2749 ----
        return nullptr;
      }
  
+   if (point.get_call_string ().calc_recursion_depth ()
+       > param_analyzer_max_recursion_depth)
+     {
+       if (logger)
+ 	logger->log ("rejecting node: recursion limit exceeded");
+       return nullptr;
+     }
+ 
    auto_cfun sentinel (point.get_function ());
  
    state.validate (get_ext_state ());
*************** exploded_graph::get_or_create_node (cons
*** 3280,3286 ****
      = get_or_create_per_program_point_data (point);
  
    /* Consider merging state with another enode at this program_point.  */
!   if (flag_analyzer_state_merge)
      {
        exploded_node *existing_enode;
        unsigned i;
--- 2793,2799 ----
      = get_or_create_per_program_point_data (point);
  
    /* Consider merging state with another enode at this program_point.  */
!   if (flag_analyzer_state_merge && point.state_merge_at_p ())
      {
        exploded_node *existing_enode;
        unsigned i;
*************** exploded_graph::get_or_create_node (cons
*** 3355,3367 ****
    /* Update per-program_point data.  */
    per_point_data->m_enodes.safe_push (node);
  
!   const enum point_kind node_pk = node->get_point ().get_kind ();
!   m_global_stats.m_num_nodes[node_pk]++;
!   per_fn_stats->m_num_nodes[node_pk]++;
!   per_cs_stats->m_num_nodes[node_pk]++;
! 
!   if (node_pk == PK_AFTER_SUPERNODE)
!     m_PK_AFTER_SUPERNODE_per_snode[point.get_supernode ()->m_index]++;
  
    if (logger)
      {
--- 2868,2876 ----
    /* Update per-program_point data.  */
    per_point_data->m_enodes.safe_push (node);
  
!   m_global_stats.m_num_nodes++;
!   per_fn_stats->m_num_nodes++;
!   per_cs_stats->m_num_nodes++;
  
    if (logger)
      {
*************** exploded_graph::get_or_create_node (cons
*** 3373,3380 ****
        point.print (pp, f);
        logger->end_log_line ();
        logger->start_log_line ();
!       pp_string (pp, "pruned_state: ");
!       pruned_state.dump_to_pp (m_ext_state, true, false, pp);
        logger->end_log_line ();
      }
  
--- 2882,2889 ----
        point.print (pp, f);
        logger->end_log_line ();
        logger->start_log_line ();
!       pp_string (pp, "state: ");
!       ps.get_state ().dump_to_pp (m_ext_state, true, false, pp);
        logger->end_log_line ();
      }
  
*************** exploded_graph::get_or_create_per_call_s
*** 3443,3449 ****
    if (per_call_string_data **slot = m_per_call_string_data.get (&cs))
      return *slot;
  
!   per_call_string_data *data = new per_call_string_data (cs, m_sg.num_nodes ());
    m_per_call_string_data.put (&data->m_key,
  			      data);
    return data;
--- 2952,2958 ----
    if (per_call_string_data **slot = m_per_call_string_data.get (&cs))
      return *slot;
  
!   per_call_string_data *data = new per_call_string_data (cs, m_sg.m_nodes.length ());
    m_per_call_string_data.put (&data->m_key,
  			      data);
    return data;
*************** public:
*** 3571,3586 ****
      pp_string (pp, "call to tainted field");
    };
  
!   bool update_model (region_model *,
! 		     const exploded_edge *,
  		     region_model_context *) const final override
    {
!     /* No-op.  */
      return true;
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &) const final override
    {
      /* Show the field in the struct declaration, e.g.
         "(1) field 'store' is marked with '__attribute__((tainted_args))'"  */
--- 3080,3097 ----
      pp_string (pp, "call to tainted field");
    };
  
!   bool update_model (region_model *model,
! 		     const exploded_edge *eedge,
  		     region_model_context *) const final override
    {
!     model->push_frame (*eedge->m_dest->get_function (),
! 		       nullptr, nullptr, nullptr);
      return true;
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &,
! 			   pending_diagnostic &) const final override
    {
      /* Show the field in the struct declaration, e.g.
         "(1) field 'store' is marked with '__attribute__((tainted_args))'"  */
*************** exploded_graph::process_worklist ()
*** 3745,3760 ****
      {
        exploded_node *node = m_worklist.take_next ();
        gcc_assert (node->get_status () == exploded_node::status::worklist);
-       gcc_assert (node->m_succs.length () == 0
- 		  || node == m_origin);
  
        if (logger)
  	logger->log ("next to process: EN: %i", node->m_index);
  
!       /* If we have a run of nodes that are before-supernode, try merging and
  	 processing them together, rather than pairwise or individually.  */
!       if (flag_analyzer_state_merge && node != m_origin)
! 	if (maybe_process_run_of_before_supernode_enodes (node))
  	  goto handle_limit;
  
        /* Avoid exponential explosions of nodes by attempting to merge
--- 3256,3270 ----
      {
        exploded_node *node = m_worklist.take_next ();
        gcc_assert (node->get_status () == exploded_node::status::worklist);
  
        if (logger)
  	logger->log ("next to process: EN: %i", node->m_index);
  
!       /* If we have a run of nodes at the same point, try merging and
  	 processing them together, rather than pairwise or individually.  */
!       if (flag_analyzer_state_merge
! 	  && node->get_point ().state_merge_at_p ())
! 	if (maybe_process_run_of_enodes (node))
  	  goto handle_limit;
  
        /* Avoid exponential explosions of nodes by attempting to merge
*************** exploded_graph::process_worklist ()
*** 3765,3773 ****
  	  {
  	    gcc_assert (node_2->get_status ()
  			== exploded_node::status::worklist);
- 	    gcc_assert (node->m_succs.length () == 0);
- 	    gcc_assert (node_2->m_succs.length () == 0);
- 
  	    gcc_assert (node != node_2);
  
  	    if (logger)
--- 3275,3280 ----
*************** exploded_graph::process_worklist ()
*** 3890,3934 ****
      handle_limit:
        /* Impose a hard limit on the number of exploded nodes, to ensure
  	 that the analysis terminates in the face of pathological state
! 	 explosion (or bugs).
! 
! 	 Specifically, the limit is on the number of PK_AFTER_SUPERNODE
! 	 exploded nodes, looking at supernode exit events.
! 
! 	 We use exit rather than entry since there can be multiple
! 	 entry ENs, one per phi; the number of PK_AFTER_SUPERNODE ought
! 	 to be equivalent to the number of supernodes multiplied by the
! 	 number of states.  */
!       const int limit = m_sg.num_nodes () * param_analyzer_bb_explosion_factor;
!       if (m_global_stats.m_num_nodes[PK_AFTER_SUPERNODE] > limit)
! 	{
! 	  if (logger)
! 	    logger->log ("bailing out; too many nodes");
! 	  warning_at (node->get_point ().get_location (),
! 		      OPT_Wanalyzer_too_complex,
! 		      "analysis bailed out early"
! 		      " (%i 'after-snode' enodes; %i enodes)",
! 		      m_global_stats.m_num_nodes[PK_AFTER_SUPERNODE],
! 		      m_nodes.length ());
! 	  return;
! 	}
      }
  }
  
  /* Attempt to process a consecutive run of sufficiently-similar nodes in
!    the worklist at a CFG join-point (having already popped ENODE from the
!    head of the worklist).
  
!    If ENODE's point is of the form (before-supernode, SNODE) and the next
!    nodes in the worklist are a consecutive run of enodes of the same form,
!    for the same supernode as ENODE (but potentially from different in-edges),
     process them all together, setting their status to status::bulk_merged,
     and return true.
     Otherwise, return false, in which case ENODE must be processed in the
     normal way.
  
     When processing them all together, generate successor states based
!    on phi nodes for the appropriate CFG edges, and then attempt to merge
     these states into a minimal set of merged successor states, partitioning
     the inputs by merged successor state.
  
--- 3397,3433 ----
      handle_limit:
        /* Impose a hard limit on the number of exploded nodes, to ensure
  	 that the analysis terminates in the face of pathological state
! 	 explosion (or bugs).  */
!       if (const int limit
! 	    = m_sg.num_nodes () * param_analyzer_bb_explosion_factor)
! 	if (m_global_stats.m_num_nodes > limit)
! 	  {
! 	    if (logger)
! 	      logger->log ("bailing out; too many nodes");
! 	    warning_at (node->get_point ().get_location (),
! 			OPT_Wanalyzer_too_complex,
! 			"analysis bailed out early"
! 			" (%i enodes)",
! 			m_nodes.length ());
! 	    return;
! 	  }
      }
  }
  
  /* Attempt to process a consecutive run of sufficiently-similar nodes in
!    the worklist at a point flagged with state_merge_at_p (having already
!    popped ENODE from the head of the worklist).
  
!    If we have a consecutive run of enodes in the worklist all of which have
!    a single out-edge where all these out-edges are supports_bulk_merge_p and
!    all have the same successor snode and call string, then
     process them all together, setting their status to status::bulk_merged,
     and return true.
     Otherwise, return false, in which case ENODE must be processed in the
     normal way.
  
     When processing them all together, generate successor states based
!    on the edge op update_state_for_bulk_merger, and then attempt to merge
     these states into a minimal set of merged successor states, partitioning
     the inputs by merged successor state.
  
*************** exploded_graph::process_worklist ()
*** 3945,3951 ****
  
  bool
  exploded_graph::
! maybe_process_run_of_before_supernode_enodes (exploded_node *enode)
  {
    /* A struct for tracking per-input state.  */
    struct item
--- 3444,3450 ----
  
  bool
  exploded_graph::
! maybe_process_run_of_enodes (exploded_node *enode)
  {
    /* A struct for tracking per-input state.  */
    struct item
*************** maybe_process_run_of_before_supernode_en
*** 3962,3981 ****
    };
  
    gcc_assert (enode->get_status () == exploded_node::status::worklist);
-   gcc_assert (enode->m_succs.length () == 0);
  
!   const program_point &point = enode->get_point ();
  
!   if (point.get_kind () != PK_BEFORE_SUPERNODE)
      return false;
  
!   const supernode *snode = point.get_supernode ();
  
!   logger * const logger = get_logger ();
!   LOG_SCOPE (logger);
  
!   /* Find a run of enodes in the worklist that are before the same supernode,
!      but potentially from different in-edges.  */
    auto_vec <exploded_node *> enodes;
    enodes.safe_push (enode);
    while (exploded_node *enode_2 = m_worklist.peek_next ())
--- 3461,3486 ----
    };
  
    gcc_assert (enode->get_status () == exploded_node::status::worklist);
  
!   const program_point &src_point = enode->get_point ();
!   const supernode *src_snode = src_point.get_supernode ();
  
!   logger * const logger = get_logger ();
!   LOG_SCOPE (logger);
! 
!   if (src_snode->m_succs.length () != 1)
      return false;
  
!   auto sedge = src_snode->m_succs[0];
  
!   if (!sedge->supports_bulk_merge_p ())
!     return false;
  
!   const supernode *dst_snode = src_snode->m_succs[0]->m_dest;
! 
!   /* Find a run of enodes in the worklist that all have single out-sedges
!      go to the same supernode, all of which are bulk-mergeable (i.e. have
!      a simple single intraprocedural outcome).  */
    auto_vec <exploded_node *> enodes;
    enodes.safe_push (enode);
    while (exploded_node *enode_2 = m_worklist.peek_next ())
*************** maybe_process_run_of_before_supernode_en
*** 3985,4000 ****
        gcc_assert (enode_2->m_succs.length () == 0);
  
        const program_point &point_2 = enode_2->get_point ();
  
!       if (point_2.get_kind () == PK_BEFORE_SUPERNODE
! 	  && point_2.get_supernode () == snode
! 	  && &point_2.get_call_string () == &point.get_call_string ())
! 	{
! 	  enodes.safe_push (enode_2);
! 	  m_worklist.take_next ();
! 	}
!       else
  	break;
      }
  
    /* If the only node is ENODE, then give up.  */
--- 3490,3509 ----
        gcc_assert (enode_2->m_succs.length () == 0);
  
        const program_point &point_2 = enode_2->get_point ();
+       const supernode *src_snode_2 = point_2.get_supernode ();
  
!       if (src_snode_2->m_succs.length () != 1)
  	break;
+       auto sedge_2 = src_snode_2->m_succs[0];
+       if (sedge_2->m_dest != dst_snode)
+ 	break;
+       if (&point_2.get_call_string () != &src_point.get_call_string ())
+ 	break;
+       if (!sedge_2->supports_bulk_merge_p ())
+ 	break;
+ 
+       enodes.safe_push (enode_2);
+       m_worklist.take_next ();
      }
  
    /* If the only node is ENODE, then give up.  */
*************** maybe_process_run_of_before_supernode_en
*** 4002,4013 ****
      return false;
  
    if (logger)
!     logger->log ("got run of %i enodes for SN: %i",
! 		 enodes.length (), snode->m_index);
  
!   /* All of these enodes have a shared successor point (even if they
!      were for different in-edges).  */
!   program_point next_point (point.get_next ());
  
    /* Calculate the successor state for each enode in enodes.  */
    auto_delete_vec<item> items (enodes.length ());
--- 3511,3523 ----
      return false;
  
    if (logger)
!     logger->log ("got run of %i bulk-mergable enodes going to SN: %i",
! 		 enodes.length (), dst_snode->m_id);
  
!   /* All of these enodes have a shared intraprocedural successor point
!      (even if they were for different in-edges).  */
!   program_point next_point (sedge->m_dest,
! 			    src_point.get_call_string ());
  
    /* Calculate the successor state for each enode in enodes.  */
    auto_delete_vec<item> items (enodes.length ());
*************** maybe_process_run_of_before_supernode_en
*** 4020,4038 ****
        const program_state &state = iter_enode->get_state ();
        program_state *next_state = &it->m_processed_state;
        next_state->validate (m_ext_state);
!       const program_point &iter_point = iter_enode->get_point ();
!       if (const superedge *iter_sedge = iter_point.get_from_edge ())
! 	{
! 	  uncertainty_t uncertainty;
! 	  impl_region_model_context ctxt (*this, iter_enode,
! 					  &state, next_state,
! 					  &uncertainty, nullptr, nullptr);
! 	  const cfg_superedge *last_cfg_superedge
! 	    = iter_sedge->dyn_cast_cfg_superedge ();
! 	  if (last_cfg_superedge)
! 	    next_state->m_region_model->update_for_phis
! 	      (snode, last_cfg_superedge, &ctxt);
! 	}
        next_state->validate (m_ext_state);
      }
  
--- 3530,3539 ----
        const program_state &state = iter_enode->get_state ();
        program_state *next_state = &it->m_processed_state;
        next_state->validate (m_ext_state);
!       gcc_assert (iter_enode->get_supernode ()->m_succs.length () == 1);
!       const superedge *iter_sedge = iter_enode->get_supernode ()->m_succs[0];
!       if (auto op = iter_sedge->get_op ())
! 	op->update_state_for_bulk_merger (state, *next_state);
        next_state->validate (m_ext_state);
      }
  
*************** maybe_process_run_of_before_supernode_en
*** 4106,4380 ****
      {
        exploded_node *next = next_enodes[it->m_merger_idx];
        if (next)
! 	add_edge (it->m_input_enode, next, nullptr,
! 		  false); /* no "work" is done during merger.  */
        it->m_input_enode->set_status (exploded_node::status::bulk_merged);
      }
  
    if (logger)
      logger->log ("merged %i in-enodes into %i out-enode(s) at SN: %i",
! 		 items.length (), merged_states.length (), snode->m_index);
  
    return true;
  }
  
- /* Return true if STMT must appear at the start of its exploded node, and
-    thus we can't consolidate its effects within a run of other statements,
-    where PREV_STMT was the previous statement.  */
- 
- static bool
- stmt_requires_new_enode_p (const gimple *stmt,
- 			   const gimple *prev_stmt)
- {
-   if (const gcall *call_stmt = dyn_cast <const gcall *> (stmt))
-     {
-       const gcall &call = *call_stmt;
-       /* Stop consolidating at calls to
- 	 "__analyzer_dump_exploded_nodes", so they always appear at the
- 	 start of an exploded_node.  */
-       if (is_special_named_call_p (call, "__analyzer_dump_exploded_nodes",
- 				   1))
- 	return true;
- 
-       /* sm-signal.cc injects an additional custom eedge at "signal" calls
- 	 from the registration enode to the handler enode, separate from the
- 	 regular next state, which defeats the "detect state change" logic
- 	 in process_node.  Work around this via special-casing, to ensure
- 	 we split the enode immediately before any "signal" call.  */
-       if (is_special_named_call_p (call, "signal", 2, true))
- 	return true;
-     }
- 
-   /* If we had a PREV_STMT with an unknown location, and this stmt
-      has a known location, then if a state change happens here, it
-      could be consolidated into PREV_STMT, giving us an event with
-      no location.  Ensure that STMT gets its own exploded_node to
-      avoid this.  */
-   if (get_pure_location (prev_stmt->location) == UNKNOWN_LOCATION
-       && get_pure_location (stmt->location) != UNKNOWN_LOCATION)
-     return true;
- 
-   return false;
- }
- 
- /* Return true if OLD_STATE and NEW_STATE are sufficiently different that
-    we should split enodes and create an exploded_edge separating them
-    (which makes it easier to identify state changes of intereset when
-    constructing checker_paths).  */
- 
- static bool
- state_change_requires_new_enode_p (const program_state &old_state,
- 				   const program_state &new_state)
- {
-   /* Changes in dynamic extents signify creations of heap/alloca regions
-      and resizings of heap regions; likely to be of interest in
-      diagnostic paths.  */
-   if (old_state.m_region_model->get_dynamic_extents ()
-       != new_state.m_region_model->get_dynamic_extents ())
-     return true;
- 
-   /* Changes in sm-state are of interest.  */
-   int sm_idx;
-   sm_state_map *smap;
-   FOR_EACH_VEC_ELT (old_state.m_checker_states, sm_idx, smap)
-     {
-       const sm_state_map *old_smap = old_state.m_checker_states[sm_idx];
-       const sm_state_map *new_smap = new_state.m_checker_states[sm_idx];
-       if (*old_smap != *new_smap)
- 	return true;
-     }
- 
-   return false;
- }
- 
- /* Create enodes and eedges for the function calls that doesn't have an
-    underlying call superedge.
- 
-    Such case occurs when GCC's middle end didn't know which function to
-    call but the analyzer does (with the help of current state).
- 
-    Some example such calls are dynamically dispatched calls to virtual
-    functions or calls that happen via function pointer.  */
- 
- bool
- exploded_graph::maybe_create_dynamic_call (const gcall &call,
- 					   tree fn_decl,
- 					   exploded_node *node,
- 					   program_state next_state,
- 					   program_point &next_point,
- 					   uncertainty_t *uncertainty,
- 					   logger *logger)
- {
-   LOG_FUNC (logger);
- 
-   const program_point *this_point = &node->get_point ();
-   function *fun = DECL_STRUCT_FUNCTION (fn_decl);
-   if (fun)
-     {
-       const supergraph &sg = this->get_supergraph ();
-       supernode *sn_entry = sg.get_node_for_function_entry (*fun);
-       supernode *sn_exit = sg.get_node_for_function_exit (*fun);
- 
-       program_point new_point
- 	= program_point::before_supernode (sn_entry,
- 					   nullptr,
- 					   this_point->get_call_string ());
- 
-       new_point.push_to_call_stack (sn_exit,
- 				    next_point.get_supernode());
- 
-       /* Impose a maximum recursion depth and don't analyze paths
- 	 that exceed it further.
- 	 This is something of a blunt workaround, but it only
- 	 applies to recursion (and mutual recursion), not to
- 	 general call stacks.  */
-       if (new_point.get_call_string ().calc_recursion_depth ()
- 	  > param_analyzer_max_recursion_depth)
-       {
- 	if (logger)
- 	  logger->log ("rejecting call edge: recursion limit exceeded");
- 	return false;
-       }
- 
-       next_state.push_call (*this, node, call, uncertainty);
- 
-       if (next_state.m_valid)
- 	{
- 	  if (logger)
- 	    logger->log ("Discovered call to %s [SN: %i -> SN: %i]",
- 			 function_name(fun),
- 			 this_point->get_supernode ()->m_index,
- 			 sn_entry->m_index);
- 
- 	  exploded_node *enode = get_or_create_node (new_point,
- 						     next_state,
- 						     node);
- 	  if (enode)
- 	    add_edge (node,enode, nullptr,
- 		      false, /* No work is done by the call itself.  */
- 		      std::make_unique<dynamic_call_info_t> (call));
- 	  return true;
- 	}
-     }
-   return false;
- }
- 
- /* Subclass of path_context for use within exploded_graph::process_node,
-    so that we can split states e.g. at "realloc" calls.  */
- 
- class impl_path_context : public path_context
- {
- public:
-   impl_path_context (const program_state *cur_state,
- 		     logger *logger)
-   : m_cur_state (cur_state),
-     m_logger (logger),
-     m_terminate_path (false)
-   {
-   }
- 
-   bool bifurcation_p () const
-   {
-     return m_custom_eedge_infos.length () > 0;
-   }
- 
-   const program_state &get_state_at_bifurcation () const
-   {
-     gcc_assert (m_state_at_bifurcation);
-     return *m_state_at_bifurcation;
-   }
- 
-   void
-   bifurcate (std::unique_ptr<custom_edge_info> info) final override
-   {
-     if (m_logger)
-       m_logger->log ("bifurcating path");
- 
-     if (m_state_at_bifurcation)
-       /* Verify that the state at bifurcation is consistent when we
- 	 split into multiple out-edges.  */
-       gcc_assert (*m_state_at_bifurcation == *m_cur_state);
-     else
-       /* Take a copy of the cur_state at the moment when bifurcation
- 	 happens.  */
-       m_state_at_bifurcation
- 	= std::unique_ptr<program_state> (new program_state (*m_cur_state));
- 
-     /* Take ownership of INFO.  */
-     m_custom_eedge_infos.safe_push (info.release ());
-   }
- 
-   void terminate_path () final override
-   {
-     if (m_logger)
-       m_logger->log ("terminating path");
-     m_terminate_path = true;
-   }
- 
-   bool terminate_path_p () const final override
-   {
-     return m_terminate_path;
-   }
- 
-   const vec<custom_edge_info *> & get_custom_eedge_infos ()
-   {
-     return m_custom_eedge_infos;
-   }
- 
- private:
-   const program_state *m_cur_state;
- 
-   logger *m_logger;
- 
-   /* Lazily-created copy of the state before the split.  */
-   std::unique_ptr<program_state> m_state_at_bifurcation;
- 
-   auto_vec <custom_edge_info *> m_custom_eedge_infos;
- 
-   bool m_terminate_path;
- };
- 
- /* A subclass of pending_diagnostic for complaining about jumps through NULL
-    function pointers.  */
- 
- class jump_through_null : public pending_diagnostic_subclass<jump_through_null>
- {
- public:
-   jump_through_null (const gcall &call)
-   : m_call (call)
-   {}
- 
-   const char *get_kind () const final override
-   {
-     return "jump_through_null";
-   }
- 
-   bool operator== (const jump_through_null &other) const
-   {
-     return &m_call == &other.m_call;
-   }
- 
-   int get_controlling_option () const final override
-   {
-     return OPT_Wanalyzer_jump_through_null;
-   }
- 
-   bool emit (diagnostic_emission_context &ctxt) final override
-   {
-     return ctxt.warn ("jump through null pointer");
-   }
- 
-   bool describe_final_event (pretty_printer &pp,
- 			     const evdesc::final_event &) final override
-   {
-     pp_string (&pp, "jump through null pointer here");
-     return true;
-   }
- 
- private:
-   const gcall &m_call;
- };
- 
  /* The core of exploded_graph::process_worklist (the main analysis loop),
     handling one node in the worklist.
  
--- 3607,3630 ----
      {
        exploded_node *next = next_enodes[it->m_merger_idx];
        if (next)
! 	{
! 	  gcc_assert (it->m_input_enode->get_supernode ()->m_succs.length ()
! 		      == 1);
! 	  const superedge *sedge
! 	    = it->m_input_enode->get_supernode ()->m_succs[0];
! 	  add_edge (it->m_input_enode, next, sedge,
! 		    false); /* no "work" is done during merger.  */
! 	}
        it->m_input_enode->set_status (exploded_node::status::bulk_merged);
      }
  
    if (logger)
      logger->log ("merged %i in-enodes into %i out-enode(s) at SN: %i",
! 		 items.length (), merged_states.length (), dst_snode->m_id);
  
    return true;
  }
  
  /* The core of exploded_graph::process_worklist (the main analysis loop),
     handling one node in the worklist.
  
*************** exploded_graph::process_node (exploded_n
*** 4396,4404 ****
    /* Update cfun and input_location in case of an ICE: make it easier to
       track down which source construct we're failing to handle.  */
    auto_cfun sentinel (node->get_function ());
!   const gimple *stmt = point.get_stmt ();
!   if (stmt)
!     input_location = stmt->location;
  
    const program_state &state = node->get_state ();
    if (logger)
--- 3646,3653 ----
    /* Update cfun and input_location in case of an ICE: make it easier to
       track down which source construct we're failing to handle.  */
    auto_cfun sentinel (node->get_function ());
! 
!   input_location = node->get_location ();
  
    const program_state &state = node->get_state ();
    if (logger)
*************** exploded_graph::process_node (exploded_n
*** 4412,4818 ****
        logger->end_log_line ();
      }
  
!   switch (point.get_kind ())
!     {
!     default:
!       gcc_unreachable ();
!     case PK_ORIGIN:
!       /* This node exists to simplify finding the shortest path
! 	 to an exploded_node.  */
!       break;
! 
!     case PK_BEFORE_SUPERNODE:
!       {
! 	program_state next_state (state);
! 	uncertainty_t uncertainty;
! 
! 	if (point.get_from_edge ())
! 	  {
! 	    impl_region_model_context ctxt (*this, node,
! 					    &state, &next_state,
! 					    &uncertainty, nullptr, nullptr);
! 	    const cfg_superedge *last_cfg_superedge
! 	      = point.get_from_edge ()->dyn_cast_cfg_superedge ();
! 	    if (last_cfg_superedge)
! 	      next_state.m_region_model->update_for_phis
! 		(node->get_supernode (),
! 		 last_cfg_superedge,
! 		 &ctxt);
! 	    program_state::detect_leaks (state, next_state, nullptr,
! 					 get_ext_state (), &ctxt);
! 	  }
  
! 	program_point next_point (point.get_next ());
! 	exploded_node *next = get_or_create_node (next_point, next_state, node);
! 	if (next)
! 	  add_edge (node, next, nullptr,
! 		    false); /* Assume no work is done at phi nodes.  */
!       }
!       break;
!     case PK_BEFORE_STMT:
!       {
! 	/* Determine the effect of a run of one or more statements
! 	   within one supernode, generating an edge to the program_point
! 	   after the last statement that's processed.
  
! 	   Stop iterating statements and thus consolidating into one enode
! 	   when:
! 	   - reaching the end of the statements in the supernode
! 	   - if an sm-state-change occurs (so that it gets its own
! 	     exploded_node)
! 	   - if "-fanalyzer-fine-grained" is active
! 	   - encountering certain statements must appear at the start of
! 	   their enode (for which stmt_requires_new_enode_p returns true)
  
! 	   Update next_state in-place, to get the result of the one
! 	   or more stmts that are processed.
  
! 	   Split the node in-place if an sm-state-change occurs, so that
! 	   the sm-state-change occurs on an edge where the src enode has
! 	   exactly one stmt, the one that caused the change. */
! 	program_state next_state (state);
  
! 	impl_path_context path_ctxt (&next_state, logger);
  
! 	bool could_have_done_work = false;
! 	uncertainty_t uncertainty;
! 	const supernode *snode = point.get_supernode ();
! 	unsigned stmt_idx;
! 	const gimple *prev_stmt = nullptr;
! 	for (stmt_idx = point.get_stmt_idx ();
! 	     stmt_idx < snode->m_stmts.length ();
! 	     stmt_idx++)
! 	  {
! 	    const gimple *stmt = snode->m_stmts[stmt_idx];
  
! 	    if (stmt_idx > point.get_stmt_idx ())
! 	      if (stmt_requires_new_enode_p (stmt, prev_stmt))
  		{
! 		  stmt_idx--;
! 		  break;
  		}
! 	    prev_stmt = stmt;
! 
! 	    program_state old_state (next_state);
! 
! 	    /* Process the stmt.  */
! 	    exploded_node::on_stmt_flags flags
! 	      = node->on_stmt (*this, snode, stmt, &next_state, &uncertainty,
! 			       &could_have_done_work, &path_ctxt);
! 	    node->m_num_processed_stmts++;
! 
! 	    /* If flags.m_terminate_path, stop analyzing; any nodes/edges
! 	       will have been added by on_stmt (e.g. for handling longjmp).  */
! 	    if (flags.m_terminate_path)
! 	      return;
! 
! 	    if (next_state.m_region_model)
! 	      {
! 		impl_region_model_context ctxt (*this, node,
! 						&old_state, &next_state,
! 						&uncertainty, nullptr, stmt);
! 		program_state::detect_leaks (old_state, next_state, nullptr,
! 					     get_ext_state (), &ctxt);
! 	      }
! 
! 	    unsigned next_idx = stmt_idx + 1;
! 	    program_point next_point
! 	      = (next_idx < point.get_supernode ()->m_stmts.length ()
! 		 ? program_point::before_stmt (point.get_supernode (), next_idx,
! 					       point.get_call_string ())
! 		 : program_point::after_supernode (point.get_supernode (),
! 						   point.get_call_string ()));
! 	    next_state = next_state.prune_for_point (*this, next_point, node,
! 						     &uncertainty);
! 
! 	    if (flag_analyzer_fine_grained
! 		|| state_change_requires_new_enode_p (old_state, next_state)
! 		|| path_ctxt.bifurcation_p ()
! 		|| path_ctxt.terminate_path_p ())
! 	      {
! 		program_point split_point
! 		  = program_point::before_stmt (point.get_supernode (),
! 						stmt_idx,
! 						point.get_call_string ());
! 		if (split_point != node->get_point ())
! 		  {
! 		    /* If we're not at the start of NODE, split the enode at
! 		       this stmt, so we have:
! 			 node -> split_enode
! 		       so that when split_enode is processed the next edge
! 		       we add will be:
! 			 split_enode -> next
! 		       and any state change will effectively occur on that
! 		       latter edge, and split_enode will contain just stmt.  */
! 		    if (logger)
! 		      logger->log ("getting split_enode");
! 		    exploded_node *split_enode
! 		      = get_or_create_node (split_point, old_state, node);
! 		    if (!split_enode)
! 		      return;
! 		    /* "stmt" will be reprocessed when split_enode is
! 		       processed.  */
! 		    node->m_num_processed_stmts--;
! 		    if (logger)
! 		      logger->log ("creating edge to split_enode");
! 		    add_edge (node, split_enode, nullptr, could_have_done_work);
! 		    return;
! 		  }
! 		else
! 		  /* If we're at the start of NODE, stop iterating,
! 		     so that an edge will be created from NODE to
! 		     (next_point, next_state) below. */
! 		  break;
! 	      }
! 	  }
! 	unsigned next_idx = stmt_idx + 1;
! 	program_point next_point
! 	  = (next_idx < point.get_supernode ()->m_stmts.length ()
! 	     ? program_point::before_stmt (point.get_supernode (), next_idx,
! 					   point.get_call_string ())
! 	     : program_point::after_supernode (point.get_supernode (),
! 					       point.get_call_string ()));
! 	if (path_ctxt.terminate_path_p ())
! 	  {
! 	    if (logger)
! 	      logger->log ("not adding node: terminating path");
! 	  }
! 	else
! 	  {
! 	    exploded_node *next
! 	      = get_or_create_node (next_point, next_state, node);
! 	    if (next)
! 	      add_edge (node, next, nullptr, could_have_done_work);
! 	  }
! 
! 	/* If we have custom edge infos, "bifurcate" the state
! 	   accordingly, potentially creating a new state/enode/eedge
! 	   instances.  For example, to handle a "realloc" call, we
! 	   might split into 3 states, for the "failure",
! 	   "resizing in place", and "moving to a new buffer" cases.  */
! 	for (auto edge_info_iter : path_ctxt.get_custom_eedge_infos ())
! 	  {
! 	    /* Take ownership of the edge infos from the path_ctxt.  */
! 	    std::unique_ptr<custom_edge_info> edge_info (edge_info_iter);
! 	    if (logger)
! 	      {
! 		logger->start_log_line ();
! 		logger->log_partial ("bifurcating for edge: ");
! 		edge_info->print (logger->get_printer ());
! 		logger->end_log_line ();
! 	      }
! 	    program_state bifurcated_new_state
! 	      (path_ctxt.get_state_at_bifurcation ());
! 
! 	    /* Apply edge_info to state.  */
! 	    impl_region_model_context
! 	      bifurcation_ctxt (*this,
! 				node, // enode_for_diag
! 				&path_ctxt.get_state_at_bifurcation (),
! 				&bifurcated_new_state,
! 				nullptr, // uncertainty_t *uncertainty
! 				nullptr, // path_context *path_ctxt
! 				stmt);
! 	    if (edge_info->update_state (&bifurcated_new_state,
! 					 nullptr, /* no exploded_edge yet.  */
! 					 &bifurcation_ctxt))
! 	      {
! 		if (exploded_node *next2
! 		    = edge_info->create_enode
! 			(*this,
! 			 next_point,
! 			 std::move (bifurcated_new_state),
! 			 node,
! 			 &bifurcation_ctxt))
! 		  {
! 		    add_edge (node, next2, nullptr,
! 			      true /* assume that work could be done */,
! 			      std::move (edge_info));
! 		  }
! 	      }
! 	    else
! 	      {
! 		if (logger)
! 		  logger->log ("infeasible state, not adding node");
! 	      }
! 	  }
!       }
!       break;
!     case PK_AFTER_SUPERNODE:
!       {
! 	bool found_a_superedge = false;
! 	bool is_an_exit_block = false;
! 	/* If this is an EXIT BB, detect leaks, and potentially
! 	   create a function summary.  */
! 	if (point.get_supernode ()->return_p ())
! 	  {
! 	    is_an_exit_block = true;
! 	    node->detect_leaks (*this);
! 	    if (flag_analyzer_call_summaries
! 		&& point.get_call_string ().empty_p ())
! 	      {
! 		/* TODO: create function summary
! 		   There can be more than one; each corresponds to a different
! 		   final enode in the function.  */
! 		if (logger)
! 		  {
! 		    pretty_printer *pp = logger->get_printer ();
! 		    logger->start_log_line ();
! 		    logger->log_partial
! 		      ("would create function summary for %qE; state: ",
! 		       point.get_fndecl ());
! 		    state.dump_to_pp (m_ext_state, true, false, pp);
! 		    logger->end_log_line ();
! 		  }
! 		per_function_data *per_fn_data
! 		  = get_or_create_per_function_data (point.get_function ());
! 		per_fn_data->add_call_summary (node);
! 	      }
! 	  }
! 	/* Traverse into successors of the supernode.  */
! 	int i;
! 	superedge *succ;
! 	FOR_EACH_VEC_ELT (point.get_supernode ()->m_succs, i, succ)
! 	  {
! 	    found_a_superedge = true;
! 	    if (logger)
! 	      {
! 		label_text succ_desc (succ->get_description (false));
! 		logger->log ("considering SN: %i -> SN: %i (%s)",
! 			     succ->m_src->m_index, succ->m_dest->m_index,
! 			     succ_desc.get ());
! 	      }
! 
! 	    program_point next_point
! 	      = program_point::before_supernode (succ->m_dest, succ,
! 						 point.get_call_string ());
! 	    program_state next_state (state);
! 	    uncertainty_t uncertainty;
! 
! 	    /* Make use the current state and try to discover and analyse
! 	       indirect function calls (a call that doesn't have an underlying
! 	       cgraph edge representing call).
! 
! 	       Some examples of such calls are virtual function calls
! 	       and calls that happen via a function pointer.  */
! 	    if (succ->m_kind == SUPEREDGE_INTRAPROCEDURAL_CALL
! 		&& !(succ->get_any_callgraph_edge ()))
! 	      {
! 		const gcall &call
! 		  = *point.get_supernode ()->get_final_call ();
! 
! 		impl_region_model_context ctxt (*this,
! 						node,
! 						&state,
! 						&next_state,
! 						&uncertainty,
! 						nullptr,
! 						point.get_stmt());
! 
! 		region_model *model = state.m_region_model;
! 		bool call_discovered = false;
! 
! 		if (tree fn_decl = model->get_fndecl_for_call (call, &ctxt))
! 		  call_discovered = maybe_create_dynamic_call (call,
! 							       fn_decl,
! 							       node,
! 							       next_state,
! 							       next_point,
! 							       &uncertainty,
! 							       logger);
! 		if (!call_discovered)
! 		  {
! 		    /* Check for jump through nullptr.  */
! 		    if (tree fn_ptr = gimple_call_fn (&call))
! 		      {
! 			const svalue *fn_ptr_sval
! 			  = model->get_rvalue (fn_ptr, &ctxt);
! 			if (fn_ptr_sval->all_zeroes_p ())
! 			  ctxt.warn
! 			    (std::make_unique<jump_through_null> (call));
! 		      }
! 
! 		    /* An unknown function or a special function was called
! 		       at this point, in such case, don't terminate the
! 		       analysis of the current function.
! 
! 		       The analyzer handles calls to such functions while
! 		       analysing the stmt itself, so the function call
! 		       must have been handled by the anlyzer till now.  */
! 		    exploded_node *next
! 		      = get_or_create_node (next_point,
! 					    next_state,
! 					    node);
! 		    if (next)
! 		      add_edge (node, next, succ,
! 				true /* assume that work is done */);
! 		  }
! 	      }
! 
! 	    /* Ignore CFG edges in the sgraph flagged with EH whilst
! 	       we're exploring the egraph.
! 	       We only use these sedges in special-case logic for
! 	       dealing with exception-handling.  */
! 	    if (auto cfg_sedge = succ->dyn_cast_cfg_superedge ())
! 	      if (cfg_sedge->get_flags () & EDGE_EH)
! 		{
! 		  if (logger)
! 		    logger->log ("rejecting EH edge");
! 		  continue;
! 	      }
  
! 	    if (!node->on_edge (*this, succ, &next_point, &next_state,
! 				&uncertainty))
! 	      {
! 		if (logger)
! 		  logger->log ("skipping impossible edge to SN: %i",
! 			       succ->m_dest->m_index);
! 		continue;
! 	      }
! 	    exploded_node *next = get_or_create_node (next_point, next_state,
! 						      node);
! 	    if (next)
! 	      {
! 		add_edge (node, next, succ, false);
  
! 		/* We might have a function entrypoint.  */
! 		detect_infinite_recursion (next);
! 	      }
! 	  }
  
! 	/* Return from the calls which doesn't have a return superedge.
! 	   Such case occurs when GCC's middle end didn't knew which function to
! 	   call but analyzer did.  */
! 	if ((is_an_exit_block && !found_a_superedge)
! 	    && (!point.get_call_string ().empty_p ()))
! 	  {
! 	    const call_string &cs = point.get_call_string ();
! 	    program_point next_point
! 	      = program_point::before_supernode (cs.get_caller_node (),
! 						 nullptr,
! 						 cs);
! 	    program_state next_state (state);
! 	    uncertainty_t uncertainty;
  
! 	    const gcall *call
! 	      = next_point.get_supernode ()->get_returning_call ();
  
! 	    if (call)
! 	      next_state.returning_call (*this, node, *call, &uncertainty);
  
! 	    if (next_state.m_valid)
! 	      {
! 		next_point.pop_from_call_stack ();
! 		exploded_node *enode = get_or_create_node (next_point,
! 							   next_state,
! 							   node);
! 		if (enode)
! 		  add_edge (node, enode, nullptr, false,
! 			    std::make_unique<dynamic_call_info_t> (*call, true));
! 	      }
! 	  }
!       }
!       break;
      }
  }
  
--- 3661,3782 ----
        logger->end_log_line ();
      }
  
!   /* Don't do anything for the origin enode; the initial population of the
!      worklist has already added successor enodes.  */
!   if (point.get_supernode () == nullptr)
!     return;
  
!   /* Specialcase for EXIT BBs, which don't have out-edges.  */
!   if (point.get_supernode ()->exit_p ())
!     {
!       gcc_assert (point.get_supernode ()->m_succs.length () == 0);
  
!       if (point.get_stack_depth () > 1)
! 	{
! 	  /* Interprocedural return.  */
! 	  auto &src_call_string = point.get_call_string ();
  
! 	  const call_string::element_t &top_of_stack
! 	    = src_call_string.get_top_of_stack ();
! 	  const call_string *dst_call_string = src_call_string.get_parent ();
! 	  const program_point dst_point
! 	    (top_of_stack.get_return_snode_in_caller (),
! 	     *dst_call_string);
! 	  auto edge_info
! 	    = std::make_unique<interprocedural_return> (top_of_stack.get_call_stmt ());
  
! 	  const program_state &src_state (node->get_state ());
! 	  program_state dst_state (src_state);
! 	  uncertainty_t uncertainty;
! 	  impl_region_model_context ctxt (*this, node,
! 					  &src_state, &dst_state, &uncertainty,
! 					  nullptr,
! 					  nullptr);
! 	  edge_info->update_state (&dst_state, nullptr, &ctxt);
  
! 	  program_state::detect_leaks (src_state, dst_state,
! 				       nullptr, get_ext_state (),
! 				       &ctxt);
  
! 	  if (exploded_node *next
! 	      = get_or_create_node (dst_point, dst_state, node))
! 	    add_edge (node, next, nullptr, false,
! 		      std::move (edge_info));
! 	}
!       else
! 	{
! 	  /* End of top-level of analysis for this function.
! 	     Detect leaks, and potentially create a function summary.  */
! 	  node->detect_leaks (*this);
  
! 	  if (flag_analyzer_call_summaries
! 	      && point.get_call_string ().empty_p ())
! 	    {
! 	      /* TODO: create function summary
! 		 There can be more than one; each corresponds to a different
! 		 final enode in the function.  */
! 	      if (logger)
  		{
! 		  pretty_printer *pp = logger->get_printer ();
! 		  logger->start_log_line ();
! 		  logger->log_partial
! 		    ("would create function summary for %qE; state: ",
! 		     point.get_fndecl ());
! 		  state.dump_to_pp (m_ext_state, true, false, pp);
! 		  logger->end_log_line ();
  		}
! 	      per_function_data *per_fn_data
! 		= get_or_create_per_function_data (point.get_function ());
! 	      per_fn_data->add_call_summary (node);
! 	    }
! 	}
  
!       return;
!     }
  
!   /* Traverse into successors of the supernode.  */
!   int i;
!   superedge *succ;
!   FOR_EACH_VEC_ELT (point.get_supernode ()->m_succs, i, succ)
!     {
!       if (logger)
! 	{
! 	  label_text succ_desc (succ->get_description (false));
! 	  logger->log ("considering SN: %i -> SN: %i (%s)",
! 		       succ->m_src->m_id, succ->m_dest->m_id,
! 		       succ_desc.get ());
! 	}
  
!       program_point next_point (succ->m_dest, point.get_call_string ());
!       program_state next_state (state);
!       uncertainty_t uncertainty;
  
!       /* Find the outcome(s) of any operation on the edge.  */
!       operation_context op_ctxt (*this, *node, *succ);
  
!       /* Skip EH edges.  */
!       if (auto cfg_edge = succ->get_any_cfg_edge ())
! 	if (cfg_edge->flags & EDGE_EH)
! 	  continue;
  
!       if (auto op = succ->get_op ())
! 	op->execute (op_ctxt);
!       else
! 	{
! 	  /* No-op.
! 	     Unconditional goto to the dst point, which
! 	     must be in same function.
! 	     The supernode changes, but the callstring and
! 	     state do not change.  */
! 	  if (logger)
! 	    logger->log ("handling no-op edge");
! 	  auto dst_point (op_ctxt.get_next_intraprocedural_point ());
! 	  if (exploded_node *next
! 	      = get_or_create_node (dst_point,
! 				    node->get_state (),
! 				    node))
! 	    add_edge (node, next, succ, false);
! 	}
      }
  }
  
*************** exploded_graph::get_or_create_function_s
*** 4830,4837 ****
      return *slot;
    else
      {
!       int num_supernodes = fn ? n_basic_blocks_for_fn (fn) : 0;
!       /* not quite the num supernodes, but nearly.  */
        stats *new_stats = new stats (num_supernodes);
        m_per_function_stats.put (fn, new_stats);
        return new_stats;
--- 3794,3803 ----
      return *slot;
    else
      {
!       int num_supernodes = 0;
!       for (auto snode : m_sg.m_nodes)
! 	if (snode->get_function () == fn)
! 	  ++num_supernodes;
        stats *new_stats = new stats (num_supernodes);
        m_per_function_stats.put (fn, new_stats);
        return new_stats;
*************** exploded_graph::print_bar_charts (pretty
*** 4864,4871 ****
    enodes_per_function.print (pp);
  
    /* Accumulate number of enodes per supernode.  */
!   auto_vec<unsigned> enodes_per_supernode (m_sg.num_nodes ());
!   for (int i = 0; i < m_sg.num_nodes (); i++)
      enodes_per_supernode.quick_push (0);
    int i;
    exploded_node *enode;
--- 3830,3837 ----
    enodes_per_function.print (pp);
  
    /* Accumulate number of enodes per supernode.  */
!   auto_vec<unsigned> enodes_per_supernode (m_sg.m_nodes.length ());
!   for (int i = 0; i < m_sg.m_nodes.length (); i++)
      enodes_per_supernode.quick_push (0);
    int i;
    exploded_node *enode;
*************** exploded_graph::print_bar_charts (pretty
*** 4874,4885 ****
        const supernode *iter_snode = enode->get_supernode ();
        if (!iter_snode)
  	continue;
!       enodes_per_supernode[iter_snode->m_index]++;
      }
  
    /* Accumulate excess enodes per supernode.  */
!   auto_vec<unsigned> excess_enodes_per_supernode (m_sg.num_nodes ());
!   for (int i = 0; i < m_sg.num_nodes (); i++)
      excess_enodes_per_supernode.quick_push (0);
    for (point_map_t::iterator iter = m_per_point_data.begin ();
         iter != m_per_point_data.end (); ++iter)
--- 3840,3851 ----
        const supernode *iter_snode = enode->get_supernode ();
        if (!iter_snode)
  	continue;
!       enodes_per_supernode[iter_snode->m_id]++;
      }
  
    /* Accumulate excess enodes per supernode.  */
!   auto_vec<unsigned> excess_enodes_per_supernode (m_sg.m_nodes.length ());
!   for (int i = 0; i < m_sg.m_nodes.length (); i++)
      excess_enodes_per_supernode.quick_push (0);
    for (point_map_t::iterator iter = m_per_point_data.begin ();
         iter != m_per_point_data.end (); ++iter)
*************** exploded_graph::print_bar_charts (pretty
*** 4889,4895 ****
        if (!iter_snode)
  	continue;
        const per_program_point_data *point_data = (*iter).second;
!       excess_enodes_per_supernode[iter_snode->m_index]
  	+= point_data->m_excess_enodes;
      }
  
--- 3855,3861 ----
        if (!iter_snode)
  	continue;
        const per_program_point_data *point_data = (*iter).second;
!       excess_enodes_per_supernode[iter_snode->m_id]
  	+= point_data->m_excess_enodes;
      }
  
*************** exploded_graph::print_bar_charts (pretty
*** 4905,4922 ****
        bar_chart enodes_per_snode;
        bar_chart excess_enodes_per_snode;
        bool have_excess_enodes = false;
!       for (int i = 0; i < m_sg.num_nodes (); i++)
  	{
! 	  const supernode *iter_snode = m_sg.get_node_by_index (i);
  	  if (iter_snode->get_function () != fn)
  	    continue;
  	  pretty_printer tmp_pp;
  	  pp_printf (&tmp_pp, "sn %i (bb %i)",
! 		     iter_snode->m_index, iter_snode->m_bb->index);
  	  enodes_per_snode.add_item (pp_formatted_text (&tmp_pp),
! 				     enodes_per_supernode[iter_snode->m_index]);
  	  const int num_excess
! 	    = excess_enodes_per_supernode[iter_snode->m_index];
  	  excess_enodes_per_snode.add_item (pp_formatted_text (&tmp_pp),
  					    num_excess);
  	  if (num_excess)
--- 3871,3888 ----
        bar_chart enodes_per_snode;
        bar_chart excess_enodes_per_snode;
        bool have_excess_enodes = false;
!       for (int i = 0; i < m_sg.m_nodes.length (); i++)
  	{
! 	  const supernode *iter_snode = m_sg.m_nodes[i];
  	  if (iter_snode->get_function () != fn)
  	    continue;
  	  pretty_printer tmp_pp;
  	  pp_printf (&tmp_pp, "sn %i (bb %i)",
! 		     iter_snode->m_id, iter_snode->m_bb->index);
  	  enodes_per_snode.add_item (pp_formatted_text (&tmp_pp),
! 				     enodes_per_supernode[iter_snode->m_id]);
  	  const int num_excess
! 	    = excess_enodes_per_supernode[iter_snode->m_id];
  	  excess_enodes_per_snode.add_item (pp_formatted_text (&tmp_pp),
  					    num_excess);
  	  if (num_excess)
*************** exploded_graph::dump_stats (FILE *out) c
*** 4986,5021 ****
        fprintf (out, "function: %s\n", function_name (fn));
        (*iter).second->dump (out);
      }
- 
-   fprintf (out, "PK_AFTER_SUPERNODE per supernode:\n");
-   for (unsigned i = 0; i < m_PK_AFTER_SUPERNODE_per_snode.length (); i++)
-     fprintf (out, "  SN %i: %3i\n", i, m_PK_AFTER_SUPERNODE_per_snode[i]);
- }
- 
- void
- exploded_graph::dump_states_for_supernode (FILE *out,
- 					   const supernode *snode) const
- {
-   fprintf (out, "PK_AFTER_SUPERNODE nodes for SN: %i\n", snode->m_index);
-   int i;
-   exploded_node *enode;
-   int state_idx = 0;
-   FOR_EACH_VEC_ELT (m_nodes, i, enode)
-     {
-       const supernode *iter_snode = enode->get_supernode ();
-       if (enode->get_point ().get_kind () == PK_AFTER_SUPERNODE
- 	  && iter_snode == snode)
- 	{
- 	  pretty_printer pp;
- 	  pp_format_decoder (&pp) = default_tree_printer;
- 	  enode->get_state ().dump_to_pp (m_ext_state, true, false, &pp);
- 	  fprintf (out, "state %i: EN: %i\n  %s\n",
- 		   state_idx++, enode->m_index,
- 		   pp_formatted_text (&pp));
- 	}
-     }
-   fprintf (out, "#exploded_node for PK_AFTER_SUPERNODE for SN: %i = %i\n",
- 	   snode->m_index, state_idx);
  }
  
  /* Return a new json::object of the form
--- 3952,3957 ----
*************** exploded_graph::to_json () const
*** 5061,5068 ****
       stats m_global_stats;
       function_stat_map_t m_per_function_stats;
       stats m_functionless_stats;
!      call_string_data_map_t m_per_call_string_data;
!      auto_vec<int> m_PK_AFTER_SUPERNODE_per_snode;  */
  
    return egraph_obj;
  }
--- 3997,4003 ----
       stats m_global_stats;
       function_stat_map_t m_per_function_stats;
       stats m_functionless_stats;
!      call_string_data_map_t m_per_call_string_data;  */
  
    return egraph_obj;
  }
*************** exploded_path::find_stmt_backwards (cons
*** 5091,5106 ****
    int i;
    const exploded_edge *eedge;
    FOR_EACH_VEC_ELT_REVERSE (m_edges, i, eedge)
!     {
!       const exploded_node *dst_node = eedge->m_dest;
!       const program_point &dst_point = dst_node->get_point ();
!       const gimple *stmt = dst_point.get_stmt ();
!       if (stmt == search_stmt)
! 	{
! 	  *out_idx = i;
! 	  return true;
! 	}
!     }
    return false;
  }
  
--- 4026,4053 ----
    int i;
    const exploded_edge *eedge;
    FOR_EACH_VEC_ELT_REVERSE (m_edges, i, eedge)
!     if (search_stmt->code == GIMPLE_PHI)
!       {
! 	/* Each phis_for_edge_op instance handles multiple phi stmts
! 	   at once, so we have to special-case the search for a phi stmt.  */
! 	if (auto op = eedge->maybe_get_op ())
! 	  if (auto phis_op = op->dyn_cast_phis_for_edge_op ())
! 	    if (phis_op->defines_ssa_name_p (gimple_phi_result (search_stmt)))
! 	      {
! 		*out_idx = i;
! 		return true;
! 	      }
!       }
!     else
!       {
! 	/* Non-phi stmt.  */
! 	if (const gimple *stmt = eedge->maybe_get_stmt ())
! 	  if (stmt == search_stmt)
! 	    {
! 	      *out_idx = i;
! 	      return true;
! 	    }
!       }
    return false;
  }
  
*************** exploded_path::feasible_p (logger *logge
*** 5145,5154 ****
  	    {
  	      const exploded_node &src_enode = *eedge->m_src;
  	      const program_point &src_point = src_enode.get_point ();
- 	      const gimple *last_stmt
- 		= src_point.get_supernode ()->get_last_stmt ();
  	      *out = std::make_unique<feasibility_problem> (edge_idx, *eedge,
- 							    last_stmt,
  							    std::move (rc));
  	    }
  	  return false;
--- 4092,4098 ----
*************** maybe_update_for_edge (logger *logger,
*** 5303,5414 ****
        logger->end_log_line ();
      }
  
!   /* Update state for the stmts that were processed in each enode.  */
!   for (unsigned stmt_idx = 0; stmt_idx < src_enode.m_num_processed_stmts;
!        stmt_idx++)
!     {
!       const gimple *stmt = src_enode.get_processed_stmt (stmt_idx);
! 
!       /* Update cfun and input_location in case of ICE: make it easier to
! 	 track down which source construct we're failing to handle.  */
!       auto_cfun sentinel (src_point.get_function ());
!       input_location = stmt->location;
! 
!       update_for_stmt (stmt);
!     }
! 
!   const superedge *sedge = eedge->m_sedge;
!   if (sedge)
      {
!       if (logger)
! 	{
! 	  label_text desc (sedge->get_description (false));
! 	  logger->log ("  sedge: SN:%i -> SN:%i %s",
! 		       sedge->m_src->m_index,
! 		       sedge->m_dest->m_index,
! 		       desc.get ());
! 	}
! 
!       const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt ();
!       if (!m_model.maybe_update_for_edge (*sedge, last_stmt, ctxt, out_rc))
  	{
  	  if (logger)
  	    {
! 	      logger->start_log_line ();
! 	      logger->log_partial ("rejecting due to region model: ");
! 	      m_model.dump_to_pp (logger->get_printer (), true, false);
! 	      logger->end_log_line ();
  	    }
! 	  return false;
! 	}
!     }
!   else
!     {
!       /* Special-case the initial eedge from the origin node to the
! 	 initial function by pushing a frame for it.  */
!       if (src_point.get_kind () == PK_ORIGIN)
! 	{
! 	  gcc_assert (eedge->m_src->m_index == 0);
! 	  gcc_assert (eedge->m_dest->get_point ().get_kind ()
! 		      == PK_BEFORE_SUPERNODE);
! 	  function *fun = eedge->m_dest->get_function ();
! 	  gcc_assert (fun);
! 	  m_model.push_frame (*fun, nullptr, nullptr, ctxt);
! 	  if (logger)
! 	    logger->log ("  pushing frame for %qD", fun->decl);
  	}
!       else if (eedge->m_custom_info)
  	{
! 	  eedge->m_custom_info->update_model (&m_model, eedge, ctxt);
  	}
      }
  
-   /* Handle phi nodes on an edge leaving a PK_BEFORE_SUPERNODE (to
-      a PK_BEFORE_STMT, or a PK_AFTER_SUPERNODE if no stmts).
-      This will typically not be associated with a superedge.  */
-   if (src_point.get_from_edge ())
-     {
-       const cfg_superedge *last_cfg_superedge
- 	= src_point.get_from_edge ()->dyn_cast_cfg_superedge ();
-       const exploded_node &dst_enode = *eedge->m_dest;
-       const unsigned dst_snode_idx = dst_enode.get_supernode ()->m_index;
-       if (last_cfg_superedge)
- 	{
- 	  if (logger)
- 	    logger->log ("  update for phis");
- 	  m_model.update_for_phis (src_enode.get_supernode (),
- 				  last_cfg_superedge,
- 				  ctxt);
- 	  /* If we've entering an snode that we've already visited on this
- 	     epath, then we need do fix things up for loops; see the
- 	     comment for store::loop_replay_fixup.
- 	     Perhaps we should probably also verify the callstring,
- 	     and track program_points,  but hopefully doing it by supernode
- 	     is good enough.  */
- 	  if (bitmap_bit_p (m_snodes_visited, dst_snode_idx))
- 	    m_model.loop_replay_fixup (dst_enode.get_state ().m_region_model);
- 	}
-       bitmap_set_bit (m_snodes_visited, dst_snode_idx);
-     }
-   return true;
- }
  
! /* Update this object for the effects of STMT.  */
  
! void
! feasibility_state::update_for_stmt (const gimple *stmt)
! {
!   if (const gassign *assign = dyn_cast <const gassign *> (stmt))
!     m_model.on_assignment (assign, nullptr);
!   else if (const gasm *asm_stmt = dyn_cast <const gasm *> (stmt))
!     m_model.on_asm_stmt (asm_stmt, nullptr);
!   else if (const gcall *call = dyn_cast <const gcall *> (stmt))
!     {
!       bool unknown_side_effects = m_model.on_call_pre (*call, nullptr);
!       m_model.on_call_post (*call, unknown_side_effects, nullptr);
!     }
!   else if (const greturn *return_ = dyn_cast <const greturn *> (stmt))
!     m_model.on_return (return_, nullptr);
  }
  
  /* Dump this object to PP.  */
--- 4247,4307 ----
        logger->end_log_line ();
      }
  
!   if (eedge->m_custom_info)
!     eedge->m_custom_info->update_model (&m_model, eedge, ctxt);
!   else
      {
!       const superedge *sedge = eedge->m_sedge;
!       if (sedge)
  	{
  	  if (logger)
  	    {
! 	      label_text desc (sedge->get_description (false));
! 	      logger->log ("  sedge: SN:%i -> SN:%i %s",
! 			   sedge->m_src->m_id,
! 			   sedge->m_dest->m_id,
! 			   desc.get ());
  	    }
! 
! 	  if (sedge->get_op ())
! 	    if (!sedge->get_op ()->execute_for_feasibility (*eedge,
! 							    *this,
! 							    ctxt,
! 							    out_rc))
! 	      {
! 		if (logger)
! 		  {
! 		    logger->start_log_line ();
! 		    logger->log_partial ("rejecting due to region model: ");
! 		    m_model.dump_to_pp (logger->get_printer (), true, false);
! 		    logger->end_log_line ();
! 		  }
! 		return false;
! 	      }
  	}
!       else
  	{
! 	  /* Special-case the initial eedge from the origin node to the
! 	     initial function by pushing a frame for it.  */
! 	  if (eedge->m_src->m_index == 0)
! 	    {
! 	      function *fun = eedge->m_dest->get_function ();
! 	      gcc_assert (fun);
! 	      m_model.push_frame (*fun, nullptr, nullptr, ctxt);
! 	      if (logger)
! 		logger->log ("  pushing frame for %qD", fun->decl);
! 	    }
  	}
      }
  
  
!   {
!     const exploded_node &dst_enode = *eedge->m_dest;
!     const unsigned dst_snode_idx = dst_enode.get_supernode ()->m_id;
!     bitmap_set_bit (m_snodes_visited, dst_snode_idx);
!   }
  
!   return true;
  }
  
  /* Dump this object to PP.  */
*************** public:
*** 5451,5461 ****
  
    void dump_dot (graphviz_out *gv, const dump_args_t &args) const final override
    {
!     gv->println ("subgraph \"cluster_supernode_%i\" {", m_supernode->m_index);
      gv->indent ();
      gv->println ("style=\"dashed\";");
      gv->println ("label=\"SN: %i (bb: %i; scc: %i)\";",
! 		 m_supernode->m_index, m_supernode->m_bb->index,
  		 args.m_eg.get_scc_id (*m_supernode));
  
      int i;
--- 4344,4354 ----
  
    void dump_dot (graphviz_out *gv, const dump_args_t &args) const final override
    {
!     gv->println ("subgraph \"cluster_supernode_%i\" {", m_supernode->m_id);
      gv->indent ();
      gv->println ("style=\"dashed\";");
      gv->println ("label=\"SN: %i (bb: %i; scc: %i)\";",
! 		 m_supernode->m_id, m_supernode->m_bb->index,
  		 args.m_eg.get_scc_id (*m_supernode));
  
      int i;
*************** public:
*** 5481,5487 ****
        = *(const supernode_cluster * const *)p1;
      const supernode_cluster *c2
        = *(const supernode_cluster * const *)p2;
!     return c1->m_supernode->m_index - c2->m_supernode->m_index;
    }
  
  private:
--- 4374,4380 ----
        = *(const supernode_cluster * const *)p1;
      const supernode_cluster *c2
        = *(const supernode_cluster * const *)p2;
!     return c1->m_supernode->m_id - c2->m_supernode->m_id;
    }
  
  private:
*************** exploded_graph::dump_exploded_nodes () c
*** 5764,5778 ****
        exploded_node *enode;
        FOR_EACH_VEC_ELT (m_nodes, i, enode)
  	{
! 	  if (const gimple *stmt = enode->get_stmt ())
! 	    {
! 	      if (get_pure_location (richloc.get_loc ()) == UNKNOWN_LOCATION)
! 		richloc.set_range (0, stmt->location, SHOW_RANGE_WITH_CARET);
! 	      else
! 		richloc.add_range (stmt->location,
! 				   SHOW_RANGE_WITHOUT_CARET,
! 				   new enode_label (m_ext_state, enode));
! 	    }
  	}
        warning_at (&richloc, 0, "%i exploded nodes", m_nodes.length ());
  
--- 4657,4669 ----
        exploded_node *enode;
        FOR_EACH_VEC_ELT (m_nodes, i, enode)
  	{
! 	  location_t loc = enode->get_location ();
! 	  if (get_pure_location (richloc.get_loc ()) == UNKNOWN_LOCATION)
! 	    richloc.set_range (0, loc, SHOW_RANGE_WITH_CARET);
! 	  else
! 	    richloc.add_range (loc,
! 			       SHOW_RANGE_WITHOUT_CARET,
! 			       new enode_label (m_ext_state, enode));
  	}
        warning_at (&richloc, 0, "%i exploded nodes", m_nodes.length ());
  
*************** exploded_graph::dump_exploded_nodes () c
*** 5845,5852 ****
      }
  
    /* Emit a warning at any call to "__analyzer_dump_exploded_nodes",
!      giving the number of processed exploded nodes for "before-stmt",
!      and the IDs of processed, merger, and worklist enodes.
  
       We highlight the count of *processed* enodes since this is of most
       interest in DejaGnu tests for ensuring that state merger has
--- 4736,4743 ----
      }
  
    /* Emit a warning at any call to "__analyzer_dump_exploded_nodes",
!      giving the number of processed exploded nodes at the snode before
!      the call, and the IDs of processed, merger, and worklist enodes.
  
       We highlight the count of *processed* enodes since this is of most
       interest in DejaGnu tests for ensuring that state merger has
*************** exploded_graph::dump_exploded_nodes () c
*** 5861,5949 ****
    hash_set<const gimple *> seen;
    FOR_EACH_VEC_ELT (m_nodes, i, enode)
      {
!       if (enode->get_point ().get_kind () != PK_BEFORE_STMT)
  	continue;
  
!       if (const gimple *stmt = enode->get_stmt ())
! 	if (const gcall *call = dyn_cast <const gcall *> (stmt))
! 	  if (is_special_named_call_p (*call, "__analyzer_dump_exploded_nodes",
! 				       1))
  	    {
! 	      if (seen.contains (stmt))
! 		continue;
! 
! 	      auto_vec<exploded_node *> processed_enodes;
! 	      auto_vec<exploded_node *> merger_enodes;
! 	      auto_vec<exploded_node *> worklist_enodes;
! 	      /* This is O(N^2).  */
! 	      unsigned j;
! 	      exploded_node *other_enode;
! 	      FOR_EACH_VEC_ELT (m_nodes, j, other_enode)
! 		{
! 		  if (other_enode->get_point ().get_kind () != PK_BEFORE_STMT)
! 		    continue;
! 		  if (other_enode->get_stmt () == stmt)
! 		    switch (other_enode->get_status ())
! 		      {
! 		      default:
! 			gcc_unreachable ();
! 		      case exploded_node::status::worklist:
! 			worklist_enodes.safe_push (other_enode);
! 			break;
! 		      case exploded_node::status::processed:
! 			processed_enodes.safe_push (other_enode);
! 			break;
! 		      case exploded_node::status::merger:
! 			merger_enodes.safe_push (other_enode);
! 			break;
! 		      }
! 		}
  
! 	      pretty_printer pp;
! 	      pp_character (&pp, '[');
! 	      print_enode_indices (&pp, processed_enodes);
! 	      if (merger_enodes.length () > 0)
! 		{
! 		  pp_string (&pp, "] merger(s): [");
! 		  print_enode_indices (&pp, merger_enodes);
! 		}
! 	      if (worklist_enodes.length () > 0)
! 		{
! 		  pp_string (&pp, "] worklist: [");
! 		  print_enode_indices (&pp, worklist_enodes);
! 		}
! 	      pp_character (&pp, ']');
  
! 	      warning_n (stmt->location, 0, processed_enodes.length (),
! 			 "%i processed enode: %s",
! 			 "%i processed enodes: %s",
! 			 processed_enodes.length (), pp_formatted_text (&pp));
! 	      seen.add (stmt);
  
! 	      /* If the argument is non-zero, then print all of the states
! 		 of the various enodes.  */
! 	      tree t_arg = fold (gimple_call_arg (call, 0));
! 	      if (TREE_CODE (t_arg) != INTEGER_CST)
! 		{
! 		  error_at (call->location,
! 			    "integer constant required for arg 1");
! 		  return;
! 		}
! 	      int i_arg = TREE_INT_CST_LOW (t_arg);
! 	      if (i_arg)
  		{
! 		  exploded_node *other_enode;
! 		  FOR_EACH_VEC_ELT (processed_enodes, j, other_enode)
! 		    {
! 		      fprintf (stderr, "%i of %i: EN %i:\n",
! 			       j + 1, processed_enodes.length (),
! 			       other_enode->m_index);
! 		      other_enode->dump_succs_and_preds (stderr);
! 		      /* Dump state.  */
! 		      other_enode->get_state ().dump (m_ext_state, false);
! 		    }
  		}
  	    }
      }
  }
  
--- 4752,4845 ----
    hash_set<const gimple *> seen;
    FOR_EACH_VEC_ELT (m_nodes, i, enode)
      {
!       const supernode *snode = enode->get_supernode ();
!       if (!snode)
! 	continue;
!       if (snode->m_succs.length () != 1)
! 	continue;
!       const superedge *sedge = snode->m_succs[0];
!       if (!sedge->get_op ())
! 	continue;
!       const call_and_return_op *op
! 	= sedge->get_op ()->dyn_cast_call_and_return_op ();
!       if (!op)
  	continue;
+       const gcall &call = op->get_gcall ();
+       if (is_special_named_call_p (call, "__analyzer_dump_exploded_nodes", 1))
+ 	{
+ 	  if (seen.contains (&call))
+ 	    continue;
  
! 	  auto_vec<exploded_node *> processed_enodes;
! 	  auto_vec<exploded_node *> merger_enodes;
! 	  auto_vec<exploded_node *> worklist_enodes;
! 	  /* This is O(N^2).  */
! 	  unsigned j;
! 	  exploded_node *other_enode;
! 	  FOR_EACH_VEC_ELT (m_nodes, j, other_enode)
  	    {
! 	      if (other_enode->get_supernode () == snode)
! 		switch (other_enode->get_status ())
! 		  {
! 		  default:
! 		    gcc_unreachable ();
! 		  case exploded_node::status::worklist:
! 		    worklist_enodes.safe_push (other_enode);
! 		    break;
! 		  case exploded_node::status::processed:
! 		    processed_enodes.safe_push (other_enode);
! 		    break;
! 		  case exploded_node::status::merger:
! 		    merger_enodes.safe_push (other_enode);
! 		    break;
! 		  }
! 	    }
  
! 	  pretty_printer pp;
! 	  pp_character (&pp, '[');
! 	  print_enode_indices (&pp, processed_enodes);
! 	  if (merger_enodes.length () > 0)
! 	    {
! 	      pp_string (&pp, "] merger(s): [");
! 	      print_enode_indices (&pp, merger_enodes);
! 	    }
! 	  if (worklist_enodes.length () > 0)
! 	    {
! 	      pp_string (&pp, "] worklist: [");
! 	      print_enode_indices (&pp, worklist_enodes);
! 	    }
! 	  pp_character (&pp, ']');
  
! 	  warning_n (call.location, 0, processed_enodes.length (),
! 		     "%i processed enode: %s",
! 		     "%i processed enodes: %s",
! 		     processed_enodes.length (), pp_formatted_text (&pp));
! 	  seen.add (&call);
  
! 	  /* If the argument is non-zero, then print all of the states
! 	     of the various enodes.  */
! 	  tree t_arg = fold (gimple_call_arg (&call, 0));
! 	  if (TREE_CODE (t_arg) != INTEGER_CST)
! 	    {
! 	      error_at (snode->m_loc,
! 			"integer constant required for arg 1");
! 	      return;
! 	    }
! 	  int i_arg = TREE_INT_CST_LOW (t_arg);
! 	  if (i_arg)
! 	    {
! 	      exploded_node *other_enode;
! 	      FOR_EACH_VEC_ELT (processed_enodes, j, other_enode)
  		{
! 		  fprintf (stderr, "%i of %i: EN %i:\n",
! 			   j + 1, processed_enodes.length (),
! 			   other_enode->m_index);
! 		  other_enode->dump_succs_and_preds (stderr);
! 		  /* Dump state.  */
! 		  other_enode->get_state ().dump (m_ext_state, false);
  		}
  	    }
+ 	}
      }
  }
  
*************** exploded_graph::on_escaped_function (tre
*** 5985,6245 ****
      }
  }
  
- /* A collection of classes for visualizing the callgraph in .dot form
-    (as represented in the supergraph).  */
- 
- /* Forward decls.  */
- class viz_callgraph_node;
- class viz_callgraph_edge;
- class viz_callgraph;
- class viz_callgraph_cluster;
- 
- /* Traits for using "digraph.h" to visualize the callgraph.  */
- 
- struct viz_callgraph_traits
- {
-   typedef viz_callgraph_node node_t;
-   typedef viz_callgraph_edge edge_t;
-   typedef viz_callgraph graph_t;
-   struct dump_args_t
-   {
-     dump_args_t (const exploded_graph *eg) : m_eg (eg) {}
-     const exploded_graph *m_eg;
-   };
-   typedef viz_callgraph_cluster cluster_t;
- };
- 
- /* Subclass of dnode representing a function within the callgraph.  */
- 
- class viz_callgraph_node : public dnode<viz_callgraph_traits>
- {
-   friend class viz_callgraph;
- 
- public:
-   viz_callgraph_node (function *fun, int index)
-   : m_fun (fun), m_index (index), m_num_supernodes (0), m_num_superedges (0)
-   {
-     gcc_assert (fun);
-   }
- 
-   void dump_dot (graphviz_out *gv, const dump_args_t &args) const final override
-   {
-     pretty_printer *pp = gv->get_pp ();
- 
-     dump_dot_id (pp);
-     pp_printf (pp, " [shape=none,margin=0,style=filled,fillcolor=%s,label=\"",
- 	       "lightgrey");
-     pp_write_text_to_stream (pp);
- 
-     pp_printf (pp, "VCG: %i: %s", m_index, function_name (m_fun));
-     pp_newline (pp);
- 
-     pp_printf (pp, "supernodes: %i\n", m_num_supernodes);
-     pp_newline (pp);
- 
-     pp_printf (pp, "superedges: %i\n", m_num_superedges);
-     pp_newline (pp);
- 
-     if (args.m_eg)
-       {
- 	unsigned i;
- 	exploded_node *enode;
- 	unsigned num_enodes = 0;
- 	FOR_EACH_VEC_ELT (args.m_eg->m_nodes, i, enode)
- 	  {
- 	    if (enode->get_point ().get_function () == m_fun)
- 	      num_enodes++;
- 	  }
- 	pp_printf (pp, "enodes: %i\n", num_enodes);
- 	pp_newline (pp);
- 
- 	// TODO: also show the per-callstring breakdown
- 	const exploded_graph::call_string_data_map_t *per_cs_data
- 	  = args.m_eg->get_per_call_string_data ();
- 	for (exploded_graph::call_string_data_map_t::iterator iter
- 	       = per_cs_data->begin ();
- 	     iter != per_cs_data->end ();
- 	     ++iter)
- 	  {
- 	    const call_string *cs = (*iter).first;
- 	    //per_call_string_data *data = (*iter).second;
- 	    num_enodes = 0;
- 	    FOR_EACH_VEC_ELT (args.m_eg->m_nodes, i, enode)
- 	      {
- 		if (enode->get_point ().get_function () == m_fun
- 		    && &enode->get_point ().get_call_string () == cs)
- 		  num_enodes++;
- 	      }
- 	    if (num_enodes > 0)
- 	      {
- 		cs->print (pp);
- 		pp_printf (pp, ": %i\n", num_enodes);
- 	      }
- 	  }
- 
- 	/* Show any summaries.  */
- 	per_function_data *data = args.m_eg->get_per_function_data (m_fun);
- 	if (data)
- 	  {
- 	    pp_newline (pp);
- 	    pp_printf (pp, "summaries: %i\n", data->m_summaries.length ());
- 	    for (auto summary : data->m_summaries)
- 	      {
- 		pp_printf (pp, "\nsummary: %s:\n", summary->get_desc ().get ());
- 		const extrinsic_state &ext_state = args.m_eg->get_ext_state ();
- 		const program_state &state = summary->get_state ();
- 		state.dump_to_pp (ext_state, false, true, pp);
- 		pp_newline (pp);
- 	      }
- 	  }
-       }
- 
-     pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/true);
-     pp_string (pp, "\"];\n\n");
-     pp_flush (pp);
-   }
- 
-   void dump_dot_id (pretty_printer *pp) const
-   {
-     pp_printf (pp, "vcg_%i", m_index);
-   }
- 
- private:
-   function *m_fun;
-   int m_index;
-   int m_num_supernodes;
-   int m_num_superedges;
- };
- 
- /* Subclass of dedge representing a callgraph edge.  */
- 
- class viz_callgraph_edge : public dedge<viz_callgraph_traits>
- {
- public:
-   viz_callgraph_edge (viz_callgraph_node *src, viz_callgraph_node *dest)
-   : dedge<viz_callgraph_traits> (src, dest)
-   {}
- 
-   void dump_dot (graphviz_out *gv, const dump_args_t &) const
-     final override
-   {
-     pretty_printer *pp = gv->get_pp ();
- 
-     const char *style = "\"solid,bold\"";
-     const char *color = "black";
-     int weight = 10;
-     const char *constraint = "true";
- 
-     m_src->dump_dot_id (pp);
-     pp_string (pp, " -> ");
-     m_dest->dump_dot_id (pp);
-     pp_printf (pp,
- 	       (" [style=%s, color=%s, weight=%d, constraint=%s,"
- 		" headlabel=\""),
- 	       style, color, weight, constraint);
-     pp_printf (pp, "\"];\n");
-   }
- };
- 
- /* Subclass of digraph representing the callgraph.  */
- 
- class viz_callgraph : public digraph<viz_callgraph_traits>
- {
- public:
-   viz_callgraph (const supergraph &sg);
- 
-   viz_callgraph_node *get_vcg_node_for_function (function *fun)
-   {
-     return *m_map.get (fun);
-   }
- 
-   viz_callgraph_node *get_vcg_node_for_snode (supernode *snode)
-   {
-     return get_vcg_node_for_function (snode->m_fun);
-   }
- 
- private:
-   hash_map<function *, viz_callgraph_node *> m_map;
- };
- 
- /* Placeholder subclass of cluster.  */
- 
- class viz_callgraph_cluster : public cluster<viz_callgraph_traits>
- {
- };
- 
- /* viz_callgraph's ctor.  */
- 
- viz_callgraph::viz_callgraph (const supergraph &sg)
- {
-   cgraph_node *node;
-   FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
-     {
-       function *fun = node->get_fun ();
-       viz_callgraph_node *vcg_node
- 	= new viz_callgraph_node (fun, m_nodes.length ());
-       m_map.put (fun, vcg_node);
-       add_node (vcg_node);
-     }
- 
-   unsigned i;
-   superedge *sedge;
-   FOR_EACH_VEC_ELT (sg.m_edges, i, sedge)
-     {
-       viz_callgraph_node *vcg_src = get_vcg_node_for_snode (sedge->m_src);
-       if (vcg_src->m_fun)
- 	get_vcg_node_for_function (vcg_src->m_fun)->m_num_superedges++;
-       if (sedge->dyn_cast_call_superedge ())
- 	{
- 	  viz_callgraph_node *vcg_dest = get_vcg_node_for_snode (sedge->m_dest);
- 	  viz_callgraph_edge *vcg_edge
- 	    = new viz_callgraph_edge (vcg_src, vcg_dest);
- 	  add_edge (vcg_edge);
- 	}
-     }
- 
-   supernode *snode;
-   FOR_EACH_VEC_ELT (sg.m_nodes, i, snode)
-     {
-       if (snode->m_fun)
- 	get_vcg_node_for_function (snode->m_fun)->m_num_supernodes++;
-     }
- }
- 
- /* Dump the callgraph to FILENAME.  */
- 
- static void
- dump_callgraph (const supergraph &sg, const char *filename,
- 		const exploded_graph *eg)
- {
-   FILE *outf = fopen (filename, "w");
-   if (!outf)
-     return;
- 
-   // TODO
-   viz_callgraph vcg (sg);
-   vcg.dump_dot (filename, nullptr, viz_callgraph_traits::dump_args_t (eg));
- 
-   fclose (outf);
- }
- 
- /* Dump the callgraph to "<srcfile>.callgraph.dot".  */
- 
- static void
- dump_callgraph (const supergraph &sg, const exploded_graph *eg)
- {
-   auto_timevar tv (TV_ANALYZER_DUMP);
-   char *filename = concat (dump_base_name, ".callgraph.dot", nullptr);
-   dump_callgraph (sg, filename, eg);
-   free (filename);
- }
- 
  /* Subclass of dot_annotator for implementing
!    DUMP_BASE_NAME.supergraph-eg.dot, a post-analysis dump of the supergraph.
  
     Annotate the supergraph nodes by printing the exploded nodes in concise
!    form within them, next to their pertinent statements where appropriate,
!    colorizing the exploded nodes based on sm-state.
     Also show saved diagnostics within the exploded nodes, giving information
     on whether they were feasible, and, if infeasible, where the problem
     was.  */
--- 4881,4891 ----
      }
  }
  
  /* Subclass of dot_annotator for implementing
!    DUMP_BASE_NAME.supergraph.N.eg.dot, a post-analysis dump of the supergraph.
  
     Annotate the supergraph nodes by printing the exploded nodes in concise
!    form within them, colorizing the exploded nodes based on sm-state.
     Also show saved diagnostics within the exploded nodes, giving information
     on whether they were feasible, and, if infeasible, where the problem
     was.  */
*************** public:
*** 6250,6359 ****
    exploded_graph_annotator (const exploded_graph &eg)
    : m_eg (eg)
    {
!     /* Avoid O(N^2) by prepopulating m_enodes_per_snodes.  */
!     unsigned i;
!     supernode *snode;
!     FOR_EACH_VEC_ELT (eg.get_supergraph ().m_nodes, i, snode)
!       m_enodes_per_snodes.safe_push (new auto_vec <exploded_node *> ());
      exploded_node *enode;
      FOR_EACH_VEC_ELT (m_eg.m_nodes, i, enode)
        if (enode->get_supernode ())
! 	m_enodes_per_snodes[enode->get_supernode ()->m_index]->safe_push (enode);
    }
  
!   /* Show exploded nodes for BEFORE_SUPERNODE points before N.  */
!   bool add_node_annotations (graphviz_out *gv, const supernode &n,
! 			     bool within_table)
      const final override
    {
-     if (!within_table)
-       return false;
      gv->begin_tr ();
      pretty_printer *pp = gv->get_pp ();
  
!     gv->begin_td ();
!     pp_string (pp, "BEFORE");
!     pp_printf (pp, " (scc: %i)", m_eg.get_scc_id (n));
!     gv->end_td ();
! 
!     unsigned i;
!     exploded_node *enode;
!     bool had_enode = false;
!     FOR_EACH_VEC_ELT (*m_enodes_per_snodes[n.m_index], i, enode)
        {
! 	gcc_assert (enode->get_supernode () == &n);
! 	const program_point &point = enode->get_point ();
! 	if (point.get_kind () != PK_BEFORE_SUPERNODE)
! 	  continue;
! 	print_enode (gv, enode);
! 	had_enode = true;
        }
!     if (!had_enode)
!       pp_string (pp, "<TD BGCOLOR=\"red\">UNREACHED</TD>");
      pp_flush (pp);
      gv->end_tr ();
-     return true;
    }
  
!   /* Show exploded nodes for STMT.  */
!   void add_stmt_annotations (graphviz_out *gv, const gimple *stmt,
! 			     bool within_row)
!     const final override
    {
-     if (!within_row)
-       return;
      pretty_printer *pp = gv->get_pp ();
  
!     const supernode *snode
!       = m_eg.get_supergraph ().get_supernode_for_stmt (stmt);
!     unsigned i;
!     exploded_node *enode;
!     bool had_td = false;
!     FOR_EACH_VEC_ELT (*m_enodes_per_snodes[snode->m_index], i, enode)
!       {
! 	const program_point &point = enode->get_point ();
! 	if (point.get_kind () != PK_BEFORE_STMT)
! 	  continue;
! 	if (point.get_stmt () != stmt)
! 	  continue;
! 	print_enode (gv, enode);
! 	had_td = true;
!       }
      pp_flush (pp);
-     if (!had_td)
-       {
- 	gv->begin_td ();
- 	gv->end_td ();
-       }
-   }
- 
-   /* Show exploded nodes for AFTER_SUPERNODE points after N.  */
-   bool add_after_node_annotations (graphviz_out *gv, const supernode &n)
-     const final override
-   {
-     gv->begin_tr ();
-     pretty_printer *pp = gv->get_pp ();
- 
-     gv->begin_td ();
-     pp_string (pp, "AFTER");
-     gv->end_td ();
  
      unsigned i;
!     exploded_node *enode;
!     FOR_EACH_VEC_ELT (*m_enodes_per_snodes[n.m_index], i, enode)
        {
! 	gcc_assert (enode->get_supernode () == &n);
! 	const program_point &point = enode->get_point ();
! 	if (point.get_kind () != PK_AFTER_SUPERNODE)
! 	  continue;
! 	print_enode (gv, enode);
        }
-     pp_flush (pp);
-     gv->end_tr ();
-     return true;
    }
  
  private:
    /* Concisely print a TD element for ENODE, showing the index, status,
       and any saved_diagnostics at the enode.  Colorize it to show sm-state.
  
--- 4896,4984 ----
    exploded_graph_annotator (const exploded_graph &eg)
    : m_eg (eg)
    {
!     /* Avoid O(N^2) by prepopulating m_enodes_per_snode_id.  */
!     for (int i = 0; i < eg.get_supergraph ().m_nodes.length (); ++i)
!       m_enodes_per_snode_id.push_back (std::vector<exploded_node *> ());
      exploded_node *enode;
+     unsigned i;
      FOR_EACH_VEC_ELT (m_eg.m_nodes, i, enode)
        if (enode->get_supernode ())
! 	m_enodes_per_snode_id[enode->get_supernode ()->m_id].push_back (enode);
    }
  
!   /* Show exploded nodes for N.  */
!   void add_node_annotations (graphviz_out *gv, const supernode &n)
      const final override
    {
      gv->begin_tr ();
      pretty_printer *pp = gv->get_pp ();
  
!     if (m_enodes_per_snode_id[n.m_id].empty ())
!       pp_string (pp, "<TD BGCOLOR=\"red\">UNREACHED</TD>");
!     else
        {
! 	/* Adding an empty TD here makes the actual enodes
! 	   be right-aligned and tightly packed, greatly
! 	   improving the readability of the graph.  */
! 	pp_string (pp, "<TD></TD>");
! 	for (auto enode : m_enodes_per_snode_id[n.m_id])
! 	  {
! 	    gcc_assert (enode->get_supernode () == &n);
! 	    print_enode (gv, enode);
! 	  }
        }
! 
      pp_flush (pp);
      gv->end_tr ();
    }
  
!   void
!   add_extra_objects (graphviz_out *gv) const final override
    {
      pretty_printer *pp = gv->get_pp ();
  
!     pp_string (pp, "en_0 [shape=none,margin=0,style=filled,label=<<TABLE><TR>");
!     print_enode (gv, m_eg.m_nodes[0]);
!     pp_string (pp, "</TR></TABLE>>];\n\n");
      pp_flush (pp);
  
      unsigned i;
!     exploded_edge *eedge;
!     FOR_EACH_VEC_ELT (m_eg.m_edges, i, eedge)
        {
! 	print_enode_port (pp, *eedge->m_src, "s");
! 	pp_string (pp, " -> ");
! 	print_enode_port (pp, *eedge->m_dest, "n");
! 	dot::attr_list attrs;
! 	attrs.add (dot::id ("style"), dot::id ("dotted"));
! 	if (eedge->m_custom_info)
! 	  {
! 	    pretty_printer info_pp;
! 	    pp_format_decoder (&info_pp) = default_tree_printer;
! 	    eedge->m_custom_info->print (&info_pp);
! 	    attrs.add (dot::id ("label"),
! 		       dot::id (pp_formatted_text (&info_pp)));
! 	  }
! 	dot::writer w (*pp);
! 	attrs.print (w);
! 	pp_newline (pp);
        }
    }
  
  private:
+   void
+   print_enode_port (pretty_printer *pp,
+ 		    const exploded_node &enode,
+ 		    const char *compass_pt) const
+   {
+     if (const supernode *snode = enode.get_supernode ())
+       pp_printf (pp, "node_%i:en_%i:%s",
+ 		 snode->m_id, enode.m_index, compass_pt);
+     else
+       pp_printf (pp, "en_%i:%s",
+ 		 enode.m_index, compass_pt);
+   }
+ 
    /* Concisely print a TD element for ENODE, showing the index, status,
       and any saved_diagnostics at the enode.  Colorize it to show sm-state.
  
*************** private:
*** 6367,6373 ****
      pretty_printer *pp = gv->get_pp ();
      pp_printf (pp, "<TD BGCOLOR=\"%s\">",
  	       enode->get_dot_fillcolor ());
!     pp_printf (pp, "<TABLE BORDER=\"0\">");
      gv->begin_trtd ();
      pp_printf (pp, "EN: %i", enode->m_index);
      switch (enode->get_status ())
--- 4992,4998 ----
      pretty_printer *pp = gv->get_pp ();
      pp_printf (pp, "<TD BGCOLOR=\"%s\">",
  	       enode->get_dot_fillcolor ());
!     pp_printf (pp, "<TABLE BORDER=\"0\" PORT=\"en_%i\">", enode->m_index);
      gv->begin_trtd ();
      pp_printf (pp, "EN: %i", enode->m_index);
      switch (enode->get_status ())
*************** private:
*** 6433,6442 ****
  	p->m_eedge.m_sedge->dump (pp);
  	pp_write_text_as_html_like_dot_to_stream (pp);
  	gv->end_tdtr ();
- 	gv->begin_trtd ();
- 	pp_gimple_stmt_1 (pp, p->m_last_stmt, 0, (dump_flags_t)0);
- 	pp_write_text_as_html_like_dot_to_stream (pp);
- 	gv->end_tdtr ();
  	/* Ideally we'd print p->m_model here; see the notes above about
  	   tooltips.  */
        }
--- 5058,5063 ----
*************** private:
*** 6445,6451 ****
    }
  
    const exploded_graph &m_eg;
!   auto_delete_vec<auto_vec <exploded_node *> > m_enodes_per_snodes;
  };
  
  /* Implement -fdump-analyzer-json.  */
--- 5066,5072 ----
    }
  
    const exploded_graph &m_eg;
!   std::vector<std::vector <exploded_node *> > m_enodes_per_snode_id;
  };
  
  /* Implement -fdump-analyzer-json.  */
*************** private:
*** 6517,6522 ****
--- 5138,5166 ----
    logger *m_logger;
  };
  
+ static void
+ maybe_dump_supergraph (const supergraph &sg, const char *name,
+ 		       const dot_annotator *annotator = nullptr,
+ 		       const exploded_graph *eg = nullptr)
+ {
+   static int dump_idx = 0;
+   if (!flag_dump_analyzer_supergraph)
+     return;
+ 
+   auto_timevar tv (TV_ANALYZER_DUMP);
+   std::string filename (dump_base_name);
+   filename += ".supergraph.";
+   filename += std::to_string (dump_idx++);
+   filename += ".";
+   filename += name;
+   filename += ".dot";
+   supergraph::dump_args_t args
+     ((enum supergraph_dot_flags)SUPERGRAPH_DOT_SHOW_BBS,
+      annotator,
+      eg);
+   sg.dump_dot (filename.c_str (), args);
+ }
+ 
  /* Run the analysis "engine".  */
  
  void
*************** impl_run_checkers (logger *logger)
*** 6537,6568 ****
    FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
      node->get_untransformed_body ();
  
    /* Create the supergraph.  */
!   supergraph sg (logger);
  
!   engine eng (&sg, logger);
  
!   state_purge_map *purge_map = nullptr;
  
    if (flag_analyzer_state_purge)
      purge_map = new state_purge_map (sg, eng.get_model_manager (), logger);
  
!   if (flag_dump_analyzer_supergraph)
      {
!       /* Dump supergraph pre-analysis.  */
!       auto_timevar tv (TV_ANALYZER_DUMP);
!       char *filename = concat (dump_base_name, ".supergraph.dot", nullptr);
!       supergraph::dump_args_t args ((enum supergraph_dot_flags)0, nullptr);
!       sg.dump_dot (filename, args);
!       free (filename);
      }
  
    if (flag_dump_analyzer_state_purge)
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        state_purge_annotator a (purge_map);
        char *filename = concat (dump_base_name, ".state-purge.dot", nullptr);
!       supergraph::dump_args_t args ((enum supergraph_dot_flags)0, &a);
        sg.dump_dot (filename, args);
        free (filename);
      }
--- 5181,5218 ----
    FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
      node->get_untransformed_body ();
  
+   region_model_manager mgr;
+ 
    /* Create the supergraph.  */
!   supergraph sg (mgr, logger);
  
!   maybe_dump_supergraph (sg, "original");
  
!   sg.fixup_locations (logger);
! 
!   maybe_dump_supergraph (sg, "fixup-locations");
  
+   engine eng (mgr, &sg, logger);
+ 
+   state_purge_map *purge_map = nullptr;
    if (flag_analyzer_state_purge)
      purge_map = new state_purge_map (sg, eng.get_model_manager (), logger);
  
!   if (flag_analyzer_simplify_supergraph)
      {
!       sg.simplify (logger);
!       maybe_dump_supergraph (sg, "simplified");
      }
  
+   sg.sort_nodes (logger);
+   maybe_dump_supergraph (sg, "sorted");
+ 
    if (flag_dump_analyzer_state_purge)
      {
        auto_timevar tv (TV_ANALYZER_DUMP);
        state_purge_annotator a (purge_map);
        char *filename = concat (dump_base_name, ".state-purge.dot", nullptr);
!       supergraph::dump_args_t args ((enum supergraph_dot_flags)0, &a, nullptr);
        sg.dump_dot (filename, args);
        free (filename);
      }
*************** impl_run_checkers (logger *logger)
*** 6620,6637 ****
  
    eg.log_stats ();
  
-   if (flag_dump_analyzer_callgraph)
-     dump_callgraph (sg, &eg);
- 
    if (flag_dump_analyzer_supergraph)
      {
        /* Dump post-analysis form of supergraph.  */
-       auto_timevar tv (TV_ANALYZER_DUMP);
-       char *filename = concat (dump_base_name, ".supergraph-eg.dot", nullptr);
        exploded_graph_annotator a (eg);
!       supergraph::dump_args_t args ((enum supergraph_dot_flags)0, &a);
!       sg.dump_dot (filename, args);
!       free (filename);
      }
  
    if (flag_dump_analyzer_json)
--- 5270,5280 ----
  
    eg.log_stats ();
  
    if (flag_dump_analyzer_supergraph)
      {
        /* Dump post-analysis form of supergraph.  */
        exploded_graph_annotator a (eg);
!       maybe_dump_supergraph (sg, "eg", &a, &eg);
      }
  
    if (flag_dump_analyzer_json)
diff -Nrcpad gcc-16-20251207/gcc/analyzer/event-loc-info.h gcc-16-20251214/gcc/analyzer/event-loc-info.h
*** gcc-16-20251207/gcc/analyzer/event-loc-info.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/event-loc-info.h	Sun Dec 14 22:32:06 2025
*************** struct event_loc_info
*** 31,36 ****
--- 31,39 ----
    : m_loc (loc), m_fndecl (fndecl), m_depth (depth)
    {}
  
+   event_loc_info (const exploded_node *enode);
+   event_loc_info (const program_point &point);
+ 
    location_t m_loc;
    tree m_fndecl;
    int m_depth;
diff -Nrcpad gcc-16-20251207/gcc/analyzer/exploded-graph.h gcc-16-20251214/gcc/analyzer/exploded-graph.h
*** gcc-16-20251207/gcc/analyzer/exploded-graph.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/exploded-graph.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 29,34 ****
--- 29,35 ----
  #include "analyzer/sm.h"
  #include "analyzer/program-state.h"
  #include "analyzer/diagnostic-manager.h"
+ #include "analyzer/region-model.h"
  
  namespace ana {
  
*************** class impl_region_model_context : public
*** 47,56 ****
  			     program_state *new_state,
  			     uncertainty_t *uncertainty,
  			     path_context *path_ctxt,
! 
! 			     const gimple *stmt,
! 			     stmt_finder *stmt_finder = nullptr,
! 
  			     bool *out_could_have_done_work = nullptr);
  
    impl_region_model_context (program_state *state,
--- 48,54 ----
  			     program_state *new_state,
  			     uncertainty_t *uncertainty,
  			     path_context *path_ctxt,
! 			     const gimple *stmt = nullptr,
  			     bool *out_could_have_done_work = nullptr);
  
    impl_region_model_context (program_state *state,
*************** class impl_region_model_context : public
*** 58,65 ****
  			     uncertainty_t *uncertainty,
  			     logger *logger = nullptr);
  
!   bool warn (std::unique_ptr<pending_diagnostic> d,
! 	     const stmt_finder *custom_finder = nullptr) final override;
    void add_note (std::unique_ptr<pending_note> pn) final override;
    void add_event (std::unique_ptr<checker_event> event) final override;
    void on_svalue_leak (const svalue *) override;
--- 56,64 ----
  			     uncertainty_t *uncertainty,
  			     logger *logger = nullptr);
  
!   bool
!   warn_at (std::unique_ptr<pending_diagnostic> d,
! 	   pending_location &&ploc) final override;
    void add_note (std::unique_ptr<pending_note> pn) final override;
    void add_event (std::unique_ptr<checker_event> event) final override;
    void on_svalue_leak (const svalue *) override;
*************** class impl_region_model_context : public
*** 118,130 ****
    bool checking_for_infinite_loop_p () const override { return false; }
    void on_unusable_in_infinite_loop () override {}
  
    exploded_graph *m_eg;
    log_user m_logger;
    exploded_node *m_enode_for_diag;
    const program_state *m_old_state;
    program_state *m_new_state;
    const gimple *m_stmt;
-   stmt_finder *m_stmt_finder;
    const extrinsic_state &m_ext_state;
    uncertainty_t *m_uncertainty;
    path_context *m_path_ctxt;
--- 117,131 ----
    bool checking_for_infinite_loop_p () const override { return false; }
    void on_unusable_in_infinite_loop () override {}
  
+   pending_location
+   get_pending_location_for_diag () const override;
+ 
    exploded_graph *m_eg;
    log_user m_logger;
    exploded_node *m_enode_for_diag;
    const program_state *m_old_state;
    program_state *m_new_state;
    const gimple *m_stmt;
    const extrinsic_state &m_ext_state;
    uncertainty_t *m_uncertainty;
    path_context *m_path_ctxt;
*************** class exploded_node : public dnode<eg_tr
*** 224,230 ****
         exploded_graph::process_node called on it.  */
      merger,
  
!     /* Node was processed by maybe_process_run_of_before_supernode_enodes.  */
      bulk_merged
    };
    static const char * status_to_str (enum status s);
--- 225,231 ----
         exploded_graph::process_node called on it.  */
      merger,
  
!     /* Node was processed by maybe_process_run_of_enodes.  */
      bulk_merged
    };
    static const char * status_to_str (enum status s);
*************** class exploded_node : public dnode<eg_tr
*** 247,326 ****
  
    std::unique_ptr<json::object> to_json (const extrinsic_state &ext_state) const;
  
-   /* The result of on_stmt.  */
-   struct on_stmt_flags
-   {
-     on_stmt_flags () : m_terminate_path (false)
-     {}
- 
-     static on_stmt_flags terminate_path ()
-     {
-       return on_stmt_flags (true);
-     }
- 
-     /* Should we stop analyzing this path (on_stmt may have already
-        added nodes/edges, e.g. when handling longjmp).  */
-     bool m_terminate_path : 1;
- 
-   private:
-     on_stmt_flags (bool terminate_path)
-     : m_terminate_path (terminate_path)
-     {}
-   };
- 
-   on_stmt_flags on_stmt (exploded_graph &eg,
- 			 const supernode *snode,
- 			 const gimple *stmt,
- 			 program_state *state,
- 			 uncertainty_t *uncertainty,
- 			 bool *out_could_have_done_work,
- 			 path_context *path_ctxt);
-   void on_stmt_pre (exploded_graph &eg,
- 		    const gimple *stmt,
- 		    program_state *state,
- 		    bool *out_terminate_path,
- 		    bool *out_unknown_side_effects,
- 		    region_model_context *ctxt);
-   void on_stmt_post (const gimple *stmt,
- 		     program_state *state,
- 		     bool unknown_side_effects,
- 		     region_model_context *ctxt);
- 
-   on_stmt_flags replay_call_summaries (exploded_graph &eg,
- 				       const supernode *snode,
- 				       const gcall &call_stmt,
- 				       program_state *state,
- 				       path_context *path_ctxt,
- 				       const function &called_fn,
- 				       per_function_data &called_fn_data,
- 				       region_model_context *ctxt);
-   void replay_call_summary (exploded_graph &eg,
- 			    const supernode *snode,
- 			    const gcall &call_stmt,
- 			    program_state *state,
- 			    path_context *path_ctxt,
- 			    const function &called_fn,
- 			    call_summary &summary,
- 			    region_model_context *ctxt);
- 
-   bool on_edge (exploded_graph &eg,
- 		const superedge *succ,
- 		program_point *next_point,
- 		program_state *next_state,
- 		uncertainty_t *uncertainty);
    void on_longjmp (exploded_graph &eg,
  		   const gcall &call,
  		   program_state *new_state,
  		   region_model_context *ctxt);
    void on_throw (exploded_graph &eg,
  		 const gcall &call,
  		 program_state *new_state,
  		 bool is_rethrow,
  		 region_model_context *ctxt);
-   void on_resx (exploded_graph &eg,
- 		const gresx &resx,
- 		program_state *new_state,
- 		region_model_context *ctxt);
  
    void detect_leaks (exploded_graph &eg);
  
--- 248,263 ----
  
    std::unique_ptr<json::object> to_json (const extrinsic_state &ext_state) const;
  
    void on_longjmp (exploded_graph &eg,
  		   const gcall &call,
  		   program_state *new_state,
  		   region_model_context *ctxt);
    void on_throw (exploded_graph &eg,
  		 const gcall &call,
+ 		 const program_point &after_throw_point,
  		 program_state *new_state,
  		 bool is_rethrow,
  		 region_model_context *ctxt);
  
    void detect_leaks (exploded_graph &eg);
  
*************** class exploded_node : public dnode<eg_tr
*** 329,334 ****
--- 266,275 ----
    {
      return get_point ().get_supernode ();
    }
+   location_t get_location () const
+   {
+     return get_point ().get_location ();
+   }
    function *get_function () const
    {
      return get_point ().get_function ();
*************** class exploded_node : public dnode<eg_tr
*** 337,344 ****
    {
      return get_point ().get_stack_depth ();
    }
-   const gimple *get_stmt () const { return get_point ().get_stmt (); }
-   const gimple *get_processed_stmt (unsigned idx) const;
  
    const program_state &get_state () const { return m_ps.get_state (); }
  
--- 278,283 ----
*************** class exploded_edge : public dedge<eg_tr
*** 414,419 ****
--- 353,361 ----
  
    bool could_do_work_p () const { return m_could_do_work_p; }
  
+   const gimple *maybe_get_stmt () const;
+   const operation *maybe_get_op () const;
+ 
  private:
    DISABLE_COPY_AND_ASSIGN (exploded_edge);
  
*************** private:
*** 433,469 ****
    bool m_could_do_work_p;
  };
  
! /* Extra data for an exploded_edge that represents dynamic call info ( calls
!    that doesn't have an underlying superedge representing the call ).  */
  
! class dynamic_call_info_t : public custom_edge_info
  {
  public:
!   dynamic_call_info_t (const gcall &dynamic_call,
!   		       const bool is_returning_call = false)
!   : m_dynamic_call (dynamic_call),
!     m_is_returning_call (is_returning_call)
    {}
  
!   void print (pretty_printer *pp) const final override
!   {
!     if (m_is_returning_call)
!       pp_string (pp, "dynamic_return");
!     else
!       pp_string (pp, "dynamic_call");
!   }
  
    bool update_model (region_model *model,
  		     const exploded_edge *eedge,
  		     region_model_context *ctxt) const final override;
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge) const final override;
  private:
!   const gcall &m_dynamic_call;
!   const bool m_is_returning_call;
  };
  
  
  /* Extra data for an exploded_edge that represents a rewind from a
     longjmp to a setjmp (or from a siglongjmp to a sigsetjmp).  */
--- 375,444 ----
    bool m_could_do_work_p;
  };
  
! /* Extra data for an exploded_edge that represents an interprocedural
!    call.  */
  
! class interprocedural_call : public custom_edge_info
  {
  public:
!   interprocedural_call (const gcall &call_stmt,
! 			function &callee_fun)
!   : m_call_stmt (call_stmt),
!     m_callee_fun (callee_fun)
    {}
  
!   void print (pretty_printer *pp) const final override;
! 
!   void get_dot_attrs (const char *&out_style,
! 		      const char *&out_color) const final override;
! 
!   bool update_state (program_state *state,
! 		     const exploded_edge *eedge,
! 		     region_model_context *ctxt) const final override;
  
    bool update_model (region_model *model,
  		     const exploded_edge *eedge,
  		     region_model_context *ctxt) const final override;
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge,
! 			   pending_diagnostic &pd) const final override;
! 
  private:
!   const gcall &m_call_stmt;
!   function &m_callee_fun;
  };
  
+ /* Extra data for an exploded_edge that represents an interprocedural
+    return.  */
+ 
+ class interprocedural_return : public custom_edge_info
+ {
+ public:
+   interprocedural_return (const gcall &call_stmt)
+   : m_call_stmt (call_stmt)
+   {}
+ 
+   void print (pretty_printer *pp) const final override;
+ 
+   void get_dot_attrs (const char *&out_style,
+ 		      const char *&out_color) const final override;
+ 
+   bool update_state (program_state *state,
+ 		     const exploded_edge *eedge,
+ 		     region_model_context *ctxt) const final override;
+ 
+   bool update_model (region_model *model,
+ 		     const exploded_edge *eedge,
+ 		     region_model_context *ctxt) const final override;
+ 
+   void add_events_to_path (checker_path *emission_path,
+ 			   const exploded_edge &eedge,
+ 			   pending_diagnostic &pd) const final override;
+ 
+ private:
+   const gcall &m_call_stmt;
+ };
  
  /* Extra data for an exploded_edge that represents a rewind from a
     longjmp to a setjmp (or from a siglongjmp to a sigsetjmp).  */
*************** public:
*** 487,504 ****
  		     region_model_context *ctxt) const final override;
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge) const final override;
  
!   const program_point &get_setjmp_point () const
    {
!     const program_point &origin_point = get_enode_origin ()->get_point ();
! 
!     /* "origin_point" ought to be before the call to "setjmp".  */
!     gcc_assert (origin_point.get_kind () == PK_BEFORE_STMT);
! 
!     /* TODO: assert that it's the final stmt in its supernode.  */
  
!     return origin_point;
    }
  
    const gcall &get_setjmp_call () const
--- 462,482 ----
  		     region_model_context *ctxt) const final override;
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge,
! 			   pending_diagnostic &pd) const final override;
  
!   program_point
!   get_point_before_setjmp () const
    {
!     return get_enode_origin ()->get_point ();
!   }
  
!   program_point
!   get_point_after_setjmp () const
!   {
!     const program_point &origin_point = get_enode_origin ()->get_point ();
!     return program_point (m_setjmp_record.m_sedge->m_dest,
! 			  origin_point.get_call_string ());
    }
  
    const gcall &get_setjmp_call () const
*************** struct stats
*** 531,537 ****
  
    int get_total_enodes () const;
  
!   int m_num_nodes[NUM_POINT_KINDS];
    int m_node_reuse_count;
    int m_node_reuse_after_merge_count;
    int m_num_supernodes;
--- 509,515 ----
  
    int get_total_enodes () const;
  
!   int m_num_nodes;
    int m_node_reuse_count;
    int m_node_reuse_after_merge_count;
    int m_num_supernodes;
*************** struct per_function_data
*** 686,692 ****
    auto_vec<call_summary *> m_summaries;
  };
  
- 
  /* The strongly connected components of a supergraph.
     In particular, this allows us to compute a partial ordering
     of supernodes.  */
--- 664,669 ----
*************** private:
*** 709,723 ****
    struct per_node_data
    {
      per_node_data ()
!       : m_index (-1), m_lowlink (-1), m_on_stack (false)
      {}
  
!     int m_index;
      int m_lowlink;
      bool m_on_stack;
    };
  
!   void strong_connect (unsigned index);
  
    const supergraph &m_sg;
    auto_vec<unsigned> m_stack;
--- 686,700 ----
    struct per_node_data
    {
      per_node_data ()
!     : m_id (-1), m_lowlink (-1), m_on_stack (false)
      {}
  
!     int m_id;
      int m_lowlink;
      bool m_on_stack;
    };
  
!   void strong_connect (unsigned index, logger *logger);
  
    const supergraph &m_sg;
    auto_vec<unsigned> m_stack;
*************** public:
*** 744,750 ****
    void add_node (exploded_node *enode);
    int get_scc_id (const supernode &snode) const
    {
!     return m_scc.get_scc_id (snode.m_index);
    }
  
    std::unique_ptr<json::object> to_json () const;
--- 721,727 ----
    void add_node (exploded_node *enode);
    int get_scc_id (const supernode &snode) const
    {
!     return m_scc.get_scc_id (snode.m_id);
    }
  
    std::unique_ptr<json::object> to_json () const;
*************** private:
*** 780,786 ****
        const supernode *snode = enode->get_supernode ();
        if (snode == nullptr)
  	return 0;
!       return m_worklist.m_scc.get_scc_id (snode->m_index);
      }
  
      const worklist &m_worklist;
--- 757,763 ----
        const supernode *snode = enode->get_supernode ();
        if (snode == nullptr)
  	return 0;
!       return m_worklist.m_scc.get_scc_id (snode->m_id);
      }
  
      const worklist &m_worklist;
*************** public:
*** 829,845 ****
  
    void build_initial_worklist ();
    void process_worklist ();
!   bool maybe_process_run_of_before_supernode_enodes (exploded_node *node);
    void process_node (exploded_node *node);
  
-   bool maybe_create_dynamic_call (const gcall &call,
-                                   tree fn_decl,
-                                   exploded_node *node,
-                                   program_state next_state,
-                                   program_point &next_point,
-                                   uncertainty_t *uncertainty,
-                                   logger *logger);
- 
    exploded_node *get_or_create_node (const program_point &point,
  				     const program_state &state,
  				     exploded_node *enode_for_diag,
--- 806,814 ----
  
    void build_initial_worklist ();
    void process_worklist ();
!   bool maybe_process_run_of_enodes (exploded_node *node);
    void process_node (exploded_node *node);
  
    exploded_node *get_or_create_node (const program_point &point,
  				     const program_state &state,
  				     exploded_node *enode_for_diag,
*************** public:
*** 863,869 ****
    void save_diagnostic (const state_machine &sm,
  			const exploded_node *enode,
  			const supernode *node, const gimple *stmt,
- 			stmt_finder *finder,
  			tree var, state_machine::state_t state,
  			pending_diagnostic *d);
  
--- 832,837 ----
*************** public:
*** 880,886 ****
    stats *get_or_create_function_stats (function *fn);
    void log_stats () const;
    void dump_stats (FILE *) const;
-   void dump_states_for_supernode (FILE *, const supernode *snode) const;
    void dump_exploded_nodes () const;
  
    std::unique_ptr<json::object> to_json () const;
--- 848,853 ----
*************** private:
*** 954,961 ****
  
    call_string_data_map_t m_per_call_string_data;
  
-   auto_vec<int> m_PK_AFTER_SUPERNODE_per_snode;
- 
    /* Functions with a top-level enode, to make add_function_entry
       be idempotent, for use in handling callbacks.  */
    hash_set<function *> m_functions_with_enodes;
--- 921,926 ----
*************** class feasibility_problem
*** 996,1012 ****
  public:
    feasibility_problem (unsigned eedge_idx,
  		       const exploded_edge &eedge,
- 		       const gimple *last_stmt,
  		       std::unique_ptr<rejected_constraint> rc)
    : m_eedge_idx (eedge_idx), m_eedge (eedge),
!     m_last_stmt (last_stmt), m_rc (std::move (rc))
    {}
  
    void dump_to_pp (pretty_printer *pp) const;
  
    unsigned m_eedge_idx;
    const exploded_edge &m_eedge;
-   const gimple *m_last_stmt;
    std::unique_ptr<rejected_constraint> m_rc;
  };
  
--- 961,975 ----
  public:
    feasibility_problem (unsigned eedge_idx,
  		       const exploded_edge &eedge,
  		       std::unique_ptr<rejected_constraint> rc)
    : m_eedge_idx (eedge_idx), m_eedge (eedge),
!     m_rc (std::move (rc))
    {}
  
    void dump_to_pp (pretty_printer *pp) const;
  
    unsigned m_eedge_idx;
    const exploded_edge &m_eedge;
    std::unique_ptr<rejected_constraint> m_rc;
  };
  
*************** public:
*** 1028,1036 ****
  			      const exploded_edge *eedge,
  			      region_model_context *ctxt,
  			      std::unique_ptr<rejected_constraint> *out_rc);
-   void update_for_stmt (const gimple *stmt);
  
    const region_model &get_model () const { return m_model; }
    const auto_sbitmap &get_snodes_visited () const { return m_snodes_visited; }
  
    void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const;
--- 991,1000 ----
  			      const exploded_edge *eedge,
  			      region_model_context *ctxt,
  			      std::unique_ptr<rejected_constraint> *out_rc);
  
+   region_model &get_model () { return m_model; }
    const region_model &get_model () const { return m_model; }
+   auto_sbitmap &get_snodes_visited () { return m_snodes_visited; }
    const auto_sbitmap &get_snodes_visited () const { return m_snodes_visited; }
  
    void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const;
*************** private:
*** 1044,1063 ****
  
  typedef shortest_paths<eg_traits, exploded_path> shortest_exploded_paths;
  
- /* Abstract base class for use when passing nullptr as the stmt for
-    a possible warning, allowing the choice of stmt to be deferred
-    until after we have an emission path (and know we're emitting a
-    warning).  */
- 
- class stmt_finder
- {
- public:
-   virtual ~stmt_finder () {}
-   virtual std::unique_ptr<stmt_finder> clone () const = 0;
-   virtual const gimple *find_stmt (const exploded_path &epath) = 0;
-   virtual void update_event_loc_info (event_loc_info &) = 0;
- };
- 
  // TODO: split the above up?
  
  } // namespace ana
--- 1008,1013 ----
diff -Nrcpad gcc-16-20251207/gcc/analyzer/feasible-graph.cc gcc-16-20251214/gcc/analyzer/feasible-graph.cc
*** gcc-16-20251207/gcc/analyzer/feasible-graph.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/feasible-graph.cc	Sun Dec 14 22:32:06 2025
*************** feasible_node::dump_dot (graphviz_out *g
*** 81,87 ****
    m_state.get_model ().dump_to_pp (pp, true, true);
    pp_newline (pp);
  
-   m_inner_node->dump_processed_stmts (pp);
    m_inner_node->dump_saved_diagnostics (pp);
  
    pp_write_text_as_dot_label_to_stream (pp, /*for_record=*/true);
--- 81,86 ----
*************** feasible_node::dump_dot (graphviz_out *g
*** 90,125 ****
    pp_flush (pp);
  }
  
- /* Attempt to get the region_model for this node's state at TARGET_STMT.
-    Return true and write to *OUT if found.
-    Return false if there's a problem.  */
- 
- bool
- feasible_node::get_state_at_stmt (const gimple *target_stmt,
- 				  region_model *out) const
- {
-   if (!target_stmt)
-     return false;
- 
-   feasibility_state result (m_state);
- 
-   /* Update state for the stmts that were processed in each enode.  */
-   for (unsigned stmt_idx = 0; stmt_idx < m_inner_node->m_num_processed_stmts;
-        stmt_idx++)
-     {
-       const gimple *stmt = m_inner_node->get_processed_stmt (stmt_idx);
-       if (stmt == target_stmt)
- 	{
- 	  *out = result.get_model ();
- 	  return true;
- 	}
-       result.update_for_stmt (stmt);
-     }
- 
-   /* TARGET_STMT not found; wrong node?  */
-   return false;
- }
- 
  /* Implementation of dump_dot vfunc for infeasible_node.
     In particular, show the rejected constraint.  */
  
--- 89,94 ----
diff -Nrcpad gcc-16-20251207/gcc/analyzer/impl-sm-context.h gcc-16-20251214/gcc/analyzer/impl-sm-context.h
*** gcc-16-20251207/gcc/analyzer/impl-sm-context.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/analyzer/impl-sm-context.h	Sun Dec 14 22:32:06 2025
***************
*** 0 ****
--- 1,289 ----
+ /* Concrete implementation of sm_context.
+    Copyright (C) 2019-2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_ANALYZER_IMPL_SM_CONTEXT
+ #define GCC_ANALYZER_IMPL_SM_CONTEXT
+ 
+ namespace ana {
+ 
+ /* Concrete implementation of sm_context, wiring it up to the rest of this
+    file.  */
+ 
+ class impl_sm_context : public sm_context
+ {
+ public:
+   impl_sm_context (exploded_graph &eg,
+ 		   int sm_idx,
+ 		   const state_machine &sm,
+ 		   exploded_node *enode_for_diag,
+ 		   const program_state *old_state,
+ 		   program_state *new_state,
+ 		   const sm_state_map *old_smap,
+ 		   sm_state_map *new_smap,
+ 		   path_context *path_ctxt,
+ 		   bool unknown_side_effects = false)
+   : sm_context (sm_idx, sm),
+     m_logger (eg.get_logger ()),
+     m_eg (eg), m_enode_for_diag (enode_for_diag),
+     m_old_state (old_state), m_new_state (new_state),
+     m_old_smap (old_smap), m_new_smap (new_smap),
+     m_path_ctxt (path_ctxt),
+     m_unknown_side_effects (unknown_side_effects)
+   {
+   }
+ 
+   logger *get_logger () const { return m_logger.get_logger (); }
+ 
+   tree get_fndecl_for_call (const gcall &call) final override
+   {
+     impl_region_model_context old_ctxt
+       (m_eg, m_enode_for_diag, nullptr, nullptr, nullptr/*m_enode->get_state ()*/,
+        nullptr, &call);
+     region_model *model = m_new_state->m_region_model;
+     return model->get_fndecl_for_call (call, &old_ctxt);
+   }
+ 
+   state_machine::state_t get_state (tree var) final override
+   {
+     logger * const logger = get_logger ();
+     LOG_FUNC (logger);
+     /* Use nullptr ctxt on this get_rvalue call to avoid triggering
+        uninitialized value warnings.  */
+     const svalue *var_old_sval
+       = m_old_state->m_region_model->get_rvalue (var, nullptr);
+ 
+     state_machine::state_t current
+       = m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ());
+     return current;
+   }
+   state_machine::state_t get_state (const svalue *sval) final override
+   {
+     logger * const logger = get_logger ();
+     LOG_FUNC (logger);
+     state_machine::state_t current
+       = m_old_smap->get_state (sval, m_eg.get_ext_state ());
+     return current;
+   }
+ 
+ 
+   void set_next_state (tree var,
+ 		       state_machine::state_t to,
+ 		       tree origin) final override
+   {
+     logger * const logger = get_logger ();
+     LOG_FUNC (logger);
+     const svalue *var_new_sval
+       = m_new_state->m_region_model->get_rvalue (var, nullptr);
+     const svalue *origin_new_sval
+       = m_new_state->m_region_model->get_rvalue (origin, nullptr);
+ 
+     /* We use the new sval here to avoid issues with uninitialized values.  */
+     state_machine::state_t current
+       = m_old_smap->get_state (var_new_sval, m_eg.get_ext_state ());
+     if (logger)
+       logger->log ("%s: state transition of %qE: %s -> %s",
+ 		   m_sm.get_name (),
+ 		   var,
+ 		   current->get_name (),
+ 		   to->get_name ());
+     m_new_smap->set_state (m_new_state->m_region_model, var_new_sval,
+ 			   to, origin_new_sval, m_eg.get_ext_state ());
+   }
+ 
+   void set_next_state (const svalue *sval,
+ 		       state_machine::state_t to,
+ 		       tree origin) final override
+   {
+     logger * const logger = get_logger ();
+     LOG_FUNC (logger);
+     impl_region_model_context old_ctxt
+       (m_eg, m_enode_for_diag, nullptr, nullptr, nullptr/*m_enode->get_state ()*/,
+        nullptr, nullptr);
+ 
+     const svalue *origin_new_sval
+       = m_new_state->m_region_model->get_rvalue (origin, nullptr);
+ 
+     state_machine::state_t current
+       = m_old_smap->get_state (sval, m_eg.get_ext_state ());
+     if (logger)
+       {
+ 	logger->start_log_line ();
+ 	logger->log_partial ("%s: state transition of ",
+ 			     m_sm.get_name ());
+ 	sval->dump_to_pp (logger->get_printer (), true);
+ 	logger->log_partial (": %s -> %s",
+ 			     current->get_name (),
+ 			     to->get_name ());
+ 	logger->end_log_line ();
+       }
+     m_new_smap->set_state (m_new_state->m_region_model, sval,
+ 			   to, origin_new_sval, m_eg.get_ext_state ());
+   }
+ 
+   void warn (tree var,
+ 	     std::unique_ptr<pending_diagnostic> d) final override
+   {
+     LOG_FUNC (get_logger ());
+     gcc_assert (d);
+     const svalue *var_old_sval
+       = m_old_state->m_region_model->get_rvalue (var, nullptr);
+     state_machine::state_t current
+       = (var
+ 	 ? m_old_smap->get_state (var_old_sval, m_eg.get_ext_state ())
+ 	 : m_old_smap->get_global_state ());
+     bool terminate_path = d->terminate_path_p ();
+     pending_location ploc (m_enode_for_diag);
+     m_eg.get_diagnostic_manager ().add_diagnostic
+       (&m_sm, std::move (ploc),
+        var, var_old_sval, current, std::move (d));
+     if (m_path_ctxt
+ 	&& terminate_path
+ 	&& flag_analyzer_suppress_followups)
+       m_path_ctxt->terminate_path ();
+   }
+ 
+   void warn (const svalue *sval,
+ 	     std::unique_ptr<pending_diagnostic> d) final override
+   {
+     LOG_FUNC (get_logger ());
+     gcc_assert (d);
+     state_machine::state_t current
+       = (sval
+ 	 ? m_old_smap->get_state (sval, m_eg.get_ext_state ())
+ 	 : m_old_smap->get_global_state ());
+     bool terminate_path = d->terminate_path_p ();
+     pending_location ploc (m_enode_for_diag);
+     m_eg.get_diagnostic_manager ().add_diagnostic
+       (&m_sm, std::move (ploc),
+        NULL_TREE, sval, current, std::move (d));
+     if (m_path_ctxt
+ 	&& terminate_path
+ 	&& flag_analyzer_suppress_followups)
+       m_path_ctxt->terminate_path ();
+   }
+ 
+   /* Hook for picking more readable trees for SSA names of temporaries,
+      so that rather than e.g.
+        "double-free of '<unknown>'"
+      we can print:
+        "double-free of 'inbuf.data'".  */
+ 
+   tree get_diagnostic_tree (tree expr) final override
+   {
+     /* Only for SSA_NAMEs of temporaries; otherwise, return EXPR, as it's
+        likely to be the least surprising tree to report.  */
+     if (TREE_CODE (expr) != SSA_NAME)
+       return expr;
+     if (SSA_NAME_VAR (expr) != NULL)
+       return expr;
+ 
+     gcc_assert (m_new_state);
+     const svalue *sval = m_new_state->m_region_model->get_rvalue (expr, nullptr);
+     /* Find trees for all regions storing the value.  */
+     if (tree t = m_new_state->m_region_model->get_representative_tree (sval))
+       return t;
+     else
+       return expr;
+   }
+ 
+   tree get_diagnostic_tree (const svalue *sval) final override
+   {
+     return m_new_state->m_region_model->get_representative_tree (sval);
+   }
+ 
+   state_machine::state_t get_global_state () const final override
+   {
+     return m_old_state->m_checker_states[m_sm_idx]->get_global_state ();
+   }
+ 
+   void set_global_state (state_machine::state_t state) final override
+   {
+     m_new_state->m_checker_states[m_sm_idx]->set_global_state (state);
+   }
+ 
+   void clear_all_per_svalue_state () final override
+   {
+     m_new_state->m_checker_states[m_sm_idx]->clear_all_per_svalue_state ();
+   }
+ 
+   void on_custom_transition (custom_transition *transition) final override
+   {
+     transition->impl_transition (&m_eg,
+ 				 const_cast<exploded_node *> (m_enode_for_diag),
+ 				 m_sm_idx);
+   }
+ 
+   tree is_zero_assignment (const gimple *stmt) final override
+   {
+     const gassign *assign_stmt = dyn_cast <const gassign *> (stmt);
+     if (!assign_stmt)
+      return NULL_TREE;
+     impl_region_model_context old_ctxt
+       (m_eg, m_enode_for_diag, m_old_state, m_new_state, nullptr, nullptr, stmt);
+     if (const svalue *sval
+ 	= m_new_state->m_region_model->get_gassign_result (assign_stmt,
+ 							    &old_ctxt))
+       if (tree cst = sval->maybe_get_constant ())
+ 	if (::zerop(cst))
+ 	  return gimple_assign_lhs (assign_stmt);
+     return NULL_TREE;
+   }
+ 
+   path_context *get_path_context () const final override
+   {
+     return m_path_ctxt;
+   }
+ 
+   bool unknown_side_effects_p () const final override
+   {
+     return m_unknown_side_effects;
+   }
+ 
+   const program_state *get_old_program_state () const final override
+   {
+     return m_old_state;
+   }
+ 
+   const program_state *get_new_program_state () const final override
+   {
+     return m_new_state;
+   }
+ 
+   location_t get_emission_location () const final override
+   {
+     return pending_location (m_enode_for_diag).get_location ();
+   }
+ 
+   log_user m_logger;
+   exploded_graph &m_eg;
+   exploded_node *m_enode_for_diag;
+   const program_state *m_old_state;
+   program_state *m_new_state;
+   const sm_state_map *m_old_smap;
+   sm_state_map *m_new_smap;
+   path_context *m_path_ctxt;
+ 
+   /* Are we handling an external function with unknown side effects?  */
+   bool m_unknown_side_effects;
+ };
+ 
+ } // namespace ana
+ 
+ #endif /* GCC_ANALYZER_IMPL_SM_CONTEXT */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/infinite-loop.cc gcc-16-20251214/gcc/analyzer/infinite-loop.cc
*** gcc-16-20251207/gcc/analyzer/infinite-loop.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/infinite-loop.cc	Sun Dec 14 22:32:06 2025
*************** class perpetual_start_cfg_edge_event : p
*** 108,115 ****
  {
  public:
    perpetual_start_cfg_edge_event (const exploded_edge &eedge,
! 				  const event_loc_info &loc_info)
!   : start_cfg_edge_event (eedge, loc_info)
    {
    }
  
--- 108,116 ----
  {
  public:
    perpetual_start_cfg_edge_event (const exploded_edge &eedge,
! 				  const event_loc_info &loc_info,
! 				  const control_flow_op *op)
!   : start_cfg_edge_event (eedge, loc_info, op)
    {
    }
  
*************** public:
*** 119,128 ****
      label_text edge_desc (m_sedge->get_description (user_facing));
      if (user_facing)
        {
! 	if (edge_desc.get () && strlen (edge_desc.get ()) > 0)
  	  {
  	    label_text cond_desc
! 	      = maybe_describe_condition (pp_show_color (&pp));
  	    if (cond_desc.get ())
  	      pp_printf (&pp,
  			 "%s: always following %qs branch...",
--- 120,131 ----
      label_text edge_desc (m_sedge->get_description (user_facing));
      if (user_facing)
        {
! 	if (edge_desc.get ()
! 	    && strlen (edge_desc.get ()) > 0
! 	    && m_op)
  	  {
  	    label_text cond_desc
! 	      = m_op->maybe_describe_condition (pp_show_color (&pp));
  	    if (cond_desc.get ())
  	      pp_printf (&pp,
  			 "%s: always following %qs branch...",
*************** class looping_back_event : public start_
*** 143,150 ****
  {
  public:
    looping_back_event (const exploded_edge &eedge,
! 		      const event_loc_info &loc_info)
!   : start_cfg_edge_event (eedge, loc_info)
    {
    }
  
--- 146,154 ----
  {
  public:
    looping_back_event (const exploded_edge &eedge,
! 		      const event_loc_info &loc_info,
! 		      const control_flow_op *op)
!   : start_cfg_edge_event (eedge, loc_info, op)
    {
    }
  
*************** public:
*** 189,196 ****
      return ctxt.warn ("infinite loop");
    }
  
!   bool maybe_add_custom_events_for_superedge (const exploded_edge &,
! 					      checker_path *)
      final override
    {
      /* Don't add any regular events; instead we add them after pruning as
--- 193,200 ----
      return ctxt.warn ("infinite loop");
    }
  
!   bool maybe_add_custom_events_for_eedge (const exploded_edge &,
! 					  checker_path *)
      final override
    {
      /* Don't add any regular events; instead we add them after pruning as
*************** public:
*** 235,243 ****
  	if (!eedge->m_sedge)
  	  continue;
  
! 	const cfg_superedge *cfg_sedge
! 	  = eedge->m_sedge->dyn_cast_cfg_superedge ();
! 	if (!cfg_sedge)
  	  continue;
  
  	const exploded_node *src_node = eedge->m_src;
--- 239,246 ----
  	if (!eedge->m_sedge)
  	  continue;
  
! 	::edge cfg_edge = eedge->m_sedge->get_any_cfg_edge ();
! 	if (!cfg_edge)
  	  continue;
  
  	const exploded_node *src_node = eedge->m_src;
*************** public:
*** 246,308 ****
  	const program_point &dst_point = dst_node->get_point ();
  	const int src_stack_depth = src_point.get_stack_depth ();
  	const int dst_stack_depth = dst_point.get_stack_depth ();
- 	const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt ();
- 
  	event_loc_info loc_info_from
! 	  (last_stmt ? last_stmt->location : cfg_sedge->get_goto_locus (),
  	   src_point.get_fndecl (),
  	   src_stack_depth);
  	event_loc_info loc_info_to
! 	  (dst_point.get_supernode ()->get_start_location (),
  	   dst_point.get_fndecl (),
  	   dst_stack_depth);
! 
! 	if (const switch_cfg_superedge *switch_cfg_sedge
! 	      = cfg_sedge->dyn_cast_switch_cfg_superedge ())
! 	  {
! 	    if (switch_cfg_sedge->implicitly_created_default_p ())
! 	      {
! 		emission_path->add_event
! 		  (std::make_unique<perpetual_start_cfg_edge_event>
  		     (*eedge,
! 		      loc_info_from));
! 		emission_path->add_event
! 		  (std::make_unique<end_cfg_edge_event>
  		     (*eedge,
! 		      loc_info_to));
! 	      }
! 	  }
  
! 	if (cfg_sedge->true_value_p ())
! 	  {
! 	    emission_path->add_event
! 	      (std::make_unique<perpetual_start_cfg_edge_event>
! 		 (*eedge,
! 		  loc_info_from));
! 	    emission_path->add_event
! 	      (std::make_unique<end_cfg_edge_event>
! 		 (*eedge,
! 		  loc_info_to));
! 	  }
! 	else if (cfg_sedge->false_value_p ())
! 	  {
! 	    emission_path->add_event
! 	      (std::make_unique<perpetual_start_cfg_edge_event>
! 		 (*eedge,
! 		  loc_info_from));
! 	    emission_path->add_event
! 	      (std::make_unique<end_cfg_edge_event>
! 		 (*eedge,
! 		  loc_info_to));
! 	  }
! 	else if (cfg_sedge->back_edge_p ())
  	  {
  	    emission_path->add_event
! 	      (std::make_unique<looping_back_event> (*eedge, loc_info_from));
  	    emission_path->add_event
  	      (std::make_unique<end_cfg_edge_event>
  		 (*eedge,
! 		  loc_info_to));
  	  }
        }
    }
--- 249,321 ----
  	const program_point &dst_point = dst_node->get_point ();
  	const int src_stack_depth = src_point.get_stack_depth ();
  	const int dst_stack_depth = dst_point.get_stack_depth ();
  	event_loc_info loc_info_from
! 	  (src_point.get_supernode ()->get_location (),
  	   src_point.get_fndecl (),
  	   src_stack_depth);
  	event_loc_info loc_info_to
! 	  (dst_point.get_supernode ()->get_location (),
  	   dst_point.get_fndecl (),
  	   dst_stack_depth);
! 	if (auto base_op = eedge->m_sedge->get_op ())
! 	  if (auto control_flow_op = base_op->dyn_cast_control_flow_op ())
! 	    {
! 	      if (control_flow_op->get_kind () == operation::switch_edge)
! 		{
! 		  const switch_case_op &case_op
! 		    = *(const switch_case_op *)base_op;
! 		  if (case_op.implicitly_created_default_p ())
! 		    {
! 		      emission_path->add_event
! 			(std::make_unique<perpetual_start_cfg_edge_event>
! 			 (*eedge,
! 			  loc_info_from,
! 			  control_flow_op));
! 		      emission_path->add_event
! 			(std::make_unique<end_cfg_edge_event>
! 			 (*eedge,
! 			  loc_info_to,
! 			  control_flow_op));
! 		    }
! 		}
! 	      else if (cfg_edge->flags & EDGE_TRUE_VALUE)
! 		{
! 		  emission_path->add_event
! 		    (std::make_unique<perpetual_start_cfg_edge_event>
  		     (*eedge,
! 		      loc_info_from,
! 		      control_flow_op));
! 		  emission_path->add_event
! 		    (std::make_unique<end_cfg_edge_event>
  		     (*eedge,
! 		      loc_info_to,
! 		      control_flow_op));
! 		}
! 	      else if (cfg_edge->flags & EDGE_FALSE_VALUE)
! 		{
! 		  emission_path->add_event
! 		    (std::make_unique<perpetual_start_cfg_edge_event>
! 		     (*eedge,
! 		      loc_info_from,
! 		      control_flow_op));
! 		  emission_path->add_event
! 		    (std::make_unique<end_cfg_edge_event>
! 		     (*eedge,
! 		      loc_info_to,
! 		      control_flow_op));
! 		}
! 	    }
  
! 	if (cfg_edge->flags & EDGE_DFS_BACK)
  	  {
  	    emission_path->add_event
! 	      (std::make_unique<looping_back_event> (*eedge, loc_info_from,
! 						     nullptr));
  	    emission_path->add_event
  	      (std::make_unique<end_cfg_edge_event>
  		 (*eedge,
! 		  loc_info_to,
! 		  nullptr));
  	  }
        }
    }
*************** get_in_edge_back_edge (const exploded_no
*** 333,343 ****
        const superedge *sedge = in_edge->m_sedge;
        if (!sedge)
  	continue;
!       const cfg_superedge *cfg_sedge = sedge->dyn_cast_cfg_superedge ();
!       if (!cfg_sedge)
! 	continue;
!       if (cfg_sedge->back_edge_p ())
! 	return in_edge;
      }
    return nullptr;
  }
--- 346,354 ----
        const superedge *sedge = in_edge->m_sedge;
        if (!sedge)
  	continue;
!       if (::edge cfg_in_edge = sedge->get_any_cfg_edge ())
! 	if (cfg_in_edge->flags & EDGE_DFS_BACK)
! 	  return in_edge;
      }
    return nullptr;
  }
*************** starts_infinite_loop_p (const exploded_n
*** 458,466 ****
        visited.add (iter);
        if (first_loc == UNKNOWN_LOCATION)
  	{
! 	  location_t enode_loc = iter->get_point ().get_location ();
! 	  if (enode_loc != UNKNOWN_LOCATION)
! 	    first_loc = enode_loc;
  	}
  
        /* Find the out-edges that are feasible, given the
--- 469,485 ----
        visited.add (iter);
        if (first_loc == UNKNOWN_LOCATION)
  	{
! 	  auto snode = iter->get_supernode ();
! 	  gcc_assert (snode);
! 	  /* Ignore initial location in loop if it's a merger node,
! 	     to avoid using locations of phi nodes that are at the end
! 	     of the loop in the source.  */
! 	  if (!(iter == &enode && snode->m_state_merger_node))
! 	    {
! 	      location_t enode_loc = snode->get_location ();
! 	      if (useful_location_p (enode_loc))
! 		first_loc = enode_loc;
! 	    }
  	}
  
        /* Find the out-edges that are feasible, given the
*************** exploded_graph::detect_infinite_loops ()
*** 555,562 ****
        if (std::unique_ptr<infinite_loop> inf_loop
  	    = starts_infinite_loop_p (*enode, *this, get_logger ()))
  	{
- 	  const supernode *snode = enode->get_supernode ();
- 
  	  if (get_logger ())
  	    get_logger ()->log ("EN: %i from starts_infinite_loop_p",
  				enode->m_index);
--- 574,579 ----
*************** exploded_graph::detect_infinite_loops ()
*** 573,582 ****
  	      continue;
  	    }
  
! 	  pending_location ploc (enode, snode, inf_loop->m_loc);
  	  auto d
  	    = std::make_unique<infinite_loop_diagnostic> (std::move (inf_loop));
! 	  get_diagnostic_manager ().add_diagnostic (ploc, std::move (d));
  	}
      }
  }
--- 590,600 ----
  	      continue;
  	    }
  
! 	  pending_location ploc (enode, inf_loop->m_loc);
  	  auto d
  	    = std::make_unique<infinite_loop_diagnostic> (std::move (inf_loop));
! 	  get_diagnostic_manager ().add_diagnostic (std::move (ploc),
! 						    std::move (d));
  	}
      }
  }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/infinite-recursion.cc gcc-16-20251214/gcc/analyzer/infinite-recursion.cc
*** gcc-16-20251207/gcc/analyzer/infinite-recursion.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/infinite-recursion.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 177,183 ****
      emission_path->add_event
        (std::make_unique<warning_event>
         (event_loc_info (m_new_entry_enode->get_supernode
! 			  ()->get_start_location (),
  			m_callee_fndecl,
  			m_new_entry_enode->get_stack_depth ()),
  	enode,
--- 177,183 ----
      emission_path->add_event
        (std::make_unique<warning_event>
         (event_loc_info (m_new_entry_enode->get_supernode
! 			  ()->get_location (),
  			m_callee_fndecl,
  			m_new_entry_enode->get_stack_depth ()),
  	enode,
*************** public:
*** 187,194 ****
    /* Reject paths in which conjured svalues have affected control flow
       since m_prev_entry_enode.  */
  
!   bool check_valid_fpath_p (const feasible_node &final_fnode,
! 			    const gimple *)
      const final override
    {
      /* Reject paths in which calls with unknown side effects have occurred
--- 187,193 ----
    /* Reject paths in which conjured svalues have affected control flow
       since m_prev_entry_enode.  */
  
!   bool check_valid_fpath_p (const feasible_node &final_fnode)
      const final override
    {
      /* Reject paths in which calls with unknown side effects have occurred
*************** private:
*** 245,262 ****
      const superedge *sedge = eedge->m_sedge;
      if (!sedge)
        return false;
!     const cfg_superedge *cfg_sedge = sedge->dyn_cast_cfg_superedge ();
!     if (!cfg_sedge)
        return false;
!     const gimple *last_stmt = sedge->m_src->get_last_stmt ();
!     if (!last_stmt)
        return false;
  
      const feasible_node *dst_fnode
        = static_cast<const feasible_node *> (fedge->m_dest);
      const region_model &model = dst_fnode->get_state ().get_model ();
  
!     if (const gcond *cond_stmt = dyn_cast <const gcond *> (last_stmt))
        {
  	if (expr_uses_conjured_svalue_p (model, gimple_cond_lhs (cond_stmt)))
  	  return true;
--- 244,263 ----
      const superedge *sedge = eedge->m_sedge;
      if (!sedge)
        return false;
!     auto op = sedge->get_op ();
!     if (!op)
        return false;
!     const control_flow_op *ctrlflow_op = op->dyn_cast_control_flow_op ();
!     if (!ctrlflow_op)
        return false;
  
+     const gimple &last_stmt = ctrlflow_op->get_ctrlflow_stmt ();
+ 
      const feasible_node *dst_fnode
        = static_cast<const feasible_node *> (fedge->m_dest);
      const region_model &model = dst_fnode->get_state ().get_model ();
  
!     if (const gcond *cond_stmt = dyn_cast <const gcond *> (&last_stmt))
        {
  	if (expr_uses_conjured_svalue_p (model, gimple_cond_lhs (cond_stmt)))
  	  return true;
*************** private:
*** 264,270 ****
  	  return true;
        }
      else if (const gswitch *switch_stmt
! 	       = dyn_cast <const gswitch *> (last_stmt))
        {
  	if (expr_uses_conjured_svalue_p (model,
  					 gimple_switch_index (switch_stmt)))
--- 265,271 ----
  	  return true;
        }
      else if (const gswitch *switch_stmt
! 	       = dyn_cast <const gswitch *> (&last_stmt))
        {
  	if (expr_uses_conjured_svalue_p (model,
  					 gimple_switch_index (switch_stmt)))
*************** private:
*** 304,311 ****
    const checker_event *m_prev_entry_event;
  };
  
! /* Return true iff ENODE is the PK_BEFORE_SUPERNODE at a function
!    entrypoint.  */
  
  static bool
  is_entrypoint_p (exploded_node *enode)
--- 305,311 ----
    const checker_event *m_prev_entry_event;
  };
  
! /* Return true iff ENODE is at a function entrypoint.  */
  
  static bool
  is_entrypoint_p (exploded_node *enode)
*************** is_entrypoint_p (exploded_node *enode)
*** 314,325 ****
    const supernode *snode = enode->get_supernode ();
    if (!snode)
      return false;
!   if (!snode->entry_p ())
!     return false;;
!   const program_point &point = enode->get_point ();
!   if (point.get_kind () != PK_BEFORE_SUPERNODE)
!     return false;
!   return true;
  }
  
  /* Walk backwards through the eg, looking for the first
--- 314,320 ----
    const supernode *snode = enode->get_supernode ();
    if (!snode)
      return false;
!   return snode->entry_p ();
  }
  
  /* Walk backwards through the eg, looking for the first
*************** exploded_graph::detect_infinite_recursio
*** 618,633 ****
  
    /* Otherwise, the state of memory is effectively the same between the two
       recursion levels; warn.  */
- 
-   const supernode *caller_snode = call_string.get_top_of_stack ().m_caller;
-   const supernode *snode = enode->get_supernode ();
-   gcc_assert (caller_snode->m_returning_call);
    pending_location ploc (enode,
! 			 snode,
! 			 caller_snode->m_returning_call,
! 			 nullptr);
    get_diagnostic_manager ().add_diagnostic
!     (ploc,
       std::make_unique<infinite_recursion_diagnostic> (prev_entry_enode,
  						      enode,
  						      fndecl));
--- 613,622 ----
  
    /* Otherwise, the state of memory is effectively the same between the two
       recursion levels; warn.  */
    pending_location ploc (enode,
! 			 call_string.get_top_of_stack ().get_call_stmt ().location);
    get_diagnostic_manager ().add_diagnostic
!     (std::move (ploc),
       std::make_unique<infinite_recursion_diagnostic> (prev_entry_enode,
  						      enode,
  						      fndecl));
diff -Nrcpad gcc-16-20251207/gcc/analyzer/kf-lang-cp.cc gcc-16-20251214/gcc/analyzer/kf-lang-cp.cc
*** gcc-16-20251207/gcc/analyzer/kf-lang-cp.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/kf-lang-cp.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 77,82 ****
--- 77,102 ----
        && POINTER_TYPE_P (cd.get_arg_type (1)));
    }
  
+   void
+   check_any_preconditions (const call_details &cd) const final override
+   {
+     region_model_context *ctxt = cd.get_ctxt ();
+     if (!ctxt)
+       return;
+     region_model *model = cd.get_model ();
+     const gcall &call = cd.get_call_stmt ();
+ 
+     /* If the call was actually a placement new, check that accessing
+        the buffer lhs is placed into does not result in out-of-bounds.  */
+     if (is_placement_new_p (call))
+       {
+ 	if (const region *sized_reg = get_sized_region_for_placement_new (cd))
+ 	  model->check_region_for_write (sized_reg,
+ 					 nullptr,
+ 					 ctxt);
+       }
+   }
+ 
    void impl_call_pre (const call_details &cd) const final override
    {
      region_model *model = cd.get_model ();
*************** public:
*** 85,109 ****
      region_model_context *ctxt = cd.get_ctxt ();
      const gcall &call = cd.get_call_stmt ();
  
-     /* If the call was actually a placement new, check that accessing
-        the buffer lhs is placed into does not result in out-of-bounds.  */
      if (is_placement_new_p (call))
        {
  	const region *ptr_reg = cd.deref_ptr_arg (1);
  	if (ptr_reg && cd.get_lhs_type ())
! 	  {
! 	    const svalue *num_bytes_sval = cd.get_arg_svalue (0);
! 	    const region *sized_new_reg
! 		= mgr->get_sized_region (ptr_reg,
! 					 cd.get_lhs_type (),
! 					 num_bytes_sval);
! 	    model->check_region_for_write (sized_new_reg,
! 					   nullptr,
! 					   ctxt);
! 	    const svalue *ptr_sval
! 	      = mgr->get_ptr_svalue (cd.get_lhs_type (), sized_new_reg);
! 	    cd.maybe_set_lhs (ptr_sval);
! 	  }
        }
      /* If the call is an allocating new, then create a heap allocated
         region.  */
--- 105,120 ----
      region_model_context *ctxt = cd.get_ctxt ();
      const gcall &call = cd.get_call_stmt ();
  
      if (is_placement_new_p (call))
        {
  	const region *ptr_reg = cd.deref_ptr_arg (1);
  	if (ptr_reg && cd.get_lhs_type ())
! 	  if (const region *sized_reg = get_sized_region_for_placement_new (cd))
! 	    {
! 	      const svalue *ptr_sval
! 		= mgr->get_ptr_svalue (cd.get_lhs_type (), sized_reg);
! 	      cd.maybe_set_lhs (ptr_sval);
! 	    }
        }
      /* If the call is an allocating new, then create a heap allocated
         region.  */
*************** public:
*** 138,143 ****
--- 149,170 ----
  	model->add_constraint (result, NE_EXPR, null_sval, ctxt);
        }
    }
+ 
+ private:
+   const region *
+   get_sized_region_for_placement_new (const call_details &cd) const
+   {
+     const region *ptr_reg = cd.deref_ptr_arg (1);
+     if (ptr_reg && cd.get_lhs_type ())
+       {
+ 	region_model_manager *mgr = cd.get_manager ();
+ 	const svalue *num_bytes_sval = cd.get_arg_svalue (0);
+ 	return mgr->get_sized_region (ptr_reg,
+ 				      cd.get_lhs_type (),
+ 				      num_bytes_sval);
+       }
+     return nullptr;
+   }
  };
  
  /* Handler for "operator delete" and for "operator delete []",
diff -Nrcpad gcc-16-20251207/gcc/analyzer/ops.cc gcc-16-20251214/gcc/analyzer/ops.cc
*** gcc-16-20251207/gcc/analyzer/ops.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/analyzer/ops.cc	Sun Dec 14 22:32:06 2025
***************
*** 0 ****
--- 1,2391 ----
+ /* Operations within the code being analyzed.
+    Copyright (C) 2019-2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #include "analyzer/common.h"
+ 
+ #include "gimple-pretty-print.h"
+ #include "gimple-iterator.h"
+ #include "tree-cfg.h"
+ #include "tree-dfa.h"
+ #include "fold-const.h"
+ #include "cgraph.h"
+ #include "text-art/dump.h"
+ #include "text-art/tree-widget.h"
+ 
+ #include "analyzer/ops.h"
+ #include "analyzer/call-details.h"
+ #include "analyzer/exploded-graph.h"
+ #include "analyzer/checker-path.h"
+ #include "analyzer/impl-sm-context.h"
+ #include "analyzer/constraint-manager.h"
+ #include "analyzer/call-summary.h"
+ #include "analyzer/call-info.h"
+ #include "analyzer/analysis-plan.h"
+ 
+ #if ENABLE_ANALYZER
+ 
+ namespace ana {
+ 
+ event_loc_info::event_loc_info (const exploded_node *enode)
+ {
+   if (enode)
+     {
+       m_loc = enode->get_location ();
+       m_fndecl = enode->get_point ().get_fndecl ();
+       m_depth = enode->get_stack_depth ();
+     }
+   else
+     {
+       m_loc = UNKNOWN_LOCATION;
+       m_fndecl = NULL_TREE;
+       m_depth = 0;
+     }
+ }
+ 
+ event_loc_info::event_loc_info (const program_point &point)
+ {
+   m_loc = point.get_location ();
+   m_fndecl = point.get_fndecl ();
+   m_depth = point.get_stack_depth ();
+ }
+ 
+ // struct operation_context
+ 
+ void
+ operation_context::dump () const
+ {
+   fprintf (stderr, "src enode: EN: %i\n", m_src_enode.m_index);
+   m_src_enode.dump (m_eg.get_ext_state ());
+ 
+   fprintf (stderr, "superedge\n");
+   pretty_printer pp;
+   pp.set_output_stream (stderr);
+   m_sedge.dump (&pp);
+ }
+ 
+ logger *
+ operation_context::get_logger () const
+ {
+   return m_eg.get_logger ();
+ }
+ 
+ const extrinsic_state &
+ operation_context::get_ext_state () const
+ {
+   return m_eg.get_ext_state ();
+ }
+ 
+ const program_point &
+ operation_context::get_initial_point () const
+ {
+   return m_src_enode.get_point ();
+ }
+ 
+ const program_state &
+ operation_context::get_initial_state () const
+ {
+   return m_src_enode.get_state ();
+ }
+ 
+ const supergraph &
+ operation_context::get_supergraph () const
+ {
+   return m_eg.get_supergraph ();
+ }
+ 
+ program_point
+ operation_context::get_next_intraprocedural_point () const
+ {
+   /* All edges are intraprocedural.  */
+   gcc_assert (m_sedge.m_src->get_function ()
+ 	      == m_sedge.m_dest->get_function ());
+   return program_point (m_sedge.m_dest,
+ 			m_src_enode.get_point ().get_call_string ());
+ }
+ 
+ void
+ operation_context::add_outcome (const program_point &dst_point,
+ 				program_state dst_state,
+ 				bool could_do_work,
+ 				uncertainty_t *uncertainty,
+ 				std::unique_ptr<custom_edge_info> info)
+ {
+   const program_state &src_state = get_initial_state ();
+   impl_region_model_context ctxt (m_eg, &m_src_enode,
+ 				  &src_state, &dst_state,
+ 				  uncertainty, nullptr);
+   program_state::detect_leaks (src_state, dst_state, nullptr,
+ 			       get_ext_state (), &ctxt);
+ 
+   if (exploded_node *dst_enode
+       = m_eg.get_or_create_node (dst_point, dst_state, &m_src_enode))
+     {
+       m_eg.add_edge (&m_src_enode, dst_enode, &m_sedge, could_do_work,
+ 		     std::move (info));
+       m_eg.detect_infinite_recursion (dst_enode);
+     }
+ }
+ 
+ class op_region_model_context : public impl_region_model_context
+ {
+ public:
+   op_region_model_context (operation_context &op_ctxt,
+ 			   program_state &dst_state)
+   : impl_region_model_context (op_ctxt.m_eg,
+ 			       &op_ctxt.m_src_enode,
+ 			       &op_ctxt.get_initial_state (),
+ 			       &dst_state,
+ 			       nullptr,
+ 			       &m_path_context)
+   {
+   }
+ 
+   bool terminate_path_p () const
+   {
+     return m_path_context.terminate_path_p ();
+   }
+ 
+ private:
+   class op_path_context : public path_context
+   {
+   public:
+     op_path_context ()
+     : m_terminate_path (false)
+     {
+     }
+ 
+     void bifurcate (std::unique_ptr<custom_edge_info>) final override
+     {
+       gcc_unreachable ();
+     }
+ 
+     void terminate_path () final override
+     {
+       m_terminate_path = true;
+     }
+ 
+     bool terminate_path_p () const final override
+     {
+       return m_terminate_path;
+     }
+   private:
+     bool m_terminate_path;
+   } m_path_context;
+ };
+ 
+ // class gimple_stmt_op : public operation
+ 
+ void
+ gimple_stmt_op::print_as_edge_label (pretty_printer *pp,
+ 				     bool /*user_facing*/) const
+ {
+   pp_gimple_stmt_1 (pp, &m_stmt, 0, (dump_flags_t)0);
+ }
+ 
+ bool
+ gimple_stmt_op::defines_ssa_name_p (const_tree ssa_name) const
+ {
+   return &m_stmt == SSA_NAME_DEF_STMT (ssa_name);
+ }
+ 
+ bool
+ gimple_stmt_op::supports_bulk_merge_p () const
+ {
+   return false;
+ }
+ 
+ /* Subclass of path_context for use within operation::execute implementations
+    so that we can split states e.g. at "realloc" calls.  */
+ 
+ class impl_path_context : public path_context
+ {
+ public:
+   impl_path_context (const program_state *cur_state,
+ 		     logger *logger)
+   : m_cur_state (cur_state),
+     m_logger (logger),
+     m_terminate_path (false)
+   {
+   }
+ 
+   bool bifurcation_p () const
+   {
+     return m_custom_eedge_infos.length () > 0;
+   }
+ 
+   const program_state &get_state_at_bifurcation () const
+   {
+     gcc_assert (m_state_at_bifurcation);
+     return *m_state_at_bifurcation;
+   }
+ 
+   void
+   bifurcate (std::unique_ptr<custom_edge_info> info) final override
+   {
+     if (m_logger)
+       m_logger->log ("bifurcating path");
+ 
+     if (m_state_at_bifurcation)
+       /* Verify that the state at bifurcation is consistent when we
+ 	 split into multiple out-edges.  */
+       gcc_assert (*m_state_at_bifurcation == *m_cur_state);
+     else
+       /* Take a copy of the cur_state at the moment when bifurcation
+ 	 happens.  */
+       m_state_at_bifurcation
+ 	= std::unique_ptr<program_state> (new program_state (*m_cur_state));
+ 
+     /* Take ownership of INFO.  */
+     m_custom_eedge_infos.safe_push (info.release ());
+   }
+ 
+   void terminate_path () final override
+   {
+     if (m_logger)
+       m_logger->log ("terminating path");
+     m_terminate_path = true;
+   }
+ 
+   bool terminate_path_p () const final override
+   {
+     return m_terminate_path;
+   }
+ 
+   const vec<custom_edge_info *> & get_custom_eedge_infos ()
+   {
+     return m_custom_eedge_infos;
+   }
+ 
+ private:
+   const program_state *m_cur_state;
+ 
+   logger *m_logger;
+ 
+   /* Lazily-created copy of the state before the split.  */
+   std::unique_ptr<program_state> m_state_at_bifurcation;
+ 
+   auto_vec <custom_edge_info *> m_custom_eedge_infos;
+ 
+   bool m_terminate_path;
+ };
+ 
+ DEBUG_FUNCTION void
+ operation::dump () const
+ {
+   tree_dump_pretty_printer pp (stderr);
+   print_as_edge_label (&pp, false);
+   pp_newline (&pp);
+ }
+ 
+ void
+ operation::handle_on_stmt_for_state_machines (operation_context &op_ctxt,
+ 					      program_state &dst_state,
+ 					      path_context *path_ctxt,
+ 					      bool &unknown_side_effects,
+ 					      const gimple &stmt)
+ {
+   const program_state &old_state = op_ctxt.get_initial_state ();
+   int sm_idx;
+   sm_state_map *smap;
+   FOR_EACH_VEC_ELT (old_state.m_checker_states, sm_idx, smap)
+     {
+       const state_machine &sm = op_ctxt.m_eg.get_ext_state ().get_sm (sm_idx);
+       const sm_state_map *old_smap
+ 	= old_state.m_checker_states[sm_idx];
+       sm_state_map *new_smap = dst_state.m_checker_states[sm_idx];
+       impl_sm_context sm_ctxt (op_ctxt.m_eg, sm_idx, sm,
+ 			       &op_ctxt.m_src_enode,
+ 			       &old_state,
+ 			       &dst_state,
+ 			       old_smap, new_smap, path_ctxt,
+ 			       unknown_side_effects);
+ 
+       /* Allow the state_machine to handle the stmt.  */
+       if (sm.on_stmt (sm_ctxt, &stmt))
+ 	unknown_side_effects = false;
+     }
+ }
+ 
+ void
+ gimple_stmt_op::
+ walk_load_store_addr_ops (void *data,
+ 			  walk_stmt_load_store_addr_fn load_cb,
+ 			  walk_stmt_load_store_addr_fn store_cb,
+ 			  walk_stmt_load_store_addr_fn addr_cb) const
+ {
+   walk_stmt_load_store_addr_ops (const_cast<gimple *>(&m_stmt), data,
+ 				 load_cb, store_cb, addr_cb);
+ }
+ 
+ void
+ gimple_stmt_op::execute (operation_context &op_ctxt) const
+ {
+   auto logger = op_ctxt.get_logger ();
+   LOG_SCOPE (logger);
+   if (logger)
+     {
+       logger->start_log_line ();
+       pp_gimple_stmt_1 (logger->get_printer (), &get_stmt (), 0,
+ 			(dump_flags_t)0);
+       logger->end_log_line ();
+     }
+   execute_on_state (op_ctxt,
+ 		    /* Pass in a copy.  */
+ 		    op_ctxt.get_initial_state ());
+ }
+ 
+ void
+ gimple_stmt_op::execute_on_state (operation_context &op_ctxt,
+ 				  program_state dst_state) const
+ {
+   auto logger = op_ctxt.get_logger ();
+   LOG_SCOPE (logger);
+ 
+   auto dst_point (op_ctxt.get_next_intraprocedural_point ());
+   const program_state &old_state  = op_ctxt.get_initial_state ();
+ 
+   bool unknown_side_effects = false;
+   bool could_have_done_work = false;
+ 
+   impl_path_context path_ctxt (&dst_state, logger);
+   uncertainty_t uncertainty;
+   impl_region_model_context ctxt (op_ctxt.m_eg,
+ 				  &op_ctxt.m_src_enode,
+ 				  &old_state,
+ 				  &dst_state,
+ 				  &uncertainty,
+ 				  &path_ctxt,
+ 				  &m_stmt,
+ 				  &could_have_done_work);
+ 
+   dst_state.m_region_model->on_stmt_pre (&get_stmt (),
+ 					 &unknown_side_effects,
+ 					 &ctxt);
+ 
+   handle_on_stmt_for_state_machines (op_ctxt,
+ 				     dst_state,
+ 				     &path_ctxt,
+ 				     unknown_side_effects,
+ 				     m_stmt);
+ 
+   if (path_ctxt.terminate_path_p ())
+     return;
+ 
+   if (const gcall *call = dyn_cast <const gcall *> (&m_stmt))
+     dst_state.m_region_model->on_call_post (*call, unknown_side_effects, &ctxt);
+ 
+   if (!path_ctxt.terminate_path_p ())
+     op_ctxt.add_outcome (dst_point, dst_state, could_have_done_work,
+ 			 &uncertainty);
+ 
+   /* If we have custom edge infos, "bifurcate" the state
+      accordingly, potentially creating a new state/enode/eedge
+      instances.  For example, to handle a "realloc" call, we
+      might split into 3 states, for the "failure",
+      "resizing in place", and "moving to a new buffer" cases.  */
+   for (auto edge_info_iter : path_ctxt.get_custom_eedge_infos ())
+     {
+       /* Take ownership of the edge infos from the path_ctxt.  */
+       std::unique_ptr<custom_edge_info> edge_info (edge_info_iter);
+       if (logger)
+ 	{
+ 	  logger->start_log_line ();
+ 	  logger->log_partial ("bifurcating for edge: ");
+ 	  edge_info->print (logger->get_printer ());
+ 	  logger->end_log_line ();
+ 	}
+       program_state bifurcated_new_state
+ 	(path_ctxt.get_state_at_bifurcation ());
+ 
+       /* Apply edge_info to state.  */
+       impl_region_model_context
+ 	bifurcation_ctxt (op_ctxt.m_eg,
+ 			  &op_ctxt.m_src_enode,
+ 			  &path_ctxt.get_state_at_bifurcation (),
+ 			  &bifurcated_new_state,
+ 			  nullptr, // uncertainty_t *uncertainty
+ 			  nullptr, // path_context *path_ctxt
+ 			  &m_stmt);
+       if (edge_info->update_state (&bifurcated_new_state,
+ 				   nullptr, /* no exploded_edge yet.  */
+ 				   &bifurcation_ctxt))
+ 	{
+ 	  if (exploded_node *next2
+ 	      = edge_info->create_enode
+ 	      (op_ctxt.m_eg,
+ 	       dst_point,
+ 	       std::move (bifurcated_new_state),
+ 	       &op_ctxt.m_src_enode,
+ 	       &bifurcation_ctxt))
+ 	    {
+ 	      op_ctxt.m_eg.add_edge (&op_ctxt.m_src_enode, next2, nullptr,
+ 				     true /* assume that work could be done */,
+ 				     std::move (edge_info));
+ 	    }
+ 	}
+     }
+ }
+ 
+ bool
+ gimple_stmt_op::
+ execute_for_feasibility (const exploded_edge &,
+ 			 feasibility_state &fstate,
+ 			 region_model_context *ctxt,
+ 			 std::unique_ptr<rejected_constraint> */*out_rc*/) const
+ {
+   region_model &model = fstate.get_model ();
+   bool unknown_side_effects;
+   model.on_stmt_pre (&m_stmt, &unknown_side_effects, ctxt);
+ 
+   if (const gcall *call = dyn_cast <const gcall *> (&m_stmt))
+     model.on_call_post (*call, unknown_side_effects, ctxt);
+ 
+   return true;
+ }
+ 
+ /* An sm_context for adding state_change_event on assignments to NULL,
+    where the default state isn't m_start.  Storing such state in the
+    sm_state_map would lead to bloat of the exploded_graph, so we want
+    to leave it as a default state, and inject state change events here
+    when we have a diagnostic.
+    Find transitions of constants, for handling on_zero_assignment.  */
+ 
+ struct null_assignment_sm_context : public sm_context
+ {
+   null_assignment_sm_context (int sm_idx,
+ 			      const state_machine &sm,
+ 			      const program_state *old_state,
+ 			      const program_state *new_state,
+ 			      const gimple *stmt,
+ 			      const program_point *point,
+ 			      checker_path *emission_path,
+ 			      const extrinsic_state &ext_state)
+   : sm_context (sm_idx, sm), m_old_state (old_state), m_new_state (new_state),
+     m_stmt (stmt), m_point (point), m_emission_path (emission_path),
+     m_ext_state (ext_state)
+   {
+   }
+ 
+   tree get_fndecl_for_call (const gcall &/*call*/) final override
+   {
+     return NULL_TREE;
+   }
+ 
+   state_machine::state_t get_state (tree var) final override
+   {
+     const svalue *var_old_sval
+       = m_old_state->m_region_model->get_rvalue (var, nullptr);
+     const sm_state_map *old_smap = m_old_state->m_checker_states[m_sm_idx];
+ 
+     state_machine::state_t current
+       = old_smap->get_state (var_old_sval, m_ext_state);
+ 
+     return current;
+   }
+ 
+   state_machine::state_t get_state (const svalue *sval) final override
+   {
+     const sm_state_map *old_smap = m_old_state->m_checker_states[m_sm_idx];
+     state_machine::state_t current = old_smap->get_state (sval, m_ext_state);
+     return current;
+   }
+ 
+   void set_next_state (tree var,
+ 		       state_machine::state_t to,
+ 		       tree origin ATTRIBUTE_UNUSED) final override
+   {
+     state_machine::state_t from = get_state (var);
+     if (from != m_sm.get_start_state ())
+       return;
+     if (!is_transition_to_null (to))
+       return;
+ 
+     const svalue *var_new_sval
+       = m_new_state->m_region_model->get_rvalue (var, nullptr);
+ 
+     m_emission_path->add_event
+       (std::make_unique<state_change_event> (event_loc_info (*m_point),
+ 					     m_stmt,
+ 					     m_sm,
+ 					     var_new_sval,
+ 					     from, to,
+ 					     nullptr,
+ 					     *m_new_state,
+ 					     nullptr));
+   }
+ 
+   void set_next_state (const svalue *sval,
+ 		       state_machine::state_t to,
+ 		       tree origin ATTRIBUTE_UNUSED) final override
+   {
+     state_machine::state_t from = get_state (sval);
+     if (from != m_sm.get_start_state ())
+       return;
+     if (!is_transition_to_null (to))
+       return;
+ 
+     m_emission_path->add_event
+       (std::make_unique<state_change_event> (event_loc_info (*m_point),
+ 					     m_stmt,
+ 					     m_sm,
+ 					     sval,
+ 					     from, to,
+ 					     nullptr,
+ 					     *m_new_state,
+ 					     nullptr));
+   }
+ 
+   void warn (tree, std::unique_ptr<pending_diagnostic>) final override
+   {
+   }
+   void warn (const svalue *, std::unique_ptr<pending_diagnostic>) final override
+   {
+   }
+ 
+   tree get_diagnostic_tree (tree expr) final override
+   {
+     return expr;
+   }
+ 
+   tree get_diagnostic_tree (const svalue *sval) final override
+   {
+     return m_new_state->m_region_model->get_representative_tree (sval);
+   }
+ 
+   state_machine::state_t get_global_state () const final override
+   {
+     return 0;
+   }
+ 
+   void set_global_state (state_machine::state_t) final override
+   {
+     /* No-op.  */
+   }
+ 
+   void clear_all_per_svalue_state () final override
+   {
+     /* No-op.  */
+   }
+ 
+   void on_custom_transition (custom_transition *) final override
+   {
+   }
+ 
+   tree is_zero_assignment (const gimple *stmt) final override
+   {
+     const gassign *assign_stmt = dyn_cast <const gassign *> (stmt);
+     if (!assign_stmt)
+      return NULL_TREE;
+     if (const svalue *sval
+ 	= m_new_state->m_region_model->get_gassign_result (assign_stmt, nullptr))
+       if (tree cst = sval->maybe_get_constant ())
+ 	if (::zerop(cst))
+ 	  return gimple_assign_lhs (assign_stmt);
+     return NULL_TREE;
+   }
+ 
+   const program_state *get_old_program_state () const final override
+   {
+     return m_old_state;
+   }
+   const program_state *get_new_program_state () const final override
+   {
+     return m_new_state;
+   }
+ 
+   location_t get_emission_location () const final override
+   {
+     return UNKNOWN_LOCATION;
+   }
+ 
+   /* We only care about transitions to the "null" state
+      within sm-malloc.  Special-case this.  */
+   static bool is_transition_to_null (state_machine::state_t s)
+   {
+     return !strcmp (s->get_name (), "null");
+   }
+ 
+   const program_state *m_old_state;
+   const program_state *m_new_state;
+   const gimple *m_stmt;
+   const program_point *m_point;
+   checker_path *m_emission_path;
+   const extrinsic_state &m_ext_state;
+ };
+ 
+ void
+ gimple_stmt_op::add_any_events_for_eedge (const exploded_edge &eedge,
+ 					  checker_path &out_path) const
+ {
+   out_path.add_event
+     (std::make_unique<statement_event> (&get_stmt (),
+ 					eedge.m_dest->get_function ()->decl,
+ 					eedge.m_dest->get_stack_depth (),
+ 					eedge.m_dest->get_state ()));
+ 
+   /* Create state change events for assignment to NULL.
+      Iterate through the stmts in dst_enode, adding state change
+      events for them.  */
+   if (const gassign *assign = dyn_cast<const gassign *> (&m_stmt))
+     {
+       const program_point &src_point = eedge.m_src->get_point ();
+       const extrinsic_state &ext_state = out_path.get_ext_state ();
+       for (unsigned i = 0; i < ext_state.get_num_checkers (); i++)
+ 	{
+ 	  const state_machine &sm = ext_state.get_sm (i);
+ 	  null_assignment_sm_context sm_ctxt (i, sm,
+ 					      &eedge.m_src->get_state (),
+ 					      &eedge.m_dest->get_state (),
+ 					      assign,
+ 					      &src_point,
+ 					      &out_path,
+ 					      ext_state);
+ 	  sm.on_stmt (sm_ctxt, assign);
+ 	  // TODO: what about phi nodes?
+ 	}
+     }
+ }
+ 
+ // class gassign_op : public gimple_stmt_op
+ 
+ // class greturn_op : public gimple_stmt_op
+ 
+ void
+ greturn_op::execute (operation_context &op_ctxt) const
+ {
+   auto logger = op_ctxt.get_logger ();
+ 
+   auto dst_point (op_ctxt.get_next_intraprocedural_point ());
+   const program_state &old_state  = op_ctxt.get_initial_state ();
+   program_state dst_state (old_state);
+ 
+   impl_path_context path_ctxt (&dst_state, logger);
+   uncertainty_t uncertainty;
+   impl_region_model_context ctxt (op_ctxt.m_eg,
+ 				  &op_ctxt.m_src_enode,
+ 
+ 				  /* TODO: should we be getting the ECs from the
+ 				     old state, rather than the new?  */
+ 				  &op_ctxt.get_initial_state (),
+ 				  &dst_state,
+ 				  &uncertainty,
+ 				  &path_ctxt,
+ 				  nullptr,
+ 				  nullptr);
+ 
+   tree callee = op_ctxt.get_initial_point ().get_function ()->decl;
+   tree lhs = DECL_RESULT (callee);
+ 
+   if (lhs && get_retval ())
+     {
+       region_model *dst_region_model = dst_state.m_region_model;
+       const svalue *sval
+ 	= dst_region_model->get_rvalue (get_retval (), &ctxt);
+       const region *ret_reg = dst_region_model->get_lvalue (lhs, &ctxt);
+       dst_region_model->set_value (ret_reg, sval, &ctxt);
+     }
+ 
+   if (!path_ctxt.terminate_path_p ())
+     op_ctxt.add_outcome (dst_point, dst_state, false, &uncertainty);
+ }
+ 
+ bool
+ greturn_op::
+ execute_for_feasibility (const exploded_edge &eedge,
+ 			 feasibility_state &fstate,
+ 			 region_model_context *ctxt,
+ 			 std::unique_ptr<rejected_constraint> *) const
+ {
+   tree callee = eedge.m_src->get_function ()->decl;
+   tree lhs = DECL_RESULT (callee);
+ 
+   if (lhs && get_retval ())
+     {
+       region_model &model = fstate.get_model ();
+       const svalue *sval = model.get_rvalue (get_retval (), ctxt);
+       const region *ret_reg = model.get_lvalue (lhs, ctxt);
+       model.set_value (ret_reg, sval, ctxt);
+     }
+ 
+   return true;
+ }
+ 
+ void
+ greturn_op::add_any_events_for_eedge (const exploded_edge &,
+ 				      checker_path &) const
+ {
+   // No-op.
+ }
+ 
+ // class call_and_return_op : public gimple_stmt_op
+ 
+ std::unique_ptr<operation>
+ call_and_return_op::make (const gcall &call_stmt)
+ {
+   if (is_special_named_call_p (call_stmt, "__analyzer_dump", 0))
+     return std::make_unique<dump_op> (call_stmt, dump_op::dump_kind::state);
+   else if (is_special_named_call_p (call_stmt, "__analyzer_dump_sarif", 0))
+     return std::make_unique<dump_op> (call_stmt, dump_op::dump_kind::sarif);
+   else if (is_special_named_call_p (call_stmt, "__analyzer_dump_dot", 0))
+     return std::make_unique<dump_op> (call_stmt, dump_op::dump_kind::dot);
+   else if (is_special_named_call_p (call_stmt, "__analyzer_dump_state", 2))
+     return std::make_unique<dump_op> (call_stmt, dump_op::dump_kind::state_2);
+   else if (is_setjmp_call_p (call_stmt))
+     return std::make_unique<setjmp_op> (call_stmt);
+   else if (is_longjmp_call_p (call_stmt))
+     return std::make_unique<longjmp_op> (call_stmt);
+   else if (is_cxa_throw_p (call_stmt))
+     return std::make_unique<cxa_throw_op> (call_stmt, false);
+   else if (is_cxa_rethrow_p (call_stmt))
+     return std::make_unique<cxa_throw_op> (call_stmt, true);
+ 
+   return std::make_unique<call_and_return_op> (call_stmt);
+ }
+ 
+ /* Resolve a function call by one of:
+ 
+    (a) using a call summary to add eedges to new enodes capturing
+    the states after summarized outcomes of the call
+ 
+    (b) adding an interprocedural_call edge, effectively "stepping into"
+    the called function, for detailed analysis of that path
+ 
+    (c) simulating the effect of the call, adding an eedge to a new
+    enode for the outcome of the call.  */
+ 
+ void
+ call_and_return_op::execute (operation_context &op_ctxt) const
+ {
+   /* Can we turn this into an interprocedural call, and execute within
+      the called fuction?  */
+   const program_state &old_state  = op_ctxt.get_initial_state ();
+   program_state dst_state (old_state);
+   op_region_model_context ctxt (op_ctxt, dst_state);
+   ctxt.m_stmt = &get_gcall ();
+   call_details cd (get_gcall (), old_state.m_region_model, &ctxt);
+ 
+   /* Regardless of how we handle the call, check any known
+      preconditions.  */
+   {
+     /* Check for any preconditions if it's a known_function.  */
+     if (auto kf = maybe_get_known_function (cd))
+       kf->check_any_preconditions (cd);
+ 
+     /* Check for any preconditions using sm-state.  */
+     {
+       int sm_idx;
+       sm_state_map *smap;
+       FOR_EACH_VEC_ELT (old_state.m_checker_states, sm_idx, smap)
+ 	{
+ 	  const state_machine &sm
+ 	    = op_ctxt.m_eg.get_ext_state ().get_sm (sm_idx);
+ 	  const sm_state_map *old_smap
+ 	    = old_state.m_checker_states[sm_idx];
+ 	  sm_state_map *new_smap = dst_state.m_checker_states[sm_idx];
+ 	  impl_sm_context sm_ctxt (op_ctxt.m_eg, sm_idx, sm,
+ 				   &op_ctxt.m_src_enode,
+ 				   &old_state, &dst_state,
+ 				   old_smap, new_smap, nullptr);
+ 	  sm.check_call_preconditions (sm_ctxt, cd);
+ 	}
+     }
+   }
+ 
+   if (tree callee_fndecl = cd.get_fndecl_for_call ())
+     {
+       // Consider using a call summary
+       if (function *called_fn = DECL_STRUCT_FUNCTION (callee_fndecl))
+ 	if (cgraph_edge *edge = get_any_cgraph_edge (op_ctxt))
+ 	  if (op_ctxt.m_eg.get_analysis_plan ().use_summary_p (edge))
+ 	    {
+ 	      per_function_data *called_fn_data
+ 		= op_ctxt.m_eg.get_per_function_data (called_fn);
+ 	      if (called_fn_data)
+ 		{
+ 		  replay_call_summaries (op_ctxt, *called_fn,
+ 					 *called_fn_data, &ctxt);
+ 		  return;
+ 		}
+ 	    }
+ 
+       // Do we have an entry snode for this fndecl?
+       if (auto callee_fun = DECL_STRUCT_FUNCTION (callee_fndecl))
+ 	if (supernode *callee_entry_snode
+ 	    = (op_ctxt.get_supergraph ()
+ 	       .get_node_for_function_entry (*callee_fun)))
+ 	  {
+ 	    const call_string *dst_call_string
+ 	      (op_ctxt.m_src_enode
+ 	       .get_point ()
+ 	       .get_call_string ()
+ 	       .push_call (op_ctxt.m_sedge, *this, *callee_fun));
+ 	    const program_point dst_point
+ 	      (callee_entry_snode, *dst_call_string);
+ 	    auto edge_info
+ 	      = std::make_unique<interprocedural_call> (get_gcall (),
+ 							*callee_fun);
+ 	    edge_info->update_state (&dst_state, nullptr, &ctxt);
+ 	    op_ctxt.add_outcome (dst_point, dst_state, false, nullptr,
+ 				 std::move (edge_info));
+ 	    return;
+ 	  }
+     }
+ 
+   /* Resolve intraprocedurally: execute the gcall, but using the
+      dst_state from above so that any preconditions have been applied.  */
+   gimple_stmt_op::execute_on_state (op_ctxt, std::move (dst_state));
+ }
+ 
+ cgraph_edge *
+ call_and_return_op::get_any_cgraph_edge (operation_context &op_ctxt) const
+ {
+   tree caller_fndecl = op_ctxt.get_initial_point ().get_fndecl ();
+   gcc_assert (caller_fndecl);
+ 
+   auto caller_cgnode = cgraph_node::get (caller_fndecl);
+   gcc_assert (caller_cgnode);
+   return caller_cgnode->get_edge (const_cast<gcall *> (&get_gcall ()));
+ }
+ 
+ void
+ call_and_return_op::
+ add_any_events_for_eedge (const exploded_edge &,
+ 			  checker_path &) const
+ {
+ }
+ 
+ /* Given PARM_TO_FIND, a PARM_DECL, identify its index (writing it
+    to *OUT if OUT is non-NULL), and return the corresponding argument
+    at the callsite.  */
+ 
+ tree
+ call_and_return_op::get_arg_for_parm (tree callee_fndecl,
+ 				      tree parm_to_find,
+ 				      callsite_expr *out) const
+ {
+   gcc_assert  (TREE_CODE (parm_to_find) == PARM_DECL);
+ 
+   const gcall &call_stmt = get_gcall ();
+ 
+   unsigned i = 0;
+   for (tree iter_parm = DECL_ARGUMENTS (callee_fndecl); iter_parm;
+        iter_parm = DECL_CHAIN (iter_parm), ++i)
+     {
+       if (i >= gimple_call_num_args (&call_stmt))
+ 	return NULL_TREE;
+       if (iter_parm == parm_to_find)
+ 	{
+ 	  if (out)
+ 	    *out = callsite_expr::from_zero_based_param (i);
+ 	  return gimple_call_arg (&call_stmt, i);
+ 	}
+     }
+ 
+   /* Not found.  */
+   return NULL_TREE;
+ }
+ 
+ /* Look for a use of ARG_TO_FIND as an argument at this callsite.
+    If found, return the default SSA def of the corresponding parm within
+    the callee, and if OUT is non-NULL, write the index to *OUT.
+    Only the first match is handled.  */
+ 
+ tree
+ call_and_return_op::get_parm_for_arg (tree callee_fndecl,
+ 				      tree arg_to_find,
+ 				      callsite_expr *out) const
+ {
+   const gcall &call_stmt = get_gcall ();
+ 
+   unsigned i = 0;
+   for (tree iter_parm = DECL_ARGUMENTS (callee_fndecl); iter_parm;
+        iter_parm = DECL_CHAIN (iter_parm), ++i)
+     {
+       if (i >= gimple_call_num_args (&call_stmt))
+ 	return NULL_TREE;
+       tree param = gimple_call_arg (&call_stmt, i);
+       if (arg_to_find == param)
+ 	{
+ 	  if (out)
+ 	    *out = callsite_expr::from_zero_based_param (i);
+ 	  return ssa_default_def (DECL_STRUCT_FUNCTION (callee_fndecl),
+ 				  iter_parm);
+ 	}
+     }
+ 
+   /* Not found.  */
+   return NULL_TREE;
+ }
+ 
+ /* Map caller_expr back to an expr within the callee, or return NULL_TREE.
+    If non-NULL is returned, populate OUT.  */
+ 
+ tree
+ call_and_return_op::map_expr_from_caller_to_callee (tree callee_fndecl,
+ 						    tree caller_expr,
+ 						    callsite_expr *out) const
+ {
+   /* Is it an argument (actual param)?  If so, convert to
+      parameter (formal param).  */
+   tree parm = get_parm_for_arg (callee_fndecl, caller_expr, out);
+   if (parm)
+     return parm;
+   /* Otherwise try return value.  */
+   if (caller_expr == gimple_call_lhs (&get_gcall ()))
+     {
+       if (out)
+ 	*out = callsite_expr::from_return_value ();
+       return DECL_RESULT (callee_fndecl);
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ /* Map callee_expr back to an expr within the caller, or return NULL_TREE.
+    If non-NULL is returned, populate OUT.  */
+ 
+ tree
+ call_and_return_op::map_expr_from_callee_to_caller (tree callee_fndecl,
+ 						    tree callee_expr,
+ 						    callsite_expr *out) const
+ {
+   if (callee_expr == NULL_TREE)
+     return NULL_TREE;
+ 
+   /* If it's a parameter (formal param), get the argument (actual param).  */
+   if (TREE_CODE (callee_expr) == PARM_DECL)
+     return get_arg_for_parm (callee_fndecl, callee_expr, out);
+ 
+   /* Similar for the default SSA name of the PARM_DECL.  */
+   if (TREE_CODE (callee_expr) == SSA_NAME
+       && SSA_NAME_IS_DEFAULT_DEF (callee_expr)
+       && TREE_CODE (SSA_NAME_VAR (callee_expr)) == PARM_DECL)
+     return get_arg_for_parm (callee_fndecl, SSA_NAME_VAR (callee_expr), out);
+ 
+   /* Otherwise try return value.  */
+   if (callee_expr == DECL_RESULT (callee_fndecl))
+     {
+       if (out)
+ 	*out = callsite_expr::from_return_value ();
+       return gimple_call_lhs (&get_gcall ());
+     }
+ 
+   return NULL_TREE;
+ }
+ 
+ const known_function *
+ call_and_return_op::maybe_get_known_function (const call_details &cd) const
+ {
+   region_model_manager *mgr = cd.get_manager ();
+   known_function_manager *known_fn_mgr = mgr->get_known_function_manager ();
+ 
+   if (gimple_call_internal_p (&get_gcall ()))
+     return known_fn_mgr->get_internal_fn
+       (gimple_call_internal_fn (&get_gcall ()));
+ 
+   if (tree callee_fndecl = cd.get_fndecl_for_call ())
+     return known_fn_mgr->get_match (callee_fndecl, cd);
+ 
+   return nullptr;
+ }
+ 
+ void
+ call_and_return_op::
+ replay_call_summaries (operation_context &op_ctxt,
+ 		       function &called_fn,
+ 		       per_function_data &called_fn_data,
+ 		       region_model_context *ctxt) const
+ {
+   logger *logger = op_ctxt.get_logger ();
+   LOG_SCOPE (logger);
+ 
+   for (auto summary : called_fn_data.m_summaries)
+     {
+       gcc_assert (summary);
+       replay_call_summary (op_ctxt, called_fn, *summary, ctxt);
+     }
+ }
+ 
+ /* A concrete call_info subclass representing a replay of a call summary.  */
+ 
+ class call_summary_edge_info : public call_info
+ {
+ public:
+   call_summary_edge_info (const call_details &cd,
+ 			  const function &called_fn,
+ 			  call_summary &summary,
+ 			  const extrinsic_state &ext_state)
+   : call_info (cd, called_fn),
+     m_called_fn (called_fn),
+     m_summary (summary),
+     m_ext_state (ext_state)
+   {}
+ 
+   bool update_state (program_state *state,
+ 		     const exploded_edge *,
+ 		     region_model_context *ctxt) const final override
+   {
+     /* Update STATE based on summary_end_state.  */
+     call_details cd (get_call_details (state->m_region_model, ctxt));
+     call_summary_replay r (cd, m_called_fn, m_summary, m_ext_state);
+     const program_state &summary_end_state = m_summary.get_state ();
+     return state->replay_call_summary (r, summary_end_state);
+   }
+ 
+   bool update_model (region_model *model,
+ 		     const exploded_edge *,
+ 		     region_model_context *ctxt) const final override
+   {
+     /* Update STATE based on summary_end_state.  */
+     call_details cd (get_call_details (model, ctxt));
+     call_summary_replay r (cd, m_called_fn, m_summary, m_ext_state);
+     const program_state &summary_end_state = m_summary.get_state ();
+     model->replay_call_summary (r, *summary_end_state.m_region_model);
+     return true;
+   }
+ 
+   void print_desc (pretty_printer &pp) const final override
+   {
+     pp_string (&pp, m_summary.get_desc ().get ());
+   }
+ 
+ private:
+   const function &m_called_fn;
+   call_summary &m_summary;
+   const extrinsic_state &m_ext_state;
+ };
+ 
+ void
+ call_and_return_op::
+ replay_call_summary (operation_context &op_ctxt,
+ 		     function &called_fn,
+ 		     call_summary &summary,
+ 		     region_model_context *ctxt) const
+ {
+   logger *logger = op_ctxt.get_logger ();
+   LOG_SCOPE (logger);
+   if (logger)
+     logger->log ("using %s as summary for call to %qE from %qE",
+ 		 summary.get_desc ().get (),
+ 		 called_fn.decl,
+ 		 op_ctxt.get_initial_point ().get_function ()->decl);
+   const extrinsic_state &ext_state = op_ctxt.get_ext_state ();
+   const program_state &old_state = op_ctxt.get_initial_state ();
+   const program_state &summary_end_state = summary.get_state ();
+   if (logger)
+     {
+       pretty_printer *pp = logger->get_printer ();
+ 
+       logger->start_log_line ();
+       pp_string (pp, "callsite state: ");
+       old_state.dump_to_pp (ext_state, true, false, pp);
+       logger->end_log_line ();
+ 
+       logger->start_log_line ();
+       pp_string (pp, "summary end state: ");
+       summary_end_state.dump_to_pp (ext_state, true, false, pp);
+       logger->end_log_line ();
+     }
+ 
+   program_state new_state (old_state);
+ 
+   call_details cd (get_gcall (), new_state.m_region_model, ctxt);
+   call_summary_replay r (cd, called_fn, summary, ext_state);
+ 
+   if (new_state.replay_call_summary (r, summary_end_state))
+     op_ctxt.add_outcome
+       (op_ctxt.get_next_intraprocedural_point (),
+        new_state,
+        true,
+        nullptr,
+        std::make_unique<call_summary_edge_info> (cd,
+ 						 called_fn,
+ 						 summary,
+ 						 ext_state));
+ }
+ 
+ // class dump_op : public call_and_return_op
+ 
+ void
+ dump_op::execute (operation_context &op_ctxt) const
+ {
+   const program_state &state = op_ctxt.get_initial_state ();
+   switch (m_dump_kind)
+     {
+     default:
+       gcc_unreachable ();
+     case dump_kind::state:
+       /* Handle the builtin "__analyzer_dump" by dumping state
+ 	 to stderr.  */
+       state.dump (op_ctxt.get_ext_state (), true);
+       break;
+     case dump_kind::sarif:
+       state.dump_sarif (op_ctxt.get_ext_state ());
+       break;
+     case dump_kind::dot:
+       state.dump_dot (op_ctxt.get_ext_state ());
+       break;
+     case dump_kind::state_2:
+       {
+ 	program_state dst_state (state);
+ 	op_region_model_context ctxt (op_ctxt, dst_state);
+ 	dst_state.impl_call_analyzer_dump_state (get_gcall (),
+ 						 op_ctxt.get_ext_state (),
+ 						 &ctxt);
+       }
+       break;
+     }
+ 
+   op_ctxt.add_outcome (op_ctxt.get_next_intraprocedural_point (),
+ 		       state, false, nullptr);
+ }
+ 
+ // class setjmp_op : public call_and_return_op
+ 
+ void
+ setjmp_op::execute (operation_context &op_ctxt) const
+ {
+   program_state dst_state (op_ctxt.get_initial_state ());
+   op_region_model_context ctxt (op_ctxt, dst_state);
+   dst_state.m_region_model->on_setjmp (get_gcall (),
+ 				       op_ctxt.m_src_enode,
+ 				       op_ctxt.m_sedge,
+ 				       &ctxt);
+   op_ctxt.add_outcome (op_ctxt.get_next_intraprocedural_point (),
+ 		       dst_state, true, nullptr);
+ }
+ 
+ void
+ setjmp_op::add_any_events_for_eedge (const exploded_edge &eedge,
+ 				     checker_path &out_path) const
+ {
+   out_path.add_event
+     (std::make_unique<setjmp_event>
+        (event_loc_info (eedge.m_src),
+ 	eedge.m_src,
+ 	get_gcall ()));
+ }
+ 
+ // class longjmp_op : public call_and_return_op
+ 
+ void
+ longjmp_op::execute (operation_context &op_ctxt) const
+ {
+   program_state dst_state (op_ctxt.get_initial_state ());
+   op_region_model_context ctxt (op_ctxt, dst_state);
+   op_ctxt.m_src_enode.on_longjmp (op_ctxt.m_eg, get_gcall (), &dst_state,
+ 				  &ctxt);
+ }
+ 
+ // class cxa_throw_op : public call_and_return_op
+ 
+ void
+ cxa_throw_op::execute (operation_context &op_ctxt) const
+ {
+   program_state dst_state (op_ctxt.get_initial_state ());
+   op_region_model_context ctxt (op_ctxt, dst_state);
+   program_point after_throw_point (op_ctxt.get_next_intraprocedural_point ());
+   op_ctxt.m_src_enode.on_throw (op_ctxt.m_eg,
+ 				get_gcall (),
+ 				after_throw_point,
+ 				&dst_state,
+ 				m_is_rethrow,
+ 				&ctxt);
+   // We don't continue along op_ctxt's superedge
+ }
+ 
+ // class control_flow_op : public operation
+ 
+ void
+ control_flow_op::
+ walk_load_store_addr_ops (void *data,
+ 			  walk_stmt_load_store_addr_fn load_cb,
+ 			  walk_stmt_load_store_addr_fn store_cb,
+ 			  walk_stmt_load_store_addr_fn addr_cb) const
+ {
+   walk_stmt_load_store_addr_ops (const_cast <gimple *> (&m_ctrlflow_stmt),
+ 				 data,
+ 				 load_cb, store_cb, addr_cb);
+ }
+ 
+ void
+ control_flow_op::add_any_events_for_eedge (const exploded_edge &eedge,
+ 					   checker_path &out_path) const
+ {
+   out_path.add_event
+     (std::make_unique<start_cfg_edge_event> (eedge,
+ 					     event_loc_info (eedge.m_src),
+ 					     this));
+   out_path.add_event
+      (std::make_unique<end_cfg_edge_event> (eedge,
+ 					    event_loc_info (eedge.m_dest),
+ 					    this));
+ }
+ 
+ /* Attempt to generate a description of any condition that holds at this edge.
+ 
+    The intent is to make the user-facing messages more clear, especially for
+    cases where there's a single or double-negative, such as
+    when describing the false branch of an inverted condition.
+ 
+    For example, rather than printing just:
+ 
+       |  if (!ptr)
+       |     ~
+       |     |
+       |     (1) following 'false' branch...
+ 
+    it's clearer to spell out the condition that holds:
+ 
+       |  if (!ptr)
+       |     ~
+       |     |
+       |     (1) following 'false' branch (when 'ptr' is non-NULL)...
+                                           ^^^^^^^^^^^^^^^^^^^^^^
+ 
+    In the above example, this function would generate the highlighted
+    string: "when 'ptr' is non-NULL".
+ 
+    If the edge is not a condition, or it's not clear that a description of
+    the condition would be helpful to the user, return NULL.  */
+ 
+ label_text
+ control_flow_op::maybe_describe_condition (bool ) const
+ {
+   return label_text::borrow (nullptr);
+ }
+ 
+ void
+ control_flow_op::execute (operation_context &op_ctxt) const
+ {
+   auto logger = op_ctxt.get_logger ();
+   LOG_SCOPE (logger);
+ 
+   program_state dst_state (op_ctxt.get_initial_state ());
+   op_region_model_context ctxt (op_ctxt, dst_state);
+   if (apply_constraints (&op_ctxt.m_sedge,
+ 			 *dst_state.m_region_model,
+ 			 &ctxt,
+ 			 nullptr))
+     {
+       bool unknown_side_effects;
+       handle_on_stmt_for_state_machines (op_ctxt,
+ 					 dst_state,
+ 					 nullptr,
+ 					 unknown_side_effects,
+ 					 m_ctrlflow_stmt);
+ 
+       if (!ctxt.terminate_path_p ())
+ 	{
+ 	  auto dst_point (op_ctxt.get_next_intraprocedural_point ());
+ 	  op_ctxt.add_outcome (dst_point, dst_state, false, nullptr);
+ 	}
+     }
+ }
+ 
+ bool
+ control_flow_op::
+ execute_for_feasibility (const exploded_edge &eedge,
+ 			 feasibility_state &fstate,
+ 			 region_model_context *ctxt,
+ 			 std::unique_ptr<rejected_constraint> *out_rc) const
+ {
+   gcc_assert (eedge.m_sedge);
+   return apply_constraints (eedge.m_sedge,
+ 			    fstate.get_model (),
+ 			    ctxt,
+ 			    out_rc);
+ }
+ 
+ // class gcond_edge_op : public control_flow_op
+ 
+ gcond_edge_op::gcond_edge_op (::edge cfg_edge,
+ 			      const gcond &cond_stmt)
+ : control_flow_op (kind::cond_edge, cfg_edge, cond_stmt),
+   m_true_value (get_flags () & EDGE_TRUE_VALUE)
+ {
+   /* Exactly one of EDGE_TRUE_VALUE and EDGE_FALSE_VALUE must
+      be set on CFG_EDGE.  */
+   gcc_assert (static_cast<bool> (get_flags () & EDGE_TRUE_VALUE)
+ 	      ^ static_cast<bool> (get_flags () & EDGE_FALSE_VALUE));
+ }
+ 
+ void
+ gcond_edge_op::print_as_edge_label (pretty_printer *pp,
+ 				    bool user_facing) const
+ {
+   if (!user_facing)
+     pp_gimple_stmt_1 (pp, &get_ctrlflow_stmt (), 0, (dump_flags_t)0);
+ 
+   if (m_true_value)
+     pp_printf (pp, "true");
+   else
+     pp_printf (pp, "false");
+ }
+ 
+ label_text
+ gcond_edge_op::maybe_describe_condition (bool can_colorize) const
+ {
+   const gcond &cond_stmt = get_gcond ();
+   enum tree_code op = gimple_cond_code (&cond_stmt);
+   tree lhs = gimple_cond_lhs (&cond_stmt);
+   tree rhs = gimple_cond_rhs (&cond_stmt);
+   if (!m_true_value)
+     op = invert_tree_comparison (op, false /* honor_nans */);
+   return maybe_describe_condition (can_colorize,
+ 				   lhs, op, rhs);
+ }
+ 
+ /* Subroutine of gcond_edge_op::maybe_describe_condition above.
+ 
+    Attempt to generate a user-facing description of the condition
+    LHS OP RHS, but only if it is likely to make it easier for the
+    user to understand a condition.  */
+ 
+ label_text
+ gcond_edge_op::maybe_describe_condition (bool can_colorize,
+ 					 tree lhs,
+ 					 enum tree_code op,
+ 					 tree rhs)
+ {
+   /* In theory we could just build a tree via
+        fold_build2 (op, boolean_type_node, lhs, rhs)
+      and print it with %qE on it, but this leads to warts such as
+      parenthesizing vars, such as '(i) <= 9', and uses of '<unknown>'.  */
+ 
+   /* Special-case: describe testing the result of strcmp, as figuring
+      out what the "true" or "false" path is can be confusing to the user.  */
+   if (TREE_CODE (lhs) == SSA_NAME
+       && zerop (rhs))
+     {
+       if (gcall *call = dyn_cast <gcall *> (SSA_NAME_DEF_STMT (lhs)))
+ 	if (is_special_named_call_p (*call, "strcmp", 2))
+ 	  {
+ 	    if (op == EQ_EXPR)
+ 	      return label_text::borrow ("when the strings are equal");
+ 	    if (op == NE_EXPR)
+ 	      return label_text::borrow ("when the strings are non-equal");
+ 	  }
+     }
+ 
+   /* Only attempt to generate text for sufficiently simple expressions.  */
+   if (!should_print_expr_p (lhs))
+     return label_text::borrow (nullptr);
+   if (!should_print_expr_p (rhs))
+     return label_text::borrow (nullptr);
+ 
+   /* Special cases for pointer comparisons against NULL.  */
+   if (POINTER_TYPE_P (TREE_TYPE (lhs))
+       && POINTER_TYPE_P (TREE_TYPE (rhs))
+       && zerop (rhs))
+     {
+       if (op == EQ_EXPR)
+ 	return make_label_text (can_colorize, "when %qE is NULL",
+ 				lhs);
+       if (op == NE_EXPR)
+ 	return make_label_text (can_colorize, "when %qE is non-NULL",
+ 				lhs);
+     }
+ 
+   return make_label_text (can_colorize, "when %<%E %s %E%>",
+ 			  lhs, op_symbol_code (op), rhs);
+ }
+ 
+ /* Subroutine of maybe_describe_condition.
+ 
+    Return true if EXPR is we will get suitable user-facing output
+    from %E on it.  */
+ 
+ bool
+ gcond_edge_op::should_print_expr_p (tree expr)
+ {
+   if (TREE_CODE (expr) == SSA_NAME)
+     {
+       if (SSA_NAME_VAR (expr))
+ 	return should_print_expr_p (SSA_NAME_VAR (expr));
+       else
+ 	return false;
+     }
+ 
+   if (DECL_P (expr))
+     return true;
+ 
+   if (CONSTANT_CLASS_P (expr))
+     return true;
+ 
+   return false;
+ }
+ 
+ bool
+ gcond_edge_op::
+ apply_constraints (const superedge *,
+ 		   region_model &model,
+ 		   region_model_context *ctxt,
+ 		   std::unique_ptr<rejected_constraint> *out) const
+ {
+   const gcond &cond_stmt = get_gcond ();
+   enum tree_code op = gimple_cond_code (&cond_stmt);
+   tree lhs = gimple_cond_lhs (&cond_stmt);
+   tree rhs = gimple_cond_rhs (&cond_stmt);
+   if (!m_true_value)
+     op = invert_tree_comparison (op, false /* honor_nans */);
+   return model.add_constraint (lhs, op, rhs, ctxt, out);
+ }
+ 
+ // class ggoto_edge_op : public control_flow_op
+ 
+ ggoto_edge_op::ggoto_edge_op (::edge cfg_edge,
+ 			      const ggoto &goto_stmt,
+ 			      tree dst_label)
+ : control_flow_op (kind::goto_edge, cfg_edge, goto_stmt),
+   m_dst_label (dst_label)
+ {
+ }
+ 
+ void
+ ggoto_edge_op::print_as_edge_label (pretty_printer *pp,
+ 				    bool user_facing) const
+ {
+   if (!user_facing)
+     pp_gimple_stmt_1 (pp, &get_ctrlflow_stmt (), 0, (dump_flags_t)0);
+ 
+   if (m_dst_label)
+     pp_printf (pp, "%qD", m_dst_label);
+ }
+ 
+ label_text
+ ggoto_edge_op::maybe_describe_condition (bool) const
+ {
+   return label_text::borrow ("");
+ }
+ 
+ bool
+ ggoto_edge_op::
+ apply_constraints (const superedge *,
+ 		   region_model &model,
+ 		   region_model_context *ctxt,
+ 		   std::unique_ptr<rejected_constraint> */*out_rc*/) const
+ {
+   const ggoto &goto_stmt = get_ggoto ();
+   tree dest = gimple_goto_dest (&goto_stmt);
+   const svalue *dest_sval = model.get_rvalue (dest, ctxt);
+ 
+   /* If we know we were jumping to a specific label.  */
+   if (m_dst_label)
+     {
+       auto mgr = model.get_manager ();
+       const label_region *dst_label_reg
+ 	= mgr->get_region_for_label (m_dst_label);
+       const svalue *dst_label_ptr
+ 	= mgr->get_ptr_svalue (ptr_type_node, dst_label_reg);
+ 
+       if (!model.add_constraint (dest_sval, EQ_EXPR, dst_label_ptr, ctxt))
+ 	return false;
+     }
+ 
+   return true;
+ }
+ 
+ // class switch_case_op : public control_flow_op
+ 
+ switch_case_op::switch_case_op (function &fun,
+ 				::edge cfg_edge,
+ 				const gswitch &switch_stmt,
+ 				bounded_ranges_manager &mgr)
+ : control_flow_op (kind::switch_edge, cfg_edge, switch_stmt)
+ {
+   /* Populate m_case_labels with all cases which go to DST.  */
+   for (unsigned i = 0; i < gimple_switch_num_labels (&switch_stmt); i++)
+     {
+       tree case_ = gimple_switch_label (&switch_stmt, i);
+       basic_block bb = label_to_block (&fun,
+ 				       CASE_LABEL (case_));
+       if (bb == cfg_edge->dest)
+ 	m_case_labels.push_back (case_);
+     }
+ 
+   auto_vec <const bounded_ranges *> case_ranges_vec
+     (gimple_switch_num_labels (&switch_stmt));
+   for (auto case_label : m_case_labels)
+     {
+       /* Get the ranges for this case label.  */
+       const bounded_ranges *case_ranges
+ 	= mgr.make_case_label_ranges (&switch_stmt, case_label);
+       case_ranges_vec.quick_push (case_ranges);
+     }
+ 
+   m_all_cases_ranges = mgr.get_or_create_union (case_ranges_vec);
+ }
+ 
+ /* Print "case VAL:", "case LOWER ... UPPER:", or "default:" to PP.  */
+ 
+ void
+ switch_case_op::print_as_edge_label (pretty_printer *pp,
+ 				     bool user_facing) const
+ {
+   if (user_facing)
+     {
+       for (unsigned i = 0; i < m_case_labels.size (); ++i)
+ 	{
+ 	  if (i > 0)
+ 	    pp_string (pp, ", ");
+ 	  tree case_label = m_case_labels[i];
+ 	  gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
+ 	  tree lower_bound = CASE_LOW (case_label);
+ 	  tree upper_bound = CASE_HIGH (case_label);
+ 	  if (lower_bound)
+ 	    {
+ 	      pp_printf (pp, "case ");
+ 	      dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0, false);
+ 	      if (upper_bound)
+ 		{
+ 		  pp_printf (pp, " ... ");
+ 		  dump_generic_node (pp, upper_bound, 0, (dump_flags_t)0,
+ 				     false);
+ 		}
+ 	      pp_printf (pp, ":");
+ 	    }
+ 	  else
+ 	    pp_printf (pp, "default:");
+ 	}
+     }
+   else
+     {
+       pp_character (pp, '{');
+       for (unsigned i = 0; i < m_case_labels.size (); ++i)
+ 	{
+ 	  if (i > 0)
+ 	    pp_string (pp, ", ");
+ 	  tree case_label = m_case_labels[i];
+ 	  gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
+ 	  tree lower_bound = CASE_LOW (case_label);
+ 	  tree upper_bound = CASE_HIGH (case_label);
+ 	  if (lower_bound)
+ 	    {
+ 	      if (upper_bound)
+ 		{
+ 		  pp_character (pp, '[');
+ 		  dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0,
+ 				     false);
+ 		  pp_string (pp, ", ");
+ 		  dump_generic_node (pp, upper_bound, 0, (dump_flags_t)0,
+ 				     false);
+ 		  pp_character (pp, ']');
+ 		}
+ 	      else
+ 		dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0, false);
+ 	    }
+ 	  else
+ 	    pp_printf (pp, "default");
+ 	}
+       pp_character (pp, '}');
+       if (implicitly_created_default_p ())
+ 	{
+ 	  pp_string (pp, " IMPLICITLY CREATED");
+ 	}
+     }
+ }
+ 
+ /* Return true iff SWITCH_STMT has a non-default label that contains
+    INT_CST.  */
+ 
+ static bool
+ has_nondefault_case_for_value_p (const gswitch *switch_stmt, tree int_cst)
+ {
+   /* We expect the initial label to be the default; skip it.  */
+   gcc_assert (CASE_LOW (gimple_switch_label (switch_stmt, 0)) == NULL_TREE);
+   unsigned min_idx = 1;
+   unsigned max_idx = gimple_switch_num_labels (switch_stmt) - 1;
+ 
+   /* Binary search: try to find the label containing INT_CST.
+      This requires the cases to be sorted by CASE_LOW (done by the
+      gimplifier).  */
+   while (max_idx >= min_idx)
+     {
+       unsigned case_idx = (min_idx + max_idx) / 2;
+       tree label =  gimple_switch_label (switch_stmt, case_idx);
+       tree low = CASE_LOW (label);
+       gcc_assert (low);
+       tree high = CASE_HIGH (label);
+       if (!high)
+ 	high = low;
+       if (tree_int_cst_compare (int_cst, low) < 0)
+ 	{
+ 	  /* INT_CST is below the range of this label.  */
+ 	  gcc_assert (case_idx > 0);
+ 	  max_idx = case_idx - 1;
+ 	}
+       else if (tree_int_cst_compare (int_cst, high) > 0)
+ 	{
+ 	  /* INT_CST is above the range of this case.  */
+ 	  min_idx = case_idx + 1;
+ 	}
+       else
+ 	/* This case contains INT_CST.  */
+ 	return true;
+     }
+   /* Not found.  */
+   return false;
+ }
+ 
+ /* Return true iff SWITCH_STMT (which must be on an enum value)
+    has nondefault cases handling all values in the enum.  */
+ 
+ static bool
+ has_nondefault_cases_for_all_enum_values_p (const gswitch *switch_stmt,
+ 					    tree type)
+ {
+   gcc_assert (switch_stmt);
+   gcc_assert (TREE_CODE (type) == ENUMERAL_TYPE);
+ 
+   for (tree enum_val_iter = TYPE_VALUES (type);
+        enum_val_iter;
+        enum_val_iter = TREE_CHAIN (enum_val_iter))
+     {
+       tree enum_val = TREE_VALUE (enum_val_iter);
+       gcc_assert (TREE_CODE (enum_val) == CONST_DECL);
+       gcc_assert (TREE_CODE (DECL_INITIAL (enum_val)) == INTEGER_CST);
+       if (!has_nondefault_case_for_value_p (switch_stmt,
+ 					    DECL_INITIAL (enum_val)))
+ 	return false;
+     }
+   return true;
+ }
+ 
+ /* Given an EDGE guarded by SWITCH_STMT, determine appropriate constraints
+    for the edge to be taken.
+ 
+    If they are feasible, add the constraints and return true.
+ 
+    Return false if the constraints contradict existing knowledge
+    (and so the edge should not be taken).
+    When returning false, if OUT is non-NULL, write a new rejected_constraint
+    to it.  */
+ 
+ bool
+ switch_case_op::
+ apply_constraints (const superedge *,
+ 		   region_model &model,
+ 		   region_model_context *ctxt,
+ 		   std::unique_ptr<rejected_constraint> *out) const
+ {
+   const gswitch *switch_stmt = &get_gswitch ();
+   tree index  = gimple_switch_index (switch_stmt);
+   const svalue *index_sval = model.get_rvalue (index, ctxt);
+   bool check_index_type = true;
+ 
+   /* With -fshort-enum, there may be a type cast.  */
+   if (ctxt && index_sval->get_kind () == SK_UNARYOP
+       && TREE_CODE (index_sval->get_type ()) == INTEGER_TYPE)
+     {
+       const unaryop_svalue *unaryop = as_a <const unaryop_svalue *> (index_sval);
+       if (unaryop->get_op () == NOP_EXPR
+ 	  && is_a <const initial_svalue *> (unaryop->get_arg ()))
+ 	if (const initial_svalue *initvalop = (as_a <const initial_svalue *>
+ 					       (unaryop->get_arg ())))
+ 	  if (initvalop->get_type ()
+ 	      && TREE_CODE (initvalop->get_type ()) == ENUMERAL_TYPE)
+ 	    {
+ 	      index_sval = initvalop;
+ 	      check_index_type = false;
+ 	    }
+     }
+ 
+   /* If we're switching based on an enum type, assume that the user is only
+      working with values from the enum.  Hence if this is an
+      implicitly-created "default", assume it doesn't get followed.
+      This fixes numerous "uninitialized" false positives where we otherwise
+      consider jumping past the initialization cases.  */
+ 
+   if (/* Don't check during feasibility-checking (when ctxt is NULL).  */
+       ctxt
+       /* Must be an enum value.  */
+       && index_sval->get_type ()
+       && (!check_index_type
+ 	  || TREE_CODE (TREE_TYPE (index)) == ENUMERAL_TYPE)
+       && TREE_CODE (index_sval->get_type ()) == ENUMERAL_TYPE
+       /* If we have a constant, then we can check it directly.  */
+       && index_sval->get_kind () != SK_CONSTANT
+       && implicitly_created_default_p ()
+       && has_nondefault_cases_for_all_enum_values_p (switch_stmt,
+ 						     index_sval->get_type ())
+       /* Don't do this if there's a chance that the index is
+ 	 attacker-controlled.  */
+       && !ctxt->possibly_tainted_p (index_sval))
+     {
+       if (out)
+ 	*out = std::make_unique <rejected_default_case> (model);
+       return false;
+     }
+ 
+   bool sat
+     = model.get_constraints ()->add_bounded_ranges (index_sval,
+ 						    m_all_cases_ranges);
+   if (!sat && out)
+     *out = std::make_unique <rejected_ranges_constraint>
+       (model, index, m_all_cases_ranges);
+   if (sat && ctxt && !m_all_cases_ranges->empty_p ())
+     ctxt->on_bounded_ranges (*index_sval, *m_all_cases_ranges);
+   return sat;
+ }
+ 
+ /* Return true iff this op's edge is purely for an
+    implicitly-created "default".  */
+ 
+ bool
+ switch_case_op::implicitly_created_default_p () const
+ {
+   if (m_case_labels.size () != 1)
+     return false;
+ 
+   tree case_label = m_case_labels[0];
+   gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
+   if (CASE_LOW (case_label))
+     return false;
+ 
+   /* We have a single "default" case.
+      Assume that it was implicitly created if it has UNKNOWN_LOCATION.  */
+   return EXPR_LOCATION (case_label) == UNKNOWN_LOCATION;
+ }
+ 
+ /* Given an ERT_TRY region, get the eh_catch corresponding to
+    the label of DST_SNODE, if any.  */
+ 
+ static eh_catch
+ get_catch (eh_region eh_reg, supernode *dst_snode)
+ {
+   gcc_assert (eh_reg->type == ERT_TRY);
+ 
+   tree dst_snode_label = dst_snode->get_label ();
+   if (!dst_snode_label)
+     return nullptr;
+ 
+   for (eh_catch iter = eh_reg->u.eh_try.first_catch;
+        iter;
+        iter = iter->next_catch)
+     if (iter->label == dst_snode_label)
+       return iter;
+ 
+   return nullptr;
+ }
+ 
+ class rejected_eh_dispatch : public rejected_constraint
+ {
+ public:
+   rejected_eh_dispatch (const region_model &model)
+   : rejected_constraint (model)
+   {}
+ 
+   void dump_to_pp (pretty_printer *pp) const final override
+   {
+     pp_printf (pp, "rejected_eh_dispatch");
+   }
+ };
+ 
+ static bool
+ exception_matches_type_p (tree exception_type,
+ 			  tree catch_type)
+ {
+   if (catch_type == exception_type)
+     return true;
+ 
+   /* TODO (PR analyzer/119697): we should also handle subclasses etc;
+      see the rules in https://en.cppreference.com/w/cpp/language/catch
+ 
+      It looks like we should be calling (or emulating)
+      can_convert_eh from the C++ FE, but that's specific to the C++ FE.  */
+ 
+   return false;
+ }
+ 
+ static bool
+ matches_any_exception_type_p (eh_catch ehc, tree exception_type)
+ {
+   if (ehc->type_list == NULL_TREE)
+     /* All exceptions are caught here.  */
+     return true;
+ 
+   for (tree iter = ehc->type_list; iter; iter = TREE_CHAIN (iter))
+     if (exception_matches_type_p (TREE_VALUE (iter),
+ 				  exception_type))
+       return true;
+   return false;
+ }
+ 
+ // class eh_dispatch_edge_op : public control_flow_op
+ 
+ std::unique_ptr<eh_dispatch_edge_op>
+ eh_dispatch_edge_op::make (supernode *src_snode,
+ 			   supernode *dst_snode,
+ 			   ::edge cfg_edge,
+ 			   const geh_dispatch &eh_dispatch_stmt)
+ {
+   const eh_status *eh = src_snode->get_function ()->eh;
+   gcc_assert (eh);
+   int region_idx = gimple_eh_dispatch_region (&eh_dispatch_stmt);
+   gcc_assert (region_idx > 0);
+   gcc_assert ((*eh->region_array)[region_idx]);
+   eh_region eh_reg = (*eh->region_array)[region_idx];
+   gcc_assert (eh_reg);
+   switch (eh_reg->type)
+     {
+     default:
+       gcc_unreachable ();
+     case ERT_CLEANUP:
+       // TODO
+       gcc_unreachable ();
+       break;
+     case ERT_TRY:
+       {
+ 	eh_catch ehc = get_catch (eh_reg, dst_snode);
+ 	return std::make_unique<eh_dispatch_try_edge_op>
+ 	  (src_snode, dst_snode,
+ 	   cfg_edge, eh_dispatch_stmt,
+ 	   eh_reg, ehc);
+       }
+       break;
+     case ERT_ALLOWED_EXCEPTIONS:
+       return std::make_unique<eh_dispatch_allowed_edge_op>
+ 	(src_snode, dst_snode,
+ 	 cfg_edge, eh_dispatch_stmt,
+ 	 eh_reg);
+       break;
+     case ERT_MUST_NOT_THROW:
+       // TODO
+       gcc_unreachable ();
+       break;
+     }
+ }
+ 
+ eh_dispatch_edge_op::
+ eh_dispatch_edge_op (supernode *src_snode,
+ 		     supernode *dst_snode,
+ 		     enum kind kind_,
+ 		     ::edge cfg_edge,
+ 		     const geh_dispatch &geh_dispatch_stmt,
+ 		     eh_region eh_reg)
+ : control_flow_op (kind_, cfg_edge, geh_dispatch_stmt),
+   m_src_snode (src_snode),
+   m_dst_snode (dst_snode),
+   m_eh_region (eh_reg)
+ {
+ }
+ 
+ bool
+ eh_dispatch_edge_op::
+ apply_constraints (const superedge *sedge,
+ 		   region_model &model,
+ 		   region_model_context *ctxt,
+ 		   std::unique_ptr<rejected_constraint> *out) const
+ {
+   const exception_node *current_node = model.get_current_thrown_exception ();
+ 
+   if (!current_node)
+     return false;
+ 
+   gcc_assert (current_node);
+   tree curr_exception_type = current_node->maybe_get_type ();
+   if (!curr_exception_type)
+     /* We don't know the specific type.  */
+     return true;
+ 
+   return apply_eh_constraints (sedge, model, ctxt, curr_exception_type, out);
+ }
+ 
+ // class eh_dispatch_try_edge_op : public eh_dispatch_edge_op
+ 
+ eh_dispatch_try_edge_op::
+ eh_dispatch_try_edge_op (supernode *src_snode,
+ 			 supernode *dst_snode,
+ 			 ::edge cfg_edge,
+ 			 const geh_dispatch &geh_dispatch_stmt,
+ 			 eh_region eh_reg,
+ 			 eh_catch ehc)
+ : eh_dispatch_edge_op (src_snode, dst_snode,
+ 		       kind::eh_dispatch_try_edge,
+ 		       cfg_edge, geh_dispatch_stmt, eh_reg),
+   m_eh_catch (ehc)
+ {
+   gcc_assert (eh_reg->type == ERT_TRY);
+ }
+ 
+ void
+ eh_dispatch_try_edge_op::print_as_edge_label (pretty_printer *pp,
+ 					      bool user_facing) const
+ {
+   if (!user_facing)
+     pp_string (pp, "ERT_TRY: ");
+   if (m_eh_catch)
+     {
+       bool first = true;
+       for (tree iter = m_eh_catch->type_list; iter; iter = TREE_CHAIN (iter))
+ 	{
+ 	  if (!first)
+ 	    pp_string (pp, ", ");
+ 	  pp_printf (pp, "on catch %qT", TREE_VALUE (iter));
+ 	  first = false;
+ 	}
+     }
+   else
+     pp_string (pp, "on uncaught exception");
+ }
+ 
+ void
+ eh_dispatch_try_edge_op::add_any_events_for_eedge (const exploded_edge &eedge,
+ 						   checker_path &out_path) const
+ {
+   if (m_eh_catch)
+     {
+       const region_model *model = eedge.m_src->get_state ().m_region_model;
+       auto curr_thrown_exception_node
+ 	= model->get_current_thrown_exception ();
+       gcc_assert (curr_thrown_exception_node);
+       tree type = curr_thrown_exception_node->maybe_get_type ();
+       out_path.add_event
+ 	(std::make_unique<catch_cfg_edge_event>
+ 	 (eedge,
+ 	  event_loc_info (eedge.m_dest),
+ 	  *this,
+ 	  type));
+     }
+   else
+     {
+       /* We have the "uncaught exception" sedge, from eh_dispatch
+ 	 to a block containing resx.
+ 	 Don't add any events for this, so that we can consolidate
+ 	 adjacent stack unwinding events.  */
+     }
+ }
+ 
+ bool
+ eh_dispatch_try_edge_op::
+ apply_eh_constraints (const superedge *sedge,
+ 		      region_model &model,
+ 		      region_model_context */*ctxt*/,
+ 		      tree exception_type,
+ 		      std::unique_ptr<rejected_constraint> *out) const
+ {
+   /* TODO: can we rely on this ordering?
+      or do we need to iterate through prev_catch ?  */
+   /* The exception must not match any of the previous edges.  */
+   for (auto sibling_sedge : get_src_snode ()->m_succs)
+     {
+       if (sibling_sedge == sedge)
+ 	break;
+ 
+       const eh_dispatch_try_edge_op *sibling_edge_op
+ 	= (const eh_dispatch_try_edge_op *)sibling_sedge->get_op ();
+       if (eh_catch ehc = sibling_edge_op->m_eh_catch)
+ 	if (matches_any_exception_type_p (ehc, exception_type))
+ 	  {
+ 	    /* The earlier sibling matches, so the "unhandled" edge is
+ 	       not taken.  */
+ 	    if (out)
+ 	      *out = std::make_unique<rejected_eh_dispatch> (model);
+ 	    return false;
+ 	  }
+     }
+ 
+   if (eh_catch ehc = m_eh_catch)
+     {
+       /* We have an edge that tried to match one or more types.  */
+ 
+       /* The exception must not match any of the previous edges.  */
+ 
+       /* It must match this type.  */
+       if (matches_any_exception_type_p (ehc, exception_type))
+ 	return true;
+       else
+ 	{
+ 	  /* Exception type doesn't match.  */
+ 	  if (out)
+ 	    *out = std::make_unique<rejected_eh_dispatch> (model);
+ 	  return false;
+ 	}
+     }
+   else
+     {
+       /* This is the "unhandled exception" edge.
+ 	 If we get here then no sibling edges matched;
+ 	 we will follow this edge.  */
+       return true;
+     }
+ }
+ 
+ // class eh_dispatch_allowed_edge_op : public eh_dispatch_edge_op
+ 
+ eh_dispatch_allowed_edge_op::
+ eh_dispatch_allowed_edge_op (supernode *src_snode,
+ 			     supernode *dst_snode,
+ 			     ::edge cfg_edge,
+ 			     const geh_dispatch &geh_dispatch_stmt,
+ 			     eh_region eh_reg)
+ : eh_dispatch_edge_op (src_snode, dst_snode,
+ 		       kind::eh_dispatch_try_edge,
+ 		       cfg_edge, geh_dispatch_stmt, eh_reg)
+ {
+   gcc_assert (eh_reg->type == ERT_ALLOWED_EXCEPTIONS);
+ 
+   /* We expect two sibling out-edges at an eh_dispatch from such a region:
+ 
+      - one to a bb without a gimple label, with a resx,
+      for exceptions of expected types
+ 
+      - one to a bb with a gimple label, with a call to __cxa_unexpected,
+      for exceptions of unexpected types.
+ 
+      Set m_kind for this edge accordingly.  */
+   gcc_assert (cfg_edge->src->succs->length () == 2);
+   tree label_for_unexpected_exceptions = eh_reg->u.allowed.label;
+   tree label_for_dest_enode = dst_snode->get_label ();
+   if (label_for_dest_enode == label_for_unexpected_exceptions)
+     m_kind = eh_kind::unexpected;
+   else
+     {
+       gcc_assert (label_for_dest_enode == nullptr);
+       m_kind = eh_kind::expected;
+     }
+ }
+ 
+ void
+ eh_dispatch_allowed_edge_op::print_as_edge_label (pretty_printer *pp,
+ 						  bool user_facing) const
+ {
+   if (!user_facing)
+     {
+       switch (m_kind)
+ 	{
+ 	default:
+ 	  gcc_unreachable ();
+ 	case eh_kind::expected:
+ 	  pp_string (pp, "expected: ");
+ 	  break;
+ 	case eh_kind::unexpected:
+ 	  pp_string (pp, "unexpected: ");
+ 	  break;
+ 	}
+       pp_string (pp, "ERT_ALLOWED_EXCEPTIONS: ");
+       eh_region eh_reg = get_eh_region ();
+       bool first = true;
+       for (tree iter = eh_reg->u.allowed.type_list; iter;
+ 	   iter = TREE_CHAIN (iter))
+ 	{
+ 	  if (!first)
+ 	    pp_string (pp, ", ");
+ 	  pp_printf (pp, "%qT", TREE_VALUE (iter));
+ 	  first = false;
+ 	}
+     }
+ }
+ 
+ bool
+ eh_dispatch_allowed_edge_op::
+ apply_eh_constraints (const superedge *,
+ 		      region_model &model,
+ 		      region_model_context */*ctxt*/,
+ 		      tree exception_type,
+ 		      std::unique_ptr<rejected_constraint> *out) const
+ {
+   auto curr_thrown_exception_node = model.get_current_thrown_exception ();
+   gcc_assert (curr_thrown_exception_node);
+   tree curr_exception_type = curr_thrown_exception_node->maybe_get_type ();
+   eh_region eh_reg = get_eh_region ();
+   tree type_list = eh_reg->u.allowed.type_list;
+ 
+   switch (get_eh_kind ())
+     {
+     default:
+       gcc_unreachable ();
+     case eh_kind::expected:
+       if (!curr_exception_type)
+ 	{
+ 	  /* We don't know the specific type;
+ 	     assume we have one of an expected type.  */
+ 	  return true;
+ 	}
+       for (tree iter = type_list; iter; iter = TREE_CHAIN (iter))
+ 	if (exception_matches_type_p (TREE_VALUE (iter),
+ 				      exception_type))
+ 	  return true;
+       if (out)
+ 	*out = std::make_unique<rejected_eh_dispatch> (model);
+       return false;
+ 
+     case eh_kind::unexpected:
+       if (!curr_exception_type)
+ 	{
+ 	  /* We don't know the specific type;
+ 	     assume we don't have one of an expected type.  */
+ 	  if (out)
+ 	    *out = std::make_unique<rejected_eh_dispatch> (model);
+ 	  return false;
+ 	}
+       for (tree iter = type_list; iter; iter = TREE_CHAIN (iter))
+ 	if (exception_matches_type_p (TREE_VALUE (iter),
+ 				      exception_type))
+ 	  {
+ 	    if (out)
+ 	      *out = std::make_unique<rejected_eh_dispatch> (model);
+ 	    return false;
+ 	  }
+       return true;
+     }
+ }
+ 
+ // class phis_for_edge_op : public operation
+ 
+ std::unique_ptr<operation>
+ phis_for_edge_op::maybe_make (::edge cfg_in_edge)
+ {
+   std::vector<pair> pairs = get_pairs_for_phi_along_in_edge (cfg_in_edge);
+   if (pairs.empty ())
+     return nullptr;
+ 
+   return std::make_unique <phis_for_edge_op> (std::move (pairs),
+ 					      cfg_in_edge);
+ }
+ 
+ phis_for_edge_op::phis_for_edge_op (std::vector<pair> &&pairs,
+ 				    ::edge cfg_in_edge)
+ : operation (kind::phis),
+   m_pairs (std::move (pairs)),
+   m_cfg_in_edge (cfg_in_edge)
+ {
+ }
+ 
+ std::vector<phis_for_edge_op::pair>
+ phis_for_edge_op::get_pairs_for_phi_along_in_edge (::edge cfg_in_edge)
+ {
+   std::vector<pair> result;
+ 
+   const size_t phi_arg_idx = cfg_in_edge->dest_idx;
+   for (gphi_iterator gpi = gsi_start_phis (cfg_in_edge->dest);
+        !gsi_end_p (gpi); gsi_next (&gpi))
+     {
+       gphi * const phi = gpi.phi ();
+       tree dst = gimple_phi_result (phi);
+ 
+       /* We don't bother tracking the .MEM SSA names.  */
+       if (tree var = SSA_NAME_VAR (dst))
+ 	if (TREE_CODE (var) == VAR_DECL)
+ 	  if (VAR_DECL_IS_VIRTUAL_OPERAND (var))
+ 	    continue;
+ 
+       tree src = gimple_phi_arg_def (phi, phi_arg_idx);
+ 
+       result.push_back ({dst, src});
+     }
+ 
+   return result;
+ }
+ 
+ void
+ phis_for_edge_op::print_as_edge_label (pretty_printer *pp,
+ 				       bool ) const
+ {
+   pp_printf (pp, "PHI(");
+   bool first = true;
+   for (auto &p : m_pairs)
+     {
+       if (first)
+ 	first = false;
+       else
+ 	pp_string (pp, ", ");
+ 
+       pp_printf (pp, "%E = %E", p.m_dst, p.m_src);
+     }
+   pp_printf (pp, ");");
+ }
+ 
+ void
+ phis_for_edge_op::
+ walk_load_store_addr_ops (void */*data*/ ,
+ 			  walk_stmt_load_store_addr_fn /*load_cb*/,
+ 			  walk_stmt_load_store_addr_fn /*store_cb*/,
+ 			  walk_stmt_load_store_addr_fn /*addr_cb*/) const
+ {
+ }
+ 
+ bool
+ phis_for_edge_op::defines_ssa_name_p (const_tree ssa_name) const
+ {
+   for (auto &p : m_pairs)
+     if (p.m_dst == ssa_name)
+       return true;
+   return false;
+ }
+ 
+ void
+ phis_for_edge_op::execute (operation_context &op_ctxt) const
+ {
+   auto logger = op_ctxt.get_logger ();
+   LOG_SCOPE (logger);
+ 
+   auto dst_point (op_ctxt.get_next_intraprocedural_point ());
+ 
+   const program_state &src_state (op_ctxt.get_initial_state ());
+   program_state dst_state (src_state);
+ 
+   impl_path_context path_ctxt (&dst_state, logger);
+   uncertainty_t uncertainty;
+   impl_region_model_context ctxt (op_ctxt.m_eg,
+ 				  &op_ctxt.m_src_enode,
+ 
+ 				  /* TODO: should we be getting the ECs from the
+ 				     old state, rather than the new?  */
+ 				  &op_ctxt.get_initial_state (),
+ 				  &dst_state,
+ 				  &uncertainty,
+ 				  &path_ctxt,
+ 				  nullptr,
+ 				  nullptr);
+ 
+   update_state (src_state, dst_state, &ctxt);
+ 
+   op_ctxt.add_outcome (dst_point, dst_state, false, &uncertainty);
+ }
+ 
+ void
+ phis_for_edge_op::update_state (const program_state &src_state,
+ 				program_state &dst_state,
+ 				region_model_context *ctxt) const
+ {
+   const region_model &src_model = *src_state.m_region_model;
+   region_model &dst_model = *dst_state.m_region_model;
+ 
+   hash_set<const svalue *> svals_changing_meaning;
+ 
+   /* Get state from src_state so that all of the phi stmts for an edge
+      are effectively handled simultaneously.  */
+   for (auto &p : m_pairs)
+     {
+       const svalue *src_sval = src_model.get_rvalue (p.m_src, nullptr);
+       const region *dst_reg = src_model.get_lvalue (p.m_dst, nullptr);
+ 
+       const svalue *old_sval = src_model.get_rvalue (p.m_dst, nullptr);
+       if (old_sval->get_kind () == SK_WIDENING)
+ 	svals_changing_meaning.add (old_sval);
+ 
+       dst_model.set_value (dst_reg, src_sval, ctxt);
+     }
+ 
+  for (auto iter : svals_changing_meaning)
+    dst_model.get_constraints ()->purge_state_involving (iter);
+ }
+ 
+ bool
+ phis_for_edge_op::
+ execute_for_feasibility (const exploded_edge &eedge,
+ 			 feasibility_state &fstate,
+ 			 region_model_context *ctxt,
+ 			 std::unique_ptr<rejected_constraint> */*out_rc*/) const
+ {
+   hash_set<const svalue *> svals_changing_meaning;
+   /* Get state from src_state so that all of the phi stmts for an edge
+      are effectively handled simultaneously.  */
+   region_model &model = fstate.get_model ();
+   region_model src_model (model);
+   for (auto &p : m_pairs)
+     {
+       const svalue *src_sval = src_model.get_rvalue (p.m_src, ctxt);
+       const region *dst_reg = model.get_lvalue (p.m_dst, ctxt);
+ 
+       const svalue *sval = model.get_rvalue (p.m_dst, ctxt);
+       if (sval->get_kind () == SK_WIDENING)
+ 	svals_changing_meaning.add (sval);
+ 
+       model.set_value (dst_reg, src_sval, ctxt);
+     }
+ 
+   for (auto iter : svals_changing_meaning)
+     model.get_constraints ()->purge_state_involving (iter);
+ 
+   {
+     /* If we've entering an snode that we've already visited on this
+        epath, then we need do fix things up for loops; see the
+        comment for store::loop_replay_fixup.
+        Perhaps we should probably also verify the callstring,
+        and track program_points,  but hopefully doing it by supernode
+        is good enough.  */
+     const exploded_node &dst_enode = *eedge.m_dest;
+     const unsigned dst_snode_idx = dst_enode.get_supernode ()->m_id;
+     if (bitmap_bit_p (fstate.get_snodes_visited (), dst_snode_idx))
+       model.loop_replay_fixup (dst_enode.get_state ().m_region_model);
+   }
+  
+   return true;
+ }
+ 
+ void
+ phis_for_edge_op::
+ update_state_for_bulk_merger (const program_state &src_state,
+ 			      program_state &dst_state) const
+ {
+   update_state (src_state, dst_state, nullptr);
+ }
+ 
+ void
+ phis_for_edge_op::add_any_events_for_eedge (const exploded_edge &,
+ 					    checker_path &) const
+ {
+   // No-op
+ }
+ 
+ // class resx_op : public gimple_stmt_op
+ 
+ void
+ resx_op::execute (operation_context &op_ctxt) const
+ {
+   auto logger = op_ctxt.get_logger ();
+   LOG_SCOPE (logger);
+ 
+   program_point dst_point (op_ctxt.get_next_intraprocedural_point ());
+   program_state dst_state (op_ctxt.get_initial_state ());
+   op_region_model_context ctxt (op_ctxt, dst_state);
+ 
+   if (exploded_node *dst_enode
+       = op_ctxt.m_eg.get_or_create_node (dst_point, dst_state,
+ 					 &op_ctxt.m_src_enode,
+ 					 // Don't add to worklist:
+ 					 false))
+     {
+       op_ctxt.m_eg.add_edge (&op_ctxt.m_src_enode,
+ 			     dst_enode,
+ 			     &op_ctxt.m_sedge,
+ 			     false,
+ 			     nullptr);
+       /* Try to adding eedges and enodes that unwind to the next
+ 	 eh_dispatch statement, if any.
+ 	 Only the final enode is added to the worklist.  */
+       op_ctxt.m_eg.unwind_from_exception (*dst_enode,
+ 					  nullptr,
+ 					  &ctxt);
+     }
+ }
+ 
+ void
+ resx_op::add_any_events_for_eedge (const exploded_edge &,
+ 				   checker_path &) const
+ {
+ }
+ 
+ } // namespace ana
+ 
+ #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/ops.h gcc-16-20251214/gcc/analyzer/ops.h
*** gcc-16-20251207/gcc/analyzer/ops.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/analyzer/ops.h	Sun Dec 14 22:32:06 2025
***************
*** 0 ****
--- 1,1007 ----
+ /* Operations within the code being analyzed.
+    Copyright (C) 2019-2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_ANALYZER_OPS_H
+ #define GCC_ANALYZER_OPS_H
+ 
+ #include "except.h"
+ #include "gimple-walk.h"
+ 
+ namespace ana {
+ 
+ class operation;
+   class control_flow_op;
+   class call_and_return_op;
+   class phis_for_edge_op;
+ 
+ class callsite_expr;
+ 
+ struct operation_context
+ {
+   operation_context (exploded_graph &eg,
+ 		     exploded_node &src_enode,
+ 		     const superedge &sedge)
+   : m_eg (eg),
+     m_src_enode (src_enode),
+     m_sedge (sedge)
+   {
+   }
+ 
+   void DEBUG_FUNCTION dump () const;
+ 
+   logger *get_logger () const;
+ 
+   const extrinsic_state &get_ext_state () const;
+ 
+   const program_point &
+   get_initial_point () const;
+ 
+   const program_state &
+   get_initial_state () const;
+ 
+   const supergraph &
+   get_supergraph () const;
+ 
+   program_point
+   get_next_intraprocedural_point () const;
+ 
+   void
+   add_outcome (const program_point &dst_point,
+ 	       program_state dst_state,
+ 	       bool could_do_work,
+ 	       uncertainty_t *uncertainty,
+ 	       std::unique_ptr<custom_edge_info> info = nullptr);
+ 
+   exploded_graph &m_eg;
+   exploded_node &m_src_enode;
+   const superedge &m_sedge;
+ };
+ 
+ /* Abstract base class for an operation along a superedge.  */
+ 
+ class operation
+ {
+  public:
+   // Discriminator for concrete subclasses
+   enum kind
+   {
+     asm_stmt,
+     assignment,
+     predict_stmt,
+     return_stmt,
+     resx,
+     cond_edge,
+     goto_edge,
+     switch_edge,
+     eh_dispatch_try_edge,
+     eh_dispatch_allowed_edge,
+     phis,
+     call_and_return
+   };
+ 
+   ~operation () {}
+ 
+   void
+   dump () const;
+ 
+   virtual std::unique_ptr<operation>
+   clone () const = 0;
+ 
+   virtual void
+   print_as_edge_label (pretty_printer *pp, bool user_facing) const = 0;
+ 
+   virtual bool
+   defines_ssa_name_p (const_tree ssa_name) const = 0;
+ 
+   virtual void
+   walk_load_store_addr_ops (void *,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn) const = 0;
+ 
+   virtual const gimple *
+   maybe_get_stmt () const
+   {
+     return nullptr;
+   }
+ 
+   virtual void
+   execute (operation_context &op_ctxt) const = 0;
+ 
+   virtual bool
+   execute_for_feasibility (const exploded_edge &,
+ 			   feasibility_state &,
+ 			   region_model_context *,
+ 			   std::unique_ptr<rejected_constraint> */*out_rc*/) const
+   {
+     // no-op
+     return true;
+   }
+ 
+   /* Is this op suitable for bulk-merging?
+      It must have a single outcome, at the intraprocedural
+      next point, with some state.  */
+   virtual bool
+   supports_bulk_merge_p () const = 0;
+   virtual void
+   update_state_for_bulk_merger (const program_state &,
+ 				program_state &) const
+   {
+     /* Must be implemented for any subclasses that return true
+        for supports_bulk_merge_p.  */
+     gcc_unreachable ();
+   }
+   virtual void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const = 0;
+ 
+   virtual const control_flow_op *
+   dyn_cast_control_flow_op () const { return nullptr; }
+ 
+   virtual const call_and_return_op *
+   dyn_cast_call_and_return_op () const { return nullptr; }
+ 
+   virtual const phis_for_edge_op *
+   dyn_cast_phis_for_edge_op () const { return nullptr; }
+ 
+   enum kind get_kind () const { return m_kind; }
+ 
+ protected:
+   operation (enum kind kind_)
+   : m_kind (kind_)
+   {
+   }
+ 
+   static void
+   handle_on_stmt_for_state_machines (operation_context &op_ctxt,
+ 				     program_state &dst_state,
+ 				     path_context *path_ctxt,
+ 				     bool &unknown_side_effects,
+ 				     const gimple &stmt);
+ 
+ private:
+   enum kind m_kind;
+ };
+ 
+ /* Subclass for an operation representing a specific gimple stmt
+    that isn't control flow.  */
+ 
+ class gimple_stmt_op : public operation
+ {
+ public:
+   const gimple &get_stmt () const { return m_stmt; }
+ 
+   void
+   print_as_edge_label (pretty_printer *pp, bool user_facing) const override;
+ 
+   bool
+   defines_ssa_name_p (const_tree ssa_name) const final override;
+ 
+   void
+   walk_load_store_addr_ops (void *,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn) const final override;
+ 
+   const gimple *
+   maybe_get_stmt () const final override
+   {
+     return &m_stmt;
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const override;
+ 
+   void
+   execute_on_state (operation_context &op_ctxt,
+ 		    program_state dst_state) const;
+ 
+   bool
+   execute_for_feasibility (const exploded_edge &,
+ 			   feasibility_state &,
+ 			   region_model_context *,
+ 			   std::unique_ptr<rejected_constraint> *out_rc) const override;
+ 
+   virtual bool
+   supports_bulk_merge_p () const override;
+ 
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const override;
+ 
+ protected:
+   gimple_stmt_op (enum kind kind_, const gimple &stmt)
+   : operation (kind_), m_stmt (stmt)
+   {}
+ 
+ private:
+   const gimple &m_stmt;
+ };
+ 
+ /* Various subclasses of gimple_stmt_op.  */
+ 
+ /* An operation subclass representing the effect of a GIMPLE_ASM stmt.  */
+ 
+ class gasm_op : public gimple_stmt_op
+ {
+ public:
+   gasm_op (const gasm &asm_stmt)
+   : gimple_stmt_op (kind::asm_stmt, asm_stmt)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<gasm_op> (get_gasm ());
+   }
+ 
+   const gasm &get_gasm () const
+   {
+     return *as_a <const gasm *> (&get_stmt ());
+   }
+ };
+ 
+ /* An operation subclass representing the effect of a GIMPLE_ASSIGN stmt.  */
+ 
+ class gassign_op : public gimple_stmt_op
+ {
+ public:
+   gassign_op (const gassign &assign_stmt)
+   : gimple_stmt_op (kind::assignment, assign_stmt)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<gassign_op> (get_gassign ());
+   }
+ 
+   const gassign &get_gassign () const
+   {
+     return *as_a <const gassign *> (&get_stmt ());
+   }
+ };
+ 
+ /* An operation subclass for a GIMPLE_PREDICT stmt.
+    They have no effect on state, but can be useful for reconstructing
+    where "return" statements were in the code the user originally wrote,
+    to improve the reported locations in diagnostics.  */
+ 
+ class predict_op : public gimple_stmt_op
+ {
+ public:
+   predict_op (const gimple &predict_stmt)
+   : gimple_stmt_op (kind::predict_stmt, predict_stmt)
+   {
+     gcc_assert (predict_stmt.code == GIMPLE_PREDICT);
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<predict_op> (get_stmt ());
+   }
+ };
+ 
+ /* An operation subclass representing both:
+    (a) the effect of a GIMPLE_RETURN stmt: copying a value into the
+    RESULT_DECL of the current frame, and
+    (b) a hint when reporting diagnostics that this is the return
+    path from the function (rather than say, throwing an exception).  */
+ 
+ class greturn_op : public gimple_stmt_op
+ {
+ public:
+   greturn_op (const greturn &return_stmt)
+   : gimple_stmt_op (kind::return_stmt, return_stmt)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<greturn_op> (get_greturn ());
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const final override;
+ 
+   bool
+   execute_for_feasibility (const exploded_edge &,
+ 			   feasibility_state &,
+ 			   region_model_context *ctxt,
+ 			   std::unique_ptr<rejected_constraint> *out_rc) const override;
+ 
+   bool
+   supports_bulk_merge_p () const final override
+   {
+     return false;
+   }
+ 
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const final override;
+ 
+   const greturn &get_greturn () const
+   {
+     return *as_a <const greturn *> (&get_stmt ());
+   }
+ 
+   tree get_retval () const
+   {
+     return gimple_return_retval (&get_greturn ());
+   }
+ };
+ 
+ /* A concrete operation subclass representing the effect of a GIMPLE_CALL stmt.
+ 
+    If the function is identified and has a known body, either simulate
+    it interprocedurally by pushing a stack frame and transitioning to the
+    callee, or simulate it intraprocedurally by replaying a summary of the
+    effects of the call.
+ 
+    If the function is identified but has an unknown body,
+    simulate it intraprocedurally, either using a known_function
+    subclass for precision, or following conservative rules that
+    assume various side-effects.
+ 
+    If the function is unidentified (for some kinds of dynamic calls),
+    simulate it intraprocedurally, following conservative rules that
+    assume various side-effects.
+ 
+    In the various intraprocedural simulation cases, the exploded edge will
+    correspond to the underlying superedge.
+ 
+    In the interprocedural simulation case, the exploded edge will
+    link two supernodes in different functions, and thus will require
+    custom edge info.
+ 
+    Various subclasses exist for handling awkward special cases,
+    such as longjmp.  */
+ 
+ class call_and_return_op : public gimple_stmt_op
+ {
+ public:
+   static std::unique_ptr<operation>
+   make (const gcall &call_stmt);
+ 
+   std::unique_ptr<operation>
+   clone () const override
+   {
+     return std::make_unique<call_and_return_op> (get_gcall ());
+   }
+ 
+   const gcall &get_gcall () const
+   {
+     return *as_a <const gcall *> (&get_stmt ());
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const override;
+ 
+   bool
+   supports_bulk_merge_p () const final override
+   {
+     return false;
+   }
+ 
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const override;
+ 
+   const call_and_return_op *
+   dyn_cast_call_and_return_op () const final override { return this; }
+ 
+   tree
+   map_expr_from_caller_to_callee (tree callee_fndecl,
+ 				  tree caller_expr,
+ 				  callsite_expr *out) const;
+   tree
+   map_expr_from_callee_to_caller (tree callee_fndecl,
+ 				  tree callee_expr,
+ 				  callsite_expr *out) const;
+ 
+   call_and_return_op (const gcall &call_stmt)
+   : gimple_stmt_op (kind::call_and_return, call_stmt)
+   {
+   }
+ 
+   const known_function *
+   maybe_get_known_function (const call_details &cd) const;
+ 
+ private:
+   cgraph_edge *
+   get_any_cgraph_edge (operation_context &op_ctxt) const;
+ 
+   void
+   replay_call_summaries (operation_context &op_ctxt,
+ 			 function &called_fn,
+ 			 per_function_data &called_fn_data,
+ 			 region_model_context *ctxt) const;
+ 
+   void
+   replay_call_summary (operation_context &op_ctxt,
+ 		       function &called_fn,
+ 		       call_summary &summary,
+ 		       region_model_context *ctxt) const;
+ 
+   tree
+   get_arg_for_parm (tree callee_fndecl,
+ 		    tree parm,
+ 		    callsite_expr *out) const;
+   tree
+   get_parm_for_arg (tree callee_fndecl,
+ 		    tree arg,
+ 		    callsite_expr *out) const;
+ };
+ 
+ /* A call to one of the various __analyzer_dump* functions.
+    These have no effect on state.  */
+ 
+ class dump_op : public call_and_return_op
+ {
+ public:
+   enum dump_kind
+   {
+    state,
+    sarif,
+    dot,
+    state_2
+   };
+ 
+   dump_op (const gcall &call_stmt, enum dump_kind dump_kind_)
+   : call_and_return_op (call_stmt),
+     m_dump_kind (dump_kind_)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<dump_op> (get_gcall (), m_dump_kind);
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const final override;
+ 
+ private:
+   enum dump_kind m_dump_kind;
+ };
+ 
+ class setjmp_op : public call_and_return_op
+ {
+ public:
+   setjmp_op (const gcall &call_stmt)
+   : call_and_return_op (call_stmt)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<setjmp_op> (get_gcall ());
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const final override;
+ 
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const final override;
+ };
+ 
+ class longjmp_op : public call_and_return_op
+ {
+ public:
+   longjmp_op (const gcall &call_stmt)
+   : call_and_return_op (call_stmt)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<longjmp_op> (get_gcall ());
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const final override;
+ };
+ 
+ class cxa_throw_op : public call_and_return_op
+ {
+ public:
+   cxa_throw_op (const gcall &call_stmt, bool is_rethrow)
+   : call_and_return_op (call_stmt),
+     m_is_rethrow (is_rethrow)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<cxa_throw_op> (get_gcall (), m_is_rethrow);
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const final override;
+ 
+ private:
+   bool m_is_rethrow;
+ };
+ 
+ class resx_op : public gimple_stmt_op
+ {
+ public:
+   resx_op (const gresx &resx_stmt)
+   : gimple_stmt_op (kind::resx, resx_stmt)
+   {
+   }
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<resx_op> (get_gresx ());
+   }
+ 
+   const gresx &get_gresx () const
+   {
+     return *as_a <const gresx *> (&get_stmt ());
+   }
+ 
+   void
+   execute (operation_context &op_ctxt) const final override;
+ 
+   bool
+   supports_bulk_merge_p () const final override
+   {
+     return false;
+   }
+ 
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const final override;
+ };
+ 
+ /* An abstract subclass of operation representing the filtering effect on
+    state of a gimple control-flow statement at the end of a BB, for
+    a specific CFG out-edge from that BB.  */
+ 
+ class control_flow_op : public operation
+ {
+ public:
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const override;
+ 
+   bool
+   defines_ssa_name_p (const_tree) const final override
+   {
+     return false;
+   }
+ 
+   void
+   walk_load_store_addr_ops (void *,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn) const final override;
+ 
+   const gimple *
+   maybe_get_stmt () const final override
+   {
+     return &m_ctrlflow_stmt;
+   }
+ 
+   virtual label_text
+   maybe_describe_condition (bool can_colorize) const;
+ 
+   void
+   execute (operation_context &op_ctxt) const final override;
+ 
+   bool
+   supports_bulk_merge_p () const final override
+   {
+     return false;
+   }
+ 
+   bool
+   execute_for_feasibility (const exploded_edge &,
+ 			   feasibility_state &,
+ 			   region_model_context *,
+ 			   std::unique_ptr<rejected_constraint> *out_rc) const override;
+ 
+   const control_flow_op *
+   dyn_cast_control_flow_op () const { return this; }
+ 
+   ::edge get_cfg_edge () const { return m_cfg_edge; }
+   int get_flags () const { return m_cfg_edge->flags; }
+   int back_edge_p () const { return get_flags () & EDGE_DFS_BACK; }
+ 
+   const gimple &get_ctrlflow_stmt () const { return m_ctrlflow_stmt; }
+ 
+ protected:
+   control_flow_op (enum kind kind_,
+ 		   ::edge cfg_edge,
+ 		   const gimple &ctrlflow_stmt)
+   : operation (kind_),
+     m_cfg_edge (cfg_edge),
+     m_ctrlflow_stmt (ctrlflow_stmt)
+   {}
+ 
+ private:
+   virtual bool
+   apply_constraints (const superedge *sedge,
+ 		     region_model &model,
+ 		     region_model_context *ctxt,
+ 		     std::unique_ptr<rejected_constraint> *out) const = 0;
+ 
+   ::edge m_cfg_edge;
+   const gimple &m_ctrlflow_stmt;
+ };
+ 
+ /* Concrete operation subclass representing filtering/applying state
+    transitions on a specific CFG edge after a GIMPLE_COND stmt, either the
+    "if (cond) is true" or the "if (cond) is false" branch.  */
+ 
+ class gcond_edge_op : public control_flow_op
+ {
+ public:
+   gcond_edge_op (::edge cfg_edge,
+ 		 const gcond &cond_stmt);
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<gcond_edge_op> (get_cfg_edge (),
+ 					    get_gcond ());
+   }
+ 
+   void
+   print_as_edge_label (pretty_printer *pp,
+ 		       bool user_facing) const final override;
+ 
+   label_text
+   maybe_describe_condition (bool can_colorize) const final override;
+ 
+   const gcond &get_gcond () const
+   {
+     return *as_a <const gcond *> (&get_ctrlflow_stmt ());
+   }
+ 
+ private:
+   static label_text
+   maybe_describe_condition (bool can_colorize,
+ 			    tree lhs,
+ 			    enum tree_code op,
+ 			    tree rhs);
+   static bool should_print_expr_p (tree expr);
+ 
+   bool
+   apply_constraints (const superedge *sedge,
+ 		     region_model &model,
+ 		     region_model_context *ctxt,
+ 		     std::unique_ptr<rejected_constraint> *out)
+     const final override;
+ 
+   bool m_true_value;
+ };
+ 
+ /* Concrete operation subclass representing filtering/applying state
+    transitions on a specific CFG edge after a GIMPLE_GOTO stmt, thus
+    handling computed gotos.  */
+ 
+ class ggoto_edge_op : public control_flow_op
+ {
+ public:
+   ggoto_edge_op (::edge cfg_edge,
+ 		 const ggoto &goto_stmt,
+ 		 tree dst_label);
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<ggoto_edge_op> (get_cfg_edge (),
+ 					    get_ggoto (),
+ 					    m_dst_label);
+   }
+ 
+   void
+   print_as_edge_label (pretty_printer *pp,
+ 		       bool user_facing) const final override;
+ 
+   label_text
+   maybe_describe_condition (bool can_colorize) const final override;
+ 
+   const ggoto &get_ggoto () const
+   {
+     return *as_a <const ggoto *> (&get_ctrlflow_stmt ());
+   }
+ 
+ private:
+   bool
+   apply_constraints (const superedge *sedge,
+ 		     region_model &model,
+ 		     region_model_context *ctxt,
+ 		     std::unique_ptr<rejected_constraint> *out)
+     const final override;
+ 
+   tree m_dst_label;
+ };
+ 
+ /* Concrete operation subclass representing filtering/applying state
+    transitions on a specific CFG edge after a GIMPLE_SWITCH stmt, thus
+    handling a cluster of cases/default value.  */
+ 
+ class switch_case_op : public control_flow_op
+ {
+  public:
+   switch_case_op (function &fun,
+ 		  ::edge cfg_edge,
+ 		  const gswitch &switch_stmt,
+ 		  bounded_ranges_manager &mgr);
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<switch_case_op> (*this);
+   }
+ 
+   void
+   print_as_edge_label (pretty_printer *pp,
+ 		       bool user_facing) const final override;
+ 
+   bool implicitly_created_default_p () const;
+ 
+   const gswitch &get_gswitch () const
+   {
+     return *as_a <const gswitch *> (&get_ctrlflow_stmt ());
+   }
+ 
+  private:
+   bool
+   apply_constraints (const superedge *sedge,
+ 		     region_model &model,
+ 		     region_model_context *ctxt,
+ 		     std::unique_ptr<rejected_constraint> *out)
+     const final override;
+ 
+   std::vector<tree> m_case_labels;
+   const bounded_ranges *m_all_cases_ranges;
+ };
+ 
+ /* Abstract subclass for edges from eh_dispatch statements.  */
+ 
+ class eh_dispatch_edge_op : public control_flow_op
+ {
+ public:
+   static std::unique_ptr<eh_dispatch_edge_op>
+   make (supernode *src,
+ 	supernode *dest,
+ 	::edge cfg_edge,
+ 	const geh_dispatch &geh_dispatch_stmt);
+ 
+   const geh_dispatch &
+   get_geh_dispatch () const
+   {
+     return *as_a <const geh_dispatch *> (&get_ctrlflow_stmt ());
+   }
+ 
+   eh_region
+   get_eh_region () const { return m_eh_region; }
+ 
+ protected:
+   eh_dispatch_edge_op (supernode *src_snode,
+ 		       supernode *dst_snode,
+ 		       enum kind kind_,
+ 		       ::edge cfg_edge,
+ 		       const geh_dispatch &geh_dispatch_stmt,
+ 		       eh_region eh_reg);
+ 
+   supernode *get_src_snode () const { return m_src_snode; }
+ 
+ private:
+   bool
+   apply_constraints (const superedge *sedge,
+ 		     region_model &model,
+ 		     region_model_context *ctxt,
+ 		     std::unique_ptr<rejected_constraint> *out)
+     const final override;
+ 
+   virtual bool
+   apply_eh_constraints (const superedge *sedge,
+ 			region_model &model,
+ 			region_model_context *ctxt,
+ 			tree exception_type,
+ 			std::unique_ptr<rejected_constraint> *out) const = 0;
+ 
+   supernode *m_src_snode;
+   supernode *m_dst_snode;
+   eh_region m_eh_region;
+ };
+ 
+ /* Concrete operation for edges from an eh_dispatch statement
+    for ERT_TRY regions.  */
+ 
+ class eh_dispatch_try_edge_op : public eh_dispatch_edge_op
+ {
+ public:
+   eh_dispatch_try_edge_op (supernode *src_snode,
+ 			   supernode *dst_snode,
+ 			   ::edge cfg_edge,
+ 			   const geh_dispatch &geh_dispatch_stmt,
+ 			   eh_region eh_reg,
+ 			   eh_catch ehc);
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<eh_dispatch_try_edge_op> (*this);
+   }
+ 
+   void
+   print_as_edge_label (pretty_printer *pp,
+ 		       bool user_facing) const final override;
+ 
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const final override;
+ 
+ private:
+   bool
+   apply_eh_constraints (const superedge *sedge,
+ 			region_model &model,
+ 			region_model_context *ctxt,
+ 			tree exception_type,
+ 			std::unique_ptr<rejected_constraint> *out)
+     const final override;
+ 
+   eh_catch m_eh_catch;
+ };
+ 
+ /* Concrete operation for edges from an eh_dispatch statement
+    for ERT_ALLOWED_EXCEPTIONS regions.  */
+ 
+ class eh_dispatch_allowed_edge_op : public eh_dispatch_edge_op
+ {
+ public:
+   enum eh_kind
+   {
+     expected,
+     unexpected
+   };
+ 
+   eh_dispatch_allowed_edge_op (supernode *src_snode,
+ 			       supernode *dst_snode,
+ 			       ::edge cfg_edge,
+ 			       const geh_dispatch &geh_dispatch_stmt,
+ 			       eh_region eh_reg);
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<eh_dispatch_allowed_edge_op> (*this);
+   }
+ 
+   void
+   print_as_edge_label (pretty_printer *pp,
+ 		       bool user_facing) const final override;
+ 
+   enum eh_kind get_eh_kind () const { return m_kind; }
+ 
+ private:
+   bool
+   apply_eh_constraints (const superedge *sedge,
+ 			region_model &model,
+ 			region_model_context *ctxt,
+ 			tree exception_type,
+ 			std::unique_ptr<rejected_constraint> *out)
+     const final override;
+ 
+   enum eh_kind m_kind;
+ };
+ 
+ /* Concrete operation subclass representing the state transition
+    for simultaneously handling all of the phi nodes at the entry to a BB,
+    after following a specific CFG in-edge.
+    Note that this covers multiple gimple stmts: all of the gphi stmts
+    at a basic block entry (albeit for just one in-edge).
+    This can be thought of as handling one column of the entries in the
+    phi nodes of a BB (for a specific in-edge).
+    We ignore MEM entries, and discard phi nodes purely affecting them.  */
+ 
+ class phis_for_edge_op : public operation
+ {
+ public:
+   /* A "dst=src;" pair within a phi node.  */
+   struct pair
+   {
+     tree m_dst;
+     tree m_src;
+   };
+ 
+   static std::unique_ptr<operation>
+   maybe_make (::edge cfg_in_edge);
+ 
+   std::unique_ptr<operation>
+   clone () const final override
+   {
+     return std::make_unique<phis_for_edge_op> (*this);
+   }
+ 
+   phis_for_edge_op (std::vector<pair> &&pairs,
+ 		    ::edge cfg_in_edge);
+ 
+   const phis_for_edge_op *
+   dyn_cast_phis_for_edge_op () const final override { return this; }
+ 
+   void
+   print_as_edge_label (pretty_printer *pp,
+ 		       bool user_facing) const final override;
+ 
+   bool
+   defines_ssa_name_p (const_tree ssa_name) const final override;
+ 
+   void
+   walk_load_store_addr_ops (void *,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn,
+ 			    walk_stmt_load_store_addr_fn) const final override;
+   void
+   execute (operation_context &op_ctxt) const final override;
+ 
+   bool
+   execute_for_feasibility (const exploded_edge &,
+ 			   feasibility_state &,
+ 			   region_model_context *,
+ 			   std::unique_ptr<rejected_constraint> *out_rc) const override;
+ 
+   bool
+   supports_bulk_merge_p () const final override
+   {
+     return true;
+   }
+   void
+   update_state_for_bulk_merger (const program_state &src_state,
+ 				program_state &dst_state) const final override;
+ 
+   void
+   add_any_events_for_eedge (const exploded_edge &eedge,
+ 			    checker_path &out_path) const final override;
+ 
+   const std::vector<pair> &get_pairs () const { return m_pairs; }
+ 
+ private:
+   static std::vector<pair>
+   get_pairs_for_phi_along_in_edge (::edge cfg_in_edge);
+ 
+   void
+   update_state (const program_state &src_state,
+ 		program_state &dst_state,
+ 		region_model_context *ctxt) const;
+ 
+   std::vector<pair> m_pairs;
+   ::edge m_cfg_in_edge;
+ };
+ 
+ } // namespace ana
+ 
+ #endif /* GCC_ANALYZER_OPS_H */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/pending-diagnostic.cc gcc-16-20251214/gcc/analyzer/pending-diagnostic.cc
*** gcc-16-20251207/gcc/analyzer/pending-diagnostic.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/pending-diagnostic.cc	Sun Dec 14 22:32:06 2025
*************** pending_diagnostic::add_function_entry_e
*** 214,232 ****
  
  void
  pending_diagnostic::add_call_event (const exploded_edge &eedge,
! 				    checker_path *emission_path)
  {
!   const exploded_node *src_node = eedge.m_src;
!   const program_point &src_point = src_node->get_point ();
!   const int src_stack_depth = src_point.get_stack_depth ();
!   const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt ();
!   emission_path->add_event
      (std::make_unique<call_event> (eedge,
! 				   event_loc_info (last_stmt
! 						   ? last_stmt->location
! 						   : UNKNOWN_LOCATION,
! 						   src_point.get_fndecl (),
! 						   src_stack_depth)));
  }
  
  /* Base implementation of pending_diagnostic::add_region_creation_events.
--- 214,225 ----
  
  void
  pending_diagnostic::add_call_event (const exploded_edge &eedge,
! 				    const gcall &,
! 				    checker_path &emission_path)
  {
!   emission_path.add_event
      (std::make_unique<call_event> (eedge,
! 				   event_loc_info (eedge.m_src)));
  }
  
  /* Base implementation of pending_diagnostic::add_region_creation_events.
diff -Nrcpad gcc-16-20251207/gcc/analyzer/pending-diagnostic.h gcc-16-20251214/gcc/analyzer/pending-diagnostic.h
*** gcc-16-20251207/gcc/analyzer/pending-diagnostic.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/pending-diagnostic.h	Sun Dec 14 22:32:06 2025
*************** class pending_diagnostic
*** 325,340 ****
  			    checker_path *emission_path);
  
    /* Vfunc for extending/overriding creation of the events for an
!      exploded_edge that corresponds to a superedge, allowing for custom
!      events to be created that are pertinent to a particular
!      pending_diagnostic subclass.
  
       For example, the -Wanalyzer-stale-setjmp-buffer diagnostic adds a
       custom event showing when the pertinent stack frame is popped
       (and thus the point at which the jmp_buf becomes invalid).  */
  
!   virtual bool maybe_add_custom_events_for_superedge (const exploded_edge &,
! 						      checker_path *)
    {
      return false;
    }
--- 325,339 ----
  			    checker_path *emission_path);
  
    /* Vfunc for extending/overriding creation of the events for an
!      exploded_edge, allowing for custom events to be created that are
!      pertinent to a particular pending_diagnostic subclass.
  
       For example, the -Wanalyzer-stale-setjmp-buffer diagnostic adds a
       custom event showing when the pertinent stack frame is popped
       (and thus the point at which the jmp_buf becomes invalid).  */
  
!   virtual bool maybe_add_custom_events_for_eedge (const exploded_edge &,
! 						  checker_path *)
    {
      return false;
    }
*************** class pending_diagnostic
*** 343,349 ****
       the varargs diagnostics can add a custom event subclass that annotates
       the variadic arguments.  */
    virtual void add_call_event (const exploded_edge &,
! 			       checker_path *);
  
    /* Vfunc for adding any events for the creation of regions identified
       by the mark_interesting_stuff vfunc.
--- 342,349 ----
       the varargs diagnostics can add a custom event subclass that annotates
       the variadic arguments.  */
    virtual void add_call_event (const exploded_edge &,
! 			       const gcall &call_stmt,
! 			       checker_path &emission_path);
  
    /* Vfunc for adding any events for the creation of regions identified
       by the mark_interesting_stuff vfunc.
*************** class pending_diagnostic
*** 390,397 ****
    /* Vfunc to give diagnostic subclasses the opportunity to reject diagnostics
       by imposing their own additional feasibility checks on the path to a
       given feasible_node.  */
!   virtual bool check_valid_fpath_p (const feasible_node &,
! 				    const gimple *) const
    {
      /* Default implementation: accept this path.  */
      return true;
--- 390,396 ----
    /* Vfunc to give diagnostic subclasses the opportunity to reject diagnostics
       by imposing their own additional feasibility checks on the path to a
       given feasible_node.  */
!   virtual bool check_valid_fpath_p (const feasible_node &) const
    {
      /* Default implementation: accept this path.  */
      return true;
diff -Nrcpad gcc-16-20251207/gcc/analyzer/program-point.cc gcc-16-20251214/gcc/analyzer/program-point.cc
*** gcc-16-20251207/gcc/analyzer/program-point.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/program-point.cc	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 45,239 ****
  
  namespace ana {
  
- /* Get a string for PK.  */
- 
- const char *
- point_kind_to_string (enum point_kind pk)
- {
-   switch (pk)
-     {
-     default:
-       gcc_unreachable ();
-     case PK_ORIGIN:
-       return "PK_ORIGIN";
-     case PK_BEFORE_SUPERNODE:
-       return "PK_BEFORE_SUPERNODE";
-     case PK_BEFORE_STMT:
-       return "PK_BEFORE_STMT";
-     case PK_AFTER_SUPERNODE:
-       return "PK_AFTER_SUPERNODE";
-     case PK_EMPTY:
-       return "PK_EMPTY";
-     case PK_DELETED:
-       return "PK_DELETED";
-     }
- }
- 
- /* class function_point.  */
- 
- function_point::function_point (const supernode *supernode,
- 				const superedge *from_edge,
- 				unsigned stmt_idx,
- 				enum point_kind kind)
- : m_supernode (supernode), m_from_edge (from_edge),
-   m_stmt_idx (stmt_idx), m_kind (kind)
- {
-   if (from_edge)
-     {
-       gcc_checking_assert (m_kind == PK_BEFORE_SUPERNODE);
-       gcc_checking_assert (from_edge->get_kind () == SUPEREDGE_CFG_EDGE);
-     }
-   if (stmt_idx)
-     gcc_checking_assert (m_kind == PK_BEFORE_STMT);
- }
- 
- /* Print this function_point to PP.  */
- 
- void
- function_point::print (pretty_printer *pp, const format &f) const
- {
-   switch (get_kind ())
-     {
-     default:
-       gcc_unreachable ();
- 
-     case PK_ORIGIN:
-       pp_printf (pp, "origin");
-       if (f.m_newlines)
- 	pp_newline (pp);
-       break;
- 
-     case PK_BEFORE_SUPERNODE:
-       {
- 	if (m_from_edge)
- 	  {
- 	    if (basic_block bb = m_from_edge->m_src->m_bb)
- 	      pp_printf (pp, "before SN: %i (from SN: %i (bb: %i))",
- 			 m_supernode->m_index, m_from_edge->m_src->m_index,
- 			 bb->index);
- 	    else
- 	      pp_printf (pp, "before SN: %i (from SN: %i)",
- 			 m_supernode->m_index, m_from_edge->m_src->m_index);
- 	  }
- 	else
- 	  pp_printf (pp, "before SN: %i (NULL from-edge)",
- 		     m_supernode->m_index);
- 	f.spacer (pp);
- 	for (gphi_iterator gpi
- 	       = const_cast<supernode *>(get_supernode ())->start_phis ();
- 	     !gsi_end_p (gpi); gsi_next (&gpi))
- 	  {
- 	    const gphi *phi = gpi.phi ();
- 	    pp_gimple_stmt_1 (pp, phi, 0, (dump_flags_t)0);
- 	  }
-       }
-       break;
- 
-     case PK_BEFORE_STMT:
-       pp_printf (pp, "before (SN: %i stmt: %i): ", m_supernode->m_index,
- 		 m_stmt_idx);
-       f.spacer (pp);
-       pp_gimple_stmt_1 (pp, get_stmt (), 0, (dump_flags_t)0);
-       if (f.m_newlines)
- 	{
- 	  pp_newline (pp);
- 	  print_source_line (pp);
- 	}
-       break;
- 
-     case PK_AFTER_SUPERNODE:
-       pp_printf (pp, "after SN: %i", m_supernode->m_index);
-       if (f.m_newlines)
- 	pp_newline (pp);
-       break;
-     }
- }
- 
- /* Generate a hash value for this function_point.  */
- 
- hashval_t
- function_point::hash () const
- {
-   inchash::hash hstate;
-   if (m_supernode)
-     hstate.add_int (m_supernode->m_index);
-   hstate.add_ptr (m_from_edge);
-   hstate.add_int (m_stmt_idx);
-   hstate.add_int (m_kind);
-   return hstate.end ();
- }
- 
- /* Get the function at this point, if any.  */
- 
- function *
- function_point::get_function () const
- {
-   if (m_supernode)
-     return m_supernode->m_fun;
-   else
-     return nullptr;
- }
- 
- /* Get the gimple stmt for this function_point, if any.  */
- 
- const gimple *
- function_point::get_stmt () const
- {
-   if (m_kind == PK_BEFORE_STMT)
-     return m_supernode->m_stmts[m_stmt_idx];
-   else if (m_kind == PK_AFTER_SUPERNODE)
-     return m_supernode->get_last_stmt ();
-   else
-     return nullptr;
- }
- 
- /* Get a location for this function_point, if any.  */
- 
- location_t
- function_point::get_location () const
- {
-   const gimple *stmt = get_stmt ();
-   if (stmt)
-     return stmt->location;
-   if (m_kind == PK_BEFORE_SUPERNODE)
-     return m_supernode->get_start_location ();
-   else if (m_kind == PK_AFTER_SUPERNODE)
-     return m_supernode->get_end_location ();
-   else
-     return UNKNOWN_LOCATION;
- }
- 
- /* Return true if this function_point is a before_stmt for
-    the final stmt in its supernode.  */
- 
- bool
- function_point::final_stmt_p () const
- {
-   if (m_kind != PK_BEFORE_STMT)
-     return false;
-   return m_stmt_idx == get_supernode ()->m_stmts.length () - 1;
- }
- 
- /* Create a function_point representing the entrypoint of function FUN.  */
- 
- function_point
- function_point::from_function_entry (const supergraph &sg, const function &fun)
- {
-   return before_supernode (sg.get_node_for_function_entry (fun), nullptr);
- }
- 
- /* Create a function_point representing entering supernode SUPERNODE,
-    having reached it via FROM_EDGE (which could be nullptr).  */
- 
- function_point
- function_point::before_supernode (const supernode *supernode,
- 				  const superedge *from_edge)
- {
-   if (from_edge && from_edge->get_kind () != SUPEREDGE_CFG_EDGE)
-     from_edge = nullptr;
-   return function_point (supernode, from_edge, 0, PK_BEFORE_SUPERNODE);
- }
- 
  /* A subclass of diagnostics::context for use by
     program_point::print_source_line.  */
  
--- 45,50 ----
*************** public:
*** 253,277 ****
    }
  };
  
! /* Print the source line (if any) for this function_point to PP.  */
  
  void
! function_point::print_source_line (pretty_printer *pp) const
  {
!   const gimple *stmt = get_stmt ();
!   if (!stmt)
      return;
-   // TODO: monospace font
    debug_diagnostic_context tmp_dc;
!   gcc_rich_location richloc (stmt->location);
    diagnostics::source_print_policy source_policy (tmp_dc);
    gcc_assert (pp);
    source_policy.print (*pp, richloc, diagnostics::kind::error, nullptr);
    pp_string (pp, pp_formatted_text (tmp_dc.get_reference_printer ()));
  }
  
- /* class program_point.  */
- 
  /* Print this program_point to PP.  */
  
  void
--- 64,86 ----
    }
  };
  
! /* class program_point.  */
! 
! /* Print the source line (if any) for this program_point to PP.  */
  
  void
! program_point::print_source_line (pretty_printer *pp) const
  {
!   if (!useful_location_p (get_location ()))
      return;
    debug_diagnostic_context tmp_dc;
!   gcc_rich_location richloc (get_location ());
    diagnostics::source_print_policy source_policy (tmp_dc);
    gcc_assert (pp);
    source_policy.print (*pp, richloc, diagnostics::kind::error, nullptr);
    pp_string (pp, pp_formatted_text (tmp_dc.get_reference_printer ()));
  }
  
  /* Print this program_point to PP.  */
  
  void
*************** program_point::print (pretty_printer *pp
*** 281,287 ****
    m_call_string->print (pp);
    f.spacer (pp);
  
!   m_function_point.print (pp, f);
  }
  
  /* Dump this point to stderr.  */
--- 90,106 ----
    m_call_string->print (pp);
    f.spacer (pp);
  
!   if (m_snode)
!     {
!       pp_printf (pp, "sn: %i", m_snode->m_id);
!       if (f.m_newlines)
! 	{
! 	  pp_newline (pp);
! 	  print_source_line (pp);
! 	}
!     }
!   else
!     pp_string (pp, "origin");
  }
  
  /* Dump this point to stderr.  */
*************** program_point::dump () const
*** 294,303 ****
  }
  
  /* Return a new json::object of the form
!    {"kind"  : str,
!     "snode_idx" : int (optional), the index of the supernode,
!     "from_edge_snode_idx" : int (only for kind=='PK_BEFORE_SUPERNODE'),
!     "stmt_idx": int (only for kind=='PK_BEFORE_STMT',
      "call_string": object for the call_string}.  */
  
  std::unique_ptr<json::object>
--- 113,119 ----
  }
  
  /* Return a new json::object of the form
!    {"snode_idx" : int (optional), the index of the supernode,
      "call_string": object for the call_string}.  */
  
  std::unique_ptr<json::object>
*************** program_point::to_json () const
*** 305,343 ****
  {
    auto point_obj = std::make_unique<json::object> ();
  
-   point_obj->set_string ("kind", point_kind_to_string (get_kind ()));
- 
    if (get_supernode ())
!     point_obj->set_integer ("snode_idx", get_supernode ()->m_index);
! 
!   switch (get_kind ())
!     {
!     default: break;
!     case PK_BEFORE_SUPERNODE:
!       if (const superedge *sedge = get_from_edge ())
! 	point_obj->set_integer ("from_edge_snode_idx", sedge->m_src->m_index);
!       break;
!     case PK_BEFORE_STMT:
!       point_obj->set_integer ("stmt_idx", get_stmt_idx ());
!       break;
!     }
! 
    point_obj->set ("call_string", m_call_string->to_json ());
  
    return point_obj;
  }
  
- /* Update the callstack to represent a call from caller to callee.
- 
-    Generally used to push a custom call to a perticular program point
-    where we don't have a superedge representing the call.  */
- void
- program_point::push_to_call_stack (const supernode *caller,
- 				   const supernode *callee)
- {
-   m_call_string = m_call_string->push_call (callee, caller);
- }
- 
  /* Pop the topmost call from the current callstack.  */
  void
  program_point::pop_from_call_stack ()
--- 121,133 ----
  {
    auto point_obj = std::make_unique<json::object> ();
  
    if (get_supernode ())
!     point_obj->set_integer ("snode_idx", get_supernode ()->m_id);
    point_obj->set ("call_string", m_call_string->to_json ());
  
    return point_obj;
  }
  
  /* Pop the topmost call from the current callstack.  */
  void
  program_point::pop_from_call_stack ()
*************** hashval_t
*** 352,358 ****
  program_point::hash () const
  {
    inchash::hash hstate;
!   hstate.merge_hash (m_function_point.hash ());
    hstate.add_ptr (m_call_string);
    return hstate.end ();
  }
--- 142,148 ----
  program_point::hash () const
  {
    inchash::hash hstate;
!   hstate.add_ptr (m_snode);
    hstate.add_ptr (m_call_string);
    return hstate.end ();
  }
*************** program_point::get_function_at_depth (un
*** 364,370 ****
  {
    gcc_assert (depth <= m_call_string->length ());
    if (depth == m_call_string->length ())
!     return m_function_point.get_function ();
    else
      return get_call_string ()[depth].get_caller_function ();
  }
--- 154,160 ----
  {
    gcc_assert (depth <= m_call_string->length ());
    if (depth == m_call_string->length ())
!     return m_snode->get_function ();
    else
      return get_call_string ()[depth].get_caller_function ();
  }
*************** program_point::validate () const
*** 388,681 ****
         == get_function ());
  }
  
- /* Check to see if SUCC is a valid edge to take (ensuring that we have
-    interprocedurally valid paths in the exploded graph, and enforcing
-    recursion limits).
- 
-    Update the call string if SUCC is a call or a return.
- 
-    Return true if SUCC can be taken, or false otherwise.
- 
-    This is the "point" half of exploded_node::on_edge.  */
- 
- bool
- program_point::on_edge (exploded_graph &eg,
- 			const superedge *succ)
- {
-   logger * const logger = eg.get_logger ();
-   LOG_FUNC (logger);
-   switch (succ->m_kind)
-     {
-     case SUPEREDGE_CFG_EDGE:
-       {
- 	const cfg_superedge *cfg_sedge = as_a <const cfg_superedge *> (succ);
- 
- 	if (cfg_sedge->get_flags () & EDGE_ABNORMAL)
- 	  {
- 	    const supernode *src_snode = cfg_sedge->m_src;
- 	    if (gimple *last_stmt = src_snode->get_last_stmt ())
- 	      if (last_stmt->code == GIMPLE_GOTO)
- 		{
- 		  /* For the program_point aspect here, consider all
- 		     out-edges from goto stmts to be valid; we'll
- 		     consider state separately.  */
- 		  return true;
- 		}
- 
- 	    /* Reject other kinds of abnormal edges;
- 	       we special-case setjmp/longjmp.  */
- 	    return false;
- 	  }
-       }
-       break;
- 
-     case SUPEREDGE_CALL:
-       {
- 	const call_superedge *call_sedge = as_a <const call_superedge *> (succ);
- 
- 	if (eg.get_analysis_plan ().use_summary_p (call_sedge->m_cedge))
- 	  {
- 	    if (logger)
- 	      logger->log ("rejecting call edge: using summary instead");
- 	    return false;
- 	  }
- 
- 	/* Add the callsite to the call string.  */
- 	m_call_string = m_call_string->push_call (eg.get_supergraph (),
- 						  call_sedge);
- 
- 	/* Impose a maximum recursion depth and don't analyze paths
- 	   that exceed it further.
- 	   This is something of a blunt workaround, but it only
- 	   applies to recursion (and mutual recursion), not to
- 	   general call stacks.  */
- 	if (m_call_string->calc_recursion_depth ()
- 	    > param_analyzer_max_recursion_depth)
- 	  {
- 	    if (logger)
- 	      logger->log ("rejecting call edge: recursion limit exceeded");
- 	    // TODO: issue a sorry for this?
- 	    return false;
- 	  }
-       }
-       break;
- 
-     case SUPEREDGE_RETURN:
-       {
- 	/* Require that we return to the call site in the call string.  */
- 	if (m_call_string->empty_p ())
- 	  {
- 	    if (logger)
- 	      logger->log ("rejecting return edge: empty call string");
- 	    return false;
- 	  }
- 	const call_string::element_t &top_of_stack
- 	  = m_call_string->get_top_of_stack ();
- 	m_call_string = m_call_string->get_parent ();
- 	call_string::element_t current_call_string_element (succ->m_dest,
- 							    succ->m_src);
- 	if (top_of_stack != current_call_string_element)
- 	  {
- 	    if (logger)
- 	      logger->log ("rejecting return edge: return to wrong callsite");
- 	    return false;
- 	  }
-       }
-       break;
- 
-     case SUPEREDGE_INTRAPROCEDURAL_CALL:
-       {
- 	const callgraph_superedge *cg_sedge
- 	  = as_a <const callgraph_superedge *> (succ);
- 	/* Consider turning this edge into a use of an
- 	   interprocedural summary.  */
- 	if (eg.get_analysis_plan ().use_summary_p (cg_sedge->m_cedge))
- 	  {
- 	    if (logger)
- 	      logger->log ("using function summary for %qE in %qE",
- 			   cg_sedge->get_callee_decl (),
- 			   cg_sedge->get_caller_decl ());
- 	    return true;
- 	  }
- 	else
- 	  {
- 	    /* Otherwise, we ignore these edges  */
- 	    if (logger)
- 	      logger->log ("rejecting interprocedural edge");
- 	    return false;
- 	  }
-       }
-     }
- 
-   return true;
- }
- 
- /* Comparator for program points within the same supernode,
-    for implementing worklist::key_t comparison operators.
-    Return negative if POINT_A is before POINT_B
-    Return positive if POINT_A is after POINT_B
-    Return 0 if they are equal.  */
- 
- int
- function_point::cmp_within_supernode_1 (const function_point &point_a,
- 					const function_point &point_b)
- {
-   gcc_assert (point_a.get_supernode () == point_b.get_supernode ());
- 
-   switch (point_a.m_kind)
-     {
-     default:
-       gcc_unreachable ();
-     case PK_BEFORE_SUPERNODE:
-       switch (point_b.m_kind)
- 	{
- 	default:
- 	  gcc_unreachable ();
- 	case PK_BEFORE_SUPERNODE:
- 	  {
- 	    int a_src_idx = -1;
- 	    int b_src_idx = -1;
- 	    if (point_a.m_from_edge)
- 	      a_src_idx = point_a.m_from_edge->m_src->m_index;
- 	    if (point_b.m_from_edge)
- 	      b_src_idx = point_b.m_from_edge->m_src->m_index;
- 	    return a_src_idx - b_src_idx;
- 	  }
- 	  break;
- 
- 	case PK_BEFORE_STMT:
- 	case PK_AFTER_SUPERNODE:
- 	  return -1;
- 	}
-       break;
-     case PK_BEFORE_STMT:
-       switch (point_b.m_kind)
- 	{
- 	default:
- 	  gcc_unreachable ();
- 	case PK_BEFORE_SUPERNODE:
- 	  return 1;
- 
- 	case PK_BEFORE_STMT:
- 	  return point_a.m_stmt_idx - point_b.m_stmt_idx;
- 
- 	case PK_AFTER_SUPERNODE:
- 	  return -1;
- 	}
-       break;
-     case PK_AFTER_SUPERNODE:
-       switch (point_b.m_kind)
- 	{
- 	default:
- 	  gcc_unreachable ();
- 	case PK_BEFORE_SUPERNODE:
- 	case PK_BEFORE_STMT:
- 	  return 1;
- 
- 	case PK_AFTER_SUPERNODE:
- 	  return 0;
- 	}
-       break;
-     }
- }
- 
- /* Comparator for program points within the same supernode,
-    for implementing worklist::key_t comparison operators.
-    Return negative if POINT_A is before POINT_B
-    Return positive if POINT_A is after POINT_B
-    Return 0 if they are equal.  */
- 
- int
- function_point::cmp_within_supernode (const function_point &point_a,
- 				      const function_point &point_b)
- {
-   int result = cmp_within_supernode_1 (point_a, point_b);
- 
-   /* Check that the ordering is symmetric  */
- #if CHECKING_P
-   int reversed = cmp_within_supernode_1 (point_b, point_a);
-   gcc_assert (reversed == -result);
- #endif
- 
-   return result;
- }
- 
- /* Comparator for imposing an order on function_points.  */
- 
- int
- function_point::cmp (const function_point &point_a,
- 		     const function_point &point_b)
- {
-   int idx_a = point_a.m_supernode ? point_a.m_supernode->m_index : -1;
-   int idx_b = point_b.m_supernode ? point_b.m_supernode->m_index : -1;
-   if (int cmp_idx = idx_a - idx_b)
-     return cmp_idx;
-   gcc_assert (point_a.m_supernode == point_b.m_supernode);
-   if (point_a.m_supernode)
-     return cmp_within_supernode (point_a, point_b);
-   else
-     return 0;
- }
- 
- /* Comparator for use by vec<function_point>::qsort.  */
- 
- int
- function_point::cmp_ptr (const void *p1, const void *p2)
- {
-   const function_point *fp1 = (const function_point *)p1;
-   const function_point *fp2 = (const function_point *)p2;
-   return cmp (*fp1, *fp2);
- }
- 
- /* For PK_BEFORE_STMT, go to next stmt (or to PK_AFTER_SUPERNODE).  */
- 
- void
- function_point::next_stmt ()
- {
-   gcc_assert (m_kind == PK_BEFORE_STMT);
-   if (++m_stmt_idx == m_supernode->m_stmts.length ())
-     {
-       m_kind = PK_AFTER_SUPERNODE;
-       m_stmt_idx = 0;
-     }
- }
- 
- /* For those function points for which there is a uniquely-defined
-    successor, return it.  */
- 
- function_point
- function_point::get_next () const
- {
-   switch (get_kind ())
-     {
-     default:
-       gcc_unreachable ();
-     case PK_ORIGIN:
-     case PK_AFTER_SUPERNODE:
-       gcc_unreachable (); /* Not uniquely defined.  */
-     case PK_BEFORE_SUPERNODE:
-       if (get_supernode ()->m_stmts.length () > 0)
- 	return before_stmt (get_supernode (), 0);
-       else
- 	return after_supernode (get_supernode ());
-     case PK_BEFORE_STMT:
-       {
- 	unsigned next_idx = get_stmt_idx () + 1;
- 	if (next_idx < get_supernode ()->m_stmts.length ())
- 	  return before_stmt (get_supernode (), next_idx);
- 	else
- 	  return after_supernode (get_supernode ());
-       }
-     }
- }
- 
  /* class program_point.  */
  
  program_point
  program_point::origin (const region_model_manager &mgr)
  {
!   return program_point (function_point (nullptr, nullptr,
! 					0, PK_ORIGIN),
  			mgr.get_empty_call_string ());
  }
  
--- 178,189 ----
         == get_function ());
  }
  
  /* class program_point.  */
  
  program_point
  program_point::origin (const region_model_manager &mgr)
  {
!   return program_point (nullptr,
  			mgr.get_empty_call_string ());
  }
  
*************** program_point::from_function_entry (cons
*** 684,722 ****
  				    const supergraph &sg,
  				    const function &fun)
  {
!   return program_point (function_point::from_function_entry (sg, fun),
  			mgr.get_empty_call_string ());
  }
  
- /* For those program points for which there is a uniquely-defined
-    successor, return it.  */
- 
- program_point
- program_point::get_next () const
- {
-   switch (m_function_point.get_kind ())
-     {
-     default:
-       gcc_unreachable ();
-     case PK_ORIGIN:
-     case PK_AFTER_SUPERNODE:
-       gcc_unreachable (); /* Not uniquely defined.  */
-     case PK_BEFORE_SUPERNODE:
-       if (get_supernode ()->m_stmts.length () > 0)
- 	return before_stmt (get_supernode (), 0, get_call_string ());
-       else
- 	return after_supernode (get_supernode (), get_call_string ());
-     case PK_BEFORE_STMT:
-       {
- 	unsigned next_idx = get_stmt_idx () + 1;
- 	if (next_idx < get_supernode ()->m_stmts.length ())
- 	  return before_stmt (get_supernode (), next_idx, get_call_string ());
- 	else
- 	  return after_supernode (get_supernode (), get_call_string ());
-       }
-     }
- }
- 
  /* Return true iff POINT_A and POINT_B share the same function and
     call_string, both directly, and when attempting to undo inlining
     information.  */
--- 192,201 ----
  				    const supergraph &sg,
  				    const function &fun)
  {
!   return program_point (sg.get_node_for_function_entry (fun),
  			mgr.get_empty_call_string ());
  }
  
  /* Return true iff POINT_A and POINT_B share the same function and
     call_string, both directly, and when attempting to undo inlining
     information.  */
*************** program_point::effectively_intraprocedur
*** 762,815 ****
  
  namespace selftest {
  
- /* Verify that function_point::operator== works as expected.  */
- 
- static void
- test_function_point_equality ()
- {
-   const supernode *snode = nullptr;
- 
-   function_point a = function_point (snode, nullptr, 0,
- 				     PK_BEFORE_SUPERNODE);
-   function_point b = function_point::before_supernode (snode, nullptr);
-   ASSERT_EQ (a, b);
- }
- 
- /* Verify that function_point::cmp_within_supernode works as expected.  */
- 
- static void
- test_function_point_ordering ()
- {
-   const supernode *snode = nullptr;
- 
-   /* Populate an array with various points within the same
-      snode, in order.  */
-   auto_vec<function_point> points;
-   points.safe_push (function_point::before_supernode (snode, nullptr));
-   points.safe_push (function_point::before_stmt (snode, 0));
-   points.safe_push (function_point::before_stmt (snode, 1));
-   points.safe_push (function_point::after_supernode (snode));
- 
-   /* Check all pairs.  */
-   unsigned i;
-   function_point *point_a;
-   FOR_EACH_VEC_ELT (points, i, point_a)
-     {
-       unsigned j;
-       function_point *point_b;
-       FOR_EACH_VEC_ELT (points, j, point_b)
- 	{
- 	  int cmp = function_point::cmp_within_supernode (*point_a, *point_b);
- 	  if (i == j)
- 	    ASSERT_EQ (cmp, 0);
- 	  if (i < j)
- 	    ASSERT_TRUE (cmp < 0);
- 	  if (i > j)
- 	    ASSERT_TRUE (cmp > 0);
- 	}
-     }
- }
- 
  /* Verify that program_point::operator== works as expected.  */
  
  static void
--- 241,246 ----
*************** test_program_point_equality ()
*** 821,834 ****
  
    const call_string &cs = mgr.get_empty_call_string ();
  
!   program_point a = program_point::before_supernode (snode, nullptr,
! 						     cs);
! 
!   program_point b = program_point::before_supernode (snode, nullptr,
! 						     cs);
! 
    ASSERT_EQ (a, b);
!   // TODO: verify with non-empty callstrings, with different edges
  }
  
  /* Run all of the selftests within this file.  */
--- 252,261 ----
  
    const call_string &cs = mgr.get_empty_call_string ();
  
!   program_point a = program_point (snode, cs);
!   program_point b = program_point (snode, cs);
    ASSERT_EQ (a, b);
!   // TODO: verify with non-empty callstrings, with different snodes
  }
  
  /* Run all of the selftests within this file.  */
*************** test_program_point_equality ()
*** 836,843 ****
  void
  analyzer_program_point_cc_tests ()
  {
-   test_function_point_equality ();
-   test_function_point_ordering ();
    test_program_point_equality ();
  }
  
--- 263,268 ----
diff -Nrcpad gcc-16-20251207/gcc/analyzer/program-point.h gcc-16-20251214/gcc/analyzer/program-point.h
*** gcc-16-20251207/gcc/analyzer/program-point.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/program-point.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 23,52 ****
  
  #include "pretty-print.h"
  #include "analyzer/call-string.h"
  
  namespace ana {
  
- class exploded_graph;
- 
- /* An enum for distinguishing the various kinds of program_point.  */
- 
- enum point_kind {
-   /* A "fake" node which has edges to all entrypoints.  */
-   PK_ORIGIN,
- 
-   PK_BEFORE_SUPERNODE,
-   PK_BEFORE_STMT,
-   PK_AFTER_SUPERNODE,
- 
-   /* Special values used for hash_map:  */
-   PK_EMPTY,
-   PK_DELETED,
- 
-   NUM_POINT_KINDS
- };
- 
- extern const char *point_kind_to_string (enum point_kind pk);
- 
  class format
  {
  public:
--- 23,32 ----
  
  #include "pretty-print.h"
  #include "analyzer/call-string.h"
+ #include "analyzer/supergraph.h"
  
  namespace ana {
  
  class format
  {
  public:
*************** public:
*** 63,169 ****
    bool m_newlines;
  };
  
- /* A class for representing a location within the program, without
-    interprocedural information.
- 
-    This represents a fine-grained location within the supergraph (or
-    within one of its nodes).  */
- 
- class function_point
- {
- public:
-   function_point (const supernode *supernode,
- 		  const superedge *from_edge,
- 		  unsigned stmt_idx,
- 		  enum point_kind kind);
- 
-   void print (pretty_printer *pp, const format &f) const;
-   void print_source_line (pretty_printer *pp) const;
-   void dump () const;
- 
-   hashval_t hash () const;
-   bool operator== (const function_point &other) const
-   {
-     return (m_supernode == other.m_supernode
- 	    && m_from_edge == other.m_from_edge
- 	    && m_stmt_idx == other.m_stmt_idx
- 	    && m_kind == other.m_kind);
-   }
- 
-   /* Accessors.  */
- 
-   const supernode *get_supernode () const { return m_supernode; }
-   function *get_function () const;
-   const gimple *get_stmt () const;
-   location_t get_location () const;
-   enum point_kind get_kind () const { return m_kind; }
-   const superedge *get_from_edge () const
-   {
-     return m_from_edge;
-   }
-   unsigned get_stmt_idx () const
-   {
-     gcc_assert (m_kind == PK_BEFORE_STMT);
-     return m_stmt_idx;
-   }
- 
-   bool final_stmt_p () const;
- 
-   /* Factory functions for making various kinds of program_point.  */
- 
-   static function_point from_function_entry (const supergraph &sg,
- 					     const function &fun);
- 
-   static function_point before_supernode (const supernode *supernode,
- 					  const superedge *from_edge);
- 
-   static function_point before_stmt (const supernode *supernode,
- 				     unsigned stmt_idx)
-   {
-     return function_point (supernode, nullptr, stmt_idx, PK_BEFORE_STMT);
-   }
- 
-   static function_point after_supernode (const supernode *supernode)
-   {
-     return function_point (supernode, nullptr, 0, PK_AFTER_SUPERNODE);
-   }
- 
-   /* Support for hash_map.  */
- 
-   static function_point empty ()
-   {
-     return function_point (nullptr, nullptr, 0, PK_EMPTY);
-   }
-   static function_point deleted ()
-   {
-     return function_point (nullptr, nullptr, 0, PK_DELETED);
-   }
- 
-   static int cmp_within_supernode_1 (const function_point &point_a,
- 				     const function_point &point_b);
-   static int cmp_within_supernode (const function_point &point_a,
- 				   const function_point &point_b);
-   static int cmp (const function_point &point_a,
- 		  const function_point &point_b);
-   static int cmp_ptr (const void *p1, const void *p2);
- 
-   /* For before_stmt, go to next stmt.  */
-   void next_stmt ();
- 
-   function_point get_next () const;
- 
-  private:
-   const supernode *m_supernode;
- 
-   /* For PK_BEFORE_SUPERNODE, and only for CFG edges.  */
-   const superedge *m_from_edge;
- 
-   /* Only for PK_BEFORE_STMT.  */
-   unsigned m_stmt_idx;
- 
-   enum point_kind m_kind;
- };
- 
  /* A class for representing a location within the program, including
     interprocedural information.
  
--- 43,48 ----
*************** public:
*** 174,195 ****
  class program_point
  {
  public:
!   program_point (const function_point &fn_point,
  		 const call_string &call_string)
!   : m_function_point (fn_point),
      m_call_string (&call_string)
    {
    }
  
    void print (pretty_printer *pp, const format &f) const;
    void dump () const;
  
    std::unique_ptr<json::object> to_json () const;
  
    hashval_t hash () const;
    bool operator== (const program_point &other) const
    {
!     return (m_function_point == other.m_function_point
  	    && m_call_string == other.m_call_string);
    }
    bool operator!= (const program_point &other) const
--- 53,75 ----
  class program_point
  {
  public:
!   program_point (const supernode *snode,
  		 const call_string &call_string)
!   : m_snode (snode),
      m_call_string (&call_string)
    {
    }
  
    void print (pretty_printer *pp, const format &f) const;
    void dump () const;
+   void print_source_line (pretty_printer *pp) const;
  
    std::unique_ptr<json::object> to_json () const;
  
    hashval_t hash () const;
    bool operator== (const program_point &other) const
    {
!     return (m_snode == other.m_snode
  	    && m_call_string == other.m_call_string);
    }
    bool operator!= (const program_point &other) const
*************** public:
*** 199,240 ****
  
    /* Accessors.  */
  
-   const function_point &get_function_point () const { return m_function_point; }
-   const call_string &get_call_string () const { return *m_call_string; }
- 
    const supernode *get_supernode () const
    {
!     return m_function_point.get_supernode ();
    }
    function *get_function () const
    {
!     return m_function_point.get_function ();
    }
    function *get_function_at_depth (unsigned depth) const;
    tree get_fndecl () const
    {
!     gcc_assert (get_kind () != PK_ORIGIN);
!     return get_function ()->decl;
!   }
!   const gimple *get_stmt () const
!   {
!     return m_function_point.get_stmt ();
    }
    location_t get_location () const
    {
!     return m_function_point.get_location ();
!   }
!   enum point_kind get_kind () const
!   {
!     return m_function_point.get_kind ();
!   }
!   const superedge *get_from_edge () const
!   {
!     return m_function_point.get_from_edge ();
!   }
!   unsigned get_stmt_idx () const
!   {
!     return m_function_point.get_stmt_idx ();
    }
  
    /* Get the number of frames we expect at this program point.
--- 79,103 ----
  
    /* Accessors.  */
  
    const supernode *get_supernode () const
    {
!     return m_snode;
    }
+   const call_string &get_call_string () const { return *m_call_string; }
+ 
    function *get_function () const
    {
!     return m_snode ? m_snode->get_function () : nullptr;
    }
    function *get_function_at_depth (unsigned depth) const;
    tree get_fndecl () const
    {
!     function *fn = get_function ();
!     return fn ? fn->decl : nullptr;
    }
    location_t get_location () const
    {
!     return m_snode ? m_snode->get_location () : UNKNOWN_LOCATION;
    }
  
    /* Get the number of frames we expect at this program point.
*************** public:
*** 243,315 ****
       node, which doesn't have any frames.  */
    int get_stack_depth () const
    {
!     if (get_kind () == PK_ORIGIN)
        return 0;
      return get_call_string ().length () + 1;
    }
  
    /* Factory functions for making various kinds of program_point.  */
    static program_point origin (const region_model_manager &mgr);
    static program_point from_function_entry (const region_model_manager &mgr,
  					    const supergraph &sg,
  					    const function &fun);
  
-   static program_point before_supernode (const supernode *supernode,
- 					 const superedge *from_edge,
- 					 const call_string &call_string)
-   {
-     return program_point (function_point::before_supernode (supernode,
- 							    from_edge),
- 			  call_string);
-   }
- 
-   static program_point before_stmt (const supernode *supernode,
- 				    unsigned stmt_idx,
- 				    const call_string &call_string)
-   {
-     return program_point (function_point::before_stmt (supernode, stmt_idx),
- 			  call_string);
-   }
- 
-   static program_point after_supernode (const supernode *supernode,
- 					const call_string &call_string)
-   {
-     return program_point (function_point::after_supernode (supernode),
- 			  call_string);
-   }
- 
-   /* Support for hash_map.  */
- 
-   static program_point empty ()
-   {
-     return program_point (function_point::empty ());
-   }
-   static program_point deleted ()
-   {
-     return program_point (function_point::deleted ());
-   }
- 
-   bool on_edge (exploded_graph &eg, const superedge *succ);
-   void push_to_call_stack (const supernode *caller, const supernode *callee);
    void pop_from_call_stack ();
    void validate () const;
  
-   /* For before_stmt, go to next stmt.  */
-   void next_stmt () { m_function_point.next_stmt (); }
- 
-   program_point get_next () const;
- 
    static bool effectively_intraprocedural_p (const program_point &point_a,
  					     const program_point &point_b);
  
   private:
!   program_point (const function_point &fn_point)
!   : m_function_point (fn_point),
!     m_call_string (nullptr)
!   {
!   }
! 
!   function_point m_function_point;
    const call_string *m_call_string;
  };
  
--- 106,138 ----
       node, which doesn't have any frames.  */
    int get_stack_depth () const
    {
!     if (m_snode == nullptr)
!       // Origin
        return 0;
      return get_call_string ().length () + 1;
    }
  
+   bool state_merge_at_p () const
+   {
+     if (m_snode)
+       return m_snode->m_state_merger_node;
+     return false;
+   }
+ 
    /* Factory functions for making various kinds of program_point.  */
    static program_point origin (const region_model_manager &mgr);
    static program_point from_function_entry (const region_model_manager &mgr,
  					    const supergraph &sg,
  					    const function &fun);
  
    void pop_from_call_stack ();
    void validate () const;
  
    static bool effectively_intraprocedural_p (const program_point &point_a,
  					     const program_point &point_b);
  
   private:
!   const supernode *m_snode;
    const call_string *m_call_string;
  };
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/program-state.cc gcc-16-20251214/gcc/analyzer/program-state.cc
*** gcc-16-20251207/gcc/analyzer/program-state.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/program-state.cc	Sun Dec 14 22:32:06 2025
*************** program_state::get_current_function () c
*** 1263,1400 ****
    return m_region_model->get_current_function ();
  }
  
- /* Determine if following edge SUCC from ENODE is valid within the graph EG
-    and update this state accordingly in-place.
- 
-    Return true if the edge can be followed, or false otherwise.
- 
-    Check for relevant conditionals and switch-values for conditionals
-    and switch statements, adding the relevant conditions to this state.
-    Push/pop frames for interprocedural edges and update params/returned
-    values.
- 
-    This is the "state" half of exploded_node::on_edge.  */
- 
- bool
- program_state::on_edge (exploded_graph &eg,
- 			exploded_node *enode,
- 			const superedge *succ,
- 			uncertainty_t *uncertainty)
- {
-   class my_path_context : public path_context
-   {
-   public:
-     my_path_context (bool &terminated) : m_terminated (terminated) {}
-     void bifurcate (std::unique_ptr<custom_edge_info>) final override
-     {
-       gcc_unreachable ();
-     }
- 
-     void terminate_path () final override
-     {
-       m_terminated = true;
-     }
- 
-     bool terminate_path_p () const final override
-     {
-       return m_terminated;
-     }
-     bool &m_terminated;
-   };
- 
-   /* Update state.  */
-   const program_point &point = enode->get_point ();
-   const gimple *last_stmt = point.get_supernode ()->get_last_stmt ();
- 
-   /* For conditionals and switch statements, add the
-      relevant conditions (for the specific edge) to new_state;
-      skip edges for which the resulting constraints
-      are impossible.
-      This also updates frame information for call/return superedges.
-      Adding the relevant conditions for the edge could also trigger
-      sm-state transitions (e.g. transitions due to ptrs becoming known
-      to be NULL or non-NULL) */
-   bool terminated = false;
-   my_path_context path_ctxt (terminated);
-   impl_region_model_context ctxt (eg, enode,
- 				  &enode->get_state (),
- 				  this,
- 				  uncertainty, &path_ctxt,
- 				  last_stmt);
-   std::unique_ptr<rejected_constraint> rc;
-   logger * const logger = eg.get_logger ();
-   if (!m_region_model->maybe_update_for_edge (*succ,
- 					      last_stmt,
- 					      &ctxt,
- 					      logger ? &rc : nullptr))
-     {
-       if (logger)
- 	{
- 	  logger->start_log_line ();
- 	  logger->log_partial ("edge to SN: %i is impossible"
- 			       " due to region_model constraint: ",
- 			       succ->m_dest->m_index);
- 	  rc->dump_to_pp (logger->get_printer ());
- 	  logger->end_log_line ();
- 	}
-       return false;
-     }
-   if (terminated)
-     return false;
- 
-   program_state::detect_leaks (enode->get_state (), *this,
- 			       nullptr, eg.get_ext_state (),
- 			       &ctxt);
- 
-   return true;
- }
- 
- /* Update this program_state to reflect a call to function
-    represented by CALL_STMT.
-    currently used only when the call doesn't have a superedge representing
-    the call ( like call via a function pointer )  */
- void
- program_state::push_call (exploded_graph &eg,
-                           exploded_node *enode,
-                           const gcall &call_stmt,
-                           uncertainty_t *uncertainty)
- {
-   /* Update state.  */
-   const program_point &point = enode->get_point ();
-   const gimple *last_stmt = point.get_supernode ()->get_last_stmt ();
- 
-   impl_region_model_context ctxt (eg, enode,
-                                   &enode->get_state (),
-                                   this,
-                                   uncertainty,
- 				  nullptr,
-                                   last_stmt);
-   m_region_model->update_for_gcall (call_stmt, &ctxt);
- }
- 
- /* Update this program_state to reflect a return from function
-    call to which is represented by CALL_STMT.
-    currently used only when the call doesn't have a superedge representing
-    the return */
- void
- program_state::returning_call (exploded_graph &eg,
-                                exploded_node *enode,
-                                const gcall &call_stmt,
-                                uncertainty_t *uncertainty)
- {
-   /* Update state.  */
-   const program_point &point = enode->get_point ();
-   const gimple *last_stmt = point.get_supernode ()->get_last_stmt ();
- 
-   impl_region_model_context ctxt (eg, enode,
-                                   &enode->get_state (),
-                                   this,
-                                   uncertainty,
- 				  nullptr,
-                                   last_stmt);
-   m_region_model->update_for_return_gcall (call_stmt, &ctxt);
- }
- 
  /* Generate a simpler version of THIS, discarding state that's no longer
     relevant at POINT.
     The idea is that we're more likely to be able to consolidate
--- 1263,1268 ----
*************** program_state::prune_for_point (exploded
*** 1434,1440 ****
  	      const tree ssa_name = node;
  	      const state_purge_per_ssa_name &per_ssa
  		= pm->get_data_for_ssa_name (node);
! 	      if (!per_ssa.needed_at_point_p (point.get_function_point ()))
  		{
  		  /* Don't purge bindings of SSA names to svalues
  		     that have unpurgable sm-state, so that leaks are
--- 1302,1308 ----
  	      const tree ssa_name = node;
  	      const state_purge_per_ssa_name &per_ssa
  		= pm->get_data_for_ssa_name (node);
! 	      if (!per_ssa.needed_at_supernode_p (point.get_supernode ()))
  		{
  		  /* Don't purge bindings of SSA names to svalues
  		     that have unpurgable sm-state, so that leaks are
*************** program_state::prune_for_point (exploded
*** 1472,1478 ****
  			  || TREE_CODE (node) == RESULT_DECL);
  	      if (const state_purge_per_decl *per_decl
  		  = pm->get_any_data_for_decl (decl))
! 		if (!per_decl->needed_at_point_p (point.get_function_point ()))
  		  {
  		    /* Don't purge bindings of decls if there are svalues
  		       that have unpurgable sm-state within the decl's cluster,
--- 1340,1346 ----
  			  || TREE_CODE (node) == RESULT_DECL);
  	      if (const state_purge_per_decl *per_decl
  		  = pm->get_any_data_for_decl (decl))
! 		if (!per_decl->needed_at_supernode_p (point.get_supernode ()))
  		  {
  		    /* Don't purge bindings of decls if there are svalues
  		       that have unpurgable sm-state within the decl's cluster,
*************** program_state::prune_for_point (exploded
*** 1507,1514 ****
  	  impl_region_model_context ctxt (eg, enode_for_diag,
  					  this,
  					  &new_state,
! 					  uncertainty, nullptr,
! 					  point.get_stmt ());
  	  detect_leaks (*this, new_state, nullptr, eg.get_ext_state (), &ctxt);
  	}
      }
--- 1375,1382 ----
  	  impl_region_model_context ctxt (eg, enode_for_diag,
  					  this,
  					  &new_state,
! 					  uncertainty,
! 					  nullptr);
  	  detect_leaks (*this, new_state, nullptr, eg.get_ext_state (), &ctxt);
  	}
      }
*************** test_sm_state_map ()
*** 1804,1817 ****
    std::vector<std::unique_ptr<state_machine>> checkers;
    const state_machine &borrowed_sm = *sm.get ();
    checkers.push_back (std::move (sm));
!   engine eng;
    extrinsic_state ext_state (std::move (checkers), &eng);
  
    /* Test setting states on svalue_id instances directly.  */
    {
      const state_machine::state test_state_42 ("test state 42", 42);
      const state_machine::state_t TEST_STATE_42 = &test_state_42;
-     region_model_manager mgr;
      region_model model (&mgr);
      const svalue *x_sval = model.get_rvalue (x, nullptr);
      const svalue *y_sval = model.get_rvalue (y, nullptr);
--- 1672,1685 ----
    std::vector<std::unique_ptr<state_machine>> checkers;
    const state_machine &borrowed_sm = *sm.get ();
    checkers.push_back (std::move (sm));
!   region_model_manager mgr;
!   engine eng (mgr);
    extrinsic_state ext_state (std::move (checkers), &eng);
  
    /* Test setting states on svalue_id instances directly.  */
    {
      const state_machine::state test_state_42 ("test state 42", 42);
      const state_machine::state_t TEST_STATE_42 = &test_state_42;
      region_model model (&mgr);
      const svalue *x_sval = model.get_rvalue (x, nullptr);
      const svalue *y_sval = model.get_rvalue (y, nullptr);
*************** test_sm_state_map ()
*** 1840,1846 ****
  
    /* Test setting states via equivalence classes.  */
    {
-     region_model_manager mgr;
      region_model model (&mgr);
      const svalue *x_sval = model.get_rvalue (x, nullptr);
      const svalue *y_sval = model.get_rvalue (y, nullptr);
--- 1708,1713 ----
*************** test_sm_state_map ()
*** 1864,1870 ****
  
    /* Test equality and hashing.  */
    {
-     region_model_manager mgr;
      region_model model (&mgr);
      const svalue *y_sval = model.get_rvalue (y, nullptr);
      const svalue *z_sval = model.get_rvalue (z, nullptr);
--- 1731,1736 ----
*************** test_sm_state_map ()
*** 1899,1905 ****
      ASSERT_EQ (map0.hash (), map1.hash ());
      ASSERT_EQ (map0, map1);
  
-     region_model_manager mgr;
      region_model model (&mgr);
      const svalue *x_sval = model.get_rvalue (x, nullptr);
      const svalue *y_sval = model.get_rvalue (y, nullptr);
--- 1765,1770 ----
*************** test_program_state_1 ()
*** 1933,1948 ****
    const state_machine::state_t UNCHECKED_STATE
      = sm->get_state_by_name ("unchecked");
  
!   engine eng;
    extrinsic_state ext_state (std::move (sm), &eng);
-   region_model_manager *mgr = eng.get_model_manager ();
    program_state s (ext_state);
    region_model *model = s.m_region_model;
    const svalue *size_in_bytes
!     = mgr->get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
      = model->get_or_create_region_for_heap_alloc (size_in_bytes, nullptr);
!   const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
    model->set_value (model->get_lvalue (p, nullptr),
  		    ptr_sval, nullptr);
    sm_state_map *smap = s.m_checker_states[0];
--- 1798,1813 ----
    const state_machine::state_t UNCHECKED_STATE
      = sm->get_state_by_name ("unchecked");
  
!   region_model_manager mgr;
!   engine eng (mgr);
    extrinsic_state ext_state (std::move (sm), &eng);
    program_state s (ext_state);
    region_model *model = s.m_region_model;
    const svalue *size_in_bytes
!     = mgr.get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
      = model->get_or_create_region_for_heap_alloc (size_in_bytes, nullptr);
!   const svalue *ptr_sval = mgr.get_ptr_svalue (ptr_type_node, new_reg);
    model->set_value (model->get_lvalue (p, nullptr),
  		    ptr_sval, nullptr);
    sm_state_map *smap = s.m_checker_states[0];
*************** test_program_state_2 ()
*** 1963,1969 ****
    tree string_cst_ptr = build_string_literal (4, "foo");
  
    std::vector<std::unique_ptr<state_machine>> checkers;
!   engine eng;
    extrinsic_state ext_state (std::move (checkers), &eng);
  
    program_state s (ext_state);
--- 1828,1835 ----
    tree string_cst_ptr = build_string_literal (4, "foo");
  
    std::vector<std::unique_ptr<state_machine>> checkers;
!   region_model_manager mgr;
!   engine eng (mgr);
    extrinsic_state ext_state (std::move (checkers), &eng);
  
    program_state s (ext_state);
*************** test_program_state_merging ()
*** 1983,1991 ****
       malloc sm-state, pointing to a region on the heap.  */
    tree p = build_global_decl ("p", ptr_type_node);
  
!   engine eng;
!   region_model_manager *mgr = eng.get_model_manager ();
!   program_point point (program_point::origin (*mgr));
    extrinsic_state ext_state (make_malloc_state_machine (nullptr),
  			     &eng);
  
--- 1849,1857 ----
       malloc sm-state, pointing to a region on the heap.  */
    tree p = build_global_decl ("p", ptr_type_node);
  
!   region_model_manager mgr;
!   engine eng (mgr);
!   program_point point (program_point::origin (mgr));
    extrinsic_state ext_state (make_malloc_state_machine (nullptr),
  			     &eng);
  
*************** test_program_state_merging ()
*** 1995,2004 ****
  
    region_model *model0 = s0.m_region_model;
    const svalue *size_in_bytes
!     = mgr->get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
      = model0->get_or_create_region_for_heap_alloc (size_in_bytes, nullptr);
!   const svalue *ptr_sval = mgr->get_ptr_svalue (ptr_type_node, new_reg);
    model0->set_value (model0->get_lvalue (p, &ctxt),
  		     ptr_sval, &ctxt);
    sm_state_map *smap = s0.m_checker_states[0];
--- 1861,1870 ----
  
    region_model *model0 = s0.m_region_model;
    const svalue *size_in_bytes
!     = mgr.get_or_create_unknown_svalue (size_type_node);
    const region *new_reg
      = model0->get_or_create_region_for_heap_alloc (size_in_bytes, nullptr);
!   const svalue *ptr_sval = mgr.get_ptr_svalue (ptr_type_node, new_reg);
    model0->set_value (model0->get_lvalue (p, &ctxt),
  		     ptr_sval, &ctxt);
    sm_state_map *smap = s0.m_checker_states[0];
*************** test_program_state_merging ()
*** 2050,2058 ****
  static void
  test_program_state_merging_2 ()
  {
!   engine eng;
!   region_model_manager *mgr = eng.get_model_manager ();
!   program_point point (program_point::origin (*mgr));
    extrinsic_state ext_state (make_signal_state_machine (nullptr), &eng);
  
    const state_machine::state test_state_0 ("test state 0", 0);
--- 1916,1924 ----
  static void
  test_program_state_merging_2 ()
  {
!   region_model_manager mgr;
!   engine eng (mgr);
!   program_point point (program_point::origin (mgr));
    extrinsic_state ext_state (make_signal_state_machine (nullptr), &eng);
  
    const state_machine::state test_state_0 ("test state 0", 0);
diff -Nrcpad gcc-16-20251207/gcc/analyzer/program-state.h gcc-16-20251214/gcc/analyzer/program-state.h
*** gcc-16-20251207/gcc/analyzer/program-state.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/program-state.h	Sun Dec 14 22:32:06 2025
*************** public:
*** 264,285 ****
    void push_frame (const extrinsic_state &ext_state, const function &fun);
    const function * get_current_function () const;
  
-   void push_call (exploded_graph &eg,
- 		  exploded_node *enode,
- 		  const gcall &call_stmt,
- 		  uncertainty_t *uncertainty);
- 
-   void returning_call (exploded_graph &eg,
- 		       exploded_node *enode,
- 		       const gcall &call_stmt,
- 		       uncertainty_t *uncertainty);
- 
- 
-   bool on_edge (exploded_graph &eg,
- 		exploded_node *enode,
- 		const superedge *succ,
- 		uncertainty_t *uncertainty);
- 
    program_state prune_for_point (exploded_graph &eg,
  				 const program_point &point,
  				 exploded_node *enode_for_diag,
--- 264,269 ----
diff -Nrcpad gcc-16-20251207/gcc/analyzer/region-model-manager.cc gcc-16-20251214/gcc/analyzer/region-model-manager.cc
*** gcc-16-20251207/gcc/analyzer/region-model-manager.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/region-model-manager.cc	Sun Dec 14 22:32:06 2025
*************** region_model_manager::maybe_fold_unaryop
*** 496,520 ****
      }
  
    /* Constants.  */
!   if (tree cst = arg->maybe_get_constant ())
!     if (tree result = fold_unary (op, type, cst))
!       {
! 	if (CONSTANT_CLASS_P (result))
! 	  return get_or_create_constant_svalue (result);
  
! 	/* fold_unary can return casts of constants; try to handle them.  */
! 	if (op != NOP_EXPR
! 		 && type
! 		 && TREE_CODE (result) == NOP_EXPR
! 		 && CONSTANT_CLASS_P (TREE_OPERAND (result, 0)))
! 	  {
! 	    const svalue *inner_cst
! 	      = get_or_create_constant_svalue (TREE_OPERAND (result, 0));
! 	    return get_or_create_cast (type,
! 				       get_or_create_cast (TREE_TYPE (result),
! 							   inner_cst));
! 	  }
!       }
  
    return nullptr;
  }
--- 496,520 ----
      }
  
    /* Constants.  */
!   if (type)
!     if (tree cst = arg->maybe_get_constant ())
!       if (tree result = fold_unary (op, type, cst))
! 	{
! 	  if (CONSTANT_CLASS_P (result))
! 	    return get_or_create_constant_svalue (result);
  
! 	  /* fold_unary can return casts of constants; try to handle them.  */
! 	  if (op != NOP_EXPR
! 	      && TREE_CODE (result) == NOP_EXPR
! 	      && CONSTANT_CLASS_P (TREE_OPERAND (result, 0)))
! 	    {
! 	      const svalue *inner_cst
! 		= get_or_create_constant_svalue (TREE_OPERAND (result, 0));
! 	      return get_or_create_cast (type,
! 					 get_or_create_cast (TREE_TYPE (result),
! 							     inner_cst));
! 	    }
! 	}
  
    return nullptr;
  }
*************** region_model_manager::get_or_create_unme
*** 1318,1339 ****
  }
  
  /* Return the svalue * of type TYPE for the merger of value BASE_SVAL
!    and ITER_SVAL at POINT, creating it if necessary.  */
  
  const svalue *
  region_model_manager::
  get_or_create_widening_svalue (tree type,
! 			       const function_point &point,
  			       const svalue *base_sval,
  			       const svalue *iter_sval)
  {
    gcc_assert (base_sval->get_kind () != SK_WIDENING);
    gcc_assert (iter_sval->get_kind () != SK_WIDENING);
!   widening_svalue::key_t key (type, point, base_sval, iter_sval);
    if (widening_svalue **slot = m_widening_values_map.get (key))
      return *slot;
    widening_svalue *widening_sval
!     = new widening_svalue (alloc_symbol_id (), type, point, base_sval,
  			   iter_sval);
    RETURN_UNKNOWN_IF_TOO_COMPLEX (widening_sval);
    m_widening_values_map.put (key, widening_sval);
--- 1318,1339 ----
  }
  
  /* Return the svalue * of type TYPE for the merger of value BASE_SVAL
!    and ITER_SVAL at SNODE, creating it if necessary.  */
  
  const svalue *
  region_model_manager::
  get_or_create_widening_svalue (tree type,
! 			       const supernode *snode,
  			       const svalue *base_sval,
  			       const svalue *iter_sval)
  {
    gcc_assert (base_sval->get_kind () != SK_WIDENING);
    gcc_assert (iter_sval->get_kind () != SK_WIDENING);
!   widening_svalue::key_t key (type, snode, base_sval, iter_sval);
    if (widening_svalue **slot = m_widening_values_map.get (key))
      return *slot;
    widening_svalue *widening_sval
!     = new widening_svalue (alloc_symbol_id (), type, snode, base_sval,
  			   iter_sval);
    RETURN_UNKNOWN_IF_TOO_COMPLEX (widening_sval);
    m_widening_values_map.put (key, widening_sval);
diff -Nrcpad gcc-16-20251207/gcc/analyzer/region-model-manager.h gcc-16-20251214/gcc/analyzer/region-model-manager.h
*** gcc-16-20251207/gcc/analyzer/region-model-manager.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/region-model-manager.h	Sun Dec 14 22:32:06 2025
*************** public:
*** 73,79 ****
  					   const svalue *inner_svalue);
    const svalue *get_or_create_unmergeable (const svalue *arg);
    const svalue *get_or_create_widening_svalue (tree type,
! 					       const function_point &point,
  					       const svalue *base_svalue,
  					       const svalue *iter_svalue);
    const svalue *get_or_create_compound_svalue (tree type,
--- 73,79 ----
  					   const svalue *inner_svalue);
    const svalue *get_or_create_unmergeable (const svalue *arg);
    const svalue *get_or_create_widening_svalue (tree type,
! 					       const supernode *snode,
  					       const svalue *base_svalue,
  					       const svalue *iter_svalue);
    const svalue *get_or_create_compound_svalue (tree type,
diff -Nrcpad gcc-16-20251207/gcc/analyzer/region-model.cc gcc-16-20251214/gcc/analyzer/region-model.cc
*** gcc-16-20251207/gcc/analyzer/region-model.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/region-model.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 881,901 ****
       heap-allocated regions, the numbering could be different).
       Hence we access m_check_expr, if available.  */
  
!   bool check_valid_fpath_p (const feasible_node &fnode,
! 			    const gimple *emission_stmt)
      const final override
    {
      if (!m_check_expr)
        return true;
! 
!     /* We've reached the enode, but not necessarily the right function_point.
!        Try to get the state at the correct stmt.  */
!     region_model emission_model (fnode.get_model ().get_manager());
!     if (!fnode.get_state_at_stmt (emission_stmt, &emission_model))
!       /* Couldn't get state; accept this diagnostic.  */
!       return true;
! 
!     const svalue *fsval = emission_model.get_rvalue (m_check_expr, nullptr);
      /* Check to see if the expr is also poisoned in FNODE (and in the
         same way).  */
      const poisoned_svalue * fspval = fsval->dyn_cast_poisoned_svalue ();
--- 881,892 ----
       heap-allocated regions, the numbering could be different).
       Hence we access m_check_expr, if available.  */
  
!   bool check_valid_fpath_p (const feasible_node &fnode)
      const final override
    {
      if (!m_check_expr)
        return true;
!     const svalue *fsval = fnode.get_model ().get_rvalue (m_check_expr, nullptr);
      /* Check to see if the expr is also poisoned in FNODE (and in the
         same way).  */
      const poisoned_svalue * fspval = fsval->dyn_cast_poisoned_svalue ();
*************** public:
*** 2139,2145 ****
  
    void
    add_events_to_path (checker_path *emission_path,
! 		      const exploded_edge &eedge) const final override
    {
      const exploded_node *dst_node = eedge.m_dest;
      const program_point &dst_point = dst_node->get_point ();
--- 2130,2137 ----
  
    void
    add_events_to_path (checker_path *emission_path,
! 		      const exploded_edge &eedge,
! 		      pending_diagnostic &) const final override
    {
      const exploded_node *dst_node = eedge.m_dest;
      const program_point &dst_point = dst_node->get_point ();
*************** region_model::check_for_throw_inside_cal
*** 2242,2247 ****
--- 2234,2279 ----
    ctxt->bifurcate (std::move (throws_exception));
  }
  
+ /* A subclass of pending_diagnostic for complaining about jumps through NULL
+    function pointers.  */
+ 
+ class jump_through_null : public pending_diagnostic_subclass<jump_through_null>
+ {
+ public:
+   jump_through_null (const gcall &call)
+   : m_call (call)
+   {}
+ 
+   const char *get_kind () const final override
+   {
+     return "jump_through_null";
+   }
+ 
+   bool operator== (const jump_through_null &other) const
+   {
+     return &m_call == &other.m_call;
+   }
+ 
+   int get_controlling_option () const final override
+   {
+     return OPT_Wanalyzer_jump_through_null;
+   }
+ 
+   bool emit (diagnostic_emission_context &ctxt) final override
+   {
+     return ctxt.warn ("jump through null pointer");
+   }
+ 
+   bool describe_final_event (pretty_printer &pp,
+ 			     const evdesc::final_event &) final override
+   {
+     pp_string (&pp, "jump through null pointer here");
+     return true;
+   }
+ 
+ private:
+   const gcall &m_call;
+ };
  /* Update this model for the CALL stmt, using CTXT to report any
     diagnostics - the first half.
  
*************** region_model::on_call_pre (const gcall &
*** 2287,2292 ****
--- 2319,2338 ----
  
    if (!callee_fndecl)
      {
+       /* Check for jump through nullptr.  */
+       if (ctxt)
+ 	if (tree fn_ptr = gimple_call_fn (&call))
+ 	  {
+ 	    const svalue *fn_ptr_sval = get_rvalue (fn_ptr, ctxt);
+ 	    if (fn_ptr_sval->all_zeroes_p ())
+ 	      {
+ 		ctxt->warn
+ 		  (std::make_unique<jump_through_null> (call));
+ 		ctxt->terminate_path ();
+ 		return true;
+ 	      }
+ 	  }
+ 
        check_for_throw_inside_call (call, NULL_TREE, ctxt);
        cd.set_any_lhs_with_defaults ();
        return true; /* Unknown side effects.  */
*************** region_model::on_return (const greturn *
*** 2796,2802 ****
     0), as opposed to any second return due to longjmp/sigsetjmp.  */
  
  void
! region_model::on_setjmp (const gcall &call, const exploded_node *enode,
  			 region_model_context *ctxt)
  {
    const svalue *buf_ptr = get_rvalue (gimple_call_arg (&call, 0), ctxt);
--- 2842,2850 ----
     0), as opposed to any second return due to longjmp/sigsetjmp.  */
  
  void
! region_model::on_setjmp (const gcall &call,
! 			 const exploded_node &enode,
! 			 const superedge &sedge,
  			 region_model_context *ctxt)
  {
    const svalue *buf_ptr = get_rvalue (gimple_call_arg (&call, 0), ctxt);
*************** region_model::on_setjmp (const gcall &ca
*** 2807,2813 ****
       region.  */
    if (buf_reg)
      {
!       setjmp_record r (enode, call);
        const svalue *sval
  	= m_mgr->get_or_create_setjmp_svalue (r, buf_reg->get_type ());
        set_value (buf_reg, sval, ctxt);
--- 2855,2861 ----
       region.  */
    if (buf_reg)
      {
!       setjmp_record r (&enode, &sedge, call);
        const svalue *sval
  	= m_mgr->get_or_create_setjmp_svalue (r, buf_reg->get_type ());
        set_value (buf_reg, sval, ctxt);
*************** region_model::on_longjmp (const gcall &l
*** 2876,2913 ****
      }
  }
  
- /* Update this region_model for a phi stmt of the form
-      LHS = PHI <...RHS...>.
-    where RHS is for the appropriate edge.
-    Get state from OLD_STATE so that all of the phi stmts for a basic block
-    are effectively handled simultaneously.  */
- 
- void
- region_model::handle_phi (const gphi *phi,
- 			  tree lhs, tree rhs,
- 			  const region_model &old_state,
- 			  hash_set<const svalue *> &svals_changing_meaning,
- 			  region_model_context *ctxt)
- {
-   /* For now, don't bother tracking the .MEM SSA names.  */
-   if (tree var = SSA_NAME_VAR (lhs))
-     if (TREE_CODE (var) == VAR_DECL)
-       if (VAR_DECL_IS_VIRTUAL_OPERAND (var))
- 	return;
- 
-   const svalue *src_sval = old_state.get_rvalue (rhs, ctxt);
-   const region *dst_reg = old_state.get_lvalue (lhs, ctxt);
- 
-   const svalue *sval = old_state.get_rvalue (lhs, nullptr);
-   if (sval->get_kind () == SK_WIDENING)
-     svals_changing_meaning.add (sval);
- 
-   set_value (dst_reg, src_sval, ctxt);
- 
-   if (ctxt)
-     ctxt->on_phi (phi, rhs);
- }
- 
  /* Implementation of region_model::get_lvalue; the latter adds type-checking.
  
     Get the id of the region for PV within this region_model,
--- 2924,2929 ----
*************** region_model::get_representative_path_va
*** 6121,6250 ****
    return result;
  }
  
- /* Update this model for any phis in SNODE, assuming we came from
-    LAST_CFG_SUPEREDGE.  */
- 
- void
- region_model::update_for_phis (const supernode *snode,
- 			       const cfg_superedge *last_cfg_superedge,
- 			       region_model_context *ctxt)
- {
-   gcc_assert (last_cfg_superedge);
- 
-   /* Copy this state and pass it to handle_phi so that all of the phi stmts
-      are effectively handled simultaneously.  */
-   const region_model old_state (*this);
- 
-   hash_set<const svalue *> svals_changing_meaning;
- 
-   for (gphi_iterator gpi = const_cast<supernode *>(snode)->start_phis ();
-        !gsi_end_p (gpi); gsi_next (&gpi))
-     {
-       gphi *phi = gpi.phi ();
- 
-       tree src = last_cfg_superedge->get_phi_arg (phi);
-       tree lhs = gimple_phi_result (phi);
- 
-       /* Update next_state based on phi and old_state.  */
-       handle_phi (phi, lhs, src, old_state, svals_changing_meaning, ctxt);
-     }
- 
-   for (auto iter : svals_changing_meaning)
-     m_constraints->purge_state_involving (iter);
- }
- 
- /* Attempt to update this model for taking EDGE (where the last statement
-    was LAST_STMT), returning true if the edge can be taken, false
-    otherwise.
-    When returning false, if OUT is non-NULL, write a new rejected_constraint
-    to it.
- 
-    For CFG superedges where LAST_STMT is a conditional or a switch
-    statement, attempt to add the relevant conditions for EDGE to this
-    model, returning true if they are feasible, or false if they are
-    impossible.
- 
-    For call superedges, push frame information and store arguments
-    into parameters.
- 
-    For return superedges, pop frame information and store return
-    values into any lhs.
- 
-    Rejection of call/return superedges happens elsewhere, in
-    program_point::on_edge (i.e. based on program point, rather
-    than program state).  */
- 
- bool
- region_model::maybe_update_for_edge (const superedge &edge,
- 				     const gimple *last_stmt,
- 				     region_model_context *ctxt,
- 				     std::unique_ptr<rejected_constraint> *out)
- {
-   /* Handle frame updates for interprocedural edges.  */
-   switch (edge.m_kind)
-     {
-     default:
-       break;
- 
-     case SUPEREDGE_CALL:
-       {
- 	const call_superedge *call_edge = as_a <const call_superedge *> (&edge);
- 	update_for_call_superedge (*call_edge, ctxt);
-       }
-       break;
- 
-     case SUPEREDGE_RETURN:
-       {
- 	const return_superedge *return_edge
- 	  = as_a <const return_superedge *> (&edge);
- 	update_for_return_superedge (*return_edge, ctxt);
-       }
-       break;
- 
-     case SUPEREDGE_INTRAPROCEDURAL_CALL:
-       /* This is a no-op for call summaries; we should already
- 	 have handled the effect of the call summary at the call stmt.  */
-       break;
-     }
- 
-   if (last_stmt == nullptr)
-     return true;
- 
-   /* Apply any constraints for conditionals/switch/computed-goto statements.  */
- 
-   if (const gcond *cond_stmt = dyn_cast <const gcond *> (last_stmt))
-     {
-       const cfg_superedge *cfg_sedge = as_a <const cfg_superedge *> (&edge);
-       return apply_constraints_for_gcond (*cfg_sedge, cond_stmt, ctxt, out);
-     }
- 
-   if (const gswitch *switch_stmt = dyn_cast <const gswitch *> (last_stmt))
-     {
-       const switch_cfg_superedge *switch_sedge
- 	= as_a <const switch_cfg_superedge *> (&edge);
-       return apply_constraints_for_gswitch (*switch_sedge, switch_stmt,
- 					    ctxt, out);
-     }
- 
-   if (const geh_dispatch *eh_dispatch_stmt
- 	= dyn_cast <const geh_dispatch *> (last_stmt))
-     {
-       const eh_dispatch_cfg_superedge *eh_dispatch_cfg_sedge
- 	= as_a <const eh_dispatch_cfg_superedge *> (&edge);
-       return apply_constraints_for_eh_dispatch (*eh_dispatch_cfg_sedge,
- 						eh_dispatch_stmt,
- 						ctxt, out);
-     }
- 
-   if (const ggoto *goto_stmt = dyn_cast <const ggoto *> (last_stmt))
-     {
-       const cfg_superedge *cfg_sedge = as_a <const cfg_superedge *> (&edge);
-       return apply_constraints_for_ggoto (*cfg_sedge, goto_stmt, ctxt);
-     }
- 
-   return true;
- }
- 
  /* Push a new frame_region on to the stack region.
     Populate the frame_region with child regions for the function call's
     parameters, using values from the arguments at the callsite in the
--- 6137,6142 ----
*************** region_model::update_for_return_gcall (c
*** 6291,6318 ****
    pop_frame (lhs, nullptr, ctxt, &call_stmt);
  }
  
- /* Extract calling information from the superedge and update the model for the
-    call  */
- 
- void
- region_model::update_for_call_superedge (const call_superedge &call_edge,
- 					 region_model_context *ctxt)
- {
-   const gcall &call_stmt = call_edge.get_call_stmt ();
-   update_for_gcall (call_stmt, ctxt, call_edge.get_callee_function ());
- }
- 
- /* Extract calling information from the return superedge and update the model
-    for the returning call */
- 
- void
- region_model::update_for_return_superedge (const return_superedge &return_edge,
- 					   region_model_context *ctxt)
- {
-   const gcall &call_stmt = return_edge.get_call_stmt ();
-   update_for_return_gcall (call_stmt, ctxt);
- }
- 
  /* Attempt to use R to replay SUMMARY into this object.
     Return true if it is possible.  */
  
--- 6183,6188 ----
*************** region_model::replay_call_summary (call_
*** 6346,6721 ****
    return true;
  }
  
- /* Given a true or false edge guarded by conditional statement COND_STMT,
-    determine appropriate constraints for the edge to be taken.
- 
-    If they are feasible, add the constraints and return true.
- 
-    Return false if the constraints contradict existing knowledge
-    (and so the edge should not be taken).
-    When returning false, if OUT is non-NULL, write a new rejected_constraint
-    to it.  */
- 
- bool
- region_model::
- apply_constraints_for_gcond (const cfg_superedge &sedge,
- 			     const gcond *cond_stmt,
- 			     region_model_context *ctxt,
- 			     std::unique_ptr<rejected_constraint> *out)
- {
-   ::edge cfg_edge = sedge.get_cfg_edge ();
-   gcc_assert (cfg_edge != nullptr);
-   gcc_assert (cfg_edge->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE));
- 
-   enum tree_code op = gimple_cond_code (cond_stmt);
-   tree lhs = gimple_cond_lhs (cond_stmt);
-   tree rhs = gimple_cond_rhs (cond_stmt);
-   if (cfg_edge->flags & EDGE_FALSE_VALUE)
-     op = invert_tree_comparison (op, false /* honor_nans */);
-   return add_constraint (lhs, op, rhs, ctxt, out);
- }
- 
- /* Return true iff SWITCH_STMT has a non-default label that contains
-    INT_CST.  */
- 
- static bool
- has_nondefault_case_for_value_p (const gswitch *switch_stmt, tree int_cst)
- {
-   /* We expect the initial label to be the default; skip it.  */
-   gcc_assert (CASE_LOW (gimple_switch_label (switch_stmt, 0)) == NULL_TREE);
-   unsigned min_idx = 1;
-   unsigned max_idx = gimple_switch_num_labels (switch_stmt) - 1;
- 
-   /* Binary search: try to find the label containing INT_CST.
-      This requires the cases to be sorted by CASE_LOW (done by the
-      gimplifier).  */
-   while (max_idx >= min_idx)
-     {
-       unsigned case_idx = (min_idx + max_idx) / 2;
-       tree label =  gimple_switch_label (switch_stmt, case_idx);
-       tree low = CASE_LOW (label);
-       gcc_assert (low);
-       tree high = CASE_HIGH (label);
-       if (!high)
- 	high = low;
-       if (tree_int_cst_compare (int_cst, low) < 0)
- 	{
- 	  /* INT_CST is below the range of this label.  */
- 	  gcc_assert (case_idx > 0);
- 	  max_idx = case_idx - 1;
- 	}
-       else if (tree_int_cst_compare (int_cst, high) > 0)
- 	{
- 	  /* INT_CST is above the range of this case.  */
- 	  min_idx = case_idx + 1;
- 	}
-       else
- 	/* This case contains INT_CST.  */
- 	return true;
-     }
-   /* Not found.  */
-   return false;
- }
- 
- /* Return true iff SWITCH_STMT (which must be on an enum value)
-    has nondefault cases handling all values in the enum.  */
- 
- static bool
- has_nondefault_cases_for_all_enum_values_p (const gswitch *switch_stmt,
- 					    tree type)
- {
-   gcc_assert (switch_stmt);
-   gcc_assert (TREE_CODE (type) == ENUMERAL_TYPE);
- 
-   for (tree enum_val_iter = TYPE_VALUES (type);
-        enum_val_iter;
-        enum_val_iter = TREE_CHAIN (enum_val_iter))
-     {
-       tree enum_val = TREE_VALUE (enum_val_iter);
-       gcc_assert (TREE_CODE (enum_val) == CONST_DECL);
-       gcc_assert (TREE_CODE (DECL_INITIAL (enum_val)) == INTEGER_CST);
-       if (!has_nondefault_case_for_value_p (switch_stmt,
- 					    DECL_INITIAL (enum_val)))
- 	return false;
-     }
-   return true;
- }
- 
- /* Given an EDGE guarded by SWITCH_STMT, determine appropriate constraints
-    for the edge to be taken.
- 
-    If they are feasible, add the constraints and return true.
- 
-    Return false if the constraints contradict existing knowledge
-    (and so the edge should not be taken).
-    When returning false, if OUT is non-NULL, write a new rejected_constraint
-    to it.  */
- 
- bool
- region_model::
- apply_constraints_for_gswitch (const switch_cfg_superedge &edge,
- 			       const gswitch *switch_stmt,
- 			       region_model_context *ctxt,
- 			       std::unique_ptr<rejected_constraint> *out)
- {
-   tree index  = gimple_switch_index (switch_stmt);
-   const svalue *index_sval = get_rvalue (index, ctxt);
-   bool check_index_type = true;
- 
-   /* With -fshort-enum, there may be a type cast.  */
-   if (ctxt && index_sval->get_kind () == SK_UNARYOP
-       && TREE_CODE (index_sval->get_type ()) == INTEGER_TYPE)
-     {
-       const unaryop_svalue *unaryop = as_a <const unaryop_svalue *> (index_sval);
-       if (unaryop->get_op () == NOP_EXPR
- 	  && is_a <const initial_svalue *> (unaryop->get_arg ()))
- 	if (const initial_svalue *initvalop = (as_a <const initial_svalue *>
- 					       (unaryop->get_arg ())))
- 	  if (initvalop->get_type ()
- 	      && TREE_CODE (initvalop->get_type ()) == ENUMERAL_TYPE)
- 	    {
- 	      index_sval = initvalop;
- 	      check_index_type = false;
- 	    }
-     }
- 
-   /* If we're switching based on an enum type, assume that the user is only
-      working with values from the enum.  Hence if this is an
-      implicitly-created "default", assume it doesn't get followed.
-      This fixes numerous "uninitialized" false positives where we otherwise
-      consider jumping past the initialization cases.  */
- 
-   if (/* Don't check during feasibility-checking (when ctxt is NULL).  */
-       ctxt
-       /* Must be an enum value.  */
-       && index_sval->get_type ()
-       && (!check_index_type
- 	  || TREE_CODE (TREE_TYPE (index)) == ENUMERAL_TYPE)
-       && TREE_CODE (index_sval->get_type ()) == ENUMERAL_TYPE
-       /* If we have a constant, then we can check it directly.  */
-       && index_sval->get_kind () != SK_CONSTANT
-       && edge.implicitly_created_default_p ()
-       && has_nondefault_cases_for_all_enum_values_p (switch_stmt,
- 						     index_sval->get_type ())
-       /* Don't do this if there's a chance that the index is
- 	 attacker-controlled.  */
-       && !ctxt->possibly_tainted_p (index_sval))
-     {
-       if (out)
- 	*out = std::make_unique <rejected_default_case> (*this);
-       return false;
-     }
- 
-   bounded_ranges_manager *ranges_mgr = get_range_manager ();
-   const bounded_ranges *all_cases_ranges
-     = ranges_mgr->get_or_create_ranges_for_switch (&edge, switch_stmt);
-   bool sat = m_constraints->add_bounded_ranges (index_sval, all_cases_ranges);
-   if (!sat && out)
-     *out = std::make_unique <rejected_ranges_constraint>
-       (*this, index, all_cases_ranges);
-   if (sat && ctxt && !all_cases_ranges->empty_p ())
-     ctxt->on_bounded_ranges (*index_sval, *all_cases_ranges);
-   return sat;
- }
- 
- class rejected_eh_dispatch : public rejected_constraint
- {
- public:
-   rejected_eh_dispatch (const region_model &model)
-   : rejected_constraint (model)
-   {}
- 
-   void dump_to_pp (pretty_printer *pp) const final override
-   {
-     pp_printf (pp, "rejected_eh_dispatch");
-   }
- };
- 
- static bool
- exception_matches_type_p (tree exception_type,
- 			  tree catch_type)
- {
-   if (catch_type == exception_type)
-     return true;
- 
-   /* TODO (PR analyzer/119697): we should also handle subclasses etc;
-      see the rules in https://en.cppreference.com/w/cpp/language/catch
- 
-      It looks like we should be calling (or emulating)
-      can_convert_eh from the C++ FE, but that's specific to the C++ FE.  */
- 
-   return false;
- }
- 
- static bool
- matches_any_exception_type_p (eh_catch ehc, tree exception_type)
- {
-   if (ehc->type_list == NULL_TREE)
-     /* All exceptions are caught here.  */
-     return true;
- 
-   for (tree iter = ehc->type_list; iter; iter = TREE_CHAIN (iter))
-     if (exception_matches_type_p (TREE_VALUE (iter),
- 				  exception_type))
-       return true;
-   return false;
- }
- 
- bool
- region_model::
- apply_constraints_for_eh_dispatch (const eh_dispatch_cfg_superedge &edge,
- 				   const geh_dispatch *,
- 				   region_model_context *ctxt,
- 				   std::unique_ptr<rejected_constraint> *out)
- {
-   const exception_node *current_node = get_current_thrown_exception ();
-   gcc_assert (current_node);
-   tree curr_exception_type = current_node->maybe_get_type ();
-   if (!curr_exception_type)
-     /* We don't know the specific type.  */
-     return true;
- 
-   return edge.apply_constraints (this, ctxt, curr_exception_type, out);
- }
- 
- bool
- region_model::
- apply_constraints_for_eh_dispatch_try (const eh_dispatch_try_cfg_superedge &edge,
- 				       region_model_context */*ctxt*/,
- 				       tree exception_type,
- 				       std::unique_ptr<rejected_constraint> *out)
- {
-   /* TODO: can we rely on this ordering?
-      or do we need to iterate through prev_catch ?  */
-   /* The exception must not match any of the previous edges.  */
-   for (auto sibling_sedge : edge.m_src->m_succs)
-     {
-       if (sibling_sedge == &edge)
- 	break;
- 
-       const eh_dispatch_try_cfg_superedge *sibling_eh_sedge
- 	= as_a <const eh_dispatch_try_cfg_superedge *> (sibling_sedge);
-       if (eh_catch ehc = sibling_eh_sedge->get_eh_catch ())
- 	if (matches_any_exception_type_p (ehc, exception_type))
- 	  {
- 	    /* The earlier sibling matches, so the "unhandled" edge is
- 	       not taken.  */
- 	    if (out)
- 	      *out = std::make_unique<rejected_eh_dispatch> (*this);
- 	    return false;
- 	  }
-     }
- 
-   if (eh_catch ehc = edge.get_eh_catch ())
-     {
-       /* We have an edge that tried to match one or more types.  */
- 
-       /* The exception must not match any of the previous edges.  */
- 
-       /* It must match this type.  */
-       if (matches_any_exception_type_p (ehc, exception_type))
- 	return true;
-       else
- 	{
- 	  /* Exception type doesn't match.  */
- 	  if (out)
- 	    *out = std::make_unique<rejected_eh_dispatch> (*this);
- 	  return false;
- 	}
-     }
-   else
-     {
-       /* This is the "unhandled exception" edge.
- 	 If we get here then no sibling edges matched;
- 	 we will follow this edge.  */
-       return true;
-     }
- }
- 
- bool
- region_model::
- apply_constraints_for_eh_dispatch_allowed (const eh_dispatch_allowed_cfg_superedge &edge,
- 					   region_model_context */*ctxt*/,
- 					   tree exception_type,
- 					   std::unique_ptr<rejected_constraint> *out)
- {
-   auto curr_thrown_exception_node = get_current_thrown_exception ();
-   gcc_assert (curr_thrown_exception_node);
-   tree curr_exception_type = curr_thrown_exception_node->maybe_get_type ();
-   eh_region eh_reg = edge.get_eh_region ();
-   tree type_list = eh_reg->u.allowed.type_list;
- 
-   switch (edge.get_eh_kind ())
-     {
-     default:
-       gcc_unreachable ();
-     case eh_dispatch_allowed_cfg_superedge::eh_kind::expected:
-       if (!curr_exception_type)
- 	{
- 	  /* We don't know the specific type;
- 	     assume we have one of an expected type.  */
- 	  return true;
- 	}
-       for (tree iter = type_list; iter; iter = TREE_CHAIN (iter))
- 	if (exception_matches_type_p (TREE_VALUE (iter),
- 				      exception_type))
- 	  return true;
-       if (out)
- 	*out = std::make_unique<rejected_eh_dispatch> (*this);
-       return false;
- 
-     case eh_dispatch_allowed_cfg_superedge::eh_kind::unexpected:
-       if (!curr_exception_type)
- 	{
- 	  /* We don't know the specific type;
- 	     assume we don't have one of an expected type.  */
- 	  if (out)
- 	    *out = std::make_unique<rejected_eh_dispatch> (*this);
- 	  return false;
- 	}
-       for (tree iter = type_list; iter; iter = TREE_CHAIN (iter))
- 	if (exception_matches_type_p (TREE_VALUE (iter),
- 				      exception_type))
- 	  {
- 	    if (out)
- 	      *out = std::make_unique<rejected_eh_dispatch> (*this);
- 	    return false;
- 	  }
-       return true;
-     }
- }
- 
- /* Given an edge reached by GOTO_STMT, determine appropriate constraints
-    for the edge to be taken.
- 
-    If they are feasible, add the constraints and return true.
- 
-    Return false if the constraints contradict existing knowledge
-    (and so the edge should not be taken).  */
- 
- bool
- region_model::apply_constraints_for_ggoto (const cfg_superedge &edge,
- 					   const ggoto *goto_stmt,
- 					   region_model_context *ctxt)
- {
-   tree dest = gimple_goto_dest (goto_stmt);
-   const svalue *dest_sval = get_rvalue (dest, ctxt);
- 
-   /* If we know we were jumping to a specific label.  */
-   if (tree dst_label = edge.m_dest->get_label ())
-     {
-       const label_region *dst_label_reg
- 	= m_mgr->get_region_for_label (dst_label);
-       const svalue *dst_label_ptr
- 	= m_mgr->get_ptr_svalue (ptr_type_node, dst_label_reg);
- 
-       if (!add_constraint (dest_sval, EQ_EXPR, dst_label_ptr, ctxt))
- 	return false;
-     }
- 
-   return true;
- }
- 
  /* For use with push_frame when handling a top-level call within the analysis.
     PARAM has a defined but unknown initial value.
     Anything it points to has escaped, since the calling context "knows"
--- 6216,6221 ----
*************** public:
*** 6896,6941 ****
        m_call_stmt (call_stmt),
        m_caller_frame (caller_frame)
    {}
!   bool warn (std::unique_ptr<pending_diagnostic> d,
! 	     const stmt_finder *custom_finder) override
    {
!     if (m_inner && custom_finder == nullptr)
!       {
! 	/* Custom stmt_finder to use m_call_stmt for the
! 	   diagnostic.  */
! 	class my_finder : public stmt_finder
! 	{
! 	public:
! 	  my_finder (const gcall *call_stmt,
! 		     const frame_region &caller_frame)
! 	    : m_call_stmt (call_stmt),
! 	      m_caller_frame (caller_frame)
! 	  {}
! 	  std::unique_ptr<stmt_finder> clone () const override
! 	  {
! 	    return std::make_unique<my_finder> (m_call_stmt, m_caller_frame);
! 	  }
! 	  const gimple *find_stmt (const exploded_path &) override
! 	  {
! 	    return m_call_stmt;
! 	  }
! 	  void update_event_loc_info (event_loc_info &loc_info) final override
! 	  {
! 	    loc_info.m_fndecl = m_caller_frame.get_fndecl ();
! 	    loc_info.m_depth = m_caller_frame.get_stack_depth ();
! 	  }
  
! 	private:
! 	  const gcall *m_call_stmt;
! 	  const frame_region &m_caller_frame;
! 	};
! 	my_finder finder (m_call_stmt, m_caller_frame);
! 	return m_inner->warn (std::move (d), &finder);
!       }
!     else
!       return region_model_context_decorator::warn (std::move (d),
! 						   custom_finder);
    }
    const gimple *get_stmt () const override
    {
      return m_call_stmt;
--- 6396,6416 ----
        m_call_stmt (call_stmt),
        m_caller_frame (caller_frame)
    {}
! 
!   pending_location
!   get_pending_location_for_diag () const override
    {
!     pending_location ploc
!       = region_model_context_decorator::get_pending_location_for_diag ();
  
!     ploc.m_event_loc_info
!       = event_loc_info (m_call_stmt->location,
! 			m_caller_frame.get_fndecl (),
! 			m_caller_frame.get_stack_depth ());
! 
!     return ploc;
    }
+ 
    const gimple *get_stmt () const override
    {
      return m_call_stmt;
*************** region_model::get_or_create_region_for_h
*** 7397,7405 ****
  
  	if (update_state_machine && cd)
  		{
! 			const svalue *ptr_sval
! 			= m_mgr->get_ptr_svalue (cd->get_lhs_type (), reg);
!       transition_ptr_sval_non_null (ctxt, ptr_sval);
  		}
  
    return reg;
--- 6872,6880 ----
  
  	if (update_state_machine && cd)
  		{
! 		  const svalue *ptr_sval
! 		    = m_mgr->get_ptr_svalue (cd->get_lhs_type (), reg);
! 		  transition_ptr_sval_non_null (ctxt, ptr_sval);
  		}
  
    return reg;
*************** region_model::set_errno (const call_deta
*** 7956,7961 ****
--- 7431,7448 ----
    set_value (errno_reg, new_errno_sval, cd.get_ctxt ());
  }
  
+ // class region_model_context
+ 
+ bool
+ region_model_context::
+ warn (std::unique_ptr<pending_diagnostic> d,
+       std::unique_ptr<pending_location::fixer_for_epath> ploc_fixer)
+ {
+   pending_location ploc (get_pending_location_for_diag ());
+   ploc.m_fixer_for_epath = std::move (ploc_fixer);
+   return warn_at (std::move (d), std::move (ploc));
+ }
+ 
  /* class noop_region_model_context : public region_model_context.  */
  
  void
*************** rejected_ranges_constraint::dump_to_pp (
*** 8106,8113 ****
  
  /* engine's ctor.  */
  
! engine::engine (const supergraph *sg, logger *logger)
! : m_sg (sg), m_mgr (logger)
  {
  }
  
--- 7593,7603 ----
  
  /* engine's ctor.  */
  
! engine::engine (region_model_manager &mgr,
! 		const supergraph *sg,
! 		logger *logger)
! : m_mgr (mgr),
!   m_sg (sg)
  {
  }
  
*************** test_state_merging ()
*** 9473,9490 ****
      ASSERT_EQ (merged_p_star_reg, merged.get_lvalue (y, nullptr));
    }
  
!   /* Pointers: non-NULL ptrs to different globals: should be unknown.  */
    {
!     region_model merged (&mgr);
      /* x == &y vs x == &z in the input models; these are actually casts
         of the ptrs to "int".  */
!     const svalue *merged_x_sval;
!     // TODO:
!     assert_region_models_merge (x, addr_of_y, addr_of_z, &merged,
! 				&merged_x_sval);
! 
!     /* We should get x == unknown in the merged model.  */
!     ASSERT_EQ (merged_x_sval->get_kind (), SK_UNKNOWN);
    }
  
    /* Pointers: non-NULL and non-NULL: ptr to a heap region.  */
--- 8963,8986 ----
      ASSERT_EQ (merged_p_star_reg, merged.get_lvalue (y, nullptr));
    }
  
!   /* Pointers: non-NULL ptrs to different globals should not merge;
!      see e.g. gcc.dg/analyzer/torture/uninit-pr108725.c  */
    {
!     region_model merged_model (&mgr);
!     program_point point (program_point::origin (mgr));
!     test_region_model_context ctxt;
      /* x == &y vs x == &z in the input models; these are actually casts
         of the ptrs to "int".  */
!     region_model model0 (&mgr);
!     region_model model1 (&mgr);
!     model0.set_value (model0.get_lvalue (x, &ctxt),
! 		      model0.get_rvalue (addr_of_y, &ctxt),
! 		      &ctxt);
!     model1.set_value (model1.get_lvalue (x, &ctxt),
! 		      model1.get_rvalue (addr_of_z, &ctxt),
! 		      &ctxt);
!     /* They should not be mergeable.  */
!     ASSERT_FALSE (model0.can_merge_with_p (model1, point, &merged_model));
    }
  
    /* Pointers: non-NULL and non-NULL: ptr to a heap region.  */
*************** static void
*** 9685,9691 ****
  test_widening_constraints ()
  {
    region_model_manager mgr;
!   function_point point (program_point::origin (mgr).get_function_point ());
    tree int_0 = integer_zero_node;
    tree int_m1 = build_int_cst (integer_type_node, -1);
    tree int_1 = integer_one_node;
--- 9181,9187 ----
  test_widening_constraints ()
  {
    region_model_manager mgr;
!   const supernode *snode = nullptr;
    tree int_0 = integer_zero_node;
    tree int_m1 = build_int_cst (integer_type_node, -1);
    tree int_1 = integer_one_node;
*************** test_widening_constraints ()
*** 9694,9700 ****
    const svalue *int_0_sval = mgr.get_or_create_constant_svalue (int_0);
    const svalue *int_1_sval = mgr.get_or_create_constant_svalue (int_1);
    const svalue *w_zero_then_one_sval
!     = mgr.get_or_create_widening_svalue (integer_type_node, point,
  					  int_0_sval, int_1_sval);
    const widening_svalue *w_zero_then_one
      = w_zero_then_one_sval->dyn_cast_widening_svalue ();
--- 9190,9196 ----
    const svalue *int_0_sval = mgr.get_or_create_constant_svalue (int_0);
    const svalue *int_1_sval = mgr.get_or_create_constant_svalue (int_1);
    const svalue *w_zero_then_one_sval
!     = mgr.get_or_create_widening_svalue (integer_type_node, snode,
  					  int_0_sval, int_1_sval);
    const widening_svalue *w_zero_then_one
      = w_zero_then_one_sval->dyn_cast_widening_svalue ();
diff -Nrcpad gcc-16-20251207/gcc/analyzer/region-model.h gcc-16-20251214/gcc/analyzer/region-model.h
*** gcc-16-20251207/gcc/analyzer/region-model.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/region-model.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 35,40 ****
--- 35,41 ----
  #include "analyzer/known-function-manager.h"
  #include "analyzer/region-model-manager.h"
  #include "analyzer/pending-diagnostic.h"
+ #include "analyzer/diagnostic-manager.h"
  #include "text-art/widget.h"
  #include "text-art/dump.h"
  
*************** class region_model
*** 365,389 ****
  			      const uncertainty_t *uncertainty);
  
    void on_return (const greturn *stmt, region_model_context *ctxt);
!   void on_setjmp (const gcall &stmt, const exploded_node *enode,
  		  region_model_context *ctxt);
    void on_longjmp (const gcall &longjmp_call, const gcall &setjmp_call,
  		   int setjmp_stack_depth, region_model_context *ctxt);
  
-   void update_for_phis (const supernode *snode,
- 			const cfg_superedge *last_cfg_superedge,
- 			region_model_context *ctxt);
- 
-   void handle_phi (const gphi *phi, tree lhs, tree rhs,
- 		   const region_model &old_state,
- 		   hash_set<const svalue *> &svals_changing_meaning,
- 		   region_model_context *ctxt);
- 
-   bool maybe_update_for_edge (const superedge &edge,
- 			      const gimple *last_stmt,
- 			      region_model_context *ctxt,
- 			      std::unique_ptr<rejected_constraint> *out);
- 
    void update_for_gcall (const gcall &call_stmt,
  			 region_model_context *ctxt,
  			 function *callee = nullptr);
--- 366,378 ----
  			      const uncertainty_t *uncertainty);
  
    void on_return (const greturn *stmt, region_model_context *ctxt);
!   void on_setjmp (const gcall &stmt,
! 		  const exploded_node &enode,
! 		  const superedge &sedge,
  		  region_model_context *ctxt);
    void on_longjmp (const gcall &longjmp_call, const gcall &setjmp_call,
  		   int setjmp_stack_depth, region_model_context *ctxt);
  
    void update_for_gcall (const gcall &call_stmt,
  			 region_model_context *ctxt,
  			 function *callee = nullptr);
*************** class region_model
*** 656,675 ****
      return retval;
    }
  
-   bool
-   apply_constraints_for_eh_dispatch_try
-     (const eh_dispatch_try_cfg_superedge &edge,
-      region_model_context *ctxt,
-      tree exception_type,
-      std::unique_ptr<rejected_constraint> *out);
- 
-   bool
-   apply_constraints_for_eh_dispatch_allowed
-     (const eh_dispatch_allowed_cfg_superedge &edge,
-      region_model_context *ctxt,
-      tree exception_type,
-      std::unique_ptr<rejected_constraint> *out);
- 
  private:
    const region *get_lvalue_1 (path_var pv, region_model_context *ctxt) const;
    const svalue *get_rvalue_1 (path_var pv, region_model_context *ctxt) const;
--- 645,650 ----
*************** private:
*** 693,720 ****
  				   bool *out,
  				   region_model_context *ctxt);
  
-   void update_for_call_superedge (const call_superedge &call_edge,
- 				  region_model_context *ctxt);
-   void update_for_return_superedge (const return_superedge &return_edge,
- 				    region_model_context *ctxt);
-   bool apply_constraints_for_gcond (const cfg_superedge &edge,
- 				    const gcond *cond_stmt,
- 				    region_model_context *ctxt,
- 				    std::unique_ptr<rejected_constraint> *out);
-   bool apply_constraints_for_gswitch (const switch_cfg_superedge &edge,
- 				      const gswitch *switch_stmt,
- 				      region_model_context *ctxt,
- 				      std::unique_ptr<rejected_constraint> *out);
-   bool apply_constraints_for_ggoto (const cfg_superedge &edge,
- 				    const ggoto *goto_stmt,
- 				    region_model_context *ctxt);
- 
-   bool
-   apply_constraints_for_eh_dispatch (const eh_dispatch_cfg_superedge &edge,
- 				     const geh_dispatch *eh_dispatch_stmt,
- 				     region_model_context *ctxt,
- 				     std::unique_ptr<rejected_constraint> *out);
- 
    void poison_any_pointers_to_descendents (const region *reg,
  					   enum poison_kind pkind);
  
--- 668,673 ----
*************** private:
*** 814,824 ****
  class region_model_context
  {
   public:
    /* Hook for clients to store pending diagnostics.
!      Return true if the diagnostic was stored, or false if it was deleted.
!      Optionally provide a custom stmt_finder.  */
!   virtual bool warn (std::unique_ptr<pending_diagnostic> d,
! 		     const stmt_finder *custom_finder = nullptr) = 0;
  
    /* Hook for clients to add a note to the last previously stored
       pending diagnostic.  */
--- 767,785 ----
  class region_model_context
  {
   public:
+   bool
+   warn (std::unique_ptr<pending_diagnostic> d,
+ 	std::unique_ptr<pending_location::fixer_for_epath> ploc_fixer = nullptr);
+ 
+   /* Hook for determining where diagnostics are to currently be emitted.  */
+   virtual pending_location
+   get_pending_location_for_diag () const = 0;
+ 
    /* Hook for clients to store pending diagnostics.
!      Return true if the diagnostic was stored, or false if it was deleted.  */
!   virtual bool
!   warn_at (std::unique_ptr<pending_diagnostic> d,
! 	   pending_location &&ploc) = 0;
  
    /* Hook for clients to add a note to the last previously stored
       pending diagnostic.  */
*************** class region_model_context
*** 943,950 ****
  class noop_region_model_context : public region_model_context
  {
  public:
!   bool warn (std::unique_ptr<pending_diagnostic>,
! 	     const stmt_finder *) override { return false; }
    void add_note (std::unique_ptr<pending_note>) override;
    void add_event (std::unique_ptr<checker_event>) override;
    void on_svalue_leak (const svalue *) override {}
--- 904,920 ----
  class noop_region_model_context : public region_model_context
  {
  public:
!   pending_location
!   get_pending_location_for_diag () const override
!   {
!     return pending_location ();
!   }
!   bool
!   warn_at (std::unique_ptr<pending_diagnostic>,
! 	   pending_location &&) override
!   {
!     return false;
!   }
    void add_note (std::unique_ptr<pending_note>) override;
    void add_event (std::unique_ptr<checker_event>) override;
    void on_svalue_leak (const svalue *) override {}
*************** private:
*** 1026,1036 ****
  class region_model_context_decorator : public region_model_context
  {
   public:
!   bool warn (std::unique_ptr<pending_diagnostic> d,
! 	     const stmt_finder *custom_finder) override
    {
      if (m_inner)
!       return m_inner->warn (std::move (d), custom_finder);
      else
        return false;
    }
--- 996,1016 ----
  class region_model_context_decorator : public region_model_context
  {
   public:
!   pending_location
!   get_pending_location_for_diag () const override
    {
      if (m_inner)
!       return m_inner->get_pending_location_for_diag ();
!     else
!       return pending_location ();
!   }
! 
!   bool
!   warn_at (std::unique_ptr<pending_diagnostic> d,
! 	   pending_location &&ploc) override
!   {
!     if (m_inner)
!       return m_inner->warn_at (std::move (d), std::move (ploc));
      else
        return false;
    }
*************** protected:
*** 1214,1224 ****
  class annotating_context : public region_model_context_decorator
  {
  public:
!   bool warn (std::unique_ptr<pending_diagnostic> d,
! 	     const stmt_finder *custom_finder) override
    {
      if (m_inner)
!       if (m_inner->warn (std::move (d), custom_finder))
  	{
  	  add_annotations ();
  	  return true;
--- 1194,1205 ----
  class annotating_context : public region_model_context_decorator
  {
  public:
!   bool
!   warn_at (std::unique_ptr<pending_diagnostic> d,
! 	   pending_location &&ploc) override
    {
      if (m_inner)
!       if (m_inner->warn_at (std::move (d), std::move (ploc)))
  	{
  	  add_annotations ();
  	  return true;
*************** struct model_merger
*** 1266,1274 ****
    }
  
    bool mergeable_svalue_p (const svalue *) const;
!   const function_point &get_function_point () const
    {
!     return m_point.get_function_point ();
    }
  
    void on_widening_reuse (const widening_svalue *widening_sval);
--- 1247,1256 ----
    }
  
    bool mergeable_svalue_p (const svalue *) const;
! 
!   const supernode *get_supernode () const
    {
!     return m_point.get_supernode ();
    }
  
    void on_widening_reuse (const widening_svalue *widening_sval);
*************** private:
*** 1351,1357 ****
  class engine
  {
  public:
!   engine (const supergraph *sg = nullptr, logger *logger = nullptr);
    const supergraph *get_supergraph () { return m_sg; }
    region_model_manager *get_model_manager () { return &m_mgr; }
    known_function_manager *get_known_function_manager ()
--- 1333,1341 ----
  class engine
  {
  public:
!   engine (region_model_manager &mgr,
! 	  const supergraph *sg = nullptr,
! 	  logger *logger = nullptr);
    const supergraph *get_supergraph () { return m_sg; }
    region_model_manager *get_model_manager () { return &m_mgr; }
    known_function_manager *get_known_function_manager ()
*************** public:
*** 1362,1369 ****
    void log_stats (logger *logger) const;
  
  private:
    const supergraph *m_sg;
-   region_model_manager m_mgr;
  };
  
  } // namespace ana
--- 1346,1353 ----
    void log_stats (logger *logger) const;
  
  private:
+   region_model_manager &m_mgr;
    const supergraph *m_sg;
  };
  
  } // namespace ana
*************** using namespace ::selftest;
*** 1384,1391 ****
  class test_region_model_context : public noop_region_model_context
  {
  public:
!   bool warn (std::unique_ptr<pending_diagnostic> d,
! 	     const stmt_finder *) final override
    {
      m_diagnostics.safe_push (d.release ());
      return true;
--- 1368,1376 ----
  class test_region_model_context : public noop_region_model_context
  {
  public:
!   bool
!   warn_at (std::unique_ptr<pending_diagnostic> d,
! 	   pending_location &&) final override
    {
      m_diagnostics.safe_push (d.release ());
      return true;
diff -Nrcpad gcc-16-20251207/gcc/analyzer/region.cc gcc-16-20251214/gcc/analyzer/region.cc
*** gcc-16-20251207/gcc/analyzer/region.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/region.cc	Sun Dec 14 22:32:06 2025
*************** frame_region::get_region_for_local (regi
*** 1393,1401 ****
  		    = ext_state->get_engine ()->get_supergraph ())
  		  {
  		    const gimple *def_stmt = SSA_NAME_DEF_STMT (expr);
! 		    const supernode *snode
! 		      = sg->get_supernode_for_stmt (def_stmt);
! 		    gcc_assert (snode->get_function () == &m_fun);
  		  }
  	  }
  	  break;
--- 1393,1404 ----
  		    = ext_state->get_engine ()->get_supergraph ())
  		  {
  		    const gimple *def_stmt = SSA_NAME_DEF_STMT (expr);
! 		    if (gimple_code (def_stmt) != GIMPLE_PHI)
! 		      {
! 			const supernode *snode
! 			  = sg->get_supernode_for_stmt (def_stmt);
! 			gcc_assert (snode->get_function () == &m_fun);
! 		      }
  		  }
  	  }
  	  break;
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm-fd.cc gcc-16-20251214/gcc/analyzer/sm-fd.cc
*** gcc-16-20251207/gcc/analyzer/sm-fd.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm-fd.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 108,118 ****
      return m_start;
    }
  
!   bool on_stmt (sm_context &sm_ctxt, const supernode *node,
  		const gimple *stmt) const final override;
  
!   void on_condition (sm_context &sm_ctxt, const supernode *node,
! 		     const gimple *stmt, const svalue *lhs, const tree_code op,
  		     const svalue *rhs) const final override;
  
    bool can_purge_p (state_t s) const final override;
--- 108,118 ----
      return m_start;
    }
  
!   bool on_stmt (sm_context &sm_ctxt,
  		const gimple *stmt) const final override;
  
!   void on_condition (sm_context &sm_ctxt,
! 		     const svalue *lhs, const tree_code op,
  		     const svalue *rhs) const final override;
  
    bool can_purge_p (state_t s) const final override;
*************** public:
*** 222,257 ****
    tree m_SOCK_DGRAM;
  
  private:
!   void on_open (sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
  		const gcall &call) const;
!   void on_creat (sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
  		const gcall &call) const;
!   void on_close (sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
  		 const gcall &call) const;
!   void on_read (sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
  		const gcall &call, const tree callee_fndecl) const;
!   void on_write (sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
  		 const gcall &call, const tree callee_fndecl) const;
!   void check_for_open_fd (sm_context &sm_ctxt, const supernode *node,
! 			  const gimple *stmt, const gcall &call,
  			  const tree callee_fndecl,
  			  enum access_directions access_fn) const;
  
    void make_valid_transitions_on_condition (sm_context &sm_ctxt,
- 					    const supernode *node,
- 					    const gimple *stmt,
  					    const svalue *lhs) const;
    void make_invalid_transitions_on_condition (sm_context &sm_ctxt,
- 					      const supernode *node,
- 					      const gimple *stmt,
  					      const svalue *lhs) const;
!   void check_for_fd_attrs (sm_context &sm_ctxt, const supernode *node,
! 			   const gimple *stmt, const gcall &call,
! 			   const tree callee_fndecl, const char *attr_name,
  			   access_directions fd_attr_access_dir) const;
!   void check_for_dup (sm_context &sm_ctxt, const supernode *node,
!        const gimple *stmt, const gcall &call, const tree callee_fndecl,
!        enum dup kind) const;
  
    state_t get_state_for_socket_type (const svalue *socket_type_sval) const;
  
--- 222,255 ----
    tree m_SOCK_DGRAM;
  
  private:
!   void on_open (sm_context &sm_ctxt,
  		const gcall &call) const;
!   void on_creat (sm_context &sm_ctxt,
  		const gcall &call) const;
!   void on_close (sm_context &sm_ctxt,
  		 const gcall &call) const;
!   void on_read (sm_context &sm_ctxt,
  		const gcall &call, const tree callee_fndecl) const;
!   void on_write (sm_context &sm_ctxt,
  		 const gcall &call, const tree callee_fndecl) const;
!   void check_for_open_fd (sm_context &sm_ctxt,
! 			  const gcall &call,
  			  const tree callee_fndecl,
  			  enum access_directions access_fn) const;
  
    void make_valid_transitions_on_condition (sm_context &sm_ctxt,
  					    const svalue *lhs) const;
    void make_invalid_transitions_on_condition (sm_context &sm_ctxt,
  					      const svalue *lhs) const;
!   void check_for_fd_attrs (sm_context &sm_ctxt,
! 			   const gcall &call,
! 			   const tree callee_fndecl,
! 			   const char *attr_name,
  			   access_directions fd_attr_access_dir) const;
!   void check_for_dup (sm_context &sm_ctxt,
! 		      const gcall &call,
! 		      const tree callee_fndecl,
! 		      enum dup kind) const;
  
    state_t get_state_for_socket_type (const svalue *socket_type_sval) const;
  
*************** private:
*** 259,272 ****
  			    bool successful,
  			    sm_context &sm_ctxt,
  			    const svalue *fd_sval,
- 			    const supernode *node,
  			    state_t old_state,
  			    bool *complained = nullptr) const;
    bool check_for_new_socket_fd (const call_details &cd,
  				bool successful,
  				sm_context &sm_ctxt,
  				const svalue *fd_sval,
- 				const supernode *node,
  				state_t old_state,
  				enum expected_phase expected_phase) const;
  };
--- 257,268 ----
*************** fd_state_machine::mark_as_valid_fd (regi
*** 1328,1334 ****
  }
  
  bool
! fd_state_machine::on_stmt (sm_context &sm_ctxt, const supernode *node,
  			   const gimple *stmt) const
  {
    if (const gcall *call = dyn_cast<const gcall *> (stmt))
--- 1324,1330 ----
  }
  
  bool
! fd_state_machine::on_stmt (sm_context &sm_ctxt,
  			   const gimple *stmt) const
  {
    if (const gcall *call = dyn_cast<const gcall *> (stmt))
*************** fd_state_machine::on_stmt (sm_context &s
*** 1336,1401 ****
        {
  	if (is_named_call_p (callee_fndecl, "open", *call, 2))
  	  {
! 	    on_open (sm_ctxt, node, stmt, *call);
  	    return true;
  	  } //  "open"
  
  	if (is_named_call_p (callee_fndecl, "creat", *call, 2))
  	  {
! 	    on_creat (sm_ctxt, node, stmt, *call);
  	    return true;
  	  } // "creat"
  
  	if (is_named_call_p (callee_fndecl, "close", *call, 1))
  	  {
! 	    on_close (sm_ctxt, node, stmt, *call);
  	    return true;
  	  } //  "close"
  
  	if (is_named_call_p (callee_fndecl, "write", *call, 3))
  	  {
! 	    on_write (sm_ctxt, node, stmt, *call, callee_fndecl);
  	    return true;
  	  } // "write"
  
  	if (is_named_call_p (callee_fndecl, "read", *call, 3))
  	  {
! 	    on_read (sm_ctxt, node, stmt, *call, callee_fndecl);
  	    return true;
  	  } // "read"
  
  	if (is_named_call_p (callee_fndecl, "dup", *call, 1))
  	  {
! 	    check_for_dup (sm_ctxt, node, stmt, *call, callee_fndecl, DUP_1);
  	    return true;
  	  }
  
  	if (is_named_call_p (callee_fndecl, "dup2", *call, 2))
  	  {
! 	    check_for_dup (sm_ctxt, node, stmt, *call, callee_fndecl, DUP_2);
  	    return true;
  	  }
  
  	if (is_named_call_p (callee_fndecl, "dup3", *call, 3))
  	  {
! 	    check_for_dup (sm_ctxt, node, stmt, *call, callee_fndecl, DUP_3);
  	    return true;
  	  }
  
  	{
  	  // Handle __attribute__((fd_arg))
  
! 	  check_for_fd_attrs (sm_ctxt, node, stmt, *call, callee_fndecl,
  			      "fd_arg", DIRS_READ_WRITE);
  
  	  // Handle __attribute__((fd_arg_read))
  
! 	  check_for_fd_attrs (sm_ctxt, node, stmt, *call, callee_fndecl,
  			      "fd_arg_read", DIRS_READ);
  
  	  // Handle __attribute__((fd_arg_write))
  
! 	  check_for_fd_attrs (sm_ctxt, node, stmt, *call, callee_fndecl,
  			      "fd_arg_write", DIRS_WRITE);
  	}
        }
--- 1332,1397 ----
        {
  	if (is_named_call_p (callee_fndecl, "open", *call, 2))
  	  {
! 	    on_open (sm_ctxt, *call);
  	    return true;
  	  } //  "open"
  
  	if (is_named_call_p (callee_fndecl, "creat", *call, 2))
  	  {
! 	    on_creat (sm_ctxt, *call);
  	    return true;
  	  } // "creat"
  
  	if (is_named_call_p (callee_fndecl, "close", *call, 1))
  	  {
! 	    on_close (sm_ctxt, *call);
  	    return true;
  	  } //  "close"
  
  	if (is_named_call_p (callee_fndecl, "write", *call, 3))
  	  {
! 	    on_write (sm_ctxt, *call, callee_fndecl);
  	    return true;
  	  } // "write"
  
  	if (is_named_call_p (callee_fndecl, "read", *call, 3))
  	  {
! 	    on_read (sm_ctxt, *call, callee_fndecl);
  	    return true;
  	  } // "read"
  
  	if (is_named_call_p (callee_fndecl, "dup", *call, 1))
  	  {
! 	    check_for_dup (sm_ctxt, *call, callee_fndecl, DUP_1);
  	    return true;
  	  }
  
  	if (is_named_call_p (callee_fndecl, "dup2", *call, 2))
  	  {
! 	    check_for_dup (sm_ctxt, *call, callee_fndecl, DUP_2);
  	    return true;
  	  }
  
  	if (is_named_call_p (callee_fndecl, "dup3", *call, 3))
  	  {
! 	    check_for_dup (sm_ctxt, *call, callee_fndecl, DUP_3);
  	    return true;
  	  }
  
  	{
  	  // Handle __attribute__((fd_arg))
  
! 	  check_for_fd_attrs (sm_ctxt, *call, callee_fndecl,
  			      "fd_arg", DIRS_READ_WRITE);
  
  	  // Handle __attribute__((fd_arg_read))
  
! 	  check_for_fd_attrs (sm_ctxt, *call, callee_fndecl,
  			      "fd_arg_read", DIRS_READ);
  
  	  // Handle __attribute__((fd_arg_write))
  
! 	  check_for_fd_attrs (sm_ctxt, *call, callee_fndecl,
  			      "fd_arg_write", DIRS_WRITE);
  	}
        }
*************** fd_state_machine::on_stmt (sm_context &s
*** 1405,1411 ****
  
  void
  fd_state_machine::check_for_fd_attrs (
!     sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
      const gcall &call, const tree callee_fndecl, const char *attr_name,
      access_directions fd_attr_access_dir) const
  {
--- 1401,1407 ----
  
  void
  fd_state_machine::check_for_fd_attrs (
!     sm_context &sm_ctxt,
      const gcall &call, const tree callee_fndecl, const char *attr_name,
      access_directions fd_attr_access_dir) const
  {
*************** fd_state_machine::check_for_fd_attrs (
*** 1443,1449 ****
      {
        tree arg = gimple_call_arg (&call, arg_idx);
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       state_t state = sm_ctxt.get_state (stmt, arg);
        bool bit_set = bitmap_bit_p (argmap, arg_idx);
        if (TREE_CODE (TREE_TYPE (arg)) != INTEGER_TYPE)
  	continue;
--- 1439,1445 ----
      {
        tree arg = gimple_call_arg (&call, arg_idx);
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       state_t state = sm_ctxt.get_state (arg);
        bool bit_set = bitmap_bit_p (argmap, arg_idx);
        if (TREE_CODE (TREE_TYPE (arg)) != INTEGER_TYPE)
  	continue;
*************** fd_state_machine::check_for_fd_attrs (
*** 1456,1462 ****
  	  if (is_closed_fd_p (state))
  	    {
  
! 	      sm_ctxt.warn (node, stmt, arg,
  			    std::make_unique<fd_use_after_close>
  			    (*this, diag_arg,
  			     fndecl, attr_name,
--- 1452,1458 ----
  	  if (is_closed_fd_p (state))
  	    {
  
! 	      sm_ctxt.warn (arg,
  			    std::make_unique<fd_use_after_close>
  			    (*this, diag_arg,
  			     fndecl, attr_name,
*************** fd_state_machine::check_for_fd_attrs (
*** 1468,1474 ****
  	    {
  	      if (!is_constant_fd_p (state))
  		{
! 		  sm_ctxt.warn (node, stmt, arg,
  				std::make_unique<fd_use_without_check>
  				(*this, diag_arg,
  				 fndecl, attr_name,
--- 1464,1470 ----
  	    {
  	      if (!is_constant_fd_p (state))
  		{
! 		  sm_ctxt.warn (arg,
  				std::make_unique<fd_use_without_check>
  				(*this, diag_arg,
  				 fndecl, attr_name,
*************** fd_state_machine::check_for_fd_attrs (
*** 1486,1492 ****
  	      if (is_writeonly_fd_p (state))
  		{
  		  sm_ctxt.warn
! 		    (node, stmt, arg,
  		     std::make_unique<fd_access_mode_mismatch> (*this, diag_arg,
  								DIRS_WRITE,
  								fndecl,
--- 1482,1488 ----
  	      if (is_writeonly_fd_p (state))
  		{
  		  sm_ctxt.warn
! 		    (arg,
  		     std::make_unique<fd_access_mode_mismatch> (*this, diag_arg,
  								DIRS_WRITE,
  								fndecl,
*************** fd_state_machine::check_for_fd_attrs (
*** 1500,1506 ****
  	      if (is_readonly_fd_p (state))
  		{
  		  sm_ctxt.warn
! 		    (node, stmt, arg,
  		     std::make_unique<fd_access_mode_mismatch> (*this, diag_arg,
  								DIRS_READ,
  								fndecl,
--- 1496,1502 ----
  	      if (is_readonly_fd_p (state))
  		{
  		  sm_ctxt.warn
! 		    (arg,
  		     std::make_unique<fd_access_mode_mismatch> (*this, diag_arg,
  								DIRS_READ,
  								fndecl,
*************** fd_state_machine::check_for_fd_attrs (
*** 1516,1523 ****
  
  
  void
! fd_state_machine::on_open (sm_context &sm_ctxt, const supernode *node,
! 			   const gimple *stmt, const gcall &call) const
  {
    tree lhs = gimple_call_lhs (&call);
    if (lhs)
--- 1512,1518 ----
  
  
  void
! fd_state_machine::on_open (sm_context &sm_ctxt, const gcall &call) const
  {
    tree lhs = gimple_call_lhs (&call);
    if (lhs)
*************** fd_state_machine::on_open (sm_context &s
*** 1532,1583 ****
        switch (mode)
  	{
  	case READ_ONLY:
! 	  sm_ctxt.on_transition (node, stmt, lhs, m_start,
  				 m_unchecked_read_only);
  	  break;
  	case WRITE_ONLY:
! 	  sm_ctxt.on_transition (node, stmt, lhs, m_start,
  				 m_unchecked_write_only);
  	  break;
  	default:
! 	  sm_ctxt.on_transition (node, stmt, lhs, m_start,
  				 m_unchecked_read_write);
  	}
      }
    else
      {
!       sm_ctxt.warn (node, stmt, NULL_TREE,
  		    std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
      }
  }
  
  void
! fd_state_machine::on_creat (sm_context &sm_ctxt, const supernode *node,
! 			    const gimple *stmt, const gcall &call) const
  {
    tree lhs = gimple_call_lhs (&call);
    if (lhs)
!     sm_ctxt.on_transition (node, stmt, lhs, m_start, m_unchecked_write_only);
    else
!     sm_ctxt.warn (node, stmt, NULL_TREE,
  		  std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
  }
  
  void
! fd_state_machine::check_for_dup (sm_context &sm_ctxt, const supernode *node,
! 				 const gimple *stmt, const gcall &call,
  				 const tree callee_fndecl, enum dup kind) const
  {
    tree lhs = gimple_call_lhs (&call);
    tree arg_1 = gimple_call_arg (&call, 0);
!   state_t state_arg_1 = sm_ctxt.get_state (stmt, arg_1);
    if (state_arg_1 == m_stop)
      return;
    if (!(is_constant_fd_p (state_arg_1) || is_valid_fd_p (state_arg_1)
  	|| state_arg_1 == m_start))
      {
!       check_for_open_fd (sm_ctxt, node, stmt, call, callee_fndecl,
! 			 DIRS_READ_WRITE);
        return;
      }
    switch (kind)
--- 1527,1575 ----
        switch (mode)
  	{
  	case READ_ONLY:
! 	  sm_ctxt.on_transition (lhs, m_start,
  				 m_unchecked_read_only);
  	  break;
  	case WRITE_ONLY:
! 	  sm_ctxt.on_transition (lhs, m_start,
  				 m_unchecked_write_only);
  	  break;
  	default:
! 	  sm_ctxt.on_transition (lhs, m_start,
  				 m_unchecked_read_write);
  	}
      }
    else
      {
!       sm_ctxt.warn (NULL_TREE,
  		    std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
      }
  }
  
  void
! fd_state_machine::on_creat (sm_context &sm_ctxt, const gcall &call) const
  {
    tree lhs = gimple_call_lhs (&call);
    if (lhs)
!     sm_ctxt.on_transition (lhs, m_start, m_unchecked_write_only);
    else
!     sm_ctxt.warn (NULL_TREE,
  		  std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
  }
  
  void
! fd_state_machine::check_for_dup (sm_context &sm_ctxt, const gcall &call,
  				 const tree callee_fndecl, enum dup kind) const
  {
    tree lhs = gimple_call_lhs (&call);
    tree arg_1 = gimple_call_arg (&call, 0);
!   state_t state_arg_1 = sm_ctxt.get_state (arg_1);
    if (state_arg_1 == m_stop)
      return;
    if (!(is_constant_fd_p (state_arg_1) || is_valid_fd_p (state_arg_1)
  	|| state_arg_1 == m_start))
      {
!       check_for_open_fd (sm_ctxt, call, callee_fndecl, DIRS_READ_WRITE);
        return;
      }
    switch (kind)
*************** fd_state_machine::check_for_dup (sm_cont
*** 1586,1594 ****
        if (lhs)
  	{
  	  if (is_constant_fd_p (state_arg_1) || state_arg_1 == m_start)
! 	    sm_ctxt.set_next_state (stmt, lhs, m_unchecked_read_write);
  	  else
! 	    sm_ctxt.set_next_state (stmt, lhs,
  				    valid_to_unchecked_state (state_arg_1));
  	}
        break;
--- 1578,1586 ----
        if (lhs)
  	{
  	  if (is_constant_fd_p (state_arg_1) || state_arg_1 == m_start)
! 	    sm_ctxt.set_next_state (lhs, m_unchecked_read_write);
  	  else
! 	    sm_ctxt.set_next_state (lhs,
  				    valid_to_unchecked_state (state_arg_1));
  	}
        break;
*************** fd_state_machine::check_for_dup (sm_cont
*** 1596,1602 ****
      case DUP_2:
      case DUP_3:
        tree arg_2 = gimple_call_arg (&call, 1);
!       state_t state_arg_2 = sm_ctxt.get_state (stmt, arg_2);
        tree diag_arg_2 = sm_ctxt.get_diagnostic_tree (arg_2);
        if (state_arg_2 == m_stop)
  	return;
--- 1588,1594 ----
      case DUP_2:
      case DUP_3:
        tree arg_2 = gimple_call_arg (&call, 1);
!       state_t state_arg_2 = sm_ctxt.get_state (arg_2);
        tree diag_arg_2 = sm_ctxt.get_diagnostic_tree (arg_2);
        if (state_arg_2 == m_stop)
  	return;
*************** fd_state_machine::check_for_dup (sm_cont
*** 1604,1613 ****
        if (!(is_constant_fd_p (state_arg_2) || is_valid_fd_p (state_arg_2)
  	    || state_arg_2 == m_start))
  	{
! 	  sm_ctxt.warn (
! 	      node, stmt, arg_2,
! 	      std::make_unique<fd_use_without_check> (*this, diag_arg_2,
! 						      callee_fndecl));
  	  return;
  	}
        /* dup2 returns value of its second argument on success.But, the
--- 1596,1605 ----
        if (!(is_constant_fd_p (state_arg_2) || is_valid_fd_p (state_arg_2)
  	    || state_arg_2 == m_start))
  	{
! 	  sm_ctxt.warn
! 	    (arg_2,
! 	     std::make_unique<fd_use_without_check> (*this, diag_arg_2,
! 						     callee_fndecl));
  	  return;
  	}
        /* dup2 returns value of its second argument on success.But, the
*************** fd_state_machine::check_for_dup (sm_cont
*** 1616,1624 ****
        if (lhs)
  	{
  	  if (is_constant_fd_p (state_arg_1) || state_arg_1 == m_start)
! 	    sm_ctxt.set_next_state (stmt, lhs, m_unchecked_read_write);
  	  else
! 	    sm_ctxt.set_next_state (stmt, lhs,
  				    valid_to_unchecked_state (state_arg_1));
  	}
  
--- 1608,1616 ----
        if (lhs)
  	{
  	  if (is_constant_fd_p (state_arg_1) || state_arg_1 == m_start)
! 	    sm_ctxt.set_next_state (lhs, m_unchecked_read_write);
  	  else
! 	    sm_ctxt.set_next_state (lhs,
  				    valid_to_unchecked_state (state_arg_1));
  	}
  
*************** fd_state_machine::check_for_dup (sm_cont
*** 1627,1691 ****
  }
  
  void
! fd_state_machine::on_close (sm_context &sm_ctxt, const supernode *node,
! 			    const gimple *stmt, const gcall &call) const
  {
    tree arg = gimple_call_arg (&call, 0);
!   state_t state = sm_ctxt.get_state (stmt, arg);
    tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
  
!   sm_ctxt.on_transition (node, stmt, arg, m_start, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_unchecked_read_write, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_unchecked_read_only, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_unchecked_write_only, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_valid_read_write, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_valid_read_only, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_valid_write_only, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_constant_fd, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_new_datagram_socket, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_new_stream_socket, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_new_unknown_socket, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_bound_datagram_socket, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_bound_stream_socket, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_bound_unknown_socket, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_listening_stream_socket, m_closed);
!   sm_ctxt.on_transition (node, stmt, arg, m_connected_stream_socket, m_closed);
  
    if (is_closed_fd_p (state))
      {
!       sm_ctxt.warn (node, stmt, arg,
  		    std::make_unique<fd_double_close> (*this, diag_arg));
!       sm_ctxt.set_next_state (stmt, arg, m_stop);
      }
  }
  void
! fd_state_machine::on_read (sm_context &sm_ctxt, const supernode *node,
! 			   const gimple *stmt, const gcall &call,
  			   const tree callee_fndecl) const
  {
!   check_for_open_fd (sm_ctxt, node, stmt, call, callee_fndecl, DIRS_READ);
  }
  void
! fd_state_machine::on_write (sm_context &sm_ctxt, const supernode *node,
! 			    const gimple *stmt, const gcall &call,
  			    const tree callee_fndecl) const
  {
!   check_for_open_fd (sm_ctxt, node, stmt, call, callee_fndecl, DIRS_WRITE);
  }
  
  void
  fd_state_machine::check_for_open_fd (
!     sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
      const gcall &call, const tree callee_fndecl,
      enum access_directions callee_fndecl_dir) const
  {
    tree arg = gimple_call_arg (&call, 0);
    tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!   state_t state = sm_ctxt.get_state (stmt, arg);
  
    if (is_closed_fd_p (state))
      {
!       sm_ctxt.warn (node, stmt, arg,
  		    std::make_unique<fd_use_after_close> (*this, diag_arg,
  							  callee_fndecl));
      }
--- 1619,1680 ----
  }
  
  void
! fd_state_machine::on_close (sm_context &sm_ctxt, const gcall &call) const
  {
    tree arg = gimple_call_arg (&call, 0);
!   state_t state = sm_ctxt.get_state (arg);
    tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
  
!   sm_ctxt.on_transition (arg, m_start, m_closed);
!   sm_ctxt.on_transition (arg, m_unchecked_read_write, m_closed);
!   sm_ctxt.on_transition (arg, m_unchecked_read_only, m_closed);
!   sm_ctxt.on_transition (arg, m_unchecked_write_only, m_closed);
!   sm_ctxt.on_transition (arg, m_valid_read_write, m_closed);
!   sm_ctxt.on_transition (arg, m_valid_read_only, m_closed);
!   sm_ctxt.on_transition (arg, m_valid_write_only, m_closed);
!   sm_ctxt.on_transition (arg, m_constant_fd, m_closed);
!   sm_ctxt.on_transition (arg, m_new_datagram_socket, m_closed);
!   sm_ctxt.on_transition (arg, m_new_stream_socket, m_closed);
!   sm_ctxt.on_transition (arg, m_new_unknown_socket, m_closed);
!   sm_ctxt.on_transition (arg, m_bound_datagram_socket, m_closed);
!   sm_ctxt.on_transition (arg, m_bound_stream_socket, m_closed);
!   sm_ctxt.on_transition (arg, m_bound_unknown_socket, m_closed);
!   sm_ctxt.on_transition (arg, m_listening_stream_socket, m_closed);
!   sm_ctxt.on_transition (arg, m_connected_stream_socket, m_closed);
  
    if (is_closed_fd_p (state))
      {
!       sm_ctxt.warn (arg,
  		    std::make_unique<fd_double_close> (*this, diag_arg));
!       sm_ctxt.set_next_state (arg, m_stop);
      }
  }
  void
! fd_state_machine::on_read (sm_context &sm_ctxt, const gcall &call,
  			   const tree callee_fndecl) const
  {
!   check_for_open_fd (sm_ctxt,call, callee_fndecl, DIRS_READ);
  }
  void
! fd_state_machine::on_write (sm_context &sm_ctxt, const gcall &call,
  			    const tree callee_fndecl) const
  {
!   check_for_open_fd (sm_ctxt,call, callee_fndecl, DIRS_WRITE);
  }
  
  void
  fd_state_machine::check_for_open_fd (
!     sm_context &sm_ctxt,
      const gcall &call, const tree callee_fndecl,
      enum access_directions callee_fndecl_dir) const
  {
    tree arg = gimple_call_arg (&call, 0);
    tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!   state_t state = sm_ctxt.get_state (arg);
  
    if (is_closed_fd_p (state))
      {
!       sm_ctxt.warn (arg,
  		    std::make_unique<fd_use_after_close> (*this, diag_arg,
  							  callee_fndecl));
      }
*************** fd_state_machine::check_for_open_fd (
*** 1697,1703 ****
  	  || state == m_listening_stream_socket)
  	/* Complain about fncall on socket in wrong phase.  */
  	sm_ctxt.warn
! 	  (node, stmt, arg,
  	   std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  						callee_fndecl,
  						state,
--- 1686,1692 ----
  	  || state == m_listening_stream_socket)
  	/* Complain about fncall on socket in wrong phase.  */
  	sm_ctxt.warn
! 	  (arg,
  	   std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  						callee_fndecl,
  						state,
*************** fd_state_machine::check_for_open_fd (
*** 1710,1719 ****
  		 || state == m_stop))
  	{
  	  if (!is_constant_fd_p (state))
! 	    sm_ctxt.warn (
! 		node, stmt, arg,
! 		std::make_unique<fd_use_without_check> (*this, diag_arg,
! 							callee_fndecl));
  	}
        switch (callee_fndecl_dir)
  	{
--- 1699,1708 ----
  		 || state == m_stop))
  	{
  	  if (!is_constant_fd_p (state))
! 	    sm_ctxt.warn
! 	      (arg,
! 	       std::make_unique<fd_use_without_check> (*this, diag_arg,
! 						       callee_fndecl));
  	}
        switch (callee_fndecl_dir)
  	{
*************** fd_state_machine::check_for_open_fd (
*** 1723,1729 ****
  	  if (is_writeonly_fd_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (node, stmt, arg,
  			    std::make_unique<fd_access_mode_mismatch>
  			      (*this, diag_arg, DIRS_WRITE, callee_fndecl));
  	    }
--- 1712,1718 ----
  	  if (is_writeonly_fd_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (arg,
  			    std::make_unique<fd_access_mode_mismatch>
  			      (*this, diag_arg, DIRS_WRITE, callee_fndecl));
  	    }
*************** fd_state_machine::check_for_open_fd (
*** 1734,1740 ****
  	  if (is_readonly_fd_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (node, stmt, arg,
  			    std::make_unique<fd_access_mode_mismatch>
  			      (*this, diag_arg, DIRS_READ, callee_fndecl));
  	    }
--- 1723,1729 ----
  	  if (is_readonly_fd_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (arg,
  			    std::make_unique<fd_access_mode_mismatch>
  			      (*this, diag_arg, DIRS_READ, callee_fndecl));
  	    }
*************** bool
*** 1781,1792 ****
  fd_state_machine::on_socket (const call_details &cd,
  			     bool successful,
  			     sm_context &sm_ctxt,
! 			     const extrinsic_state &ext_state) const
  {
    const gcall &call = cd.get_call_stmt ();
-   engine *eng = ext_state.get_engine ();
-   const supergraph *sg = eng->get_supergraph ();
-   const supernode *node = sg->get_supernode_for_stmt (&call);
    region_model *model = cd.get_model ();
  
    if (successful)
--- 1770,1778 ----
  fd_state_machine::on_socket (const call_details &cd,
  			     bool successful,
  			     sm_context &sm_ctxt,
! 			     const extrinsic_state &) const
  {
    const gcall &call = cd.get_call_stmt ();
    region_model *model = cd.get_model ();
  
    if (successful)
*************** fd_state_machine::on_socket (const call_
*** 1806,1816 ****
  	  const svalue *socket_type_sval = cd.get_arg_svalue (1);
  	  state_machine::state_t new_state
  	    = get_state_for_socket_type (socket_type_sval);
! 	  sm_ctxt.on_transition (node, &call, new_fd, m_start, new_state);
  	  model->set_value (cd.get_lhs_region (), new_fd, cd.get_ctxt ());
  	}
        else
! 	sm_ctxt.warn (node, &call, NULL_TREE,
  		      std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
      }
    else
--- 1792,1802 ----
  	  const svalue *socket_type_sval = cd.get_arg_svalue (1);
  	  state_machine::state_t new_state
  	    = get_state_for_socket_type (socket_type_sval);
! 	  sm_ctxt.on_transition (new_fd, m_start, new_state);
  	  model->set_value (cd.get_lhs_region (), new_fd, cd.get_ctxt ());
  	}
        else
! 	sm_ctxt.warn (NULL_TREE,
  		      std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
      }
    else
*************** fd_state_machine::check_for_socket_fd (c
*** 1837,1853 ****
  				       bool successful,
  				       sm_context &sm_ctxt,
  				       const svalue *fd_sval,
- 				       const supernode *node,
  				       state_t old_state,
  				       bool *complained) const
  {
-   const gcall &call = cd.get_call_stmt ();
- 
    if (is_closed_fd_p (old_state))
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(node, &call, fd_sval,
  	 std::make_unique<fd_use_after_close> (*this, diag_arg,
  					       cd.get_fndecl_for_call ()));
        if (complained)
--- 1823,1836 ----
  				       bool successful,
  				       sm_context &sm_ctxt,
  				       const svalue *fd_sval,
  				       state_t old_state,
  				       bool *complained) const
  {
    if (is_closed_fd_p (old_state))
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(fd_sval,
  	 std::make_unique<fd_use_after_close> (*this, diag_arg,
  					       cd.get_fndecl_for_call ()));
        if (complained)
*************** fd_state_machine::check_for_socket_fd (c
*** 1860,1866 ****
        /* Complain about non-socket.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(node, &call, fd_sval,
  	 std::make_unique<fd_type_mismatch> (*this, diag_arg,
  					     cd.get_fndecl_for_call (),
  					     old_state,
--- 1843,1849 ----
        /* Complain about non-socket.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(fd_sval,
  	 std::make_unique<fd_type_mismatch> (*this, diag_arg,
  					     cd.get_fndecl_for_call (),
  					     old_state,
*************** fd_state_machine::check_for_socket_fd (c
*** 1874,1880 ****
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(node, &call, fd_sval,
  	 std::make_unique<fd_use_without_check> (*this, diag_arg,
  						 cd.get_fndecl_for_call ()));
        if (complained)
--- 1857,1863 ----
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(fd_sval,
  	 std::make_unique<fd_use_without_check> (*this, diag_arg,
  						 cd.get_fndecl_for_call ()));
        if (complained)
*************** fd_state_machine::check_for_new_socket_f
*** 1900,1906 ****
  					   bool successful,
  					   sm_context &sm_ctxt,
  					   const svalue *fd_sval,
- 					   const supernode *node,
  					   state_t old_state,
  					   enum expected_phase expected_phase)
    const
--- 1883,1888 ----
*************** fd_state_machine::check_for_new_socket_f
*** 1924,1930 ****
    model->get_store_value (sized_address_reg, cd.get_ctxt ());
  
    if (!check_for_socket_fd (cd, successful, sm_ctxt,
! 			    fd_sval, node, old_state, &complained))
      return false;
    else if (!complained
  	   && !(old_state == m_new_stream_socket
--- 1906,1912 ----
    model->get_store_value (sized_address_reg, cd.get_ctxt ());
  
    if (!check_for_socket_fd (cd, successful, sm_ctxt,
! 			    fd_sval, old_state, &complained))
      return false;
    else if (!complained
  	   && !(old_state == m_new_stream_socket
*************** fd_state_machine::check_for_new_socket_f
*** 1937,1943 ****
        /* Complain about "bind" or "connect" in wrong phase.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(node, &cd.get_call_stmt (), fd_sval,
  	 std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  					      cd.get_fndecl_for_call (),
  					      old_state,
--- 1919,1925 ----
        /* Complain about "bind" or "connect" in wrong phase.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        sm_ctxt.warn
! 	(fd_sval,
  	 std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  					      cd.get_fndecl_for_call (),
  					      old_state,
*************** fd_state_machine::check_for_new_socket_f
*** 1949,1956 ****
      {
        /* If we were in the start state, assume we had a new socket.  */
        if (old_state == m_start)
! 	sm_ctxt.set_next_state (&cd.get_call_stmt (), fd_sval,
! 				m_new_unknown_socket);
      }
  
    /* Passing NULL as the address will lead to failure.  */
--- 1931,1937 ----
      {
        /* If we were in the start state, assume we had a new socket.  */
        if (old_state == m_start)
! 	sm_ctxt.set_next_state (fd_sval, m_new_unknown_socket);
      }
  
    /* Passing NULL as the address will lead to failure.  */
*************** bool
*** 1969,1986 ****
  fd_state_machine::on_bind (const call_details &cd,
  			   bool successful,
  			   sm_context &sm_ctxt,
! 			   const extrinsic_state &ext_state) const
  {
-   const gcall &call = cd.get_call_stmt ();
-   engine *eng = ext_state.get_engine ();
-   const supergraph *sg = eng->get_supergraph ();
-   const supernode *node = sg->get_supernode_for_stmt (&call);
    const svalue *fd_sval = cd.get_arg_svalue (0);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (&call, fd_sval);
  
    if (!check_for_new_socket_fd (cd, successful, sm_ctxt,
! 				fd_sval, node, old_state,
  				EXPECTED_PHASE_CAN_BIND))
      return false;
  
--- 1950,1963 ----
  fd_state_machine::on_bind (const call_details &cd,
  			   bool successful,
  			   sm_context &sm_ctxt,
! 			   const extrinsic_state &) const
  {
    const svalue *fd_sval = cd.get_arg_svalue (0);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (fd_sval);
  
    if (!check_for_new_socket_fd (cd, successful, sm_ctxt,
! 				fd_sval, old_state,
  				EXPECTED_PHASE_CAN_BIND))
      return false;
  
*************** fd_state_machine::on_bind (const call_de
*** 2000,2006 ****
  	next_state = m_stop;
        else
  	gcc_unreachable ();
!       sm_ctxt.set_next_state (&cd.get_call_stmt (), fd_sval, next_state);
        model->update_for_zero_return (cd, true);
      }
    else
--- 1977,1983 ----
  	next_state = m_stop;
        else
  	gcc_unreachable ();
!       sm_ctxt.set_next_state (fd_sval, next_state);
        model->update_for_zero_return (cd, true);
      }
    else
*************** bool
*** 2021,2038 ****
  fd_state_machine::on_listen (const call_details &cd,
  			     bool successful,
  			     sm_context &sm_ctxt,
! 			     const extrinsic_state &ext_state) const
  {
-   const gcall &call = cd.get_call_stmt ();
-   engine *eng = ext_state.get_engine ();
-   const supergraph *sg = eng->get_supergraph ();
-   const supernode *node = sg->get_supernode_for_stmt (&cd.get_call_stmt ());
    const svalue *fd_sval = cd.get_arg_svalue (0);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (&call, fd_sval);
  
    /* We expect a stream socket that's had "bind" called on it.  */
!   if (!check_for_socket_fd (cd, successful, sm_ctxt, fd_sval, node, old_state))
      return false;
    if (!(old_state == m_start
  	|| old_state == m_constant_fd
--- 1998,2011 ----
  fd_state_machine::on_listen (const call_details &cd,
  			     bool successful,
  			     sm_context &sm_ctxt,
! 			     const extrinsic_state &) const
  {
    const svalue *fd_sval = cd.get_arg_svalue (0);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (fd_sval);
  
    /* We expect a stream socket that's had "bind" called on it.  */
!   if (!check_for_socket_fd (cd, successful, sm_ctxt, fd_sval, old_state))
      return false;
    if (!(old_state == m_start
  	|| old_state == m_constant_fd
*************** fd_state_machine::on_listen (const call_
*** 2047,2060 ****
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        if (is_stream_socket_fd_p (old_state))
  	sm_ctxt.warn
! 	  (node, &call, fd_sval,
  	   std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  						cd.get_fndecl_for_call (),
  						old_state,
  						EXPECTED_PHASE_CAN_LISTEN));
        else
  	sm_ctxt.warn
! 	  (node, &call, fd_sval,
  	   std::make_unique<fd_type_mismatch> (*this, diag_arg,
  					       cd.get_fndecl_for_call (),
  					       old_state,
--- 2020,2033 ----
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        if (is_stream_socket_fd_p (old_state))
  	sm_ctxt.warn
! 	  (fd_sval,
  	   std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  						cd.get_fndecl_for_call (),
  						old_state,
  						EXPECTED_PHASE_CAN_LISTEN));
        else
  	sm_ctxt.warn
! 	  (fd_sval,
  	   std::make_unique<fd_type_mismatch> (*this, diag_arg,
  					       cd.get_fndecl_for_call (),
  					       old_state,
*************** fd_state_machine::on_listen (const call_
*** 2066,2073 ****
    if (successful)
      {
        model->update_for_zero_return (cd, true);
!       sm_ctxt.set_next_state (&cd.get_call_stmt (), fd_sval,
! 			      m_listening_stream_socket);
      }
    else
      {
--- 2039,2045 ----
    if (successful)
      {
        model->update_for_zero_return (cd, true);
!       sm_ctxt.set_next_state (fd_sval, m_listening_stream_socket);
      }
    else
      {
*************** fd_state_machine::on_listen (const call_
*** 2075,2082 ****
        model->update_for_int_cst_return (cd, -1, true);
        model->set_errno (cd);
        if (old_state == m_start)
! 	sm_ctxt.set_next_state (&cd.get_call_stmt (), fd_sval,
! 				m_bound_stream_socket);
      }
  
    return true;
--- 2047,2053 ----
        model->update_for_int_cst_return (cd, -1, true);
        model->set_errno (cd);
        if (old_state == m_start)
! 	sm_ctxt.set_next_state (fd_sval, m_bound_stream_socket);
      }
  
    return true;
*************** bool
*** 2090,2106 ****
  fd_state_machine::on_accept (const call_details &cd,
  			     bool successful,
  			     sm_context &sm_ctxt,
! 			     const extrinsic_state &ext_state) const
  {
    const gcall &call = cd.get_call_stmt ();
-   engine *eng = ext_state.get_engine ();
-   const supergraph *sg = eng->get_supergraph ();
-   const supernode *node = sg->get_supernode_for_stmt (&call);
    const svalue *fd_sval = cd.get_arg_svalue (0);
    const svalue *address_sval = cd.get_arg_svalue (1);
    const svalue *len_ptr_sval = cd.get_arg_svalue (2);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (&call, fd_sval);
  
    if (!address_sval->all_zeroes_p ())
      {
--- 2061,2074 ----
  fd_state_machine::on_accept (const call_details &cd,
  			     bool successful,
  			     sm_context &sm_ctxt,
! 			     const extrinsic_state &) const
  {
    const gcall &call = cd.get_call_stmt ();
    const svalue *fd_sval = cd.get_arg_svalue (0);
    const svalue *address_sval = cd.get_arg_svalue (1);
    const svalue *len_ptr_sval = cd.get_arg_svalue (2);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (fd_sval);
  
    if (!address_sval->all_zeroes_p ())
      {
*************** fd_state_machine::on_accept (const call_
*** 2150,2163 ****
      }
  
    /* We expect a stream socket in the "listening" state.  */
!   if (!check_for_socket_fd (cd, successful, sm_ctxt, fd_sval, node, old_state))
      return false;
  
    if (old_state == m_start || old_state == m_constant_fd)
      /* If we were in the start state (or a constant), assume we had the
         expected state.  */
!     sm_ctxt.set_next_state (&cd.get_call_stmt (), fd_sval,
! 			    m_listening_stream_socket);
    else if (old_state == m_stop)
      {
        /* No further complaints.  */
--- 2118,2130 ----
      }
  
    /* We expect a stream socket in the "listening" state.  */
!   if (!check_for_socket_fd (cd, successful, sm_ctxt, fd_sval, old_state))
      return false;
  
    if (old_state == m_start || old_state == m_constant_fd)
      /* If we were in the start state (or a constant), assume we had the
         expected state.  */
!     sm_ctxt.set_next_state (fd_sval, m_listening_stream_socket);
    else if (old_state == m_stop)
      {
        /* No further complaints.  */
*************** fd_state_machine::on_accept (const call_
*** 2168,2181 ****
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        if (is_stream_socket_fd_p (old_state))
  	sm_ctxt.warn
! 	  (node, &call, fd_sval,
  	   std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  						cd.get_fndecl_for_call (),
  						old_state,
  						EXPECTED_PHASE_CAN_ACCEPT));
        else
  	sm_ctxt.warn
! 	  (node, &call, fd_sval,
  	   std::make_unique<fd_type_mismatch> (*this, diag_arg,
  					       cd.get_fndecl_for_call (),
  					       old_state,
--- 2135,2148 ----
        tree diag_arg = sm_ctxt.get_diagnostic_tree (fd_sval);
        if (is_stream_socket_fd_p (old_state))
  	sm_ctxt.warn
! 	  (fd_sval,
  	   std::make_unique<fd_phase_mismatch> (*this, diag_arg,
  						cd.get_fndecl_for_call (),
  						old_state,
  						EXPECTED_PHASE_CAN_ACCEPT));
        else
  	sm_ctxt.warn
! 	  (fd_sval,
  	   std::make_unique<fd_type_mismatch> (*this, diag_arg,
  					       cd.get_fndecl_for_call (),
  					       old_state,
*************** fd_state_machine::on_accept (const call_
*** 2198,2209 ****
  						  p);
  	  if (!add_constraint_ge_zero (model, new_fd, cd.get_ctxt ()))
  	    return false;
! 	  sm_ctxt.on_transition (node, &call, new_fd,
! 				 m_start, m_connected_stream_socket);
  	  model->set_value (cd.get_lhs_region (), new_fd, cd.get_ctxt ());
  	}
        else
! 	sm_ctxt.warn (node, &call, NULL_TREE,
  		      std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
      }
    else
--- 2165,2175 ----
  						  p);
  	  if (!add_constraint_ge_zero (model, new_fd, cd.get_ctxt ()))
  	    return false;
! 	  sm_ctxt.on_transition (new_fd, m_start, m_connected_stream_socket);
  	  model->set_value (cd.get_lhs_region (), new_fd, cd.get_ctxt ());
  	}
        else
! 	sm_ctxt.warn (NULL_TREE,
  		      std::make_unique<fd_leak> (*this, NULL_TREE, nullptr));
      }
    else
*************** bool
*** 2224,2241 ****
  fd_state_machine::on_connect (const call_details &cd,
  			      bool successful,
  			      sm_context &sm_ctxt,
! 			      const extrinsic_state &ext_state) const
  {
-   const gcall &call = cd.get_call_stmt ();
-   engine *eng = ext_state.get_engine ();
-   const supergraph *sg = eng->get_supergraph ();
-   const supernode *node = sg->get_supernode_for_stmt (&call);
    const svalue *fd_sval = cd.get_arg_svalue (0);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (&call, fd_sval);
  
    if (!check_for_new_socket_fd (cd, successful, sm_ctxt,
! 				fd_sval, node, old_state,
  				EXPECTED_PHASE_CAN_CONNECT))
      return false;
  
--- 2190,2203 ----
  fd_state_machine::on_connect (const call_details &cd,
  			      bool successful,
  			      sm_context &sm_ctxt,
! 			      const extrinsic_state &) const
  {
    const svalue *fd_sval = cd.get_arg_svalue (0);
    region_model *model = cd.get_model ();
!   state_t old_state = sm_ctxt.get_state (fd_sval);
  
    if (!check_for_new_socket_fd (cd, successful, sm_ctxt,
! 				fd_sval, old_state,
  				EXPECTED_PHASE_CAN_CONNECT))
      return false;
  
*************** fd_state_machine::on_connect (const call
*** 2258,2264 ****
  	next_state = m_stop;
        else
  	gcc_unreachable ();
!       sm_ctxt.set_next_state (&cd.get_call_stmt (), fd_sval, next_state);
      }
    else
      {
--- 2220,2226 ----
  	next_state = m_stop;
        else
  	gcc_unreachable ();
!       sm_ctxt.set_next_state (fd_sval, next_state);
      }
    else
      {
*************** fd_state_machine::on_connect (const call
*** 2274,2282 ****
  }
  
  void
! fd_state_machine::on_condition (sm_context &sm_ctxt, const supernode *node,
! 				const gimple *stmt, const svalue *lhs,
! 				enum tree_code op, const svalue *rhs) const
  {
    if (tree cst = rhs->maybe_get_constant ())
      {
--- 2236,2245 ----
  }
  
  void
! fd_state_machine::on_condition (sm_context &sm_ctxt,
! 				const svalue *lhs,
! 				enum tree_code op,
! 				const svalue *rhs) const
  {
    if (tree cst = rhs->maybe_get_constant ())
      {
*************** fd_state_machine::on_condition (sm_conte
*** 2286,2296 ****
  	  if (val == -1)
  	    {
  	      if (op == NE_EXPR)
! 		make_valid_transitions_on_condition (sm_ctxt, node, stmt, lhs);
  
  	      else if (op == EQ_EXPR)
! 		make_invalid_transitions_on_condition (sm_ctxt, node, stmt,
! 						       lhs);
  	    }
  	}
      }
--- 2249,2258 ----
  	  if (val == -1)
  	    {
  	      if (op == NE_EXPR)
! 		make_valid_transitions_on_condition (sm_ctxt, lhs);
  
  	      else if (op == EQ_EXPR)
! 		make_invalid_transitions_on_condition (sm_ctxt, lhs);
  	    }
  	}
      }
*************** fd_state_machine::on_condition (sm_conte
*** 2298,2331 ****
    if (rhs->all_zeroes_p ())
      {
        if (op == GE_EXPR)
! 	make_valid_transitions_on_condition (sm_ctxt, node, stmt, lhs);
        else if (op == LT_EXPR)
! 	make_invalid_transitions_on_condition (sm_ctxt, node, stmt, lhs);
      }
  }
  
  void
  fd_state_machine::make_valid_transitions_on_condition (sm_context &sm_ctxt,
- 						       const supernode *node,
- 						       const gimple *stmt,
  						       const svalue *lhs) const
  {
!   sm_ctxt.on_transition (node, stmt, lhs, m_unchecked_read_write,
  			 m_valid_read_write);
!   sm_ctxt.on_transition (node, stmt, lhs, m_unchecked_read_only,
  			 m_valid_read_only);
!   sm_ctxt.on_transition (node, stmt, lhs, m_unchecked_write_only,
  			 m_valid_write_only);
  }
  
  void
! fd_state_machine::make_invalid_transitions_on_condition (
!     sm_context &sm_ctxt, const supernode *node, const gimple *stmt,
!     const svalue *lhs) const
  {
!   sm_ctxt.on_transition (node, stmt, lhs, m_unchecked_read_write, m_invalid);
!   sm_ctxt.on_transition (node, stmt, lhs, m_unchecked_read_only, m_invalid);
!   sm_ctxt.on_transition (node, stmt, lhs, m_unchecked_write_only, m_invalid);
  }
  
  bool
--- 2260,2291 ----
    if (rhs->all_zeroes_p ())
      {
        if (op == GE_EXPR)
! 	make_valid_transitions_on_condition (sm_ctxt, lhs);
        else if (op == LT_EXPR)
! 	make_invalid_transitions_on_condition (sm_ctxt, lhs);
      }
  }
  
  void
  fd_state_machine::make_valid_transitions_on_condition (sm_context &sm_ctxt,
  						       const svalue *lhs) const
  {
!   sm_ctxt.on_transition (lhs, m_unchecked_read_write,
  			 m_valid_read_write);
!   sm_ctxt.on_transition (lhs, m_unchecked_read_only,
  			 m_valid_read_only);
!   sm_ctxt.on_transition (lhs, m_unchecked_write_only,
  			 m_valid_write_only);
  }
  
  void
! fd_state_machine::
! make_invalid_transitions_on_condition (sm_context &sm_ctxt,
! 				       const svalue *lhs) const
  {
!   sm_ctxt.on_transition (lhs, m_unchecked_read_write, m_invalid);
!   sm_ctxt.on_transition (lhs, m_unchecked_read_only, m_invalid);
!   sm_ctxt.on_transition (lhs, m_unchecked_write_only, m_invalid);
  }
  
  bool
*************** class kf_isatty : public known_function
*** 2715,2722 ****
  	    return true;
  
  	  const svalue *fd_sval = cd.get_arg_svalue (0);
! 	  state_machine::state_t old_state
! 	    = sm_ctxt->get_state (&cd.get_call_stmt (), fd_sval);
  
  	  if (fd_sm->is_closed_fd_p (old_state)
  	      || old_state == fd_sm->m_invalid)
--- 2675,2681 ----
  	    return true;
  
  	  const svalue *fd_sval = cd.get_arg_svalue (0);
! 	  state_machine::state_t old_state = sm_ctxt->get_state (fd_sval);
  
  	  if (fd_sm->is_closed_fd_p (old_state)
  	      || old_state == fd_sm->m_invalid)
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm-file.cc gcc-16-20251214/gcc/analyzer/sm-file.cc
*** gcc-16-20251207/gcc/analyzer/sm-file.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm-file.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 62,73 ****
    }
  
    bool on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    void on_condition (sm_context &sm_ctxt,
- 		     const supernode *node,
- 		     const gimple *stmt,
  		     const svalue *lhs,
  		     enum tree_code op,
  		     const svalue *rhs) const final override;
--- 62,70 ----
*************** is_file_using_fn_p (tree fndecl)
*** 408,414 ****
  
  bool
  fileptr_state_machine::on_stmt (sm_context &sm_ctxt,
- 				const supernode *node,
  				const gimple *stmt) const
  {
    if (const gcall *call = dyn_cast <const gcall *> (stmt))
--- 405,410 ----
*************** fileptr_state_machine::on_stmt (sm_conte
*** 418,424 ****
  	  {
  	    tree lhs = gimple_call_lhs (call);
  	    if (lhs)
! 	      sm_ctxt.on_transition (node, stmt, lhs, m_start, m_unchecked);
  	    else
  	      {
  		/* TODO: report leak.  */
--- 414,420 ----
  	  {
  	    tree lhs = gimple_call_lhs (call);
  	    if (lhs)
! 	      sm_ctxt.on_transition (lhs, m_start, m_unchecked);
  	    else
  	      {
  		/* TODO: report leak.  */
*************** fileptr_state_machine::on_stmt (sm_conte
*** 430,450 ****
  	  {
  	    tree arg = gimple_call_arg (call, 0);
  
! 	    sm_ctxt.on_transition (node, stmt, arg, m_start, m_closed);
  
  	    // TODO: is it safe to call fclose (NULL) ?
! 	    sm_ctxt.on_transition (node, stmt, arg, m_unchecked, m_closed);
! 	    sm_ctxt.on_transition (node, stmt, arg, m_null, m_closed);
  
! 	    sm_ctxt.on_transition (node, stmt , arg, m_nonnull, m_closed);
  
! 	    if (sm_ctxt.get_state (stmt, arg) == m_closed)
  	      {
  		tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 		sm_ctxt.warn (node, stmt, arg,
  			      std::make_unique<double_fclose> (*this,
  							       diag_arg));
! 		sm_ctxt.set_next_state (stmt, arg, m_stop);
  	      }
  	    return true;
  	  }
--- 426,446 ----
  	  {
  	    tree arg = gimple_call_arg (call, 0);
  
! 	    sm_ctxt.on_transition (arg, m_start, m_closed);
  
  	    // TODO: is it safe to call fclose (NULL) ?
! 	    sm_ctxt.on_transition (arg, m_unchecked, m_closed);
! 	    sm_ctxt.on_transition (arg, m_null, m_closed);
  
! 	    sm_ctxt.on_transition (arg, m_nonnull, m_closed);
  
! 	    if (sm_ctxt.get_state (arg) == m_closed)
  	      {
  		tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 		sm_ctxt.warn (arg,
  			      std::make_unique<double_fclose> (*this,
  							       diag_arg));
! 		sm_ctxt.set_next_state (arg, m_stop);
  	      }
  	    return true;
  	  }
*************** fileptr_state_machine::on_stmt (sm_conte
*** 466,473 ****
  
  void
  fileptr_state_machine::on_condition (sm_context &sm_ctxt,
- 				     const supernode *node,
- 				     const gimple *stmt,
  				     const svalue *lhs,
  				     enum tree_code op,
  				     const svalue *rhs) const
--- 462,467 ----
*************** fileptr_state_machine::on_condition (sm_
*** 485,498 ****
    if (op == NE_EXPR)
      {
        log ("got 'ARG != 0' match");
!       sm_ctxt.on_transition (node, stmt,
! 			     lhs, m_unchecked, m_nonnull);
      }
    else if (op == EQ_EXPR)
      {
        log ("got 'ARG == 0' match");
!       sm_ctxt.on_transition (node, stmt,
! 			     lhs, m_unchecked, m_null);
      }
  }
  
--- 479,490 ----
    if (op == NE_EXPR)
      {
        log ("got 'ARG != 0' match");
!       sm_ctxt.on_transition (lhs, m_unchecked, m_nonnull);
      }
    else if (op == EQ_EXPR)
      {
        log ("got 'ARG == 0' match");
!       sm_ctxt.on_transition (lhs, m_unchecked, m_null);
      }
  }
  
*************** register_known_file_functions (known_fun
*** 687,698 ****
--- 679,695 ----
    kfm.add (BUILT_IN_VPRINTF, std::make_unique<kf_stdio_output_fn> ());
  
    kfm.add ("ferror", std::make_unique<kf_ferror> ());
+   kfm.add ("ferror_unlocked", std::make_unique<kf_ferror> ());
    kfm.add ("fgets", std::make_unique<kf_fgets> ());
    kfm.add ("fgets_unlocked", std::make_unique<kf_fgets> ()); // non-standard
    kfm.add ("fileno", std::make_unique<kf_fileno> ());
+   kfm.add ("fileno_unlocked", std::make_unique<kf_fileno> ());
    kfm.add ("fread", std::make_unique<kf_fread> ());
+   kfm.add ("fread_unlocked", std::make_unique<kf_fread> ());
    kfm.add ("getc", std::make_unique<kf_getc> ());
+   kfm.add ("getc_unlocked", std::make_unique<kf_getc> ());
    kfm.add ("getchar", std::make_unique<kf_getchar> ());
+   kfm.add ("getchar_unlocked", std::make_unique<kf_getchar> ());
  
    /* Some C++ implementations use the std:: copies of these functions
       from <cstdio> for <stdio.h>, so we must match against these too.  */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm-malloc.cc gcc-16-20251214/gcc/analyzer/sm-malloc.cc
*** gcc-16-20251207/gcc/analyzer/sm-malloc.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm-malloc.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 386,402 ****
    }
  
    bool on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    void on_phi (sm_context &sm_ctxt,
- 	       const supernode *node,
  	       const gphi *phi,
  	       tree rhs) const final override;
  
    void on_condition (sm_context &sm_ctxt,
- 		     const supernode *node,
- 		     const gimple *stmt,
  		     const svalue *lhs,
  		     enum tree_code op,
  		     const svalue *rhs) const final override;
--- 386,402 ----
    }
  
    bool on_stmt (sm_context &sm_ctxt,
  		const gimple *stmt) const final override;
  
    void on_phi (sm_context &sm_ctxt,
  	       const gphi *phi,
  	       tree rhs) const final override;
  
+   void
+   check_call_preconditions (sm_context &sm_ctxt,
+ 			    const call_details &cd) const final override;
+ 
    void on_condition (sm_context &sm_ctxt,
  		     const svalue *lhs,
  		     enum tree_code op,
  		     const svalue *rhs) const final override;
*************** public:
*** 421,428 ****
    static bool unaffected_by_call_p (tree fndecl);
  
    void maybe_assume_non_null (sm_context &sm_ctxt,
! 			      tree ptr,
! 			      const gimple *stmt) const;
  
    void on_realloc_with_move (region_model *model,
  			     sm_state_map *smap,
--- 421,427 ----
    static bool unaffected_by_call_p (tree fndecl);
  
    void maybe_assume_non_null (sm_context &sm_ctxt,
! 			      tree ptr) const;
  
    void on_realloc_with_move (region_model *model,
  			     sm_state_map *smap,
*************** private:
*** 476,483 ****
  
    void
    maybe_complain_about_deref_before_check (sm_context &sm_ctxt,
- 					   const supernode *node,
- 					   const gimple *stmt,
  					   const assumed_non_null_state *,
  					   tree ptr) const;
  
--- 475,480 ----
*************** private:
*** 486,509 ****
  			  const deallocator_set *deallocators,
  			  bool returns_nonnull = false) const;
    void handle_free_of_non_heap (sm_context &sm_ctxt,
- 				const supernode *node,
  				const gcall &call,
  				tree arg,
  				const deallocator *d) const;
    void on_deallocator_call (sm_context &sm_ctxt,
- 			    const supernode *node,
  			    const gcall &call,
  			    const deallocator *d,
  			    unsigned argno) const;
    void on_realloc_call (sm_context &sm_ctxt,
- 			const supernode *node,
  			const gcall &call) const;
    void on_zero_assignment (sm_context &sm_ctxt,
- 			   const gimple *stmt,
  			   tree lhs) const;
    void handle_nonnull (sm_context &sm_ctx,
- 		       const supernode *node,
- 		       const gimple *stmt,
  		       tree fndecl,
  		       tree arg,
  		       unsigned i) const;
--- 483,500 ----
*************** private:
*** 1782,1794 ****
      const supernode *snode = point.get_supernode ();
      if (!snode)
        return false;
!     for (auto &in_edge : snode->m_preds)
!       {
! 	if (const cfg_superedge *cfg_in_edge
! 	      = in_edge->dyn_cast_cfg_superedge ())
! 	  if (cfg_in_edge->back_edge_p ())
! 	    return true;
!       }
      return false;
    }
  
--- 1773,1781 ----
      const supernode *snode = point.get_supernode ();
      if (!snode)
        return false;
!     for (auto in_edge : snode->m_bb->preds)
!       if (in_edge->flags & EDGE_DFS_BACK)
! 	return true;
      return false;
    }
  
*************** known_allocator_p (const_tree fndecl, co
*** 2043,2050 ****
  
  void
  malloc_state_machine::maybe_assume_non_null (sm_context &sm_ctxt,
! 					     tree ptr,
! 					     const gimple *stmt) const
  {
    const region_model *old_model = sm_ctxt.get_old_region_model ();
    if (!old_model)
--- 2030,2036 ----
  
  void
  malloc_state_machine::maybe_assume_non_null (sm_context &sm_ctxt,
! 					     tree ptr) const
  {
    const region_model *old_model = sm_ctxt.get_old_region_model ();
    if (!old_model)
*************** malloc_state_machine::maybe_assume_non_n
*** 2061,2067 ****
        state_t next_state
  	= mut_this->get_or_create_assumed_non_null_state_for_frame
  	(old_model->get_current_frame ());
!       sm_ctxt.set_next_state (stmt, ptr, next_state);
      }
  }
  
--- 2047,2053 ----
        state_t next_state
  	= mut_this->get_or_create_assumed_non_null_state_for_frame
  	(old_model->get_current_frame ());
!       sm_ctxt.set_next_state (ptr, next_state);
      }
  }
  
*************** malloc_state_machine::maybe_assume_non_n
*** 2071,2083 ****
  
  void
  malloc_state_machine::handle_nonnull (sm_context &sm_ctxt,
- 				      const supernode *node,
- 				      const gimple *stmt,
  				      tree fndecl,
  				      tree arg,
  				      unsigned i) const
  {
!   state_t state = sm_ctxt.get_state (stmt, arg);
    /* Can't use a switch as the states are non-const.  */
    /* Do use the fndecl that caused the warning so that the
       misused attributes are printed and the user not confused.  */
--- 2057,2067 ----
  
  void
  malloc_state_machine::handle_nonnull (sm_context &sm_ctxt,
  				      tree fndecl,
  				      tree arg,
  				      unsigned i) const
  {
!   state_t state = sm_ctxt.get_state (arg);
    /* Can't use a switch as the states are non-const.  */
    /* Do use the fndecl that caused the warning so that the
       misused attributes are printed and the user not confused.  */
*************** malloc_state_machine::handle_nonnull (sm
*** 2085,2113 ****
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
        sm_ctxt.warn
! 	(node, stmt, arg,
  	 std::make_unique<possible_null_arg> (*this, diag_arg, fndecl,
  					      i));
        const allocation_state *astate
  	= as_a_allocation_state (state);
!       sm_ctxt.set_next_state (stmt, arg, astate->get_nonnull ());
      }
    else if (state == m_null)
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (node, stmt, arg,
  		    std::make_unique<null_arg> (*this, diag_arg, fndecl, i));
!       sm_ctxt.set_next_state (stmt, arg, m_stop);
      }
    else if (state == m_start)
!     maybe_assume_non_null (sm_ctxt, arg, stmt);
  }
  
  /* Implementation of state_machine::on_stmt vfunc for malloc_state_machine.  */
  
  bool
  malloc_state_machine::on_stmt (sm_context &sm_ctxt,
- 			       const supernode *node,
  			       const gimple *stmt) const
  {
    if (const gcall *call_stmt = dyn_cast <const gcall *> (stmt))
--- 2069,2096 ----
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
        sm_ctxt.warn
! 	(arg,
  	 std::make_unique<possible_null_arg> (*this, diag_arg, fndecl,
  					      i));
        const allocation_state *astate
  	= as_a_allocation_state (state);
!       sm_ctxt.set_next_state (arg, astate->get_nonnull ());
      }
    else if (state == m_null)
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (arg,
  		    std::make_unique<null_arg> (*this, diag_arg, fndecl, i));
!       sm_ctxt.set_next_state (arg, m_stop);
      }
    else if (state == m_start)
!     maybe_assume_non_null (sm_ctxt, arg);
  }
  
  /* Implementation of state_machine::on_stmt vfunc for malloc_state_machine.  */
  
  bool
  malloc_state_machine::on_stmt (sm_context &sm_ctxt,
  			       const gimple *stmt) const
  {
    if (const gcall *call_stmt = dyn_cast <const gcall *> (stmt))
*************** malloc_state_machine::on_stmt (sm_contex
*** 2136,2148 ****
  	if (is_named_call_p (callee_fndecl, "operator delete", call, 1)
  	    || is_named_call_p (callee_fndecl, "operator delete", call, 2))
  	  {
! 	    on_deallocator_call (sm_ctxt, node, call,
  				 &m_scalar_delete.m_deallocator, 0);
  	    return true;
  	  }
  	else if (is_named_call_p (callee_fndecl, "operator delete []", call, 1))
  	  {
! 	    on_deallocator_call (sm_ctxt, node, call,
  				 &m_vector_delete.m_deallocator, 0);
  	    return true;
  	  }
--- 2119,2131 ----
  	if (is_named_call_p (callee_fndecl, "operator delete", call, 1)
  	    || is_named_call_p (callee_fndecl, "operator delete", call, 2))
  	  {
! 	    on_deallocator_call (sm_ctxt, call,
  				 &m_scalar_delete.m_deallocator, 0);
  	    return true;
  	  }
  	else if (is_named_call_p (callee_fndecl, "operator delete []", call, 1))
  	  {
! 	    on_deallocator_call (sm_ctxt, call,
  				 &m_vector_delete.m_deallocator, 0);
  	    return true;
  	  }
*************** malloc_state_machine::on_stmt (sm_contex
*** 2152,2158 ****
  	  {
  	    tree lhs = gimple_call_lhs (&call);
  	    if (lhs)
! 	      sm_ctxt.on_transition (node, stmt, lhs, m_start, m_non_heap);
  	    return true;
  	  }
  
--- 2135,2141 ----
  	  {
  	    tree lhs = gimple_call_lhs (&call);
  	    if (lhs)
! 	      sm_ctxt.on_transition (lhs, m_start, m_non_heap);
  	    return true;
  	  }
  
*************** malloc_state_machine::on_stmt (sm_contex
*** 2160,2166 ****
  	    || is_std_named_call_p (callee_fndecl, "free", call, 1)
  	    || is_named_call_p (callee_fndecl, "__builtin_free", call, 1))
  	  {
! 	    on_deallocator_call (sm_ctxt, node, call,
  				 &m_free.m_deallocator, 0);
  	    return true;
  	  }
--- 2143,2149 ----
  	    || is_std_named_call_p (callee_fndecl, "free", call, 1)
  	    || is_named_call_p (callee_fndecl, "__builtin_free", call, 1))
  	  {
! 	    on_deallocator_call (sm_ctxt, call,
  				 &m_free.m_deallocator, 0);
  	    return true;
  	  }
*************** malloc_state_machine::on_stmt (sm_contex
*** 2169,2175 ****
  	    || is_std_named_call_p (callee_fndecl, "realloc", call, 2)
  	    || is_named_call_p (callee_fndecl, "__builtin_realloc", call, 2))
  	  {
! 	    on_realloc_call (sm_ctxt, node, call);
  	    return true;
  	  }
  
--- 2152,2158 ----
  	    || is_std_named_call_p (callee_fndecl, "realloc", call, 2)
  	    || is_named_call_p (callee_fndecl, "__builtin_realloc", call, 2))
  	  {
! 	    on_realloc_call (sm_ctxt, call);
  	    return true;
  	  }
  
*************** malloc_state_machine::on_stmt (sm_contex
*** 2204,2265 ****
  	      on_allocator_call (sm_ctxt, call, deallocators, returns_nonnull);
  	    }
  
- 	  {
- 	    /* Handle "__attribute__((nonnull))".   */
- 	    tree fntype = TREE_TYPE (fndecl);
- 	    bitmap nonnull_args = get_nonnull_args (fntype);
- 	    if (nonnull_args)
- 	      {
- 		for (unsigned i = 0; i < gimple_call_num_args (stmt); i++)
- 		  {
- 		    tree arg = gimple_call_arg (stmt, i);
- 		    if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE)
- 		      continue;
- 		    /* If we have a nonnull-args, and either all pointers, or
- 		       just the specified pointers.  */
- 		    if (bitmap_empty_p (nonnull_args)
- 			|| bitmap_bit_p (nonnull_args, i))
- 		      handle_nonnull (sm_ctxt, node, stmt, fndecl, arg, i);
- 		  }
- 		BITMAP_FREE (nonnull_args);
- 	      }
- 	    /* Handle __attribute__((nonnull_if_nonzero (x, y))).  */
- 	    if (fntype)
- 	      for (tree attrs = TYPE_ATTRIBUTES (fntype);
- 		   (attrs = lookup_attribute ("nonnull_if_nonzero", attrs));
- 		   attrs = TREE_CHAIN (attrs))
- 		{
- 		  tree args = TREE_VALUE (attrs);
- 		  unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
- 		  unsigned int idx2
- 		    = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
- 		  unsigned int idx3 = idx2;
- 		  if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
- 		    idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
- 		  if (idx < gimple_call_num_args (stmt)
- 		      && idx2 < gimple_call_num_args (stmt)
- 		      && idx3 < gimple_call_num_args (stmt))
- 		    {
- 		      tree arg = gimple_call_arg (stmt, idx);
- 		      tree arg2 = gimple_call_arg (stmt, idx2);
- 		      tree arg3 = gimple_call_arg (stmt, idx3);
- 		      if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE
- 			  || !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
- 			  || !INTEGRAL_TYPE_P (TREE_TYPE (arg3))
- 			  || integer_zerop (arg2)
- 			  || integer_zerop (arg3))
- 			continue;
- 		      if (integer_nonzerop (arg2) && integer_nonzerop (arg3))
- 			;
- 		      else
- 			/* FIXME: Use ranger here to query arg2 and arg3
- 			   ranges?  */
- 			continue;
- 		      handle_nonnull (sm_ctxt, node, stmt, fndecl, arg, idx);
- 		    }
- 		}
- 	  }
- 
  	  /* Check for this after nonnull, so that if we have both
  	     then we transition to "freed", rather than "checked".  */
  	  unsigned dealloc_argno = fndecl_dealloc_argno (fndecl);
--- 2187,2192 ----
*************** malloc_state_machine::on_stmt (sm_contex
*** 2267,2273 ****
  	    {
  	      const deallocator *d
  		= mutable_this->get_or_create_deallocator (fndecl);
! 	      on_deallocator_call (sm_ctxt, node, call, d, dealloc_argno);
  	    }
  	}
        }
--- 2194,2200 ----
  	    {
  	      const deallocator *d
  		= mutable_this->get_or_create_deallocator (fndecl);
! 	      on_deallocator_call (sm_ctxt, call, d, dealloc_argno);
  	    }
  	}
        }
*************** malloc_state_machine::on_stmt (sm_contex
*** 2291,2301 ****
  	      && any_pointer_p (rhs)
  	      && zerop (rhs))
  	    {
! 	      state_t state = sm_ctxt.get_state (stmt, lhs);
  	      if (assumed_non_null_p (state))
  		maybe_complain_about_deref_before_check
! 		  (sm_ctxt, node,
! 		   stmt,
  		   (const assumed_non_null_state *)state,
  		   lhs);
  	    }
--- 2218,2227 ----
  	      && any_pointer_p (rhs)
  	      && zerop (rhs))
  	    {
! 	      state_t state = sm_ctxt.get_state (lhs);
  	      if (assumed_non_null_p (state))
  		maybe_complain_about_deref_before_check
! 		  (sm_ctxt,
  		   (const assumed_non_null_state *)state,
  		   lhs);
  	    }
*************** malloc_state_machine::on_stmt (sm_contex
*** 2304,2310 ****
  
    if (tree lhs = sm_ctxt.is_zero_assignment (stmt))
      if (any_pointer_p (lhs))
!       on_zero_assignment (sm_ctxt, stmt,lhs);
  
    /* Handle dereferences.  */
    for (unsigned i = 0; i < gimple_num_ops (stmt); i++)
--- 2230,2236 ----
  
    if (tree lhs = sm_ctxt.is_zero_assignment (stmt))
      if (any_pointer_p (lhs))
!       on_zero_assignment (sm_ctxt, lhs);
  
    /* Handle dereferences.  */
    for (unsigned i = 0; i < gimple_num_ops (stmt); i++)
*************** malloc_state_machine::on_stmt (sm_contex
*** 2319,2351 ****
  	{
  	  tree arg = TREE_OPERAND (op, 0);
  
! 	  state_t state = sm_ctxt.get_state (stmt, arg);
  	  if (state == m_start)
! 	    maybe_assume_non_null (sm_ctxt, arg, stmt);
  	  else if (unchecked_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (node, stmt, arg,
  			    std::make_unique<possible_null_deref> (*this,
  								   diag_arg));
  	      const allocation_state *astate = as_a_allocation_state (state);
! 	      sm_ctxt.set_next_state (stmt, arg, astate->get_nonnull ());
  	    }
  	  else if (state == m_null)
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (node, stmt, arg,
  			    std::make_unique<null_deref> (*this, diag_arg));
! 	      sm_ctxt.set_next_state (stmt, arg, m_stop);
  	    }
  	  else if (freed_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
  	      const allocation_state *astate = as_a_allocation_state (state);
! 	      sm_ctxt.warn (node, stmt, arg,
  			    std::make_unique<use_after_free>
  			      (*this, diag_arg, astate->m_deallocator));
! 	      sm_ctxt.set_next_state (stmt, arg, m_stop);
  	    }
  	}
      }
--- 2245,2277 ----
  	{
  	  tree arg = TREE_OPERAND (op, 0);
  
! 	  state_t state = sm_ctxt.get_state (arg);
  	  if (state == m_start)
! 	    maybe_assume_non_null (sm_ctxt, arg);
  	  else if (unchecked_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (arg,
  			    std::make_unique<possible_null_deref> (*this,
  								   diag_arg));
  	      const allocation_state *astate = as_a_allocation_state (state);
! 	      sm_ctxt.set_next_state (arg, astate->get_nonnull ());
  	    }
  	  else if (state == m_null)
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	      sm_ctxt.warn (arg,
  			    std::make_unique<null_deref> (*this, diag_arg));
! 	      sm_ctxt.set_next_state (arg, m_stop);
  	    }
  	  else if (freed_p (state))
  	    {
  	      tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
  	      const allocation_state *astate = as_a_allocation_state (state);
! 	      sm_ctxt.warn (arg,
  			    std::make_unique<use_after_free>
  			      (*this, diag_arg, astate->m_deallocator));
! 	      sm_ctxt.set_next_state (arg, m_stop);
  	    }
  	}
      }
*************** malloc_state_machine::on_stmt (sm_contex
*** 2358,2365 ****
  void
  malloc_state_machine::
  maybe_complain_about_deref_before_check (sm_context &sm_ctxt,
- 					 const supernode *node,
- 					 const gimple *stmt,
  					 const assumed_non_null_state *state,
  					 tree ptr) const
  {
--- 2284,2289 ----
*************** maybe_complain_about_deref_before_check
*** 2392,2402 ****
    if (checked_in_frame->get_index () > assumed_nonnull_in_frame->get_index ())
      return;
  
!   /* Don't complain if STMT was inlined from another function, to avoid
       similar false positives involving shared helper functions.  */
!   if (stmt->location)
      {
!       inlining_info info (stmt->location);
        if (info.get_extra_frames () > 0)
  	return;
      }
--- 2316,2326 ----
    if (checked_in_frame->get_index () > assumed_nonnull_in_frame->get_index ())
      return;
  
!   /* Don't complain if code was inlined from another function, to avoid
       similar false positives involving shared helper functions.  */
!   if (location_t loc = sm_ctxt.get_emission_location ())
      {
!       inlining_info info (loc);
        if (info.get_extra_frames () > 0)
  	return;
      }
*************** maybe_complain_about_deref_before_check
*** 2404,2412 ****
    tree diag_ptr = sm_ctxt.get_diagnostic_tree (ptr);
    if (diag_ptr)
      sm_ctxt.warn
!       (node, stmt, ptr,
         std::make_unique<deref_before_check> (*this, diag_ptr));
!   sm_ctxt.set_next_state (stmt, ptr, m_stop);
  }
  
  /* Handle a call to an allocator.
--- 2328,2336 ----
    tree diag_ptr = sm_ctxt.get_diagnostic_tree (ptr);
    if (diag_ptr)
      sm_ctxt.warn
!       (ptr,
         std::make_unique<deref_before_check> (*this, diag_ptr));
!   sm_ctxt.set_next_state (ptr, m_stop);
  }
  
  /* Handle a call to an allocator.
*************** malloc_state_machine::on_allocator_call
*** 2422,2429 ****
    tree lhs = gimple_call_lhs (&call);
    if (lhs)
      {
!       if (sm_ctxt.get_state (&call, lhs) == m_start)
! 	sm_ctxt.set_next_state (&call, lhs,
  				(returns_nonnull
  				 ? deallocators->m_nonnull
  				 : deallocators->m_unchecked));
--- 2346,2353 ----
    tree lhs = gimple_call_lhs (&call);
    if (lhs)
      {
!       if (sm_ctxt.get_state (lhs) == m_start)
! 	sm_ctxt.set_next_state (lhs,
  				(returns_nonnull
  				 ? deallocators->m_nonnull
  				 : deallocators->m_unchecked));
*************** malloc_state_machine::on_allocator_call
*** 2439,2446 ****
  
  void
  malloc_state_machine::handle_free_of_non_heap (sm_context &sm_ctxt,
! 					       const supernode *node,
! 					       const gcall &call,
  					       tree arg,
  					       const deallocator *d) const
  {
--- 2363,2369 ----
  
  void
  malloc_state_machine::handle_free_of_non_heap (sm_context &sm_ctxt,
! 					       const gcall &,
  					       tree arg,
  					       const deallocator *d) const
  {
*************** malloc_state_machine::handle_free_of_non
*** 2452,2466 ****
        const svalue *ptr_sval = old_model->get_rvalue (arg, nullptr);
        freed_reg = old_model->deref_rvalue (ptr_sval, arg, nullptr);
      }
!   sm_ctxt.warn (node, &call, arg,
  		std::make_unique<free_of_non_heap>
  		  (*this, diag_arg, freed_reg, d->m_name));
!   sm_ctxt.set_next_state (&call, arg, m_stop);
  }
  
  void
  malloc_state_machine::on_deallocator_call (sm_context &sm_ctxt,
- 					   const supernode *node,
  					   const gcall &call,
  					   const deallocator *d,
  					   unsigned argno) const
--- 2375,2388 ----
        const svalue *ptr_sval = old_model->get_rvalue (arg, nullptr);
        freed_reg = old_model->deref_rvalue (ptr_sval, arg, nullptr);
      }
!   sm_ctxt.warn (arg,
  		std::make_unique<free_of_non_heap>
  		  (*this, diag_arg, freed_reg, d->m_name));
!   sm_ctxt.set_next_state (arg, m_stop);
  }
  
  void
  malloc_state_machine::on_deallocator_call (sm_context &sm_ctxt,
  					   const gcall &call,
  					   const deallocator *d,
  					   unsigned argno) const
*************** malloc_state_machine::on_deallocator_cal
*** 2469,2479 ****
      return;
    tree arg = gimple_call_arg (&call, argno);
  
!   state_t state = sm_ctxt.get_state (&call, arg);
  
    /* start/assumed_non_null/unchecked/nonnull -> freed.  */
    if (state == m_start || assumed_non_null_p (state))
!     sm_ctxt.set_next_state (&call, arg, d->m_freed);
    else if (unchecked_p (state) || nonnull_p (state))
      {
        const allocation_state *astate = as_a_allocation_state (state);
--- 2391,2401 ----
      return;
    tree arg = gimple_call_arg (&call, argno);
  
!   state_t state = sm_ctxt.get_state (arg);
  
    /* start/assumed_non_null/unchecked/nonnull -> freed.  */
    if (state == m_start || assumed_non_null_p (state))
!     sm_ctxt.set_next_state (arg, d->m_freed);
    else if (unchecked_p (state) || nonnull_p (state))
      {
        const allocation_state *astate = as_a_allocation_state (state);
*************** malloc_state_machine::on_deallocator_cal
*** 2482,2494 ****
  	{
  	  /* Wrong allocator.  */
  	  tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	  sm_ctxt.warn (node, &call, arg,
  			std::make_unique<mismatching_deallocation>
  			  (*this, diag_arg,
  			   astate->m_deallocators,
  			   d));
  	}
!       sm_ctxt.set_next_state (&call, arg, d->m_freed);
      }
  
    /* Keep state "null" as-is, rather than transitioning to "freed";
--- 2404,2416 ----
  	{
  	  /* Wrong allocator.  */
  	  tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	  sm_ctxt.warn (arg,
  			std::make_unique<mismatching_deallocation>
  			  (*this, diag_arg,
  			   astate->m_deallocators,
  			   d));
  	}
!       sm_ctxt.set_next_state (arg, d->m_freed);
      }
  
    /* Keep state "null" as-is, rather than transitioning to "freed";
*************** malloc_state_machine::on_deallocator_cal
*** 2497,2510 ****
      {
        /* freed -> stop, with warning.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (node, &call, arg,
  		    std::make_unique<double_free> (*this, diag_arg, d->m_name));
!       sm_ctxt.set_next_state (&call, arg, m_stop);
      }
    else if (state == m_non_heap)
      {
        /* non-heap -> stop, with warning.  */
!       handle_free_of_non_heap (sm_ctxt, node, call, arg, d);
      }
  }
  
--- 2419,2432 ----
      {
        /* freed -> stop, with warning.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (arg,
  		    std::make_unique<double_free> (*this, diag_arg, d->m_name));
!       sm_ctxt.set_next_state (arg, m_stop);
      }
    else if (state == m_non_heap)
      {
        /* non-heap -> stop, with warning.  */
!       handle_free_of_non_heap (sm_ctxt, call, arg, d);
      }
  }
  
*************** malloc_state_machine::on_deallocator_cal
*** 2518,2524 ****
  
  void
  malloc_state_machine::on_realloc_call (sm_context &sm_ctxt,
- 				       const supernode *node,
  				       const gcall &call) const
  {
    const unsigned argno = 0;
--- 2440,2445 ----
*************** malloc_state_machine::on_realloc_call (s
*** 2526,2532 ****
  
    tree arg = gimple_call_arg (&call, argno);
  
!   state_t state = sm_ctxt.get_state (&call, arg);
  
    if (unchecked_p (state) || nonnull_p (state))
      {
--- 2447,2453 ----
  
    tree arg = gimple_call_arg (&call, argno);
  
!   state_t state = sm_ctxt.get_state (arg);
  
    if (unchecked_p (state) || nonnull_p (state))
      {
*************** malloc_state_machine::on_realloc_call (s
*** 2536,2546 ****
  	{
  	  /* Wrong allocator.  */
  	  tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	  sm_ctxt.warn (node, &call, arg,
  			std::make_unique<mismatching_deallocation>
  			  (*this, diag_arg,
  			   astate->m_deallocators, d));
! 	  sm_ctxt.set_next_state (&call, arg, m_stop);
  	  if (path_context *path_ctxt = sm_ctxt.get_path_context ())
  	    path_ctxt->terminate_path ();
  	}
--- 2457,2467 ----
  	{
  	  /* Wrong allocator.  */
  	  tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
! 	  sm_ctxt.warn (arg,
  			std::make_unique<mismatching_deallocation>
  			  (*this, diag_arg,
  			   astate->m_deallocators, d));
! 	  sm_ctxt.set_next_state (arg, m_stop);
  	  if (path_context *path_ctxt = sm_ctxt.get_path_context ())
  	    path_ctxt->terminate_path ();
  	}
*************** malloc_state_machine::on_realloc_call (s
*** 2549,2564 ****
      {
        /* freed -> stop, with warning.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (node, &call, arg,
  		    std::make_unique<double_free> (*this, diag_arg, "free"));
!       sm_ctxt.set_next_state (&call, arg, m_stop);
        if (path_context *path_ctxt = sm_ctxt.get_path_context ())
  	path_ctxt->terminate_path ();
      }
    else if (state == m_non_heap)
      {
        /* non-heap -> stop, with warning.  */
!       handle_free_of_non_heap (sm_ctxt, node, call, arg, d);
        if (path_context *path_ctxt = sm_ctxt.get_path_context ())
  	path_ctxt->terminate_path ();
      }
--- 2470,2485 ----
      {
        /* freed -> stop, with warning.  */
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (arg,
  		    std::make_unique<double_free> (*this, diag_arg, "free"));
!       sm_ctxt.set_next_state (arg, m_stop);
        if (path_context *path_ctxt = sm_ctxt.get_path_context ())
  	path_ctxt->terminate_path ();
      }
    else if (state == m_non_heap)
      {
        /* non-heap -> stop, with warning.  */
!       handle_free_of_non_heap (sm_ctxt, call, arg, d);
        if (path_context *path_ctxt = sm_ctxt.get_path_context ())
  	path_ctxt->terminate_path ();
      }
*************** malloc_state_machine::on_realloc_call (s
*** 2568,2591 ****
  
  void
  malloc_state_machine::on_phi (sm_context &sm_ctxt,
- 			      const supernode *node ATTRIBUTE_UNUSED,
  			      const gphi *phi,
  			      tree rhs) const
  {
    if (zerop (rhs))
      {
        tree lhs = gimple_phi_result (phi);
!       on_zero_assignment (sm_ctxt, phi, lhs);
      }
  }
  
  /* Implementation of state_machine::on_condition vfunc for malloc_state_machine.
     Potentially transition state 'unchecked' to 'nonnull' or to 'null'.  */
  
  void
  malloc_state_machine::on_condition (sm_context &sm_ctxt,
- 				    const supernode *node ATTRIBUTE_UNUSED,
- 				    const gimple *stmt,
  				    const svalue *lhs,
  				    enum tree_code op,
  				    const svalue *rhs) const
--- 2489,2574 ----
  
  void
  malloc_state_machine::on_phi (sm_context &sm_ctxt,
  			      const gphi *phi,
  			      tree rhs) const
  {
    if (zerop (rhs))
      {
        tree lhs = gimple_phi_result (phi);
!       on_zero_assignment (sm_ctxt, lhs);
      }
  }
  
+ void
+ malloc_state_machine::check_call_preconditions (sm_context &sm_ctxt,
+ 						const call_details &cd) const
+ {
+   tree fndecl = cd.get_fndecl_for_call ();
+   if (!fndecl)
+     return;
+ 
+   const tree fntype = TREE_TYPE (fndecl);
+   const unsigned num_args = cd.num_args ();
+ 
+   /* Handle "__attribute__((nonnull))".   */
+   if (bitmap nonnull_args = get_nonnull_args (fntype))
+     {
+       for (unsigned i = 0; i < num_args; i++)
+ 	{
+ 	  tree arg = cd.get_arg_tree (i);
+ 	  if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE)
+ 	    continue;
+ 	  /* If we have a nonnull-args, and either all pointers, or
+ 	     just the specified pointers.  */
+ 	  if (bitmap_empty_p (nonnull_args)
+ 	      || bitmap_bit_p (nonnull_args, i))
+ 	    handle_nonnull (sm_ctxt, fndecl, arg, i);
+ 	}
+       BITMAP_FREE (nonnull_args);
+     }
+ 
+   /* Handle __attribute__((nonnull_if_nonzero (x, y))).  */
+   if (fntype)
+     for (tree attrs = TYPE_ATTRIBUTES (fntype);
+ 	 (attrs = lookup_attribute ("nonnull_if_nonzero", attrs));
+ 	 attrs = TREE_CHAIN (attrs))
+       {
+ 	tree args = TREE_VALUE (attrs);
+ 	unsigned int idx = TREE_INT_CST_LOW (TREE_VALUE (args)) - 1;
+ 	unsigned int idx2
+ 	  = TREE_INT_CST_LOW (TREE_VALUE (TREE_CHAIN (args))) - 1;
+ 	unsigned int idx3 = idx2;
+ 	if (tree chain2 = TREE_CHAIN (TREE_CHAIN (args)))
+ 	  idx3 = TREE_INT_CST_LOW (TREE_VALUE (chain2)) - 1;
+ 	if (idx < num_args
+ 	    && idx2 < num_args
+ 	    && idx3 < num_args)
+ 	  {
+ 	    tree arg = cd.get_arg_tree (idx);
+ 	    tree arg2 = cd.get_arg_tree (idx2);
+ 	    tree arg3 = cd.get_arg_tree (idx3);
+ 	    if (TREE_CODE (TREE_TYPE (arg)) != POINTER_TYPE
+ 		|| !INTEGRAL_TYPE_P (TREE_TYPE (arg2))
+ 		|| !INTEGRAL_TYPE_P (TREE_TYPE (arg3))
+ 		|| integer_zerop (arg2)
+ 		|| integer_zerop (arg3))
+ 	      continue;
+ 	    if (integer_nonzerop (arg2) && integer_nonzerop (arg3))
+ 	      ;
+ 	    else
+ 	      /* FIXME: Use ranger here to query arg2 and arg3
+ 		 ranges?  */
+ 	      continue;
+ 	    handle_nonnull (sm_ctxt, fndecl, arg, idx);
+ 	  }
+       }
+ }
+ 
  /* Implementation of state_machine::on_condition vfunc for malloc_state_machine.
     Potentially transition state 'unchecked' to 'nonnull' or to 'null'.  */
  
  void
  malloc_state_machine::on_condition (sm_context &sm_ctxt,
  				    const svalue *lhs,
  				    enum tree_code op,
  				    const svalue *rhs) const
*************** malloc_state_machine::on_condition (sm_c
*** 2601,2619 ****
    if (op == NE_EXPR)
      {
        log ("got 'ARG != 0' match");
!       state_t s = sm_ctxt.get_state (stmt, lhs);
        if (unchecked_p (s))
  	{
  	  const allocation_state *astate = as_a_allocation_state (s);
! 	  sm_ctxt.set_next_state (stmt, lhs, astate->get_nonnull ());
  	}
      }
    else if (op == EQ_EXPR)
      {
        log ("got 'ARG == 0' match");
!       state_t s = sm_ctxt.get_state (stmt, lhs);
        if (unchecked_p (s))
! 	sm_ctxt.set_next_state (stmt, lhs, m_null);
      }
  }
  
--- 2584,2602 ----
    if (op == NE_EXPR)
      {
        log ("got 'ARG != 0' match");
!       state_t s = sm_ctxt.get_state (lhs);
        if (unchecked_p (s))
  	{
  	  const allocation_state *astate = as_a_allocation_state (s);
! 	  sm_ctxt.set_next_state (lhs, astate->get_nonnull ());
  	}
      }
    else if (op == EQ_EXPR)
      {
        log ("got 'ARG == 0' match");
!       state_t s = sm_ctxt.get_state (lhs);
        if (unchecked_p (s))
! 	sm_ctxt.set_next_state (lhs, m_null);
      }
  }
  
*************** malloc_state_machine::unaffected_by_call
*** 2724,2739 ****
  
  void
  malloc_state_machine::on_zero_assignment (sm_context &sm_ctxt,
- 					  const gimple *stmt,
  					  tree lhs) const
  {
!   state_t s = sm_ctxt.get_state (stmt, lhs);
    enum resource_state rs = get_rs (s);
    if (rs == RS_START
        || rs == RS_UNCHECKED
        || rs == RS_NONNULL
        || rs == RS_FREED)
!     sm_ctxt.set_next_state (stmt, lhs, m_null);
  }
  
  /* Special-case hook for handling realloc, for the "success with move to
--- 2707,2721 ----
  
  void
  malloc_state_machine::on_zero_assignment (sm_context &sm_ctxt,
  					  tree lhs) const
  {
!   state_t s = sm_ctxt.get_state (lhs);
    enum resource_state rs = get_rs (s);
    if (rs == RS_START
        || rs == RS_UNCHECKED
        || rs == RS_NONNULL
        || rs == RS_FREED)
!     sm_ctxt.set_next_state (lhs, m_null);
  }
  
  /* Special-case hook for handling realloc, for the "success with move to
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm-pattern-test.cc gcc-16-20251214/gcc/analyzer/sm-pattern-test.cc
*** gcc-16-20251207/gcc/analyzer/sm-pattern-test.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm-pattern-test.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 50,61 ****
    bool inherited_state_p () const final override { return false; }
  
    bool on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    void on_condition (sm_context &sm_ctxt,
- 		     const supernode *node,
- 		     const gimple *stmt,
  		     const svalue *lhs,
  		     enum tree_code op,
  		     const svalue *rhs) const final override;
--- 50,58 ----
*************** pattern_test_state_machine::pattern_test
*** 102,108 ****
  
  bool
  pattern_test_state_machine::on_stmt (sm_context &sm_ctxt ATTRIBUTE_UNUSED,
- 				     const supernode *node ATTRIBUTE_UNUSED,
  				     const gimple *stmt ATTRIBUTE_UNUSED) const
  {
    return false;
--- 99,104 ----
*************** pattern_test_state_machine::on_stmt (sm_
*** 116,137 ****
  
  void
  pattern_test_state_machine::on_condition (sm_context &sm_ctxt,
- 					  const supernode *node,
- 					  const gimple *stmt,
  					  const svalue *lhs,
  					  enum tree_code op,
  					  const svalue *rhs) const
  {
-   if (stmt == nullptr)
-     return;
- 
    tree rhs_cst = rhs->maybe_get_constant ();
    if (!rhs_cst)
      return;
  
    if (tree lhs_expr = sm_ctxt.get_diagnostic_tree (lhs))
      {
!       sm_ctxt.warn (node, stmt, lhs_expr,
  		    std::make_unique<pattern_match> (lhs_expr, op, rhs_cst));
      }
  }
--- 112,128 ----
  
  void
  pattern_test_state_machine::on_condition (sm_context &sm_ctxt,
  					  const svalue *lhs,
  					  enum tree_code op,
  					  const svalue *rhs) const
  {
    tree rhs_cst = rhs->maybe_get_constant ();
    if (!rhs_cst)
      return;
  
    if (tree lhs_expr = sm_ctxt.get_diagnostic_tree (lhs))
      {
!       sm_ctxt.warn (lhs_expr,
  		    std::make_unique<pattern_match> (lhs_expr, op, rhs_cst));
      }
  }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm-sensitive.cc gcc-16-20251214/gcc/analyzer/sm-sensitive.cc
*** gcc-16-20251207/gcc/analyzer/sm-sensitive.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm-sensitive.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 44,50 ****
    bool inherited_state_p () const final override { return true; }
  
    bool on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    bool can_purge_p (state_t s) const final override;
--- 44,49 ----
*************** public:
*** 57,64 ****
  
  private:
    void warn_for_any_exposure (sm_context &sm_ctxt,
- 			      const supernode *node,
- 			      const gimple *stmt,
  			      tree arg) const;
  };
  
--- 56,61 ----
*************** sensitive_state_machine::sensitive_state
*** 180,193 ****
  
  void
  sensitive_state_machine::warn_for_any_exposure (sm_context &sm_ctxt,
- 						const supernode *node,
- 						const gimple *stmt,
  						tree arg) const
  {
!   if (sm_ctxt.get_state (stmt, arg) == m_sensitive)
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (node, stmt, arg,
  		    std::make_unique<exposure_through_output_file> (*this,
  								    diag_arg));
      }
--- 177,188 ----
  
  void
  sensitive_state_machine::warn_for_any_exposure (sm_context &sm_ctxt,
  						tree arg) const
  {
!   if (sm_ctxt.get_state (arg) == m_sensitive)
      {
        tree diag_arg = sm_ctxt.get_diagnostic_tree (arg);
!       sm_ctxt.warn (arg,
  		    std::make_unique<exposure_through_output_file> (*this,
  								    diag_arg));
      }
*************** sensitive_state_machine::warn_for_any_ex
*** 198,204 ****
  
  bool
  sensitive_state_machine::on_stmt (sm_context &sm_ctxt,
- 				  const supernode *node,
  				  const gimple *stmt) const
  {
    if (const gcall *call = dyn_cast <const gcall *> (stmt))
--- 193,198 ----
*************** sensitive_state_machine::on_stmt (sm_con
*** 208,214 ****
  	  {
  	    tree lhs = gimple_call_lhs (call);
  	    if (lhs)
! 	      sm_ctxt.on_transition (node, stmt, lhs, m_start, m_sensitive);
  	    return true;
  	  }
  	else if (is_named_call_p (callee_fndecl, "fprintf")
--- 202,208 ----
  	  {
  	    tree lhs = gimple_call_lhs (call);
  	    if (lhs)
! 	      sm_ctxt.on_transition (lhs, m_start, m_sensitive);
  	    return true;
  	  }
  	else if (is_named_call_p (callee_fndecl, "fprintf")
*************** sensitive_state_machine::on_stmt (sm_con
*** 218,231 ****
  	    for (unsigned idx = 1; idx < gimple_call_num_args (call); idx++)
  	      {
  		tree arg = gimple_call_arg (call, idx);
! 		warn_for_any_exposure (sm_ctxt, node, stmt, arg);
  	      }
  	    return true;
  	  }
  	else if (is_named_call_p (callee_fndecl, "fwrite", *call, 4))
  	  {
  	    tree arg = gimple_call_arg (call, 0);
! 	    warn_for_any_exposure (sm_ctxt, node, stmt, arg);
  	    return true;
  	  }
  	// TODO: ...etc.  This is just a proof-of-concept at this point.
--- 212,225 ----
  	    for (unsigned idx = 1; idx < gimple_call_num_args (call); idx++)
  	      {
  		tree arg = gimple_call_arg (call, idx);
! 		warn_for_any_exposure (sm_ctxt, arg);
  	      }
  	    return true;
  	  }
  	else if (is_named_call_p (callee_fndecl, "fwrite", *call, 4))
  	  {
  	    tree arg = gimple_call_arg (call, 0);
! 	    warn_for_any_exposure (sm_ctxt, arg);
  	    return true;
  	  }
  	// TODO: ...etc.  This is just a proof-of-concept at this point.
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm-signal.cc gcc-16-20251214/gcc/analyzer/sm-signal.cc
*** gcc-16-20251207/gcc/analyzer/sm-signal.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm-signal.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 63,69 ****
    bool inherited_state_p () const final override { return false; }
  
    bool  on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    bool can_purge_p (state_t s) const final override;
--- 63,68 ----
*************** public:
*** 221,227 ****
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge ATTRIBUTE_UNUSED)
      const final override
    {
      emission_path->add_event
--- 220,227 ----
    }
  
    void add_events_to_path (checker_path *emission_path,
! 			   const exploded_edge &eedge ATTRIBUTE_UNUSED,
! 			   pending_diagnostic &)
      const final override
    {
      emission_path->add_event
*************** public:
*** 258,264 ****
        = program_point::from_function_entry (*ext_state.get_model_manager (),
  					    eg->get_supergraph (),
  					    *handler_fun);
- 
      program_state state_entering_handler (ext_state);
      update_model_for_signal_handler (state_entering_handler.m_region_model,
  				     *handler_fun);
--- 258,263 ----
*************** signal_unsafe_p (tree fndecl)
*** 324,330 ****
  
  bool
  signal_state_machine::on_stmt (sm_context &sm_ctxt,
- 			       const supernode *node,
  			       const gimple *stmt) const
  {
    const state_t global_state = sm_ctxt.get_global_state ();
--- 323,328 ----
*************** signal_state_machine::on_stmt (sm_contex
*** 351,357 ****
  	if (tree callee_fndecl = sm_ctxt.get_fndecl_for_call (*call))
  	  if (signal_unsafe_p (callee_fndecl))
  	    if (sm_ctxt.get_global_state () == m_in_signal_handler)
! 	      sm_ctxt.warn (node, stmt, NULL_TREE,
  			    std::make_unique<signal_unsafe_call>
  			     (*this, *call, callee_fndecl));
      }
--- 349,355 ----
  	if (tree callee_fndecl = sm_ctxt.get_fndecl_for_call (*call))
  	  if (signal_unsafe_p (callee_fndecl))
  	    if (sm_ctxt.get_global_state () == m_in_signal_handler)
! 	      sm_ctxt.warn (NULL_TREE,
  			    std::make_unique<signal_unsafe_call>
  			     (*this, *call, callee_fndecl));
      }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm-taint.cc gcc-16-20251214/gcc/analyzer/sm-taint.cc
*** gcc-16-20251207/gcc/analyzer/sm-taint.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm-taint.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 102,119 ****
    }
  
    bool on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    void on_condition (sm_context &sm_ctxt,
- 		     const supernode *node,
- 		     const gimple *stmt,
  		     const svalue *lhs,
  		     enum tree_code op,
  		     const svalue *rhs) const final override;
    void on_bounded_ranges (sm_context &sm_ctxt,
- 			  const supernode *node,
- 			  const gimple *stmt,
  			  const svalue &sval,
  			  const bounded_ranges &ranges) const final override;
  
--- 102,114 ----
*************** public:
*** 125,139 ****
  
  private:
    void check_control_flow_arg_for_taint (sm_context &sm_ctxt,
- 					 const gimple *stmt,
  					 tree expr) const;
  
    void check_for_tainted_size_arg (sm_context &sm_ctxt,
- 				   const supernode *node,
  				   const gcall &call,
  				   tree callee_fndecl) const;
    void check_for_tainted_divisor (sm_context &sm_ctxt,
- 				  const supernode *node,
  				  const gassign *assign) const;
  
  public:
--- 120,131 ----
*************** is_assertion_failure_handler_p (tree fnd
*** 1089,1095 ****
  
  bool
  taint_state_machine::on_stmt (sm_context &sm_ctxt,
- 			       const supernode *node,
  			       const gimple *stmt) const
  {
    if (const gcall *call = dyn_cast <const gcall *> (stmt))
--- 1081,1086 ----
*************** taint_state_machine::on_stmt (sm_context
*** 1099,1122 ****
  	  {
  	    tree arg = gimple_call_arg (call, 0);
  
! 	    sm_ctxt.on_transition (node, stmt, arg, m_start, m_tainted);
  
  	    /* Dereference an ADDR_EXPR.  */
  	    // TODO: should the engine do this?
  	    if (TREE_CODE (arg) == ADDR_EXPR)
! 	      sm_ctxt.on_transition (node, stmt, TREE_OPERAND (arg, 0),
  				     m_start, m_tainted);
  	    return true;
  	  }
  
  	/* External function with "access" attribute. */
  	if (sm_ctxt.unknown_side_effects_p ())
! 	  check_for_tainted_size_arg (sm_ctxt, node, *call, callee_fndecl);
  
  	if (is_assertion_failure_handler_p (callee_fndecl)
  	    && sm_ctxt.get_global_state () == m_tainted_control_flow)
  	  {
! 	    sm_ctxt.warn (node, call, NULL_TREE,
  			  std::make_unique<tainted_assertion> (*this, NULL_TREE,
  							       callee_fndecl));
  	  }
--- 1090,1113 ----
  	  {
  	    tree arg = gimple_call_arg (call, 0);
  
! 	    sm_ctxt.on_transition (arg, m_start, m_tainted);
  
  	    /* Dereference an ADDR_EXPR.  */
  	    // TODO: should the engine do this?
  	    if (TREE_CODE (arg) == ADDR_EXPR)
! 	      sm_ctxt.on_transition (TREE_OPERAND (arg, 0),
  				     m_start, m_tainted);
  	    return true;
  	  }
  
  	/* External function with "access" attribute. */
  	if (sm_ctxt.unknown_side_effects_p ())
! 	  check_for_tainted_size_arg (sm_ctxt, *call, callee_fndecl);
  
  	if (is_assertion_failure_handler_p (callee_fndecl)
  	    && sm_ctxt.get_global_state () == m_tainted_control_flow)
  	  {
! 	    sm_ctxt.warn (NULL_TREE,
  			  std::make_unique<tainted_assertion> (*this, NULL_TREE,
  							       callee_fndecl));
  	  }
*************** taint_state_machine::on_stmt (sm_context
*** 1141,1147 ****
  	case ROUND_MOD_EXPR:
  	case RDIV_EXPR:
  	case EXACT_DIV_EXPR:
! 	  check_for_tainted_divisor (sm_ctxt, node, assign);
  	  break;
  	}
      }
--- 1132,1138 ----
  	case ROUND_MOD_EXPR:
  	case RDIV_EXPR:
  	case EXACT_DIV_EXPR:
! 	  check_for_tainted_divisor (sm_ctxt, assign);
  	  break;
  	}
      }
*************** taint_state_machine::on_stmt (sm_context
*** 1152,1159 ****
  	 control flow statement, so that only the last one before
  	 an assertion-failure-handler counts.  */
        sm_ctxt.set_global_state (m_start);
!       check_control_flow_arg_for_taint (sm_ctxt, cond, gimple_cond_lhs (cond));
!       check_control_flow_arg_for_taint (sm_ctxt, cond, gimple_cond_rhs (cond));
      }
  
    if (const gswitch *switch_ = dyn_cast <const gswitch *> (stmt))
--- 1143,1150 ----
  	 control flow statement, so that only the last one before
  	 an assertion-failure-handler counts.  */
        sm_ctxt.set_global_state (m_start);
!       check_control_flow_arg_for_taint (sm_ctxt, gimple_cond_lhs (cond));
!       check_control_flow_arg_for_taint (sm_ctxt, gimple_cond_rhs (cond));
      }
  
    if (const gswitch *switch_ = dyn_cast <const gswitch *> (stmt))
*************** taint_state_machine::on_stmt (sm_context
*** 1162,1168 ****
  	 control flow statement, so that only the last one before
  	 an assertion-failure-handler counts.  */
        sm_ctxt.set_global_state (m_start);
!       check_control_flow_arg_for_taint (sm_ctxt, switch_,
  					gimple_switch_index (switch_));
      }
  
--- 1153,1159 ----
  	 control flow statement, so that only the last one before
  	 an assertion-failure-handler counts.  */
        sm_ctxt.set_global_state (m_start);
!       check_control_flow_arg_for_taint (sm_ctxt,
  					gimple_switch_index (switch_));
      }
  
*************** taint_state_machine::on_stmt (sm_context
*** 1175,1186 ****
  
  void
  taint_state_machine::check_control_flow_arg_for_taint (sm_context &sm_ctxt,
- 						       const gimple *stmt,
  						       tree expr) const
  {
    const region_model *old_model = sm_ctxt.get_old_region_model ();
    const svalue *sval = old_model->get_rvalue (expr, nullptr);
!   state_t state = sm_ctxt.get_state (stmt, sval);
    enum bounds b;
    if (get_taint (state, TREE_TYPE (expr), &b))
      sm_ctxt.set_global_state (m_tainted_control_flow);
--- 1166,1176 ----
  
  void
  taint_state_machine::check_control_flow_arg_for_taint (sm_context &sm_ctxt,
  						       tree expr) const
  {
    const region_model *old_model = sm_ctxt.get_old_region_model ();
    const svalue *sval = old_model->get_rvalue (expr, nullptr);
!   state_t state = sm_ctxt.get_state (sval);
    enum bounds b;
    if (get_taint (state, TREE_TYPE (expr), &b))
      sm_ctxt.set_global_state (m_tainted_control_flow);
*************** taint_state_machine::check_control_flow_
*** 1192,1206 ****
  
  void
  taint_state_machine::on_condition (sm_context &sm_ctxt,
- 				   const supernode *node,
- 				   const gimple *stmt,
  				   const svalue *lhs,
  				   enum tree_code op,
  				   const svalue *rhs) const
  {
-   if (stmt == nullptr)
-     return;
- 
    if (lhs->get_kind () == SK_UNKNOWN
        || rhs->get_kind () == SK_UNKNOWN)
      {
--- 1182,1191 ----
*************** taint_state_machine::on_condition (sm_co
*** 1234,1243 ****
  	/* (LHS >= RHS) or (LHS > RHS)
  	   LHS gains a lower bound
  	   RHS gains an upper bound.  */
! 	sm_ctxt.on_transition (node, stmt, lhs, m_tainted, m_has_lb);
! 	sm_ctxt.on_transition (node, stmt, lhs, m_has_ub, m_stop);
! 	sm_ctxt.on_transition (node, stmt, rhs, m_tainted, m_has_ub);
! 	sm_ctxt.on_transition (node, stmt, rhs, m_has_lb, m_stop);
        }
        break;
      case LE_EXPR:
--- 1219,1228 ----
  	/* (LHS >= RHS) or (LHS > RHS)
  	   LHS gains a lower bound
  	   RHS gains an upper bound.  */
! 	sm_ctxt.on_transition (lhs, m_tainted, m_has_lb);
! 	sm_ctxt.on_transition (lhs, m_has_ub, m_stop);
! 	sm_ctxt.on_transition (rhs, m_tainted, m_has_ub);
! 	sm_ctxt.on_transition (rhs, m_has_lb, m_stop);
        }
        break;
      case LE_EXPR:
*************** taint_state_machine::on_condition (sm_co
*** 1275,1286 ****
  		       both conditions simultaneously (we'd have a transition
  		       from the old state to has_lb, then a transition from
  		       the old state *again* to has_ub).  */
! 		    state_t old_state
! 		      = sm_ctxt.get_state (stmt, inner_lhs);
  		    if (old_state == m_tainted
  			|| old_state == m_has_lb
  			|| old_state == m_has_ub)
! 		      sm_ctxt.set_next_state (stmt, inner_lhs, m_stop);
  		    return;
  		  }
  	  }
--- 1260,1270 ----
  		       both conditions simultaneously (we'd have a transition
  		       from the old state to has_lb, then a transition from
  		       the old state *again* to has_ub).  */
! 		    state_t old_state = sm_ctxt.get_state (inner_lhs);
  		    if (old_state == m_tainted
  			|| old_state == m_has_lb
  			|| old_state == m_has_ub)
! 		      sm_ctxt.set_next_state (inner_lhs, m_stop);
  		    return;
  		  }
  	  }
*************** taint_state_machine::on_condition (sm_co
*** 1288,1297 ****
  	/* (LHS <= RHS) or (LHS < RHS)
  	   LHS gains an upper bound
  	   RHS gains a lower bound.  */
! 	sm_ctxt.on_transition (node, stmt, lhs, m_tainted, m_has_ub);
! 	sm_ctxt.on_transition (node, stmt, lhs, m_has_lb, m_stop);
! 	sm_ctxt.on_transition (node, stmt, rhs, m_tainted, m_has_lb);
! 	sm_ctxt.on_transition (node, stmt, rhs, m_has_ub, m_stop);
        }
        break;
      default:
--- 1272,1281 ----
  	/* (LHS <= RHS) or (LHS < RHS)
  	   LHS gains an upper bound
  	   RHS gains a lower bound.  */
! 	sm_ctxt.on_transition (lhs, m_tainted, m_has_ub);
! 	sm_ctxt.on_transition (lhs, m_has_lb, m_stop);
! 	sm_ctxt.on_transition (rhs, m_tainted, m_has_lb);
! 	sm_ctxt.on_transition (rhs, m_has_ub, m_stop);
        }
        break;
      default:
*************** taint_state_machine::on_condition (sm_co
*** 1306,1313 ****
  
  void
  taint_state_machine::on_bounded_ranges (sm_context &sm_ctxt,
- 					const supernode *,
- 					const gimple *stmt,
  					const svalue &sval,
  					const bounded_ranges &ranges) const
  {
--- 1290,1295 ----
*************** taint_state_machine::on_bounded_ranges (
*** 1335,1354 ****
  
    /* We have new bounds from the ranges; combine them with any
       existing bounds on SVAL.  */
!   state_t old_state = sm_ctxt.get_state (stmt, &sval);
    if (old_state == m_tainted)
      {
        if (ranges_have_lb && ranges_have_ub)
! 	sm_ctxt.set_next_state (stmt, &sval, m_stop);
        else if (ranges_have_lb)
! 	sm_ctxt.set_next_state (stmt, &sval, m_has_lb);
        else if (ranges_have_ub)
! 	sm_ctxt.set_next_state (stmt, &sval, m_has_ub);
      }
    else if (old_state == m_has_ub && ranges_have_lb)
!     sm_ctxt.set_next_state (stmt, &sval, m_stop);
    else if (old_state == m_has_lb && ranges_have_ub)
!     sm_ctxt.set_next_state (stmt, &sval, m_stop);
  }
  
  bool
--- 1317,1336 ----
  
    /* We have new bounds from the ranges; combine them with any
       existing bounds on SVAL.  */
!   state_t old_state = sm_ctxt.get_state (&sval);
    if (old_state == m_tainted)
      {
        if (ranges_have_lb && ranges_have_ub)
! 	sm_ctxt.set_next_state (&sval, m_stop);
        else if (ranges_have_lb)
! 	sm_ctxt.set_next_state (&sval, m_has_lb);
        else if (ranges_have_ub)
! 	sm_ctxt.set_next_state (&sval, m_has_ub);
      }
    else if (old_state == m_has_ub && ranges_have_lb)
!     sm_ctxt.set_next_state (&sval, m_stop);
    else if (old_state == m_has_lb && ranges_have_ub)
!     sm_ctxt.set_next_state (&sval, m_stop);
  }
  
  bool
*************** taint_state_machine::combine_states (sta
*** 1426,1432 ****
  
  void
  taint_state_machine::check_for_tainted_size_arg (sm_context &sm_ctxt,
- 						 const supernode *node,
  						 const gcall &call,
  						 tree callee_fndecl) const
  {
--- 1408,1413 ----
*************** taint_state_machine::check_for_tainted_s
*** 1460,1473 ****
  
        tree size_arg = gimple_call_arg (&call, access->sizarg);
  
!       state_t state = sm_ctxt.get_state (&call, size_arg);
        enum bounds b;
        if (get_taint (state, TREE_TYPE (size_arg), &b))
  	{
  	  const char* const access_str =
  	    TREE_STRING_POINTER (access->to_external_string ());
  	  tree diag_size = sm_ctxt.get_diagnostic_tree (size_arg);
! 	  sm_ctxt.warn (node, &call, size_arg,
  			std::make_unique<tainted_access_attrib_size>
  			(*this, diag_size, b,
  			 callee_fndecl,
--- 1441,1454 ----
  
        tree size_arg = gimple_call_arg (&call, access->sizarg);
  
!       state_t state = sm_ctxt.get_state (size_arg);
        enum bounds b;
        if (get_taint (state, TREE_TYPE (size_arg), &b))
  	{
  	  const char* const access_str =
  	    TREE_STRING_POINTER (access->to_external_string ());
  	  tree diag_size = sm_ctxt.get_diagnostic_tree (size_arg);
! 	  sm_ctxt.warn (size_arg,
  			std::make_unique<tainted_access_attrib_size>
  			(*this, diag_size, b,
  			 callee_fndecl,
*************** taint_state_machine::check_for_tainted_s
*** 1482,1488 ****
  
  void
  taint_state_machine::check_for_tainted_divisor (sm_context &sm_ctxt,
- 						const supernode *node,
  						const gassign *assign) const
  {
    const region_model *old_model = sm_ctxt.get_old_region_model ();
--- 1463,1468 ----
*************** taint_state_machine::check_for_tainted_d
*** 1498,1504 ****
  
    const svalue *divisor_sval = old_model->get_rvalue (divisor_expr, nullptr);
  
!   state_t state = sm_ctxt.get_state (assign, divisor_sval);
    enum bounds b;
    if (get_taint (state, TREE_TYPE (divisor_expr), &b))
      {
--- 1478,1484 ----
  
    const svalue *divisor_sval = old_model->get_rvalue (divisor_expr, nullptr);
  
!   state_t state = sm_ctxt.get_state (divisor_sval);
    enum bounds b;
    if (get_taint (state, TREE_TYPE (divisor_expr), &b))
      {
*************** taint_state_machine::check_for_tainted_d
*** 1513,1521 ****
  
        tree diag_divisor = sm_ctxt.get_diagnostic_tree (divisor_expr);
        sm_ctxt.warn
! 	(node, assign, divisor_expr,
  	 std::make_unique <tainted_divisor> (*this, diag_divisor, b));
!       sm_ctxt.set_next_state (assign, divisor_sval, m_stop);
      }
  }
  
--- 1493,1501 ----
  
        tree diag_divisor = sm_ctxt.get_diagnostic_tree (divisor_expr);
        sm_ctxt.warn
! 	(divisor_expr,
  	 std::make_unique <tainted_divisor> (*this, diag_divisor, b));
!       sm_ctxt.set_next_state (divisor_sval, m_stop);
      }
  }
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm.cc gcc-16-20251214/gcc/analyzer/sm.cc
*** gcc-16-20251207/gcc/analyzer/sm.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm.cc	Sun Dec 14 22:32:06 2025
*************** state_machine::to_json () const
*** 161,176 ****
  }
  
  void
! state_machine::add_state_to_state_graph (analyzer_state_graph &out_state_graph,
! 					 const svalue &sval,
! 					 state_machine::state_t state) const
  {
    // no-op
  }
  
  void
! state_machine::add_global_state_to_state_graph (analyzer_state_graph &out_state_graph,
! 						state_machine::state_t state) const
  {
    // no-op
  }
--- 161,176 ----
  }
  
  void
! state_machine::add_state_to_state_graph (analyzer_state_graph &/*out_state_graph*/,
! 					 const svalue &/*sval*/,
! 					 state_machine::state_t /*state*/) const
  {
    // no-op
  }
  
  void
! state_machine::add_global_state_to_state_graph (analyzer_state_graph &/*out_state_graph*/,
! 						state_machine::state_t /*state*/) const
  {
    // no-op
  }
diff -Nrcpad gcc-16-20251207/gcc/analyzer/sm.h gcc-16-20251214/gcc/analyzer/sm.h
*** gcc-16-20251207/gcc/analyzer/sm.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/sm.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 21,26 ****
--- 21,28 ----
  #ifndef GCC_ANALYZER_SM_H
  #define GCC_ANALYZER_SM_H
  
+ #include "analyzer/analyzer-logging.h"
+ 
  /* Utility functions for use by state machines.  */
  
  namespace ana {
*************** public:
*** 96,114 ****
  
    /* Return true if STMT is a function call recognized by this sm.  */
    virtual bool on_stmt (sm_context &sm_ctxt,
- 			const supernode *node,
  			const gimple *stmt) const = 0;
  
    virtual void on_phi (sm_context &sm_ctxt ATTRIBUTE_UNUSED,
- 		       const supernode *node ATTRIBUTE_UNUSED,
  		       const gphi *phi ATTRIBUTE_UNUSED,
  		       tree rhs ATTRIBUTE_UNUSED) const
    {
    }
  
    virtual void on_condition (sm_context &sm_ctxt ATTRIBUTE_UNUSED,
- 			     const supernode *node ATTRIBUTE_UNUSED,
- 			     const gimple *stmt ATTRIBUTE_UNUSED,
  			     const svalue *lhs ATTRIBUTE_UNUSED,
  			     enum tree_code op ATTRIBUTE_UNUSED,
  			     const svalue *rhs ATTRIBUTE_UNUSED) const
--- 98,118 ----
  
    /* Return true if STMT is a function call recognized by this sm.  */
    virtual bool on_stmt (sm_context &sm_ctxt,
  			const gimple *stmt) const = 0;
  
    virtual void on_phi (sm_context &sm_ctxt ATTRIBUTE_UNUSED,
  		       const gphi *phi ATTRIBUTE_UNUSED,
  		       tree rhs ATTRIBUTE_UNUSED) const
    {
    }
  
+   virtual void
+   check_call_preconditions (sm_context &sm_ctxt ATTRIBUTE_UNUSED,
+ 			    const call_details &cd ATTRIBUTE_UNUSED) const
+   {
+   }
+ 
    virtual void on_condition (sm_context &sm_ctxt ATTRIBUTE_UNUSED,
  			     const svalue *lhs ATTRIBUTE_UNUSED,
  			     enum tree_code op ATTRIBUTE_UNUSED,
  			     const svalue *rhs ATTRIBUTE_UNUSED) const
*************** public:
*** 117,124 ****
  
    virtual void
    on_bounded_ranges (sm_context &sm_ctxt ATTRIBUTE_UNUSED,
- 		     const supernode *node ATTRIBUTE_UNUSED,
- 		     const gimple *stmt ATTRIBUTE_UNUSED,
  		     const svalue &sval ATTRIBUTE_UNUSED,
  		     const bounded_ranges &ranges ATTRIBUTE_UNUSED) const
    {
--- 121,126 ----
*************** public:
*** 236,242 ****
  };
  
  /* Abstract base class giving an interface for the state machine to call
!    the checker engine, at a particular stmt.  */
  
  class sm_context
  {
--- 238,244 ----
  };
  
  /* Abstract base class giving an interface for the state machine to call
!    the checker engine, at a particular code location.  */
  
  class sm_context
  {
*************** public:
*** 249,306 ****
       other callback handling.  */
    virtual tree get_fndecl_for_call (const gcall &call) = 0;
  
!   /* Get the old state of VAR at STMT.  */
!   virtual state_machine::state_t get_state (const gimple *stmt,
! 					    tree var) = 0;
!   virtual state_machine::state_t get_state (const gimple *stmt,
! 					    const svalue *) = 0;
    /* Set the next state of VAR to be TO, recording the "origin" of the
!      state as ORIGIN.
!      Use STMT for location information.  */
!   virtual void set_next_state (const gimple *stmt,
! 			       tree var,
  			       state_machine::state_t to,
  			       tree origin = NULL_TREE) = 0;
!   virtual void set_next_state (const gimple *stmt,
! 			       const svalue *var,
  			       state_machine::state_t to,
  			       tree origin = NULL_TREE) = 0;
  
    /* Called by state_machine in response to pattern matches:
       if VAR is in state FROM, transition it to state TO, potentially
!      recording the "origin" of the state as ORIGIN.
!      Use NODE and STMT for location information.  */
!   void on_transition (const supernode *node ATTRIBUTE_UNUSED,
! 		      const gimple *stmt,
! 		      tree var,
  		      state_machine::state_t from,
  		      state_machine::state_t to,
  		      tree origin = NULL_TREE)
    {
!     state_machine::state_t current = get_state (stmt, var);
      if (current == from)
!       set_next_state (stmt, var, to, origin);
    }
  
!   void on_transition (const supernode *node ATTRIBUTE_UNUSED,
! 		      const gimple *stmt,
! 		      const svalue *var,
  		      state_machine::state_t from,
  		      state_machine::state_t to,
  		      tree origin = NULL_TREE)
    {
!     state_machine::state_t current = get_state (stmt, var);
      if (current == from)
!       set_next_state (stmt, var, to, origin);
    }
  
    /* Called by state_machine in response to pattern matches:
!      issue a diagnostic D using NODE and STMT for location information.  */
!   virtual void warn (const supernode *node, const gimple *stmt,
! 		     tree var,
  		     std::unique_ptr<pending_diagnostic> d) = 0;
!   virtual void warn (const supernode *node, const gimple *stmt,
! 		     const svalue *var,
  		     std::unique_ptr<pending_diagnostic> d) = 0;
  
    /* For use when generating trees when creating pending_diagnostics, so that
--- 251,297 ----
       other callback handling.  */
    virtual tree get_fndecl_for_call (const gcall &call) = 0;
  
!   /* Get the old state of VAR.  */
!   virtual state_machine::state_t get_state (tree var) = 0;
!   virtual state_machine::state_t get_state (const svalue *) = 0;
! 
    /* Set the next state of VAR to be TO, recording the "origin" of the
!      state as ORIGIN.  */
!   virtual void set_next_state (tree var,
  			       state_machine::state_t to,
  			       tree origin = NULL_TREE) = 0;
!   virtual void set_next_state (const svalue *var,
  			       state_machine::state_t to,
  			       tree origin = NULL_TREE) = 0;
  
    /* Called by state_machine in response to pattern matches:
       if VAR is in state FROM, transition it to state TO, potentially
!      recording the "origin" of the state as ORIGIN.  */
!   void on_transition (tree var,
  		      state_machine::state_t from,
  		      state_machine::state_t to,
  		      tree origin = NULL_TREE)
    {
!     state_machine::state_t current = get_state (var);
      if (current == from)
!       set_next_state (var, to, origin);
    }
  
!   void on_transition (const svalue *var,
  		      state_machine::state_t from,
  		      state_machine::state_t to,
  		      tree origin = NULL_TREE)
    {
!     state_machine::state_t current = get_state (var);
      if (current == from)
!       set_next_state (var, to, origin);
    }
  
    /* Called by state_machine in response to pattern matches:
!      issue a diagnostic D about VAR.  */
!   virtual void warn (tree var,
  		     std::unique_ptr<pending_diagnostic> d) = 0;
!   virtual void warn (const svalue *var,
  		     std::unique_ptr<pending_diagnostic> d) = 0;
  
    /* For use when generating trees when creating pending_diagnostics, so that
*************** public:
*** 341,346 ****
--- 332,340 ----
  
    const region_model *get_old_region_model () const;
  
+   /* Get the location a diagnostic would be emitted at.  */
+   virtual location_t get_emission_location () const = 0;
+ 
  protected:
    sm_context (int sm_idx, const state_machine &sm)
    : m_sm_idx (sm_idx), m_sm (sm) {}
diff -Nrcpad gcc-16-20251207/gcc/analyzer/state-purge.cc gcc-16-20251214/gcc/analyzer/state-purge.cc
*** gcc-16-20251207/gcc/analyzer/state-purge.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/state-purge.cc	Sun Dec 14 22:32:06 2025
*************** You should have received a copy of the G
*** 18,23 ****
--- 18,24 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define INCLUDE_SET
  #include "analyzer/common.h"
  
  #include "timevar.h"
*************** get_candidate_for_purging (tree node)
*** 75,93 ****
  }
  
  /* Class-based handler for walk_stmt_load_store_addr_ops at a particular
!    function_point, for populating the worklists within a state_purge_map.  */
  
  class gimple_op_visitor : public log_user
  {
  public:
    gimple_op_visitor (state_purge_map *map,
! 		     const function_point &point,
! 		     const function &fun)
    : log_user (map->get_logger ()),
      m_map (map),
!     m_point (point),
!     m_fun (fun)
!   {}
  
    bool on_load (gimple *stmt, tree base, tree op)
    {
--- 76,95 ----
  }
  
  /* Class-based handler for walk_stmt_load_store_addr_ops at a particular
!    ana::operation, for populating the worklists within a state_purge_map.  */
  
  class gimple_op_visitor : public log_user
  {
  public:
    gimple_op_visitor (state_purge_map *map,
! 		     const superedge &sedge)
    : log_user (map->get_logger ()),
      m_map (map),
!     m_sedge (sedge),
!     m_fun (sedge.m_src->get_function ())
!   {
!     gcc_assert (m_fun);
!   }
  
    bool on_load (gimple *stmt, tree base, tree op)
    {
*************** private:
*** 143,171 ****
      gcc_assert (get_candidate_for_purging (decl) == decl);
      state_purge_per_decl &data
        = get_or_create_data_for_decl (decl);
!     data.add_needed_at (m_point);
! 
!     /* Handle calls: if we're seeing a use at a call, then add a use at the
!        "after-supernode" point (in case of interprocedural call superedges).  */
!     if (m_point.final_stmt_p ())
!       data.add_needed_at (m_point.get_next ());
    }
  
    void add_pointed_to (tree decl)
    {
      gcc_assert (get_candidate_for_purging (decl) == decl);
!     get_or_create_data_for_decl (decl).add_pointed_to_at (m_point);
    }
  
    state_purge_per_decl &
    get_or_create_data_for_decl (tree decl)
    {
!     return m_map->get_or_create_data_for_decl (m_fun, decl);
    }
  
    state_purge_map *m_map;
!   const function_point &m_point;
!   const function &m_fun;
  };
  
  static bool
--- 145,168 ----
      gcc_assert (get_candidate_for_purging (decl) == decl);
      state_purge_per_decl &data
        = get_or_create_data_for_decl (decl);
!     data.add_needed_at (*m_sedge.m_src);
    }
  
    void add_pointed_to (tree decl)
    {
      gcc_assert (get_candidate_for_purging (decl) == decl);
!     get_or_create_data_for_decl (decl).add_pointed_to_at (*m_sedge.m_src);
    }
  
    state_purge_per_decl &
    get_or_create_data_for_decl (tree decl)
    {
!     return m_map->get_or_create_data_for_decl (*m_fun, decl);
    }
  
    state_purge_map *m_map;
!   const superedge &m_sedge;
!   const function *m_fun;
  };
  
  static bool
*************** state_purge_map::state_purge_map (const
*** 224,246 ****
    }
  
    /* Find all uses of local vars.
!      We iterate through all function points, finding loads, stores, and
       address-taken operations on locals, building a pair of worklists.  */
!   for (auto snode : sg.m_nodes)
      {
        if (logger)
! 	log ("SN: %i", snode->m_index);
!       /* We ignore m_returning_call and phi nodes.  */
!       gimple *stmt;
!       unsigned i;
!       FOR_EACH_VEC_ELT (snode->m_stmts, i, stmt)
  	{
! 	  function *fun = snode->get_function ();
! 	  gcc_assert (fun);
! 	  function_point point (function_point::before_stmt (snode, i));
! 	  gimple_op_visitor v (this, point, *fun);
! 	  walk_stmt_load_store_addr_ops (stmt, &v,
! 					 my_load_cb, my_store_cb, my_addr_cb);
  	}
      }
  
--- 221,239 ----
    }
  
    /* Find all uses of local vars.
!      We iterate through all operations, finding loads, stores, and
       address-taken operations on locals, building a pair of worklists.  */
!   for (auto sedge : sg.m_edges)
      {
        if (logger)
! 	log ("edge: SN %i -> SN %i",
! 	     sedge->m_src->m_id,
! 	     sedge->m_dest->m_id);
!       if (auto op = sedge->get_op ())
  	{
! 	  gimple_op_visitor v (this, *sedge);
! 	  op->walk_load_store_addr_ops (&v,
! 					my_load_cb, my_store_cb, my_addr_cb);
  	}
      }
  
*************** state_purge_map::get_or_create_data_for_
*** 278,283 ****
--- 271,286 ----
    return *result;
  }
  
+ void
+ state_purge_map::on_duplicated_node (const supernode &old_snode,
+ 				     const supernode &new_snode)
+ {
+   for (auto iter : m_ssa_map)
+     iter.second->on_duplicated_node (old_snode, new_snode);
+   for (auto iter : m_decl_map)
+     iter.second->on_duplicated_node (old_snode, new_snode);
+ }
+ 
  /* class state_purge_per_ssa_name : public state_purge_per_tree.  */
  
  /* state_purge_per_ssa_name's ctor.
*************** state_purge_map::get_or_create_data_for_
*** 292,298 ****
  state_purge_per_ssa_name::state_purge_per_ssa_name (const state_purge_map &map,
  						    tree name,
  						    const function &fun)
! : state_purge_per_tree (fun), m_points_needing_name (), m_name (name)
  {
    LOG_FUNC (map.get_logger ());
  
--- 295,301 ----
  state_purge_per_ssa_name::state_purge_per_ssa_name (const state_purge_map &map,
  						    tree name,
  						    const function &fun)
! : state_purge_per_tree (fun), m_snodes_needing_name (), m_name (name)
  {
    LOG_FUNC (map.get_logger ());
  
*************** state_purge_per_ssa_name::state_purge_pe
*** 307,313 ****
        map.log ("def stmt: %s", pp_formatted_text (&pp));
      }
  
!   auto_vec<function_point> worklist;
  
    /* Add all immediate uses of name to the worklist.
       Compare with debug_immediate_uses.  */
--- 310,316 ----
        map.log ("def stmt: %s", pp_formatted_text (&pp));
      }
  
!   auto_vec<const supernode *> worklist;
  
    /* Add all immediate uses of name to the worklist.
       Compare with debug_immediate_uses.  */
*************** state_purge_per_ssa_name::state_purge_pe
*** 334,395 ****
  	      continue;
  	    }
  
- 	  const supernode *snode
- 	    = map.get_sg ().get_supernode_for_stmt (use_stmt);
- 
  	  /* If it's a use within a phi node, then we care about
  	     which in-edge we came from.  */
  	  if (use_stmt->code == GIMPLE_PHI)
  	    {
! 	      for (gphi_iterator gpi
! 		     = const_cast<supernode *> (snode)->start_phis ();
! 		   !gsi_end_p (gpi); gsi_next (&gpi))
  		{
! 		  gphi *phi = gpi.phi ();
! 		  if (phi == use_stmt)
  		    {
! 		      /* Find arguments (and thus in-edges) which use NAME.  */
! 		      for (unsigned arg_idx = 0;
! 			   arg_idx < gimple_phi_num_args (phi);
! 			   ++arg_idx)
  			{
! 			  if (name == gimple_phi_arg (phi, arg_idx)->def)
! 			    {
! 			      edge in_edge = gimple_phi_arg_edge (phi, arg_idx);
! 			      const superedge *in_sedge
! 				= map.get_sg ().get_edge_for_cfg_edge (in_edge);
! 			      function_point point
! 				= function_point::before_supernode
! 				(snode, in_sedge);
! 			      add_to_worklist (point, &worklist,
! 					       map.get_logger ());
! 			      m_points_needing_name.add (point);
! 			    }
  			}
  		    }
  		}
  	    }
  	  else
  	    {
! 	      function_point point = before_use_stmt (map, use_stmt);
! 	      add_to_worklist (point, &worklist, map.get_logger ());
! 	      m_points_needing_name.add (point);
! 
! 	      /* We also need to add uses for conditionals and switches,
! 		 where the stmt "happens" at the after_supernode, for filtering
! 		 the out-edges.  */
! 	      if (use_stmt == snode->get_last_stmt ())
! 		{
! 		  if (map.get_logger ())
! 		    map.log ("last stmt in BB");
! 		  function_point point
! 		    = function_point::after_supernode (snode);
! 		  add_to_worklist (point, &worklist, map.get_logger ());
! 		  m_points_needing_name.add (point);
! 		}
! 	      else
! 		if (map.get_logger ())
! 		  map.log ("not last stmt in BB");
  	    }
  	}
      }
--- 337,379 ----
  	      continue;
  	    }
  
  	  /* If it's a use within a phi node, then we care about
  	     which in-edge we came from.  */
  	  if (use_stmt->code == GIMPLE_PHI)
  	    {
! 	      const gphi *phi = as_a <const gphi *> (use_stmt);
! 	      /* Find arguments (and thus CFG in-edges) which use NAME.  */
! 	      for (unsigned arg_idx = 0;
! 		   arg_idx < gimple_phi_num_args (phi);
! 		   ++arg_idx)
  		{
! 		  if (name == gimple_phi_arg (phi, arg_idx)->def)
  		    {
! 		      edge in_edge = gimple_phi_arg_edge (phi, arg_idx);
! 		      const superedge *in_sedge
! 			= map.get_sg ().get_superedge_for_phis (in_edge);
! 		      if (in_sedge)
  			{
! 			  add_to_worklist (*in_sedge->m_src,
! 					   &worklist,
! 					   map.get_logger ());
! 			  m_snodes_needing_name.add (in_sedge->m_src);
! 			}
! 		      else
! 			{
! 			  /* Should only happen for abnormal edges, which
! 			     get skipped in supergraph construction.  */
! 			  gcc_assert (in_edge->flags & EDGE_ABNORMAL);
  			}
  		    }
  		}
  	    }
  	  else
  	    {
! 	      const supernode *snode
! 		= map.get_sg ().get_supernode_for_stmt (use_stmt);
! 	      add_to_worklist (*snode, &worklist, map.get_logger ());
! 	      m_snodes_needing_name.add (snode);
  	    }
  	}
      }
*************** state_purge_per_ssa_name::state_purge_pe
*** 399,673 ****
      log_scope s (map.get_logger (), "processing worklist");
      while (worklist.length () > 0)
        {
! 	function_point point = worklist.pop ();
! 	process_point (point, &worklist, map);
      }
    }
  
    if (map.get_logger ())
      {
        map.log ("%qE in %qD is needed to process:", name, fun.decl);
!       /* Log m_points_needing_name, sorting it to avoid churn when comparing
  	 dumps.  */
!       auto_vec<function_point> points;
!       for (point_set_t::iterator iter = m_points_needing_name.begin ();
! 	   iter != m_points_needing_name.end ();
! 	   ++iter)
! 	points.safe_push (*iter);
!       points.qsort (function_point::cmp_ptr);
!       unsigned i;
!       function_point *point;
!       FOR_EACH_VEC_ELT (points, i, point)
! 	{
! 	  map.start_log_line ();
! 	  map.get_logger ()->log_partial ("  point: ");
! 	  point->print (map.get_logger ()->get_printer (), format (false));
! 	  map.end_log_line ();
! 	}
      }
  }
  
  /* Return true if the SSA name is needed at POINT.  */
  
  bool
! state_purge_per_ssa_name::needed_at_point_p (const function_point &point) const
! {
!   return const_cast <point_set_t &> (m_points_needing_name).contains (point);
! }
! 
! /* Get the function_point representing immediately before USE_STMT.
!    Subroutine of ctor.  */
! 
! function_point
! state_purge_per_ssa_name::before_use_stmt (const state_purge_map &map,
! 					   const gimple *use_stmt)
  {
!   gcc_assert (use_stmt->code != GIMPLE_PHI);
! 
!   const supernode *supernode
!     = map.get_sg ().get_supernode_for_stmt (use_stmt);
!   unsigned int stmt_idx = supernode->get_stmt_index (use_stmt);
!   return function_point::before_stmt (supernode, stmt_idx);
  }
  
! /* Add POINT to *WORKLIST if the point has not already been seen.
     Subroutine of ctor.  */
  
  void
! state_purge_per_ssa_name::add_to_worklist (const function_point &point,
! 					   auto_vec<function_point> *worklist,
  					   logger *logger)
  {
    LOG_FUNC (logger);
-   if (logger)
-     {
-       logger->start_log_line ();
-       logger->log_partial ("point: '");
-       point.print (logger->get_printer (), format (false));
-       logger->log_partial ("' for worklist for %qE", m_name);
-       logger->end_log_line ();
-     }
  
!   gcc_assert (point.get_function () == &get_function ());
!   if (point.get_from_edge ())
!     gcc_assert (point.get_from_edge ()->get_kind () == SUPEREDGE_CFG_EDGE);
  
!   if (m_points_needing_name.contains (point))
      {
        if (logger)
! 	logger->log ("already seen for %qE", m_name);
      }
    else
      {
        if (logger)
! 	logger->log ("not seen; adding to worklist for %qE", m_name);
!       m_points_needing_name.add (point);
!       worklist->safe_push (point);
!     }
! }
! 
! /* Return true iff NAME is used by any of the phi nodes in SNODE
!    when processing the in-edge with PHI_ARG_IDX.  */
! 
! static bool
! name_used_by_phis_p (tree name, const supernode *snode,
! 		     size_t phi_arg_idx)
! {
!   gcc_assert (TREE_CODE (name) == SSA_NAME);
! 
!   for (gphi_iterator gpi
! 	 = const_cast<supernode *> (snode)->start_phis ();
!        !gsi_end_p (gpi); gsi_next (&gpi))
!     {
!       gphi *phi = gpi.phi ();
!       if (gimple_phi_arg_def (phi, phi_arg_idx) == name)
! 	return true;
      }
-   return false;
  }
  
! /* Process POINT, popped from WORKLIST.
!    Iterate over predecessors of POINT, adding to WORKLIST.  */
  
  void
! state_purge_per_ssa_name::process_point (const function_point &point,
! 					 auto_vec<function_point> *worklist,
! 					 const state_purge_map &map)
  {
    logger *logger = map.get_logger ();
    LOG_FUNC (logger);
    if (logger)
!     {
!       logger->start_log_line ();
!       logger->log_partial ("considering point: '");
!       point.print (logger->get_printer (), format (false));
!       logger->log_partial ("' for %qE", m_name);
!       logger->end_log_line ();
!     }
! 
!   gimple *def_stmt = SSA_NAME_DEF_STMT (m_name);
! 
!   const supernode *snode = point.get_supernode ();
  
!   switch (point.get_kind ())
      {
!     default:
!       gcc_unreachable ();
! 
!     case PK_ORIGIN:
!       break;
! 
!     case PK_BEFORE_SUPERNODE:
!       {
! 	for (gphi_iterator gpi
! 	       = const_cast<supernode *> (snode)->start_phis ();
! 	     !gsi_end_p (gpi); gsi_next (&gpi))
! 	  {
! 	    gcc_assert (point.get_from_edge ());
! 	    const cfg_superedge *cfg_sedge
! 	      = point.get_from_edge ()->dyn_cast_cfg_superedge ();
! 	    gcc_assert (cfg_sedge);
! 
! 	    gphi *phi = gpi.phi ();
! 	    /* Are we at the def-stmt for m_name?  */
! 	    if (phi == def_stmt)
! 	      {
! 		if (name_used_by_phis_p (m_name, snode,
! 					 cfg_sedge->get_phi_arg_idx ()))
! 		  {
! 		    if (logger)
! 		      logger->log ("name in def stmt used within phis;"
! 				   " continuing");
! 		  }
! 		else
! 		  {
! 		    if (logger)
! 		      logger->log ("name in def stmt not used within phis;"
! 				   " terminating");
! 		    return;
! 		  }
! 	      }
! 	  }
! 
! 	/* Add given pred to worklist.  */
! 	if (point.get_from_edge ())
! 	  {
! 	    gcc_assert (point.get_from_edge ()->m_src);
! 	    add_to_worklist
! 	      (function_point::after_supernode (point.get_from_edge ()->m_src),
! 	       worklist, logger);
! 	  }
! 	else
! 	  {
! 	    /* Add any intraprocedually edge for a call.  */
! 	    if (snode->m_returning_call)
! 	    {
! 	      gcall *returning_call = snode->m_returning_call;
! 	      cgraph_edge *cedge
! 		  = supergraph_call_edge (snode->m_fun,
! 					  returning_call);
! 	      if(cedge)
! 	        {
! 		  superedge *sedge
! 		    = map.get_sg ().get_intraprocedural_edge_for_call (cedge);
! 		  gcc_assert (sedge);
! 		  add_to_worklist
! 		    (function_point::after_supernode (sedge->m_src),
! 		     worklist, logger);
! 	        }
! 	      else
! 	        {
! 	          supernode *callernode
! 	            = map.get_sg ().get_supernode_for_stmt (returning_call);
! 
! 	          gcc_assert (callernode);
! 	          add_to_worklist
! 	            (function_point::after_supernode (callernode),
! 		     worklist, logger);
! 	         }
! 	    }
! 	  }
!       }
!       break;
! 
!     case PK_BEFORE_STMT:
!       {
! 	if (def_stmt == point.get_stmt ())
! 	  {
! 	    if (logger)
! 	      logger->log ("def stmt; terminating");
! 	    return;
! 	  }
! 	if (point.get_stmt_idx () > 0)
! 	  add_to_worklist (function_point::before_stmt
! 			     (snode, point.get_stmt_idx () - 1),
! 			   worklist, logger);
! 	else
  	{
! 	  /* Add before_supernode to worklist.  This captures the in-edge,
! 	     so we have to do it once per in-edge.  */
! 	  unsigned i;
! 	  superedge *pred;
! 	  FOR_EACH_VEC_ELT (snode->m_preds, i, pred)
! 	    add_to_worklist (function_point::before_supernode (snode,
! 							       pred),
! 			     worklist, logger);
  	}
!       }
!       break;
! 
!     case PK_AFTER_SUPERNODE:
!       {
! 	if (snode->m_stmts.length ())
! 	  add_to_worklist
! 	    (function_point::before_stmt (snode,
! 					  snode->m_stmts.length () - 1),
! 	     worklist, logger);
! 	else
! 	  {
! 	    /* Add before_supernode to worklist.  This captures the in-edge,
! 	       so we have to do it once per in-edge.  */
! 	    unsigned i;
! 	    superedge *pred;
! 	    FOR_EACH_VEC_ELT (snode->m_preds, i, pred)
! 	      add_to_worklist (function_point::before_supernode (snode,
! 								 pred),
! 			       worklist, logger);
! 	    /* If it's the initial BB, add it, to ensure that we
! 	       have "before supernode" for the initial ENTRY block, and don't
! 	       erroneously purge SSA names for initial values of parameters.  */
! 	    if (snode->entry_p ())
! 	      {
! 		add_to_worklist
! 		  (function_point::before_supernode (snode, nullptr),
! 		   worklist, logger);
! 	      }
! 	  }
!       }
!       break;
      }
  }
  
  /* class state_purge_per_decl : public state_purge_per_tree.  */
  
  /* state_purge_per_decl's ctor.  */
--- 383,482 ----
      log_scope s (map.get_logger (), "processing worklist");
      while (worklist.length () > 0)
        {
! 	const supernode *snode = worklist.pop ();
! 	gcc_assert (snode);
! 	process_supernode (*snode, &worklist, map);
      }
    }
  
    if (map.get_logger ())
      {
        map.log ("%qE in %qD is needed to process:", name, fun.decl);
!       /* Log m_snodes_needing_name, sorting it to avoid churn when comparing
  	 dumps.  */
!       std::set<int> indices;
!       auto_vec<const supernode *> snodes;
!       for (auto iter : m_snodes_needing_name)
! 	indices.insert (iter->m_id);
!       for (auto iter : indices)
! 	map.get_logger ()->log ("  SN %i", iter);
      }
  }
  
  /* Return true if the SSA name is needed at POINT.  */
  
  bool
! state_purge_per_ssa_name::needed_at_supernode_p (const supernode *snode) const
  {
!   return const_cast <point_set_t &> (m_snodes_needing_name).contains (snode);
  }
  
! /* Add SNODE to *WORKLIST if the supernode has not already been seen.
     Subroutine of ctor.  */
  
  void
! state_purge_per_ssa_name::add_to_worklist (const supernode &snode,
! 					   auto_vec<const supernode *> *worklist,
  					   logger *logger)
  {
    LOG_FUNC (logger);
  
!   gcc_assert (snode.get_function () == &get_function ());
  
!   if (m_snodes_needing_name.contains (&snode))
      {
        if (logger)
! 	logger->log ("SN %i already seen for %qE", snode.m_id, m_name);
      }
    else
      {
        if (logger)
! 	logger->log ("not seen; adding SN %i to worklist for %qE",
! 		     snode.m_id, m_name);
!       m_snodes_needing_name.add (&snode);
!       worklist->safe_push (&snode);
      }
  }
  
! /* Process SNODE, popped from WORKLIST.
!    Iterate over predecessors of SNODE, adding to WORKLIST.  */
  
  void
! state_purge_per_ssa_name::process_supernode (const supernode &snode,
! 					     auto_vec<const supernode *> *worklist,
! 					     const state_purge_map &map)
  {
    logger *logger = map.get_logger ();
    LOG_FUNC (logger);
    if (logger)
!     logger->log ("considering SN %i for %qE", snode.m_id, m_name);
  
!   for (auto in_edge : snode.m_preds)
      {
!       if (logger)
! 	logger->log ("considering edge from SN %i", in_edge->m_src->m_id);
!       bool defines_ssa_name = false;
!       if (auto op = in_edge->get_op ())
! 	if (op->defines_ssa_name_p (m_name))
! 	  defines_ssa_name = true;
!       if (defines_ssa_name)
  	{
! 	  if (logger)
! 	    logger->log ("op defines %qE", m_name);
  	}
!       else
! 	add_to_worklist (*in_edge->m_src, worklist, logger);
      }
  }
  
+ void
+ state_purge_per_ssa_name::on_duplicated_node (const supernode &old_snode,
+ 					      const supernode &new_snode)
+ {
+   if (m_snodes_needing_name.contains (&old_snode))
+     m_snodes_needing_name.add (&new_snode);
+ }
+ 
  /* class state_purge_per_decl : public state_purge_per_tree.  */
  
  /* state_purge_per_decl's ctor.  */
*************** state_purge_per_decl::state_purge_per_de
*** 682,715 ****
    if (TREE_CODE (decl) == RESULT_DECL)
      {
        supernode *exit_snode = map.get_sg ().get_node_for_function_exit (fun);
!       add_needed_at (function_point::after_supernode (exit_snode));
      }
  }
  
  /* Mark the value of the decl (or a subvalue within it) as being needed
!    at POINT.  */
  
  void
! state_purge_per_decl::add_needed_at (const function_point &point)
  {
!   m_points_needing_decl.add (point);
  }
  
  /* Mark that a pointer to the decl (or a region within it) is taken
!    at POINT.  */
  
  void
! state_purge_per_decl::add_pointed_to_at (const function_point &point)
  {
!   m_points_taking_address.add (point);
  }
  
  /* Process the worklists for this decl:
!    (a) walk backwards from points where we know the value of the decl
!    is needed, marking points until we get to a stmt that fully overwrites
     the decl.
!    (b) walk forwards from points where the address of the decl is taken,
!    marking points as potentially needing the value of the decl.  */
  
  void
  state_purge_per_decl::process_worklists (const state_purge_map &map,
--- 491,524 ----
    if (TREE_CODE (decl) == RESULT_DECL)
      {
        supernode *exit_snode = map.get_sg ().get_node_for_function_exit (fun);
!       add_needed_at (*exit_snode);
      }
  }
  
  /* Mark the value of the decl (or a subvalue within it) as being needed
!    at SNODE.  */
  
  void
! state_purge_per_decl::add_needed_at (const supernode &snode)
  {
!   m_snodes_needing_decl.add (&snode);
  }
  
  /* Mark that a pointer to the decl (or a region within it) is taken
!    at SNODE.  */
  
  void
! state_purge_per_decl::add_pointed_to_at (const supernode &snode)
  {
!   m_snodes_taking_address.add (&snode);
  }
  
  /* Process the worklists for this decl:
!    (a) walk backwards from snodes where we know the value of the decl
!    is needed, marking snodes until we get to a stmt that fully overwrites
     the decl.
!    (b) walk forwards from snodes where the address of the decl is taken,
!    marking snodes as potentially needing the value of the decl.  */
  
  void
  state_purge_per_decl::process_worklists (const state_purge_map &map,
*************** state_purge_per_decl::process_worklists
*** 722,732 ****
  
    /* Worklist for walking backwards from uses.  */
    {
!     auto_vec<function_point> worklist;
      point_set_t seen;
  
      /* Add all uses of the decl to the worklist.  */
!     for (auto iter : m_points_needing_decl)
        worklist.safe_push (iter);
  
      region_model model (mgr);
--- 531,541 ----
  
    /* Worklist for walking backwards from uses.  */
    {
!     auto_vec<const supernode *> worklist;
      point_set_t seen;
  
      /* Add all uses of the decl to the worklist.  */
!     for (auto iter : m_snodes_needing_decl)
        worklist.safe_push (iter);
  
      region_model model (mgr);
*************** state_purge_per_decl::process_worklists
*** 738,762 ****
        log_scope s (logger, "processing worklist");
        while (worklist.length () > 0)
  	{
! 	  function_point point = worklist.pop ();
! 	  process_point_backwards (point, &worklist, &seen, map, model);
  	}
      }
    }
  
!   /* Worklist for walking forwards from address-taken points.  */
    {
!     auto_vec<function_point> worklist;
      point_set_t seen;
  
      /* Add all uses of the decl to the worklist.  */
!     for (auto iter : m_points_taking_address)
        {
  	worklist.safe_push (iter);
  
! 	/* Add to m_points_needing_decl (now that we traversed
  	   it above for the backward worklist).  */
! 	m_points_needing_decl.add (iter);
        }
  
      /* Process worklist by walking forwards. */
--- 547,571 ----
        log_scope s (logger, "processing worklist");
        while (worklist.length () > 0)
  	{
! 	  const supernode *snode = worklist.pop ();
! 	  process_supernode_backwards (*snode, &worklist, &seen, map, model);
  	}
      }
    }
  
!   /* Worklist for walking forwards from address-taken snodes.  */
    {
!     auto_vec<const supernode *> worklist;
      point_set_t seen;
  
      /* Add all uses of the decl to the worklist.  */
!     for (auto iter : m_snodes_taking_address)
        {
  	worklist.safe_push (iter);
  
! 	/* Add to m_snodes_needing_decl (now that we traversed
  	   it above for the backward worklist).  */
! 	m_snodes_needing_decl.add (iter);
        }
  
      /* Process worklist by walking forwards. */
*************** state_purge_per_decl::process_worklists
*** 764,800 ****
        log_scope s (logger, "processing worklist");
        while (worklist.length () > 0)
  	{
! 	  function_point point = worklist.pop ();
! 	  process_point_forwards (point, &worklist, &seen, map);
  	}
      }
    }
  }
  
! /* Add POINT to *WORKLIST if the point is not already in *seen.
!    Add newly seen points to *SEEN and to m_points_needing_name.  */
  
  void
! state_purge_per_decl::add_to_worklist (const function_point &point,
! 				       auto_vec<function_point> *worklist,
  				       point_set_t *seen,
  				       logger *logger)
  {
    LOG_FUNC (logger);
    if (logger)
!     {
!       logger->start_log_line ();
!       logger->log_partial ("point: '");
!       point.print (logger->get_printer (), format (false));
!       logger->log_partial ("' for worklist for %qE", m_decl);
!       logger->end_log_line ();
!     }
  
!   gcc_assert (point.get_function () == &get_function ());
!   if (point.get_from_edge ())
!     gcc_assert (point.get_from_edge ()->get_kind () == SUPEREDGE_CFG_EDGE);
  
!   if (seen->contains (point))
      {
        if (logger)
  	logger->log ("already seen for %qE", m_decl);
--- 573,601 ----
        log_scope s (logger, "processing worklist");
        while (worklist.length () > 0)
  	{
! 	  const supernode *snode = worklist.pop ();
! 	  process_supernode_forwards (*snode, &worklist, &seen, map);
  	}
      }
    }
  }
  
! /* Add SNODE to *WORKLIST if the point is not already in *seen.
!    Add newly seen supernodes to *SEEN and to m_snodes_needing_name.  */
  
  void
! state_purge_per_decl::add_to_worklist (const supernode &snode,
! 				       auto_vec<const supernode *> *worklist,
  				       point_set_t *seen,
  				       logger *logger)
  {
    LOG_FUNC (logger);
    if (logger)
!     logger->log ("SN %i for worklist for %qE", snode.m_id, m_decl);
  
!   gcc_assert (snode.get_function () == &get_function ());
  
!   if (seen->contains (&snode))
      {
        if (logger)
  	logger->log ("already seen for %qE", m_decl);
*************** state_purge_per_decl::add_to_worklist (c
*** 803,811 ****
      {
        if (logger)
  	logger->log ("not seen; adding to worklist for %qE", m_decl);
!       m_points_needing_decl.add (point);
!       seen->add (point);
!       worklist->safe_push (point);
      }
  }
  
--- 604,612 ----
      {
        if (logger)
  	logger->log ("not seen; adding to worklist for %qE", m_decl);
!       m_snodes_needing_decl.add (&snode);
!       seen->add (&snode);
!       worklist->safe_push (&snode);
      }
  }
  
*************** fully_overwrites_p (const gimple *stmt,
*** 850,1066 ****
    return false;
  }
  
! /* Process POINT, popped from *WORKLIST.
!    Iterate over predecessors of POINT, adding to *WORKLIST and *SEEN,
     until we get to a stmt that fully overwrites the decl.  */
  
  void
  state_purge_per_decl::
! process_point_backwards (const function_point &point,
! 			 auto_vec<function_point> *worklist,
! 			 point_set_t *seen,
! 			 const state_purge_map &map,
! 			 const region_model &model)
  {
    logger *logger = map.get_logger ();
    LOG_FUNC (logger);
    if (logger)
!     {
!       logger->start_log_line ();
!       logger->log_partial ("considering point: '");
!       point.print (logger->get_printer (), format (false));
!       logger->log_partial ("' for %qE", m_decl);
!       logger->end_log_line ();
!     }
!   const supernode *snode = point.get_supernode ();
  
!   switch (point.get_kind ())
      {
!     default:
!       gcc_unreachable ();
! 
!     case PK_ORIGIN:
!       break;
! 
!     case PK_BEFORE_SUPERNODE:
!       {
! 	/* Add given pred to worklist.  */
! 	if (point.get_from_edge ())
! 	  {
! 	    gcc_assert (point.get_from_edge ()->m_src);
! 	    add_to_worklist
! 	      (function_point::after_supernode (point.get_from_edge ()->m_src),
! 	       worklist, seen, logger);
! 	  }
! 	else
! 	  {
! 	    /* Add any intraprocedually edge for a call.  */
! 	    if (snode->m_returning_call)
! 	    {
! 	      gcall *returning_call = snode->m_returning_call;
! 	      cgraph_edge *cedge
! 		  = supergraph_call_edge (snode->m_fun,
! 					  returning_call);
! 	      if(cedge)
! 		{
! 		  superedge *sedge
! 		    = map.get_sg ().get_intraprocedural_edge_for_call (cedge);
! 		  gcc_assert (sedge);
! 		  add_to_worklist
! 		    (function_point::after_supernode (sedge->m_src),
! 		     worklist, seen, logger);
! 		}
! 	      else
! 		{
! 		  supernode *callernode
! 		    = map.get_sg ().get_supernode_for_stmt (returning_call);
! 
! 		  gcc_assert (callernode);
! 		  add_to_worklist
! 		    (function_point::after_supernode (callernode),
! 		     worklist, seen, logger);
! 		}
! 	    }
! 	  }
!       }
!       break;
  
!     case PK_BEFORE_STMT:
!       {
! 	/* This is somewhat equivalent to how the SSA case handles
! 	   def-stmts.  */
! 	if (fully_overwrites_p (point.get_stmt (), m_decl, model)
! 	    /* ...but we mustn't be at a point that also consumes the
! 	       current value of the decl when it's generating the new
! 	       value, for cases such as
! 		  struct st s;
! 		  s = foo ();
! 		  s = bar (s);
! 	       where we want to make sure that we don't stop at the:
! 		  s = bar (s);
! 	       since otherwise we would erroneously purge the state of "s"
! 	       after:
! 		  s = foo ();
! 	    */
! 	    && !m_points_needing_decl.contains (point))
! 	  {
! 	    if (logger)
! 	      logger->log ("stmt fully overwrites %qE; terminating", m_decl);
! 	    return;
! 	  }
! 	if (point.get_stmt_idx () > 0)
! 	  add_to_worklist (function_point::before_stmt
! 			     (snode, point.get_stmt_idx () - 1),
! 			   worklist, seen, logger);
! 	else
  	{
! 	  /* Add before_supernode to worklist.  This captures the in-edge,
! 	     so we have to do it once per in-edge.  */
! 	  unsigned i;
! 	  superedge *pred;
! 	  FOR_EACH_VEC_ELT (snode->m_preds, i, pred)
! 	    add_to_worklist (function_point::before_supernode (snode,
! 							       pred),
! 			     worklist, seen, logger);
  	}
!       }
!       break;
! 
!     case PK_AFTER_SUPERNODE:
!       {
! 	if (snode->m_stmts.length ())
! 	  add_to_worklist
! 	    (function_point::before_stmt (snode,
! 					  snode->m_stmts.length () - 1),
! 	     worklist, seen, logger);
! 	else
! 	  {
! 	    /* Add before_supernode to worklist.  This captures the in-edge,
! 	       so we have to do it once per in-edge.  */
! 	    unsigned i;
! 	    superedge *pred;
! 	    FOR_EACH_VEC_ELT (snode->m_preds, i, pred)
! 	      add_to_worklist (function_point::before_supernode (snode,
! 								 pred),
! 			       worklist, seen, logger);
! 	  }
!       }
!       break;
      }
- 
  }
  
! /* Process POINT, popped from *WORKLIST.
!    Iterate over successors of POINT, adding to *WORKLIST and *SEEN.  */
  
  void
  state_purge_per_decl::
! process_point_forwards (const function_point &point,
! 			auto_vec<function_point> *worklist,
! 			point_set_t *seen,
! 			const state_purge_map &map)
  {
    logger *logger = map.get_logger ();
    LOG_FUNC (logger);
    if (logger)
!     {
!       logger->start_log_line ();
!       logger->log_partial ("considering point: '");
!       point.print (logger->get_printer (), format (false));
!       logger->log_partial ("' for %qE", m_decl);
!       logger->end_log_line ();
!     }
!   const supernode *snode = point.get_supernode ();
! 
!   switch (point.get_kind ())
!     {
!     default:
!     case PK_ORIGIN:
!       gcc_unreachable ();
! 
!     case PK_BEFORE_SUPERNODE:
!       {
! 	function_point next = point.get_next ();
! 	add_to_worklist (next, worklist, seen, logger);
!       }
!       break;
! 
!     case PK_BEFORE_STMT:
!       {
! 	/* Perhaps we should stop at a clobber of the decl,
! 	   but that ought to purge state for us explicitly.  */
! 	function_point next = point.get_next ();
! 	add_to_worklist (next, worklist, seen, logger);
!       }
!       break;
  
!     case PK_AFTER_SUPERNODE:
!       {
! 	/* Look at interprocedural out-edges.  */
! 	unsigned i;
! 	superedge *succ;
! 	FOR_EACH_VEC_ELT (snode->m_succs, i, succ)
! 	  {
! 	    enum edge_kind kind = succ->get_kind ();
! 	    if (kind == SUPEREDGE_CFG_EDGE
! 		|| kind == SUPEREDGE_INTRAPROCEDURAL_CALL)
! 	      add_to_worklist (function_point::before_supernode (succ->m_dest,
! 								 succ),
! 			       worklist, seen, logger);
! 	  }
!       }
!       break;
!     }
  }
  
! /* Return true if the decl is needed at POINT.  */
  
  bool
! state_purge_per_decl::needed_at_point_p (const function_point &point) const
  {
!   return const_cast <point_set_t &> (m_points_needing_decl).contains (point);
  }
  
  /* class state_purge_annotator : public dot_annotator.  */
  
  /* Implementation of dot_annotator::add_node_annotations vfunc for
--- 651,746 ----
    return false;
  }
  
! /* Process SNODE, popped from *WORKLIST.
!    Iterate over predecessors of SNODE, adding to *WORKLIST and *SEEN,
     until we get to a stmt that fully overwrites the decl.  */
  
  void
  state_purge_per_decl::
! process_supernode_backwards (const supernode &snode,
! 			     auto_vec<const supernode *> *worklist,
! 			     point_set_t *seen,
! 			     const state_purge_map &map,
! 			     const region_model &model)
  {
    logger *logger = map.get_logger ();
    LOG_FUNC (logger);
    if (logger)
!     logger->log ("considering SN %i for %qE", snode.m_id, m_decl);
  
!   for (auto in_edge : snode.m_preds)
      {
!       if (logger)
! 	logger->log ("considering edge from SN %i", in_edge->m_src->m_id);
  
!       bool fully_overwrites_decl = false;
!       if (auto op = in_edge->get_op ())
  	{
! 	  /* This is somewhat equivalent to how the SSA case handles
! 	     def-stmts.  */
! 	  if (auto stmt = op->maybe_get_stmt ())
! 	    if (fully_overwrites_p (stmt, m_decl, model)
! 	      /* ...but we mustn't be at a point that also consumes the
! 		 current value of the decl when it's generating the new
! 		 value, for cases such as
! 		   struct st s;
! 		   s = foo ();
! 		   s = bar (s);
! 		 where we want to make sure that we don't stop at the:
! 		   s = bar (s);
! 		 since otherwise we would erroneously purge the state of "s"
! 		 after:
! 		   s = foo ();
! 	      */
! 	      && !m_snodes_needing_decl.contains (&snode))
! 	    fully_overwrites_decl = true;
  	}
!       if (fully_overwrites_decl)
! 	{
! 	  if (logger)
! 	    logger->log ("op fully overwrites %qE; terminating", m_decl);
! 	}
!       else
! 	add_to_worklist (*in_edge->m_src, worklist, seen, logger);
      }
  }
  
! /* Process SNODE, popped from *WORKLIST.
!    Iterate over successors of SNODE, adding to *WORKLIST and *SEEN.  */
  
  void
  state_purge_per_decl::
! process_supernode_forwards (const supernode &snode,
! 			    auto_vec<const supernode *> *worklist,
! 			    point_set_t *seen,
! 			    const state_purge_map &map)
  {
    logger *logger = map.get_logger ();
    LOG_FUNC (logger);
    if (logger)
!     logger->log ("considering SN %i for %qE", snode.m_id, m_decl);
  
!   for (auto out_edge : snode.m_succs)
!     add_to_worklist (*out_edge->m_dest, worklist, seen, logger);
  }
  
! /* Return true if the decl is needed at SNODE.  */
  
  bool
! state_purge_per_decl::needed_at_supernode_p (const supernode *snode) const
  {
!   return const_cast <point_set_t &> (m_snodes_needing_decl).contains (snode);
  }
  
+ void
+ state_purge_per_decl::on_duplicated_node (const supernode &old_snode,
+ 					      const supernode &new_snode)
+ {
+   if (m_snodes_needing_decl.contains (&old_snode))
+     m_snodes_needing_decl.add (&new_snode);
+   if (m_snodes_taking_address.contains (&old_snode))
+     m_snodes_taking_address.add (&new_snode);
+ }
  /* class state_purge_annotator : public dot_annotator.  */
  
  /* Implementation of dot_annotator::add_node_annotations vfunc for
*************** state_purge_per_decl::needed_at_point_p
*** 1069,1129 ****
     Add an additional record showing which names are purged on entry
     to the supernode N.  */
  
! bool
! state_purge_annotator::add_node_annotations (graphviz_out *gv,
! 					     const supernode &n,
! 					     bool within_table) const
! {
!   if (m_map == nullptr)
!     return false;
! 
!   if (within_table)
!     return false;
! 
!   pretty_printer *pp = gv->get_pp ();
! 
!    pp_printf (pp, "annotation_for_node_%i", n.m_index);
!    pp_printf (pp, " [shape=none,margin=0,style=filled,fillcolor=%s,label=\"",
! 	      "lightblue");
!    pp_write_text_to_stream (pp);
! 
!    /* Different in-edges mean different names need purging.
!       Determine which points to dump.  */
!    auto_vec<function_point> points;
!    if (n.entry_p () || n.m_returning_call)
!      points.safe_push (function_point::before_supernode (&n, nullptr));
!    else
!      for (auto inedge : n.m_preds)
!        points.safe_push (function_point::before_supernode (&n, inedge));
!    points.safe_push (function_point::after_supernode (&n));
! 
!    for (auto & point : points)
!      {
!        point.print (pp, format (true));
!        pp_newline (pp);
!        print_needed (gv, point, false);
!        pp_newline (pp);
!      }
! 
!    pp_string (pp, "\"];\n\n");
!    pp_flush (pp);
!    return false;
! }
! 
! /* Print V to GV as a comma-separated list in braces, titling it with TITLE.
!    If WITHIN_TABLE is true, print it within a <TR>
  
     Subroutine of state_purge_annotator::print_needed.  */
  
  static void
  print_vec_of_names (graphviz_out *gv, const char *title,
! 		    const auto_vec<tree> &v, bool within_table)
  {
    pretty_printer *pp = gv->get_pp ();
    tree name;
    unsigned i;
!   if (within_table)
!     gv->begin_trtd ();
    pp_printf (pp, "%s: {", title);
    FOR_EACH_VEC_ELT (v, i, name)
      {
--- 749,767 ----
     Add an additional record showing which names are purged on entry
     to the supernode N.  */
  
! /* Print V to GV as a comma-separated list in braces within a <TR>,
!    titling it with TITLE.
  
     Subroutine of state_purge_annotator::print_needed.  */
  
  static void
  print_vec_of_names (graphviz_out *gv, const char *title,
! 		    const auto_vec<tree> &v)
  {
    pretty_printer *pp = gv->get_pp ();
    tree name;
    unsigned i;
!   gv->begin_trtd ();
    pp_printf (pp, "%s: {", title);
    FOR_EACH_VEC_ELT (v, i, name)
      {
*************** print_vec_of_names (graphviz_out *gv, co
*** 1132,1185 ****
        pp_printf (pp, "%qE", name);
      }
    pp_printf (pp, "}");
!   if (within_table)
!     {
!       pp_write_text_as_html_like_dot_to_stream (pp);
!       gv->end_tdtr ();
!     }
    pp_newline (pp);
  }
  
- /* Implementation of dot_annotator::add_stmt_annotations for
-    state_purge_annotator.
- 
-    Add text showing which names are purged at STMT.  */
- 
  void
! state_purge_annotator::add_stmt_annotations (graphviz_out *gv,
! 					     const gimple *stmt,
! 					     bool within_row) const
  {
-   if (within_row)
-     return;
- 
    if (m_map == nullptr)
      return;
  
-   if (stmt->code == GIMPLE_PHI)
-     return;
- 
-   pretty_printer *pp = gv->get_pp ();
- 
-   pp_newline (pp);
- 
-   const supernode *supernode = m_map->get_sg ().get_supernode_for_stmt (stmt);
-   unsigned int stmt_idx = supernode->get_stmt_index (stmt);
-   function_point before_stmt
-     (function_point::before_stmt (supernode, stmt_idx));
- 
-   print_needed (gv, before_stmt, true);
- }
- 
- /* Get the decls and SSA names needed and not-needed at POINT, and
-    print them to GV.
-    If WITHIN_TABLE is true, print them within <TR> elements.  */
- 
- void
- state_purge_annotator::print_needed (graphviz_out *gv,
- 				     const function_point &point,
- 				     bool within_table) const
- {
    auto_vec<tree> needed;
    auto_vec<tree> not_needed;
    for (state_purge_map::ssa_iterator iter = m_map->begin_ssas ();
--- 770,787 ----
        pp_printf (pp, "%qE", name);
      }
    pp_printf (pp, "}");
!   pp_write_text_as_html_like_dot_to_stream (pp);
!   gv->end_tdtr ();
    pp_newline (pp);
  }
  
  void
! state_purge_annotator::add_node_annotations (graphviz_out *gv,
! 					     const supernode &snode) const
  {
    if (m_map == nullptr)
      return;
  
    auto_vec<tree> needed;
    auto_vec<tree> not_needed;
    for (state_purge_map::ssa_iterator iter = m_map->begin_ssas ();
*************** state_purge_annotator::print_needed (gra
*** 1188,1196 ****
      {
        tree name = (*iter).first;
        state_purge_per_ssa_name *per_name_data = (*iter).second;
!       if (&per_name_data->get_function () == point.get_function ())
  	{
! 	  if (per_name_data->needed_at_point_p (point))
  	    needed.safe_push (name);
  	  else
  	    not_needed.safe_push (name);
--- 790,798 ----
      {
        tree name = (*iter).first;
        state_purge_per_ssa_name *per_name_data = (*iter).second;
!       if (&per_name_data->get_function () == snode.get_function ())
  	{
! 	  if (per_name_data->needed_at_supernode_p (&snode))
  	    needed.safe_push (name);
  	  else
  	    not_needed.safe_push (name);
*************** state_purge_annotator::print_needed (gra
*** 1202,1218 ****
      {
        tree decl = (*iter).first;
        state_purge_per_decl *per_decl_data = (*iter).second;
!       if (&per_decl_data->get_function () == point.get_function ())
  	{
! 	  if (per_decl_data->needed_at_point_p (point))
  	    needed.safe_push (decl);
  	  else
  	    not_needed.safe_push (decl);
  	}
      }
  
!   print_vec_of_names (gv, "needed here", needed, within_table);
!   print_vec_of_names (gv, "not needed here", not_needed, within_table);
  }
  
  #endif /* #if ENABLE_ANALYZER */
--- 804,820 ----
      {
        tree decl = (*iter).first;
        state_purge_per_decl *per_decl_data = (*iter).second;
!       if (&per_decl_data->get_function () == snode.get_function ())
  	{
! 	  if (per_decl_data->needed_at_supernode_p (&snode))
  	    needed.safe_push (decl);
  	  else
  	    not_needed.safe_push (decl);
  	}
      }
  
!   print_vec_of_names (gv, "needed here", needed);
!   print_vec_of_names (gv, "not needed here", not_needed);
  }
  
  #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/state-purge.h gcc-16-20251214/gcc/analyzer/state-purge.h
*** gcc-16-20251207/gcc/analyzer/state-purge.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/state-purge.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 21,73 ****
  #ifndef GCC_ANALYZER_STATE_PURGE_H
  #define GCC_ANALYZER_STATE_PURGE_H
  
- /* Hash traits for function_point.  */
- 
- template <> struct default_hash_traits<function_point>
- : public pod_hash_traits<function_point>
- {
-   static const bool empty_zero_p = false;
- };
- 
- template <>
- inline hashval_t
- pod_hash_traits<function_point>::hash (value_type v)
- {
-   return v.hash ();
- }
- 
- template <>
- inline bool
- pod_hash_traits<function_point>::equal (const value_type &existing,
-                                  const value_type &candidate)
- {
-   return existing == candidate;
- }
- template <>
- inline void
- pod_hash_traits<function_point>::mark_deleted (value_type &v)
- {
-   v = function_point::deleted ();
- }
- template <>
- inline void
- pod_hash_traits<function_point>::mark_empty (value_type &v)
- {
-   v = function_point::empty ();
- }
- template <>
- inline bool
- pod_hash_traits<function_point>::is_deleted (value_type v)
- {
-   return v.get_kind () == PK_DELETED;
- }
- template <>
- inline bool
- pod_hash_traits<function_point>::is_empty (value_type v)
- {
-   return v.get_kind () == PK_EMPTY;
- }
- 
  namespace ana {
  
  /* The result of analyzing which decls and SSA names can be purged from state at
--- 21,26 ----
*************** public:
*** 123,128 ****
--- 76,85 ----
    decl_iterator begin_decls () const { return m_decl_map.begin (); }
    decl_iterator end_decls () const { return m_decl_map.end (); }
  
+   void
+   on_duplicated_node (const supernode &old_snode,
+ 		      const supernode &new_snode);
+ 
  private:
    DISABLE_COPY_AND_ASSIGN (state_purge_map);
  
*************** public:
*** 140,146 ****
    tree get_fndecl () const { return m_fun.decl; }
  
  protected:
!   typedef hash_set<function_point> point_set_t;
  
    state_purge_per_tree (const function &fun)
    : m_fun (fun)
--- 97,103 ----
    tree get_fndecl () const { return m_fun.decl; }
  
  protected:
!   typedef hash_set<const supernode *> point_set_t;
  
    state_purge_per_tree (const function &fun)
    : m_fun (fun)
*************** public:
*** 165,185 ****
  			    tree name,
  			    const function &fun);
  
!   bool needed_at_point_p (const function_point &point) const;
  
! private:
!   static function_point before_use_stmt (const state_purge_map &map,
! 					 const gimple *use_stmt);
  
!   void add_to_worklist (const function_point &point,
! 			auto_vec<function_point> *worklist,
  			logger *logger);
  
!   void process_point (const function_point &point,
! 		      auto_vec<function_point> *worklist,
! 		      const state_purge_map &map);
  
!   point_set_t m_points_needing_name;
    tree m_name;
  };
  
--- 122,143 ----
  			    tree name,
  			    const function &fun);
  
!   bool needed_at_supernode_p (const supernode *snode) const;
  
!   void
!   on_duplicated_node (const supernode &old_snode,
! 		      const supernode &new_snode);
  
! private:
!   void add_to_worklist (const supernode &node,
! 			auto_vec<const supernode *> *worklist,
  			logger *logger);
  
!   void process_supernode (const supernode &node,
! 			  auto_vec<const supernode *> *worklist,
! 			  const state_purge_map &map);
  
!   point_set_t m_snodes_needing_name;
    tree m_name;
  };
  
*************** public:
*** 197,230 ****
  			tree decl,
  			const function &fun);
  
!   bool needed_at_point_p (const function_point &point) const;
  
!   void add_needed_at (const function_point &point);
!   void add_pointed_to_at (const function_point &point);
    void process_worklists (const state_purge_map &map,
  			  region_model_manager *mgr);
  
  private:
!   static function_point before_use_stmt (const state_purge_map &map,
  					 const gimple *use_stmt);
  
!   void add_to_worklist (const function_point &point,
! 			auto_vec<function_point> *worklist,
  			point_set_t *seen,
  			logger *logger);
  
!   void process_point_backwards (const function_point &point,
! 				auto_vec<function_point> *worklist,
! 				point_set_t *seen,
! 				const state_purge_map &map,
! 				const region_model &model);
!   void process_point_forwards (const function_point &point,
! 			       auto_vec<function_point> *worklist,
! 			       point_set_t *seen,
! 			       const state_purge_map &map);
  
!   point_set_t m_points_needing_decl;
!   point_set_t m_points_taking_address;
    tree m_decl;
  };
  
--- 155,192 ----
  			tree decl,
  			const function &fun);
  
!   bool needed_at_supernode_p (const supernode *snode) const;
  
!   void add_needed_at (const supernode &snode);
!   void add_pointed_to_at (const supernode &snode);
    void process_worklists (const state_purge_map &map,
  			  region_model_manager *mgr);
  
+   void
+   on_duplicated_node (const supernode &old_snode,
+ 		      const supernode &new_snode);
+ 
  private:
!   static const supernode * before_use_stmt (const state_purge_map &map,
  					 const gimple *use_stmt);
  
!   void add_to_worklist (const supernode &node,
! 			auto_vec<const supernode *> *worklist,
  			point_set_t *seen,
  			logger *logger);
  
!   void process_supernode_backwards (const supernode &snode,
! 				    auto_vec<const supernode *> *worklist,
! 				    point_set_t *seen,
! 				    const state_purge_map &map,
! 				    const region_model &model);
!   void process_supernode_forwards (const supernode &snode,
! 				   auto_vec<const supernode *> *worklist,
! 				   point_set_t *seen,
! 				   const state_purge_map &map);
  
!   point_set_t m_snodes_needing_decl;
!   point_set_t m_snodes_taking_address;
    tree m_decl;
  };
  
*************** class state_purge_annotator : public dot
*** 236,253 ****
  public:
    state_purge_annotator (const state_purge_map *map) : m_map (map) {}
  
!   bool add_node_annotations (graphviz_out *gv, const supernode &n, bool)
!     const final override;
! 
!   void add_stmt_annotations (graphviz_out *gv, const gimple *stmt,
! 			     bool within_row)
!     const final override;
  
  private:
-   void print_needed (graphviz_out *gv,
- 		     const function_point &point,
- 		     bool within_table) const;
- 
    const state_purge_map *m_map;
  };
  
--- 198,208 ----
  public:
    state_purge_annotator (const state_purge_map *map) : m_map (map) {}
  
!   void
!   add_node_annotations (graphviz_out *gv,
! 			const supernode &n) const final override;
  
  private:
    const state_purge_map *m_map;
  };
  
diff -Nrcpad gcc-16-20251207/gcc/analyzer/store.cc gcc-16-20251214/gcc/analyzer/store.cc
*** gcc-16-20251207/gcc/analyzer/store.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/store.cc	Sun Dec 14 22:32:06 2025
*************** store::canonicalize (store_manager *mgr)
*** 3578,3583 ****
--- 3578,3603 ----
      }
  }
  
+ static bool
+ needs_loop_replay_fixup_p (const svalue &sval)
+ {
+   struct my_visitor : public visitor
+   {
+     my_visitor () : m_found_widening (false) {}
+ 
+     void
+     visit_widening_svalue (const widening_svalue *) final override
+     {
+       m_found_widening = true;
+     }
+ 
+     bool m_found_widening;
+   } v;
+ 
+   sval.accept (&v);
+   return v.m_found_widening;
+ }
+ 
  /* Subroutine for use by exploded_path::feasible_p.
  
     We need to deal with state differences between:
*************** store::loop_replay_fixup (const store *o
*** 3618,3624 ****
  	{
  	  const binding_key *key = (*bind_iter).m_key;
  	  const svalue *sval = (*bind_iter).m_sval;
! 	  if (sval->get_kind () == SK_WIDENING)
  	    {
  	      binding_cluster *this_cluster
  		= get_or_create_cluster (*mgr->get_store_manager (),
--- 3638,3644 ----
  	{
  	  const binding_key *key = (*bind_iter).m_key;
  	  const svalue *sval = (*bind_iter).m_sval;
! 	  if (needs_loop_replay_fixup_p (*sval))
  	    {
  	      binding_cluster *this_cluster
  		= get_or_create_cluster (*mgr->get_store_manager (),
diff -Nrcpad gcc-16-20251207/gcc/analyzer/supergraph-fixup-locations.cc gcc-16-20251214/gcc/analyzer/supergraph-fixup-locations.cc
*** gcc-16-20251207/gcc/analyzer/supergraph-fixup-locations.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/analyzer/supergraph-fixup-locations.cc	Sun Dec 14 22:32:06 2025
***************
*** 0 ****
--- 1,123 ----
+ /* Fixing up location_t values of supernodes.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #define INCLUDE_DEQUE
+ #include "analyzer/common.h"
+ 
+ #include "analyzer/supergraph.h"
+ #include "analyzer/analyzer-logging.h"
+ #include "analyzer/supergraph-manipulation.h"
+ 
+ #if ENABLE_ANALYZER
+ 
+ namespace ana {
+ 
+ namespace {
+ 
+ class location_fixer
+ {
+ public:
+   location_fixer (supergraph &sg,
+ 		  ana::logger *logger)
+   : m_sg (sg),
+     m_logger (logger),
+     m_stats ()
+   {
+     for (auto node : sg.m_nodes)
+       if (node->m_loc == UNKNOWN_LOCATION)
+ 	m_worklist.ensure_node_queued (node, logger);
+   }
+ 
+   /* High level ops.  */
+ 
+   supernode *
+   pop_next_node_in_queue ()
+   {
+     return m_worklist.pop ();
+   }
+ 
+   void
+   consider_node (supernode *node)
+   {
+     m_stats.m_num_iterations++;
+ 
+     log_nesting_level sentinel (m_logger, "considering SN: %i", node->m_id);
+ 
+     /* Already have a location for this node.  */
+     if (useful_location_p (node->m_loc))
+       return;
+ 
+     /* For snodes with UNKNOWN_LOCATION with a single in-edge, try to
+        propagate the location from it.  */
+     if (node->m_preds.length () == 1)
+       {
+ 	auto in_edge = node->m_preds[0];
+ 	if (useful_location_p (in_edge->m_src->m_loc))
+ 	  {
+ 	    node->m_loc = in_edge->m_src->m_loc;
+ 	    m_stats.m_num_copies++;
+ 	    if (m_logger)
+ 	      m_logger->log ("copying location 0x%lx from SN %i to SN %i",
+ 			     node->m_loc,
+ 			     in_edge->m_src->m_id, node->m_id);
+ 	    for (auto out_edge : node->m_succs)
+ 	      m_worklist.ensure_node_queued (out_edge->m_dest, m_logger);
+ 	  }
+       }
+   }
+ 
+ private:
+   supergraph &m_sg;
+   state_purge_map *m_purge_map;
+   supergraph_manipulation::worklist m_worklist;
+   ana::logger *m_logger;
+   struct stats
+   {
+     stats () = default;
+ 
+     void log (ana::logger &logger)
+     {
+       logger.log ("# iterations taken: " HOST_SIZE_T_PRINT_UNSIGNED,
+ 		  (fmt_size_t)m_num_iterations);
+       logger.log ("# locations copied: " HOST_SIZE_T_PRINT_UNSIGNED,
+ 		  (fmt_size_t)m_num_copies);
+     }
+ 
+     size_t m_num_iterations;
+     size_t m_num_copies;
+ 
+   } m_stats;
+ };
+ 
+ } // anonymous namespace
+ 
+ void
+ supergraph::fixup_locations (logger *logger)
+ {
+   LOG_SCOPE (logger);
+ 
+   location_fixer opt (*this, logger);
+   while (supernode *node = opt.pop_next_node_in_queue ())
+     opt.consider_node (node);
+ }
+ 
+ } // namespace ana
+ 
+ #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/supergraph-manipulation.h gcc-16-20251214/gcc/analyzer/supergraph-manipulation.h
*** gcc-16-20251207/gcc/analyzer/supergraph-manipulation.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/analyzer/supergraph-manipulation.h	Sun Dec 14 22:32:06 2025
***************
*** 0 ****
--- 1,73 ----
+ /* Classes for manipulating the supergraph.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_ANALYZER_SUPERGRAPH_MANIPULATION_H
+ #define GCC_ANALYZER_SUPERGRAPH_MANIPULATION_H
+ 
+ #if ENABLE_ANALYZER
+ 
+ namespace ana {
+ namespace supergraph_manipulation {
+ 
+ class worklist
+ {
+ public:
+   worklist ()
+   : m_indices ()
+   {
+     bitmap_clear (m_indices);
+   }
+ 
+   void ensure_node_queued (supernode *node, ana::logger *logger)
+   {
+     if (bitmap_bit_p (m_indices, node->m_id))
+       return; // already in queue
+     if (logger)
+       logger->log ("queued SN: %i", node->m_id);
+     m_queue.push_back (node);
+     bitmap_set_bit (m_indices, node->m_id);
+   }
+ 
+   supernode *pop ()
+   {
+     if (m_queue.empty ())
+       return nullptr;
+     supernode *node = m_queue.front ();
+     m_queue.pop_front ();
+     bitmap_clear_bit (m_indices, node->m_id);
+     return node;
+   }
+ 
+ private:
+   // The queue
+   std::deque<supernode *> m_queue;
+ 
+   /* Indices of all nodes in the queue, so
+      we can lazily add them in constant time.  */
+   auto_bitmap m_indices;
+ };
+ 
+ 
+ } // namespace ana::supergraph_manipulation
+ } // namespace ana
+ 
+ #endif /* #if ENABLE_ANALYZER */
+ 
+ #endif /* GCC_ANALYZER_SUPERGRAPH_MANIPULATION_H */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/supergraph-simplify.cc gcc-16-20251214/gcc/analyzer/supergraph-simplify.cc
*** gcc-16-20251207/gcc/analyzer/supergraph-simplify.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/analyzer/supergraph-simplify.cc	Sun Dec 14 22:32:06 2025
***************
*** 0 ****
--- 1,317 ----
+ /* Simplifying the supergraph.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #define INCLUDE_DEQUE
+ #define INCLUDE_SET
+ #include "analyzer/common.h"
+ 
+ #include "cgraph.h"
+ 
+ #include "analyzer/supergraph.h"
+ #include "analyzer/analyzer-logging.h"
+ #include "analyzer/supergraph-manipulation.h"
+ #include "analyzer/bar-chart.h"
+ 
+ #if ENABLE_ANALYZER
+ 
+ namespace ana {
+ 
+ namespace {
+ 
+ /* A class for tracking a set of simplifications to a supergraph.
+    supergraph.m_nodes and supergraph.m_edges may contain deleted object
+    during the lifetime of this class; they are removed at the end.  */
+ 
+ class simplifier
+ {
+ public:
+   simplifier (supergraph &sg,
+ 	      ana::logger *logger)
+   : m_sg (sg),
+     m_nodes_to_remove (),
+     m_edges_to_remove (),
+     m_logger (logger),
+     m_stats ()
+   {
+     for (auto node : sg.m_nodes)
+       m_worklist.ensure_node_queued (node, logger);
+   }
+ 
+   ~simplifier ()
+   {
+     // Remove nodes from m_sg.m_nodes and delete them
+     m_sg.delete_nodes (m_nodes_to_remove);
+ 
+     // Remove edges from m_sg.m_edges and delete them
+     {
+       unsigned read_index, write_index;
+       superedge **elem_ptr;
+       VEC_ORDERED_REMOVE_IF (m_sg.m_edges, read_index, write_index, elem_ptr,
+ 			     edge_to_be_removed_p (*elem_ptr));
+       for (auto iter : m_edges_to_remove)
+ 	delete iter;
+     }
+ 
+     if (m_logger)
+       {
+ 	log_nesting_level sentinel (m_logger, "stats");
+ 	m_stats.log (*m_logger);
+       }
+   }
+ 
+   /* Manipulations: logged, and refreshing the worklist.  */
+ 
+   void
+   set_edge_dest (superedge *edge, supernode *new_dest)
+   {
+     if (edge->m_dest == new_dest)
+       return;
+     log_nesting_level sentinel
+       (m_logger, "updating edge dest: SN: %i -> SN: {%i, %i}",
+        edge->m_src->m_id,
+        edge->m_dest->m_id,
+        new_dest->m_id);
+     m_worklist.ensure_node_queued (edge->m_src, m_logger);
+     m_worklist.ensure_node_queued (edge->m_dest, m_logger);
+     m_worklist.ensure_node_queued (new_dest, m_logger);
+ 
+     edge->set_dest (new_dest);
+ 
+     m_stats.m_num_set_edge_dest++;
+   }
+ 
+   void
+   remove_node (supernode *node)
+   {
+     log_nesting_level sentinel
+       (m_logger, "removing node: SN: %i", node->m_id);
+     for (auto in_edge : node->m_preds)
+       remove_edge (in_edge);
+     for (auto out_edge : node->m_succs)
+       remove_edge (out_edge);
+     m_nodes_to_remove.insert (node);
+     m_stats.m_num_remove_node++;
+   }
+ 
+   void
+   remove_edge (superedge *edge)
+   {
+     log_nesting_level sentinel
+       (m_logger, "removing edge dest: SN: %i -> SN: %i",
+        edge->m_src->m_id,
+        edge->m_dest->m_id);
+     gcc_assert (!edge->preserve_p ());
+ 
+     m_worklist.ensure_node_queued (edge->m_src, m_logger);
+     m_worklist.ensure_node_queued (edge->m_dest, m_logger);
+ 
+     edge->m_src->remove_out_edge (edge);
+     edge->m_dest->remove_in_edge (edge);
+ 
+     m_edges_to_remove.insert (edge);
+ 
+     m_stats.m_num_remove_edge++;
+   }
+ 
+   /* High level ops.  */
+ 
+   supernode *
+   pop_next_node_in_queue ()
+   {
+     return m_worklist.pop ();
+   }
+ 
+   void
+   consider_node (supernode *node)
+   {
+     m_stats.m_num_iterations++;
+ 
+     log_nesting_level sentinel (m_logger, "considering SN: %i", node->m_id);
+ 
+     /* Eliminate nodes with no in-edges that aren't function entry nodes.  */
+     if (node->m_preds.length () == 0
+ 	&& !node->entry_p ())
+       {
+ 	log_nesting_level s2 (m_logger, "no in-edges");
+ 	remove_node (node);
+ 	return;
+       }
+ 
+     /* Handle nodes with a single out-edge.  */
+     if (node->m_succs.length () == 1)
+       if (consider_single_out_edge (node, node->m_succs[0]))
+ 	return;
+   }
+ 
+   bool
+   consider_single_out_edge (supernode *node,
+ 			    superedge *single_out_edge)
+   {
+     if (node->preserve_p ())
+       {
+ 	log_nesting_level s3
+ 	  (m_logger,
+ 	   "node has preserve_p flag; preserving");
+ 	return false;
+       }
+     if (single_out_edge->preserve_p ())
+       {
+ 	log_nesting_level s3
+ 	  (m_logger,
+ 	   "edge has preserve_p flag; preserving");
+ 	return false;
+       }
+ 
+     /* Is the single out-edge a no-op?  */
+     if (!single_out_edge->get_op ())
+       {
+ 	/* If the node doesn't add useful location information, we can
+ 	   redirect all in-edges to the node to point at the outedge's dst.  */
+ 	log_nesting_level s2 (m_logger,
+ 			      "single outedge is no-op (to SN: %i)",
+ 			      node->m_succs[0]->m_dest->m_id);
+ 	bool redirect = false;
+ 	if (node->m_loc == UNKNOWN_LOCATION)
+ 	  {
+ 	    log_nesting_level s3
+ 	      (m_logger,
+ 	       "node is at UNKNOWN_LOCATION; redirecting in-edges");
+ 	    redirect = true;
+ 	  }
+ 	else if (node->m_loc == single_out_edge->m_dest->m_loc)
+ 	  {
+ 	    log_nesting_level s3
+ 	      (m_logger,
+ 	       "node has same location as successor; redirecting in-edges");
+ 	    redirect = true;
+ 	  }
+ 
+ 	if (redirect)
+ 	  {
+ 	    for (auto in_edge : node->m_preds)
+ 	      set_edge_dest (in_edge, single_out_edge->m_dest);
+ 	    return true;
+ 	  }
+ 
+ 	return false;
+       }
+ 
+     gcc_assert (single_out_edge->get_op ());
+ 
+     return false;
+   }
+ 
+ private:
+   bool edge_to_be_removed_p (superedge *edge)
+   {
+     return m_edges_to_remove.find (edge) != m_edges_to_remove.end ();
+   }
+ 
+   supergraph &m_sg;
+   supergraph_manipulation::worklist m_worklist;
+   std::set<supernode *> m_nodes_to_remove;
+   std::set<superedge *> m_edges_to_remove;
+   ana::logger *m_logger;
+   struct stats
+   {
+     stats () = default;
+ 
+     void log (ana::logger &logger)
+     {
+       logger.log ("# iterations taken: " HOST_SIZE_T_PRINT_UNSIGNED,
+ 		  (fmt_size_t)m_num_iterations);
+       logger.log ("# nodes removed: " HOST_SIZE_T_PRINT_UNSIGNED,
+ 		  (fmt_size_t)m_num_remove_node);
+       logger.log ("# edges removed: " HOST_SIZE_T_PRINT_UNSIGNED,
+ 		  (fmt_size_t)m_num_remove_edge);
+       logger.log ("# set_edge_dest: " HOST_SIZE_T_PRINT_UNSIGNED,
+ 		  (fmt_size_t)m_num_set_edge_dest);
+     }
+ 
+     size_t m_num_iterations;
+     size_t m_num_remove_node;
+     size_t m_num_remove_edge;
+     size_t m_num_set_edge_dest;
+ 
+   } m_stats;
+ };
+ 
+ } // anonymous namespace
+ 
+ void
+ supergraph::log_stats (logger *logger) const
+ {
+   if (!logger)
+     return;
+ 
+   logger->log ("# nodes: %u", m_nodes.length ());
+   logger->log ("# edges: %u", m_edges.length ());
+ 
+   /* Show per-function bar charts of supernodes per function.  */
+   {
+     bar_chart snodes_per_function;
+     logger->log ("snodes per function:");
+ 
+     cgraph_node *cgnode;
+     FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (cgnode)
+       {
+ 	function *fn = cgnode->get_fun ();
+ 
+ 	int snodes_for_this_function = 0;
+ 	for (auto node : m_nodes)
+ 	  if (node->get_function () == fn)
+ 	    ++snodes_for_this_function;
+ 
+ 	pretty_printer pp;
+ 	pp_format_decoder (&pp) = default_tree_printer;
+ 	pp_printf (&pp, "%qD", fn->decl);
+ 	snodes_per_function.add_item (pp_formatted_text (&pp),
+ 				      snodes_for_this_function);
+       }
+ 
+     snodes_per_function.print (logger->get_printer ());
+   }
+ }
+ 
+ void
+ supergraph::simplify (logger *logger)
+ {
+   LOG_SCOPE (logger);
+ 
+   {
+     log_nesting_level sentinel (logger, "before simplification:");
+     log_stats (logger);
+   }
+ 
+   {
+     simplifier opt (*this, logger);
+     while (supernode *node = opt.pop_next_node_in_queue ())
+       opt.consider_node (node);
+   }
+ 
+   {
+     log_nesting_level sentinel (logger, "after simplification");
+     log_stats (logger);
+   }
+ }
+ 
+ } // namespace ana
+ 
+ #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/supergraph-sorting.cc gcc-16-20251214/gcc/analyzer/supergraph-sorting.cc
*** gcc-16-20251207/gcc/analyzer/supergraph-sorting.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/analyzer/supergraph-sorting.cc	Sun Dec 14 22:32:06 2025
***************
*** 0 ****
--- 1,266 ----
+ /* Sorting the nodes in the supergraph.
+    Copyright (C) 2025 Free Software Foundation, Inc.
+    Contributed by David Malcolm <dmalcolm@redhat.com>.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+ 
+ GCC is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #define INCLUDE_SET
+ #include "analyzer/common.h"
+ 
+ #include "cgraph.h"
+ #include "alloc-pool.h"
+ #include "fibonacci_heap.h"
+ 
+ #include "analyzer/supergraph.h"
+ #include "analyzer/analyzer-logging.h"
+ 
+ #if ENABLE_ANALYZER
+ 
+ namespace ana {
+ 
+ /* Update m_nodes to be ORDERING.
+    Update the m_id of all nodes to reflect the new orderding.
+    This assumes that all nodes are in ORDERING; does not delete
+    any underlying nodes.  */
+ 
+ void
+ supergraph::reorder_nodes_and_ids (const std::vector<supernode *> &ordering,
+ 				   logger *logger)
+ {
+   LOG_SCOPE (logger);
+ 
+   m_nodes.truncate (0);
+ 
+   for (size_t new_id = 0; new_id < ordering.size (); ++new_id)
+     {
+       supernode *snode = ordering[new_id];
+       if (logger)
+ 	{
+ 	  if ((size_t)snode->m_id == new_id)
+ 	    logger->log ("SN %i is unchanged", snode->m_id);
+ 	  else
+ 	    logger->log ("old SN %i is now SN %li", snode->m_id, new_id);
+ 	}
+       m_nodes.safe_push (snode);
+       snode->m_id = new_id;
+     }
+ 
+   m_next_snode_id = m_nodes.length ();
+ }
+ 
+ /* std::set::contains is C++20 onwards.  */
+ template <typename T>
+ static bool
+ set_contains_p (const std::set<T> &s, T v)
+ {
+   return s.find (v) != s.end ();
+ }
+ 
+ namespace {
+ 
+ class sorting_worklist
+ {
+ public:
+   sorting_worklist ()
+   : m_queue (key_t (*this, nullptr))
+   {
+   }
+ 
+   void add_node (supernode *n);
+   supernode *take_next (logger *logger);
+   bool contains_p (supernode *n) const;
+ 
+ private:
+   class key_t
+   {
+   public:
+     key_t (const sorting_worklist &w, supernode *snode)
+     : m_worklist (w), m_snode (snode)
+     {}
+ 
+     bool operator< (const key_t &other) const
+     {
+       return cmp (*this, other) < 0;
+     }
+ 
+     bool operator== (const key_t &other) const
+     {
+       return cmp (*this, other) == 0;
+     }
+ 
+     bool operator> (const key_t &other) const
+     {
+       return !(*this == other || *this < other);
+     }
+ 
+   private:
+     static int cmp (const key_t &ka, const key_t &kb);
+     const sorting_worklist &m_worklist;
+     supernode *m_snode;
+   };
+ 
+   bool
+   already_seen_all_predecessors_p (const supernode *n,
+ 				   logger *logger) const;
+ 
+   std::set<supernode *> m_set_of_ordered_nodes;
+   std::set<supernode *> m_set_of_queued_nodes;
+   typedef fibonacci_heap<key_t, supernode> queue_t;
+   queue_t m_queue;
+ };
+ 
+ void
+ sorting_worklist::add_node (supernode *n)
+ {
+   m_queue.insert ({*this, n}, n);
+   m_set_of_queued_nodes.insert (n);
+ }
+ 
+ supernode *
+ sorting_worklist::take_next (logger *logger)
+ {
+   if (m_queue.empty ())
+     return nullptr;
+ 
+   std::vector<supernode *> rejected;
+ 
+   /* First, try to find a node for which all predecessors
+      have been ordered.  */
+   while (!m_queue.empty ())
+     {
+       supernode *candidate = m_queue.extract_min ();
+ 
+       // n shouldn't be already within the ordering
+       gcc_assert (!set_contains_p (m_set_of_ordered_nodes, candidate));
+ 
+       if (logger)
+ 	logger->log ("consider SN %i from worklist", candidate->m_id);
+ 
+       if (already_seen_all_predecessors_p (candidate, logger))
+ 	{
+ 	  if (logger)
+ 	    logger->log ("all predecessors of SN %i seen; using it",
+ 			 candidate->m_id);
+ 	  for (auto r : rejected)
+ 	    add_node (r);
+ 	  m_set_of_ordered_nodes.insert (candidate);
+ 	  m_set_of_queued_nodes.erase (candidate);
+ 	  return candidate;
+ 	}
+       else
+ 	rejected.push_back (candidate);
+     }
+ 
+   /* Otherwise, simply use the first node.  */
+   for (auto r : rejected)
+     add_node (r);
+   supernode *n = m_queue.extract_min ();
+   if (logger)
+     logger->log ("using first in queue: SN %i", n->m_id);
+   m_set_of_ordered_nodes.insert (n);
+   m_set_of_queued_nodes.erase (n);
+   return n;
+ }
+ 
+ bool
+ sorting_worklist::contains_p (supernode *n) const
+ {
+   return (m_set_of_queued_nodes.find (n) != m_set_of_queued_nodes.end ()
+ 	  || m_set_of_ordered_nodes.find (n) != m_set_of_ordered_nodes.end ());
+ }
+ 
+ int
+ sorting_worklist::key_t::cmp (const key_t &ka, const key_t &kb)
+ {
+   const supernode *snode_a = ka.m_snode;
+   const supernode *snode_b = kb.m_snode;
+ 
+   /* Sort by BB.  */
+   if (int bb_cmp = snode_a->m_bb->index - snode_b->m_bb->index)
+     return bb_cmp;
+ 
+   /* Sort by existing id.  */
+   return snode_a->m_id - snode_b->m_id;
+ }
+ 
+ bool
+ sorting_worklist::already_seen_all_predecessors_p (const supernode *n,
+ 						   logger *logger) const
+ {
+   for (auto e : n->m_preds)
+     if (!set_contains_p (m_set_of_ordered_nodes, e->m_src))
+       {
+ 	if (logger)
+ 	  logger->log ("not yet ordered predecessor SN %i", e->m_src->m_id);
+ 	return false;
+       }
+   return true;
+ }
+ 
+ static std::vector<supernode *>
+ get_node_ordering (const supergraph &sg,
+ 		   logger *logger)
+ {
+   LOG_SCOPE (logger);
+ 
+   std::vector<supernode *> ordering_vec;
+ 
+   cgraph_node *cgnode;
+   FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (cgnode)
+     {
+       function *fun = cgnode->get_fun ();
+ 
+       sorting_worklist worklist;
+ 
+       supernode *start_node = sg.get_node_for_function_entry (*fun);
+       worklist.add_node (start_node);
+ 
+       // Find the best node to add next in the ordering
+       while (supernode *next = worklist.take_next (logger))
+ 	{
+ 	  gcc_assert (next);
+ 	  if (logger)
+ 	    logger->log ("next: SN: %i", next->m_id);
+ 
+ 	  ordering_vec.push_back (next);
+ 
+ 	  for (auto out_edge : next->m_succs)
+ 	    {
+ 	      supernode *dest_node = out_edge->m_dest;
+ 	      if (!worklist.contains_p (dest_node))
+ 		worklist.add_node (dest_node);
+ 	    }
+ 	}
+     }
+ 
+   return ordering_vec;
+ }
+ 
+ } // anonymous namespace
+ 
+ void
+ supergraph::sort_nodes (logger *logger)
+ {
+   LOG_SCOPE (logger);
+ 
+   const std::vector<supernode *> ordering = get_node_ordering (*this, logger);
+   reorder_nodes_and_ids (ordering, logger);
+ }
+ 
+ } // namespace ana
+ 
+ #endif /* #if ENABLE_ANALYZER */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/supergraph.cc gcc-16-20251214/gcc/analyzer/supergraph.cc
*** gcc-16-20251207/gcc/analyzer/supergraph.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/supergraph.cc	Sun Dec 14 22:32:06 2025
*************** You should have received a copy of the G
*** 18,23 ****
--- 18,24 ----
  along with GCC; see the file COPYING3.  If not see
  <http://www.gnu.org/licenses/>.  */
  
+ #define INCLUDE_DEQUE
  #include "analyzer/common.h"
  
  #include "timevar.h"
*************** along with GCC; see the file COPYING3.
*** 28,40 ****
  #include "cfg.h"
  #include "digraph.h"
  #include "tree-cfg.h"
- #include "tree-dfa.h"
  #include "cfganal.h"
  #include "except.h"
  
  #include "analyzer/supergraph.h"
  #include "analyzer/analyzer-logging.h"
  #include "analyzer/region-model.h"
  
  #if ENABLE_ANALYZER
  
--- 29,43 ----
  #include "cfg.h"
  #include "digraph.h"
  #include "tree-cfg.h"
  #include "cfganal.h"
  #include "except.h"
  
+ #include "diagnostics/file-cache.h"
+ 
  #include "analyzer/supergraph.h"
  #include "analyzer/analyzer-logging.h"
  #include "analyzer/region-model.h"
+ #include "analyzer/exploded-graph.h"
  
  #if ENABLE_ANALYZER
  
*************** get_ultimate_function_for_cgraph_edge (c
*** 52,76 ****
    return ultimate_node->get_fun ();
  }
  
- /* Get the cgraph_edge, but only if there's an underlying function body.  */
- 
- cgraph_edge *
- supergraph_call_edge (function *fun, const gimple *stmt)
- {
-   const gcall *call = dyn_cast<const gcall *> (stmt);
-   if (!call)
-     return nullptr;
-   cgraph_edge *edge
-     = cgraph_node::get (fun->decl)->get_edge (const_cast <gimple *> (stmt));
-   if (!edge)
-     return nullptr;
-   if (!edge->callee)
-     return nullptr; /* e.g. for a function pointer.  */
-   if (!get_ultimate_function_for_cgraph_edge (edge))
-     return nullptr;
-   return edge;
- }
- 
  /* class saved_uids.
  
     In order to ensure consistent results without relying on the ordering
--- 55,60 ----
*************** saved_uids::restore_uids () const
*** 115,222 ****
      pair->first->uid = pair->second;
  }
  
  /* supergraph's ctor.  Walk the callgraph, building supernodes for each
!    CFG basic block, splitting the basic blocks at callsites.  Join
!    together the supernodes with interprocedural and intraprocedural
!    superedges as appropriate.
     Assign UIDs to the gimple stmts.  */
  
! supergraph::supergraph (logger *logger)
  {
    auto_timevar tv (TV_ANALYZER_SUPERGRAPH);
  
    LOG_FUNC (logger);
  
    /* First pass: make supernodes (and assign UIDs to the gimple stmts).  */
    {
      /* Sort the cgraph_nodes?  */
      cgraph_node *node;
      FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
!     {
!       function *fun = node->get_fun ();
! 
!       /* Ensure that EDGE_DFS_BACK is correct for every CFG edge in
! 	 the supergraph (by doing it per-function).  */
!       auto_cfun sentinel (fun);
!       mark_dfs_back_edges ();
! 
!       const int start_idx = m_nodes.length ();
  
!       basic_block bb;
!       FOR_ALL_BB_FN (bb, fun)
! 	{
! 	  /* The initial supernode for the BB gets the phi nodes (if any).  */
! 	  supernode *node_for_stmts
! 	    = add_node (fun, bb, nullptr, phi_nodes (bb));
! 	  m_bb_to_initial_node.put (bb, node_for_stmts);
! 	  for (gphi_iterator gpi = gsi_start_phis (bb); !gsi_end_p (gpi);
! 	       gsi_next (&gpi))
! 	    {
! 	      gimple *stmt = gsi_stmt (gpi);
! 	      m_stmt_to_node_t.put (stmt, node_for_stmts);
! 	      m_stmt_uids.make_uid_unique (stmt);
! 	    }
  
! 	  /* Append statements from BB to the current supernode, splitting
! 	     them into a new supernode at each call site; such call statements
! 	     appear in both supernodes (representing call and return).  */
! 	  gimple_stmt_iterator gsi;
! 	  for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
! 	    {
! 	      gimple *stmt = gsi_stmt (gsi);
! 	      /* Discard debug stmts here, so we don't have to check for
! 		 them anywhere within the analyzer.  */
! 	      if (is_gimple_debug (stmt))
! 		continue;
! 	      node_for_stmts->m_stmts.safe_push (stmt);
! 	      m_stmt_to_node_t.put (stmt, node_for_stmts);
! 	      m_stmt_uids.make_uid_unique (stmt);
! 	      if (cgraph_edge *edge = supergraph_call_edge (fun, stmt))
! 		{
! 		  m_cgraph_edge_to_caller_prev_node.put(edge, node_for_stmts);
! 		  node_for_stmts = add_node (fun, bb, as_a <gcall *> (stmt),
! 					     nullptr);
! 		  m_cgraph_edge_to_caller_next_node.put (edge, node_for_stmts);
! 		}
! 	       else
! 	        {
! 	          // maybe call is via a function pointer
! 	          if (gcall *call = dyn_cast<gcall *> (stmt))
! 	          {
! 	            cgraph_edge *edge
! 		      = cgraph_node::get (fun->decl)->get_edge (stmt);
! 	            if (!edge || !edge->callee)
! 	            {
! 	              supernode *old_node_for_stmts = node_for_stmts;
! 	              node_for_stmts = add_node (fun, bb, call, nullptr);
  
! 	              superedge *sedge
! 	                = new callgraph_superedge (old_node_for_stmts,
! 	                  			   node_for_stmts,
! 	                  			   SUPEREDGE_INTRAPROCEDURAL_CALL,
! 	                  			   nullptr);
! 	              add_edge (sedge);
! 	            }
! 	          }
! 	        }
! 	    }
  
! 	  m_bb_to_final_node.put (bb, node_for_stmts);
! 	}
  
!       const unsigned num_snodes = m_nodes.length () - start_idx;
!       m_function_to_num_snodes.put (fun, num_snodes);
  
!       if (logger)
! 	{
! 	  const int end_idx = m_nodes.length () - 1;
! 	  logger->log ("SN: %i...%i: function %qD",
! 		       start_idx, end_idx, fun->decl);
! 	}
!     }
    }
  
!   /* Second pass: make superedges.  */
    {
      /* Make superedges for CFG edges.  */
      for (bb_to_node_t::iterator iter = m_bb_to_final_node.begin ();
--- 99,191 ----
      pair->first->uid = pair->second;
  }
  
+ /* When building the supergraph, should STMT be handled
+    along each out-edge in the CFG, or as separate superedge
+    "within" the BB.  */
+ 
+ static bool
+ control_flow_stmt_p (const gimple &stmt)
+ {
+   switch (gimple_code (&stmt))
+     {
+     case GIMPLE_COND:
+     case GIMPLE_EH_DISPATCH:
+     case GIMPLE_GOTO:
+     case GIMPLE_SWITCH:
+       return true;
+ 
+     case GIMPLE_ASM:
+     case GIMPLE_ASSIGN:
+     case GIMPLE_CALL:
+     case GIMPLE_DEBUG:
+     case GIMPLE_LABEL:
+     case GIMPLE_NOP:
+     case GIMPLE_PREDICT:
+     case GIMPLE_RESX:
+     case GIMPLE_RETURN:
+       return false;
+ 
+     /* We don't expect to see any other statement kinds in the analyzer.  */
+     default:
+       internal_error ("unexpected gimple stmt code: %qs",
+ 		      gimple_code_name[gimple_code (&stmt)]);
+       break;
+     }
+ }
+ 
  /* supergraph's ctor.  Walk the callgraph, building supernodes for each
!    CFG basic block, splitting the basic blocks at statements.  Join
!    together the supernodes with interprocedural superedges as appropriate.
     Assign UIDs to the gimple stmts.  */
  
! supergraph::supergraph (region_model_manager &mgr,
! 			logger *logger)
! : m_next_snode_id (0)
  {
    auto_timevar tv (TV_ANALYZER_SUPERGRAPH);
  
    LOG_FUNC (logger);
  
+   /* For each BB, if present, the stmt that terminates it.  */
+   typedef ordered_hash_map<basic_block, gimple *> bb_to_stmt_t;
+   bb_to_stmt_t control_stmt_ending_bbs;
+ 
    /* First pass: make supernodes (and assign UIDs to the gimple stmts).  */
    {
      /* Sort the cgraph_nodes?  */
      cgraph_node *node;
      FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
!       {
! 	function *fun = node->get_fun ();
  
! 	log_nesting_level log_sentinel (logger, "function: %qD", fun->decl);
  
! 	/* Ensure that EDGE_DFS_BACK is correct for every CFG edge in
! 	   the supergraph (by doing it per-function).  */
! 	auto_cfun cfun_sentinel (fun);
! 	mark_dfs_back_edges ();
  
! 	const int start_id = m_nodes.length ();
  
! 	basic_block bb;
! 	FOR_ALL_BB_FN (bb, fun)
! 	  if (gimple *final_control_stmt
! 		= populate_for_basic_block (bb, fun, logger))
! 	    control_stmt_ending_bbs.put (bb, final_control_stmt);
  
! 	const unsigned num_snodes = m_nodes.length () - start_id;
! 	m_function_to_num_snodes.put (fun, num_snodes);
  
! 	if (logger)
! 	  {
! 	    const int end_id = m_nodes.length () - 1;
! 	    logger->log ("SN: %i...%i: function %qD",
! 			 start_id, end_id, fun->decl);
! 	  }
!       }
    }
  
!   /* Second pass: make superedges between basic blocks.  */
    {
      /* Make superedges for CFG edges.  */
      for (bb_to_node_t::iterator iter = m_bb_to_final_node.begin ();
*************** supergraph::supergraph (logger *logger)
*** 226,231 ****
--- 195,204 ----
  	basic_block bb = (*iter).first;
  	supernode *src_supernode = (*iter).second;
  
+ 	gimple *control_stmt_ending_bb = nullptr;
+ 	if (auto control_stmt_iter = control_stmt_ending_bbs.get (bb))
+ 	  control_stmt_ending_bb = *control_stmt_iter;
+ 
  	::edge cfg_edge;
  	int idx;
  	if (bb->succs)
*************** supergraph::supergraph (logger *logger)
*** 234,313 ****
  	      basic_block dest_cfg_block = cfg_edge->dest;
  	      supernode *dest_supernode
  		= *m_bb_to_initial_node.get (dest_cfg_block);
! 	      cfg_superedge *cfg_sedge
! 		= add_cfg_edge (src_supernode, dest_supernode, cfg_edge);
! 	      m_cfg_edge_to_cfg_superedge.put (cfg_edge, cfg_sedge);
  	    }
        }
  
!     /* Make interprocedural superedges for calls.  */
      {
!       for (cgraph_edge_to_node_t::iterator iter
! 	     = m_cgraph_edge_to_caller_prev_node.begin ();
! 	   iter != m_cgraph_edge_to_caller_prev_node.end ();
! 	   ++iter)
  	{
! 	  cgraph_edge *edge = (*iter).first;
! 	  supernode *caller_prev_supernode = (*iter).second;
! 	  function* callee_fn = get_ultimate_function_for_cgraph_edge (edge);
! 	  if (!callee_fn || !callee_fn->cfg)
! 	    continue;
! 	  basic_block callee_cfg_block = ENTRY_BLOCK_PTR_FOR_FN (callee_fn);
! 	  supernode *callee_supernode
! 	    = *m_bb_to_initial_node.get (callee_cfg_block);
! 	  call_superedge *sedge
! 	    = add_call_superedge (caller_prev_supernode,
! 				  callee_supernode,
! 				  edge);
! 	  m_cgraph_edge_to_call_superedge.put (edge, sedge);
  	}
      }
  
!     /* Make interprocedural superedges for returns.  */
      {
!       for (cgraph_edge_to_node_t::iterator iter
! 	     = m_cgraph_edge_to_caller_next_node.begin ();
! 	   iter != m_cgraph_edge_to_caller_next_node.end ();
! 	   ++iter)
  	{
! 	  cgraph_edge *edge = (*iter).first;
! 	  supernode *caller_next_supernode = (*iter).second;
! 	  function* callee_fn = get_ultimate_function_for_cgraph_edge (edge);
! 	  if (!callee_fn || !callee_fn->cfg)
  	    continue;
- 	  basic_block callee_cfg_block = EXIT_BLOCK_PTR_FOR_FN (callee_fn);
- 	  supernode *callee_supernode
- 	    = *m_bb_to_initial_node.get (callee_cfg_block);
- 	  return_superedge *sedge
- 	    = add_return_superedge (callee_supernode,
- 				    caller_next_supernode,
- 				    edge);
- 	  m_cgraph_edge_to_return_superedge.put (edge, sedge);
  	}
-     }
  
!     /* Make intraprocedural superedges linking the two halves of a call.  */
!     {
!       for (cgraph_edge_to_node_t::iterator iter
! 	     = m_cgraph_edge_to_caller_prev_node.begin ();
! 	   iter != m_cgraph_edge_to_caller_prev_node.end ();
! 	   ++iter)
  	{
! 	  cgraph_edge *edge = (*iter).first;
! 	  supernode *caller_prev_supernode = (*iter).second;
! 	  supernode *caller_next_supernode
! 	    = *m_cgraph_edge_to_caller_next_node.get (edge);
  	  superedge *sedge
! 	    = new callgraph_superedge (caller_prev_supernode,
! 				       caller_next_supernode,
! 				       SUPEREDGE_INTRAPROCEDURAL_CALL,
! 				       edge);
  	  add_edge (sedge);
- 	  m_cgraph_edge_to_intraproc_superedge.put (edge, sedge);
  	}
! 
      }
!   }
  }
  
  /* supergraph's dtor.  Reset stmt uids.  */
--- 207,360 ----
  	      basic_block dest_cfg_block = cfg_edge->dest;
  	      supernode *dest_supernode
  		= *m_bb_to_initial_node.get (dest_cfg_block);
! 	      add_sedges_for_cfg_edge (src_supernode,
! 				       dest_supernode,
! 				       cfg_edge,
! 				       control_stmt_ending_bb,
! 				       mgr,
! 				       logger);
  	    }
        }
+   }
+ }
  
! /* Create a run of supernodes and superedges for the BB within FUN
!    expressing all of the stmts apart from the final control flow stmt (if any).
!    Return the control stmt that ends this bb, if any.  */
! 
! gimple *
! supergraph::populate_for_basic_block (basic_block bb,
! 				      function *fun,
! 				      logger *logger)
! {
!   log_nesting_level sentinel (logger, "bb %i", bb->index);
! 
!   supernode *initial_snode_in_bb = add_node (fun, bb, logger);
!   m_bb_to_initial_node.put (bb, initial_snode_in_bb);
! 
!   if (bb->index == ENTRY_BLOCK)
!     /* Use the decl's location, rather than fun->function_start_locus,
!        which leads to more readable output.  */
!     initial_snode_in_bb->m_loc = DECL_SOURCE_LOCATION (fun->decl);
!   else if (bb->index == EXIT_BLOCK)
!     initial_snode_in_bb->m_loc = fun->function_end_locus;
!   else if (gsi_end_p (gsi_start_bb (bb)))
      {
!       /* BB has no stmts, and isn't the ENTRY or EXIT node.
! 	 Try to find a source location for it.  */
!       if (bb->succs->length () == 1)
  	{
! 	  auto outedge = (*bb->succs)[0];
! 	  if (useful_location_p (outedge->goto_locus))
! 	    {
! 	      /* We have an empty basic block with one out-edge,
! 		 perhaps part of an empty infinite loop.  */
! 	      if (logger)
! 		logger->log ("using location 0x%lx from outedge",
! 			     outedge->goto_locus);
! 	      initial_snode_in_bb->m_loc = outedge->goto_locus;
! 	    }
  	}
      }
  
!   initial_snode_in_bb->m_state_merger_node = true;
! 
!   gimple *final_control_flow_stmt = nullptr;
! 
!   /* Create a run of supernodes for the stmts in BB,
!      connected by stmt_superedge.  */
!   gimple_stmt_iterator gsi;
!   supernode *prev_snode_in_bb = initial_snode_in_bb;
!   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
      {
!       gimple *next_stmt = gsi_stmt (gsi);
! 
!       if (logger)
  	{
! 	  logger->start_log_line ();
! 	  logger->log_partial ("next_stmt: ");
! 	  pp_gimple_stmt_1 (logger->get_printer (), next_stmt,
! 			    0, (dump_flags_t)0);
! 	  logger->end_log_line ();
! 	}
!       prev_snode_in_bb->m_loc = get_stmt_location (next_stmt, fun);
!       prev_snode_in_bb->m_stmt_loc = next_stmt->location;
!       m_node_for_stmt.insert ({next_stmt, prev_snode_in_bb});
! 
!       m_stmt_uids.make_uid_unique (next_stmt);
! 
!       if (auto glabel_ = dyn_cast<const glabel *>(next_stmt))
! 	{
! 	  /* Associate the GIMPLE_LABEL with its snode.  */
! 	  prev_snode_in_bb->m_label = gimple_label_label (glabel_);
! 
! 	  /* Only create an snode for the label if it has location
! 	     information.  */
! 	  if (glabel_->location == UNKNOWN_LOCATION)
  	    continue;
  	}
  
!       // handle control flow stmts on the edges
!       if (control_flow_stmt_p (*next_stmt))
  	{
! 	  final_control_flow_stmt = next_stmt;
! 	  break;
! 	}
! 
!       supernode *snode_after_next_stmt = add_node (fun, bb, logger);
!       if (prev_snode_in_bb)
! 	{
! 	  std::unique_ptr<operation> op;
! 	  switch (gimple_code (next_stmt))
! 	    {
! 	    default:
! 	      gcc_unreachable ();
! 	      break;
! 	    case GIMPLE_ASM:
! 	      op = std::make_unique<gasm_op>
! 		(*as_a <const gasm *> (next_stmt));
! 	      break;
! 	    case GIMPLE_ASSIGN:
! 	      op = std::make_unique<gassign_op>
! 		(*as_a <const gassign *> (next_stmt));
! 	      break;
! 	    case GIMPLE_CALL:
! 	      op = call_and_return_op::make
! 		(*as_a <const gcall *> (next_stmt));
! 	      break;
! 	    case GIMPLE_PREDICT:
! 	      op = std::make_unique<predict_op> (*next_stmt);
! 	      break;
! 	    case GIMPLE_RESX:
! 	      op = std::make_unique<resx_op>
! 		(*as_a <const gresx *> (next_stmt));
! 	      break;
! 	    case GIMPLE_RETURN:
! 	      op = std::make_unique<greturn_op>
! 		(*as_a <const greturn *> (next_stmt));
! 	      break;
! 
! 	    case GIMPLE_DEBUG:
! 	    case GIMPLE_LABEL:
! 	    case GIMPLE_NOP:
! 	      /* Treat all of these as no-ops within analyzer; though
! 		 perhaps we care about their locations.  */
! 	      break;
! 	    }
! 
  	  superedge *sedge
! 	    = new superedge (prev_snode_in_bb,
! 			     snode_after_next_stmt,
! 			     std::move (op),
! 			     nullptr);
  	  add_edge (sedge);
  	}
!       prev_snode_in_bb = snode_after_next_stmt;
      }
! 
!   m_bb_to_final_node.put (bb, prev_snode_in_bb);
! 
!   return final_control_flow_stmt;
  }
  
  /* supergraph's dtor.  Reset stmt uids.  */
*************** supergraph::dump_dot_to_pp (pretty_print
*** 347,352 ****
--- 394,401 ----
      {
        function *fun = node->get_fun ();
        gcc_assert (fun);
+       auto_cfun sentinel (fun);
+ 
        const char *funcname = function_name (fun);
        gv.println ("subgraph \"cluster_%s\" {",
  		  funcname);
*************** supergraph::dump_dot_to_pp (pretty_print
*** 357,401 ****
  		  " label=\"%s\";\n"),
  		 funcname);
  
!       /* Break out the nodes into clusters by BB from original CFG.  */
!       {
! 	basic_block bb;
! 	FOR_ALL_BB_FN (bb, fun)
! 	  {
! 	    if (dump_args.m_flags & SUPERGRAPH_DOT_SHOW_BBS)
! 	      {
! 		gv.println ("subgraph \"cluster_%s_bb_%i\" {",
! 			    funcname, bb->index);
! 		gv.indent ();
! 		pp_printf (pp,
! 			   ("style=\"dashed\";"
! 			    " color=\"black\";"
! 			    " label=\"bb: %i\";\n"),
! 			   bb->index);
! 	      }
! 
! 	    // TODO: maybe keep an index per-function/per-bb to speed this up???
! 	    int i;
! 	    supernode *n;
! 	    FOR_EACH_VEC_ELT (m_nodes, i, n)
! 	      if (n->m_fun == fun && n->m_bb == bb)
! 		n->dump_dot (&gv, dump_args);
! 
! 	    if (dump_args.m_flags & SUPERGRAPH_DOT_SHOW_BBS)
! 	      {
! 		/* Terminate per-bb "subgraph" */
! 		gv.outdent ();
! 		gv.println ("}");
! 	      }
! 	  }
!       }
! 
!       /* Add an invisible edge from ENTRY to EXIT, to improve the graph layout.  */
!       pp_string (pp, "\t");
!       get_node_for_function_entry (*fun)->dump_dot_id (pp);
!       pp_string (pp, ":s -> ");
!       get_node_for_function_exit (*fun)->dump_dot_id (pp);
!       pp_string (pp, ":n [style=\"invis\",constraint=true];\n");
  
        /* Terminate per-function "subgraph" */
        gv.outdent ();
--- 406,419 ----
  		  " label=\"%s\";\n"),
  		 funcname);
  
!       if (loops_for_fn (fun))
! 	dump_dot_to_gv_for_loop (gv, dump_args, get_loop (fun, 0), fun);
!       else
! 	{
! 	  basic_block bb;
! 	  FOR_ALL_BB_FN (bb, fun)
! 	    dump_dot_to_gv_for_bb (gv, dump_args, bb, fun);
! 	}
  
        /* Terminate per-function "subgraph" */
        gv.outdent ();
*************** supergraph::dump_dot_to_pp (pretty_print
*** 409,419 ****
--- 427,534 ----
    FOR_EACH_VEC_ELT (m_edges, i, e)
      e->dump_dot (&gv, dump_args);
  
+   if (dump_args.m_node_annotator)
+     dump_args.m_node_annotator->add_extra_objects (&gv);
+ 
    /* Terminate "digraph" */
    gv.outdent ();
    gv.println ("}");
  }
  
+ /* Recursively dump all the snodes within LOOP and the loops
+    within it.  */
+ 
+ void
+ supergraph::dump_dot_to_gv_for_loop (graphviz_out &gv,
+ 				     const dump_args_t &dump_args,
+ 				     class loop *loop,
+ 				     function *fun) const
+ {
+   pretty_printer *pp = gv.get_pp ();
+ 
+   basic_block *body;
+   unsigned int i;
+   // Adapted from graph.cc:draw_cfg_nodes_for_loop
+   const char *fillcolors[3] = { "grey88", "grey77", "grey66" };
+ 
+   if (loop->header != NULL
+       && loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun))
+     pp_printf (pp,
+ 	       "\tsubgraph cluster_%d_%d {\n"
+ 	       "\tstyle=\"filled\";\n"
+ 	       "\tcolor=\"darkgreen\";\n"
+ 	       "\tfillcolor=\"%s\";\n"
+ 	       "\tlabel=\"loop %d\";\n"
+ 	       "\tlabeljust=l;\n"
+ 	       "\tpenwidth=2;\n",
+ 	       fun->funcdef_no, loop->num,
+ 	       fillcolors[(loop_depth (loop) - 1) % 3],
+ 	       loop->num);
+ 
+   // Recurse
+   for (class loop *inner = loop->inner; inner; inner = inner->next)
+     dump_dot_to_gv_for_loop (gv, dump_args, inner, fun);
+ 
+   if (loop->header == NULL)
+     return;
+ 
+   if (loop->latch == EXIT_BLOCK_PTR_FOR_FN (cfun))
+     body = get_loop_body (loop);
+   else
+     body = get_loop_body_in_bfs_order (loop);
+ 
+   for (i = 0; i < loop->num_nodes; i++)
+     {
+       basic_block bb = body[i];
+       if (bb->loop_father == loop)
+ 	dump_dot_to_gv_for_bb (gv, dump_args, bb, fun);
+     }
+ 
+   free (body);
+ 
+   if (loop->latch != EXIT_BLOCK_PTR_FOR_FN (cfun))
+     pp_printf (pp, "\t}\n");
+ }
+ 
+ /* Dump all the snodes from BB.  */
+ 
+ void
+ supergraph::dump_dot_to_gv_for_bb (graphviz_out &gv,
+ 				   const dump_args_t &dump_args,
+ 				   basic_block bb,
+ 				   function *fun) const
+ {
+   pretty_printer *pp = gv.get_pp ();
+ 
+   if (dump_args.m_flags & SUPERGRAPH_DOT_SHOW_BBS)
+     {
+       const char *funcname = function_name (fun);
+       gv.println ("subgraph \"cluster_%s_bb_%i\" {",
+ 		  funcname, bb->index);
+       gv.indent ();
+       pp_printf (pp,
+ 		 ("style=\"dashed\";"
+ 		  " color=\"black\";"
+ 		  " label=\"bb: %i\";\n"),
+ 		 bb->index);
+     }
+ 
+   // TODO: maybe keep an index per-function/per-bb to speed this up???
+   int i;
+   supernode *n;
+   FOR_EACH_VEC_ELT (m_nodes, i, n)
+     if (n->m_fun == fun && n->m_bb == bb)
+       n->dump_dot (&gv, dump_args);
+ 
+   if (dump_args.m_flags & SUPERGRAPH_DOT_SHOW_BBS)
+     {
+       /* Terminate per-bb "subgraph" */
+       gv.outdent ();
+       gv.println ("}");
+     }
+ }
+ 
+ 
  /* Dump this graph in .dot format to FP, using DUMP_ARGS.  */
  
  void
*************** supergraph::to_json () const
*** 472,543 ****
    return sgraph_obj;
  }
  
! /* Create a supernode for BB within FUN and add it to this supergraph.
! 
!    If RETURNING_CALL is non-NULL, the supernode represents the resumption
!    of the basic block after returning from that call.
! 
!    If PHI_NODES is non-NULL, this is the initial supernode for the basic
!    block, and is responsible for any handling of the phi nodes.  */
  
  supernode *
! supergraph::add_node (function *fun, basic_block bb, gcall *returning_call,
! 		      gimple_seq phi_nodes)
  {
!   supernode *n = new supernode (fun, bb, returning_call, phi_nodes,
! 				m_nodes.length ());
    m_nodes.safe_push (n);
    return n;
  }
  
! /* Create a new cfg_superedge from SRC to DEST for the underlying CFG edge E,
!    adding it to this supergraph.
! 
!    If the edge is for a switch or eh_dispatch statement, create a
!    switch_cfg_superedge or eh_dispatch_cfg_superedge subclass,
!    respectively  */
! 
! cfg_superedge *
! supergraph::add_cfg_edge (supernode *src, supernode *dest, ::edge e)
  {
!   /* Special-case switch and eh_dispatch edges.  */
!   gimple *stmt = src->get_last_stmt ();
!   std::unique_ptr<cfg_superedge> new_edge;
!   if (stmt && stmt->code == GIMPLE_SWITCH)
!     new_edge = std::make_unique<switch_cfg_superedge> (src, dest, e);
!   else if (stmt && stmt->code == GIMPLE_EH_DISPATCH)
!     new_edge = eh_dispatch_cfg_superedge::make (src, dest, e,
! 						as_a <geh_dispatch *> (stmt));
!   else
!     new_edge = std::make_unique<cfg_superedge> (src, dest, e);
!   add_edge (new_edge.get ());
!   return new_edge.release ();
  }
  
! /* Create and add a call_superedge representing an interprocedural call
!    from SRC to DEST, using CEDGE.  */
  
! call_superedge *
! supergraph::add_call_superedge (supernode *src, supernode *dest,
! 				cgraph_edge *cedge)
! {
!   call_superedge *new_edge = new call_superedge (src, dest, cedge);
!   add_edge (new_edge);
!   return new_edge;
! }
  
! /* Create and add a return_superedge representing returning from an
!    interprocedural call, returning from SRC to DEST, using CEDGE.  */
  
! return_superedge *
! supergraph::add_return_superedge (supernode *src, supernode *dest,
! 				  cgraph_edge *cedge)
  {
!   return_superedge *new_edge = new return_superedge (src, dest, cedge);
!   add_edge (new_edge);
!   return new_edge;
  }
  
  /* Implementation of dnode::dump_dot vfunc for supernodes.
  
     Write a cluster for the node, and within it a .dot node showing
--- 587,771 ----
    return sgraph_obj;
  }
  
! /* Create a supernode within BB within FUN and add it to this supergraph.  */
  
  supernode *
! supergraph::add_node (function *fun, basic_block bb, logger *logger)
  {
!   supernode *n = new supernode (fun, bb, m_next_snode_id++);
!   m_snode_by_id.push_back (n);
    m_nodes.safe_push (n);
+   if (logger)
+     logger->log ("created SN %i", n->m_id);
    return n;
  }
  
! void
! supergraph::delete_nodes (const std::set<supernode *> &snodes_to_delete)
  {
!   /* Remove nodes from m_nodes.  */
!   unsigned read_index, write_index;
!   supernode **elem_ptr;
!   VEC_ORDERED_REMOVE_IF
!     (m_nodes, read_index, write_index, elem_ptr,
!      snodes_to_delete.find (*elem_ptr) != snodes_to_delete.end ()
!      );
! 
!   /* Remove nodes from m_snode_by_id, and delete them.  */
!   for (auto iter : snodes_to_delete)
!     {
!       gcc_assert (iter->m_preds.length () == 0);
!       gcc_assert (iter->m_succs.length () == 0);
!       m_snode_by_id[iter->m_id] = nullptr;
!       delete iter;
!     }
  }
  
! /* Create a chain of nodes and edges in this supergraph from SRC to DEST
!    to handle CFG_EDGE in the underlying CFG:
  
!     +---+
!     |SRC|
!     +---+
!       |
!       | optional edge for ctrlflow_stmt (if CTRLFLOW_STMT is non-null)
!       | (e.g. checking conditions on a GIMPLE_COND)
!       |
!       V
!    +------+
!    |(node)|
!    +------+
!       |
!       | optional edge for any phi nodes in the destination basic block
!       |
!       V
!    +------+
!    |(node)|
!    +------+
!       |
!       | optional edge for state merging at CFG join points
!       |
!       V
!    +----+
!    |DEST|
!    +----+
  
!    adding nodes where necessary between the edges, and adding a no-op edge
!    for the case where there is no CTRLFLOW_STMT, phi nodes, or
!    state merging.  */
  
! void
! supergraph::add_sedges_for_cfg_edge (supernode *src,
! 				     supernode *dest,
! 				     ::edge cfg_edge,
! 				     gimple *ctrlflow_stmt,
! 				     region_model_manager &mgr,
! 				     logger *logger)
  {
!   log_nesting_level sentinel (logger,
! 			      "edge: bb %i -> bb %i",
! 			      cfg_edge->src->index,
! 			      cfg_edge->dest->index);
!   std::unique_ptr<operation> ctrlflow_op;
!   if (ctrlflow_stmt)
!     switch (gimple_code (ctrlflow_stmt))
!       {
!       default:
! 	gcc_unreachable ();
! 	break;
!       case GIMPLE_COND:
! 	ctrlflow_op = std::make_unique<gcond_edge_op>
! 	  (cfg_edge,
! 	   *as_a <gcond *> (ctrlflow_stmt));
! 	break;
!       case GIMPLE_EH_DISPATCH:
! 	ctrlflow_op
! 	  = eh_dispatch_edge_op::make (src, dest,
! 				       cfg_edge,
! 				       *as_a <geh_dispatch *> (ctrlflow_stmt));
! 	break;
!       case GIMPLE_GOTO:
! 	{
! 	  ctrlflow_op = std::make_unique<ggoto_edge_op>
! 	    (cfg_edge,
! 	     *as_a <ggoto *> (ctrlflow_stmt),
! 	     dest->m_label);
! 	}
! 	break;
!       case GIMPLE_SWITCH:
! 	ctrlflow_op = std::make_unique<switch_case_op>
! 	  (*src->get_function (),
! 	   cfg_edge,
! 	   *as_a <gswitch *> (ctrlflow_stmt),
! 	   *mgr.get_range_manager ());
! 	break;
!       }
!   else
!     {
!       if (cfg_edge->flags & EDGE_ABNORMAL)
! 	/* Don't create superedges for such CFG edges (though
! 	   computed gotos are handled by the GIMPLE_GOTO clause above).  */
! 	return;
!     }
! 
!   /* Determine a location to use for any snodes within the CFG edge.  */
!   location_t dest_loc = dest->m_loc;
!   if (useful_location_p (cfg_edge->goto_locus))
!     dest_loc = cfg_edge->goto_locus;
! 
!   /* If the dest is a control flow join point, then for each CFG in-edge
!      add an extra snode/sedge before DEST and route to it.
!      We hope this will help state-merging keep the
!      different in-edges separately.  */
!   if (cfg_edge->dest->preds->length () > 1
!       && cfg_edge->dest->index != EXIT_BLOCK)
!     {
!       auto extra_snode = add_node (src->get_function (),
! 				   cfg_edge->dest,
! 				   logger);
!       extra_snode->m_loc = dest_loc;
!       extra_snode->m_preserve_p = true;
!       extra_snode->m_state_merger_node = true;
!       add_edge (new superedge (extra_snode, dest, nullptr, nullptr));
!       dest = extra_snode;
!     }
! 
!   std::unique_ptr<operation> phi_op;
!   if (phi_nodes (cfg_edge->dest))
!     phi_op = phis_for_edge_op::maybe_make (cfg_edge);
!   if (phi_op)
!     {
!       superedge *edge_for_phis_op;
!       if (ctrlflow_op)
! 	{
! 	  /* We have two ops; add an edge for each:
! 	     SRC --{ctrlflow_op}--> before_phi_nodes --{phi_op}--> DEST.  */
! 	  supernode *before_phi_nodes
! 	    = add_node (src->get_function (), cfg_edge->src, logger);
! 	  before_phi_nodes->m_loc = dest_loc;
! 	  add_edge (new superedge (src, before_phi_nodes,
! 				   std::move (ctrlflow_op),
! 				   cfg_edge));
! 	  edge_for_phis_op = new superedge (before_phi_nodes, dest,
! 					    std::move (phi_op),
! 					    cfg_edge);
! 	}
!       else
! 	/* We just have a phi_op; add: SRC --{phi_op}--> DEST.  */
! 	edge_for_phis_op
! 	  = new superedge (src, dest, std::move (phi_op), cfg_edge);
!       add_edge (edge_for_phis_op);
!       m_edges_for_phis.insert ({cfg_edge, edge_for_phis_op});
!     }
!   else
!     /* We don't have a phi op, create this edge:
!        SRC --{ctrlflow_op}--> DEST
!        where ctrlflow_op might be nullptr (for a no-op edge).  */
!     add_edge (new superedge (src, dest, std::move (ctrlflow_op), cfg_edge));
  }
  
+ // class supernode : public dnode<supergraph_traits>
+ 
  /* Implementation of dnode::dump_dot vfunc for supernodes.
  
     Write a cluster for the node, and within it a .dot node showing
*************** supergraph::add_return_superedge (supern
*** 547,690 ****
  void
  supernode::dump_dot (graphviz_out *gv, const dump_args_t &args) const
  {
-   gv->println ("subgraph cluster_node_%i {",
- 	       m_index);
-   gv->indent ();
- 
-   gv->println("style=\"solid\";");
-   gv->println("color=\"black\";");
-   gv->println("fillcolor=\"lightgrey\";");
-   gv->println("label=\"sn: %i (bb: %i)\";", m_index, m_bb->index);
- 
    pretty_printer *pp = gv->get_pp ();
  
-   if (args.m_node_annotator)
-     args.m_node_annotator->add_node_annotations (gv, *this, false);
- 
    gv->write_indent ();
    dump_dot_id (pp);
    pp_printf (pp,
! 	     " [shape=none,margin=0,style=filled,fillcolor=%s,label=<",
! 	     "lightgrey");
    pp_string (pp, "<TABLE BORDER=\"0\">");
    pp_write_text_to_stream (pp);
  
!   bool had_row = false;
! 
!   /* Give any annotator the chance to add its own per-node TR elements. */
!   if (args.m_node_annotator)
!     if (args.m_node_annotator->add_node_annotations (gv, *this, true))
!       had_row = true;
  
!   if (m_returning_call)
      {
!       gv->begin_trtd ();
!       pp_string (pp, "returning call: ");
!       gv->end_tdtr ();
! 
!       gv->begin_tr ();
!       gv->begin_td ();
!       pp_gimple_stmt_1 (pp, m_returning_call, 0, (dump_flags_t)0);
!       pp_write_text_as_html_like_dot_to_stream (pp);
!       gv->end_td ();
!       /* Give any annotator the chance to add per-stmt TD elements to
! 	 this row.  */
!       if (args.m_node_annotator)
! 	args.m_node_annotator->add_stmt_annotations (gv, m_returning_call,
! 						     true);
!       gv->end_tr ();
! 
!       /* Give any annotator the chance to add per-stmt TR elements.  */
!       if (args.m_node_annotator)
! 	args.m_node_annotator->add_stmt_annotations (gv, m_returning_call,
! 						     false);
        pp_newline (pp);
- 
-       had_row = true;
      }
- 
    if (entry_p ())
      {
        pp_string (pp, "<TR><TD>ENTRY</TD></TR>");
        pp_newline (pp);
-       had_row = true;
      }
! 
!   if (return_p ())
      {
        pp_string (pp, "<TR><TD>EXIT</TD></TR>");
        pp_newline (pp);
-       had_row = true;
      }
  
!   /* Phi nodes.  */
!   for (gphi_iterator gpi = const_cast<supernode *> (this)->start_phis ();
!        !gsi_end_p (gpi); gsi_next (&gpi))
      {
!       const gimple *stmt = gsi_stmt (gpi);
!       gv->begin_tr ();
!       gv->begin_td ();
!       pp_gimple_stmt_1 (pp, stmt, 0, (dump_flags_t)0);
!       pp_write_text_as_html_like_dot_to_stream (pp);
!       gv->end_td ();
!       /* Give any annotator the chance to add per-phi TD elements to
! 	 this row.  */
!       if (args.m_node_annotator)
! 	args.m_node_annotator->add_stmt_annotations (gv, stmt, true);
!       gv->end_tr ();
  
!       /* Give any annotator the chance to add per-phi TR elements.  */
!       if (args.m_node_annotator)
! 	args.m_node_annotator->add_stmt_annotations (gv, stmt, false);
  
!       pp_newline (pp);
!       had_row = true;
!     }
  
!   /* Statements.  */
!   int i;
!   gimple *stmt;
!   FOR_EACH_VEC_ELT (m_stmts, i, stmt)
!     {
!       gv->begin_tr ();
!       gv->begin_td ();
!       pp_gimple_stmt_1 (pp, stmt, 0, (dump_flags_t)0);
!       pp_write_text_as_html_like_dot_to_stream (pp);
!       gv->end_td ();
!       /* Give any annotator the chance to add per-stmt TD elements to
! 	 this row.  */
!       if (args.m_node_annotator)
! 	args.m_node_annotator->add_stmt_annotations (gv, stmt, true);
!       gv->end_tr ();
  
!       /* Give any annotator the chance to add per-stmt TR elements.  */
!       if (args.m_node_annotator)
! 	args.m_node_annotator->add_stmt_annotations (gv, stmt, false);
  
!       pp_newline (pp);
!       had_row = true;
      }
  
!   /* Give any annotator the chance to add additional per-node TR elements
!      to the end of the TABLE. */
    if (args.m_node_annotator)
!     if (args.m_node_annotator->add_after_node_annotations (gv, *this))
!       had_row = true;
  
!   /* Graphviz requires a TABLE element to have at least one TR
!      (and each TR to have at least one TD).  */
!   if (!had_row)
!     {
!       pp_string (pp, "<TR><TD>(empty)</TD></TR>");
!       pp_newline (pp);
!     }
  
    pp_string (pp, "</TABLE>>];\n\n");
    pp_flush (pp);
- 
-   /* Terminate "subgraph" */
-   gv->outdent ();
-   gv->println ("}");
  }
  
  /* Write an ID for this node to PP, for use in .dot output.  */
--- 775,891 ----
  void
  supernode::dump_dot (graphviz_out *gv, const dump_args_t &args) const
  {
    pretty_printer *pp = gv->get_pp ();
  
    gv->write_indent ();
    dump_dot_id (pp);
+ 
    pp_printf (pp,
! 	     " [shape=none,margin=0,style=filled,label=<");
    pp_string (pp, "<TABLE BORDER=\"0\">");
    pp_write_text_to_stream (pp);
  
!   pp_printf (pp, "<TR><TD>sn: %i (bb: %i)",
! 	     m_id, m_bb->index);
!   if (args.m_eg)
!     pp_printf (pp, "; scc: %i", args.m_eg->get_scc_id (*this));
!   pp_string (pp, "</TD></TR>");
!   pp_newline (pp);
  
!   if (m_preserve_p)
      {
!       pp_string (pp, "<TR><TD>(preserve)</TD></TR>");
!       pp_newline (pp);
!     }
!   if (m_state_merger_node)
!     {
!       pp_string (pp, "<TR><TD BGCOLOR=\"#ec7a08\">"
! 		 "<FONT COLOR=\"white\">STATE MERGER</FONT></TD></TR>");
        pp_newline (pp);
      }
    if (entry_p ())
      {
        pp_string (pp, "<TR><TD>ENTRY</TD></TR>");
        pp_newline (pp);
      }
!   else if (exit_p ())
      {
        pp_string (pp, "<TR><TD>EXIT</TD></TR>");
        pp_newline (pp);
      }
  
!   /* Source location.  */
!   /* Highlight nodes where we're missing source location information.
!      Ideally this all gets fixed up by supergraph::fixup_locations.  */
!   if (m_loc == UNKNOWN_LOCATION)
!     pp_string (pp, "<TR><TD>UNKNOWN_LOCATION</TD></TR>");
!   else if (get_pure_location (m_loc) == UNKNOWN_LOCATION)
      {
!       pp_printf (pp, "<TR><TD>location: 0x%lx</TD></TR>", m_loc);
!       pp_string (pp, "<TR><TD>UNKNOWN_LOCATION</TD></TR>");
!     }
!   else
!     {
!       /* Show the source location, but skip it for the case where it's
! 	 the same as all previous snodes (and there's a single in-edge).  */
!       bool show_location = true;
!       location_t prev_loc = UNKNOWN_LOCATION;
!       if (m_preds.length () == 1)
! 	{
! 	  prev_loc = m_preds[0]->m_src->m_loc;
! 	  if (prev_loc == m_loc)
! 	    show_location = false;
! 	}
!       if (show_location)
! 	{
! 	  pp_printf (pp, "<TR><TD>location: 0x%lx</TD></TR>", m_loc);
  
! 	  /* Print changes to the expanded location (or all of it if
! 	     we have multiple in-edges).  */
! 	  auto prev_exploc = expand_location (prev_loc);
! 	  auto exploc = expand_location (m_loc);
  
! 	  if ((exploc.file != prev_exploc.file)
! 	      && exploc.file)
! 	    pp_printf (pp, "<TR><TD>%s:%i:</TD></TR>",
! 		       exploc.file, exploc.line);
! 	  if (exploc.line != prev_exploc.line)
! 	    if (const diagnostics::char_span line
! 		= global_dc->get_file_cache ().get_source_line (exploc.file,
! 								exploc.line))
! 	      {
! 		/* Print the source line.  */
! 		pp_string (pp, "<TR><TD>");
! 		pp_string (pp, "<TABLE BORDER=\"0\"><TR>");
  
! 		// Line number:
! 		pp_printf (pp, ("<TD ALIGN=\"RIGHT\" BGCOLOR=\"#0088ce\">"
! 				"<FONT COLOR=\"white\"> %i</FONT></TD>"),
! 			   exploc.line);
  
! 		// Line contents:
! 		pp_string (pp, "<TD ALIGN=\"LEFT\" BGCOLOR=\"white\">");
! 		pp_flush (pp);
! 		for (size_t i = 0; i < line.length (); ++i)
! 		  pp_character (pp, line[i]);
! 		pp_write_text_as_html_like_dot_to_stream (pp);
! 		pp_string (pp, "</TD>");
  
! 		pp_string (pp, "</TR></TABLE>");
! 		pp_string (pp, "</TD></TR>");
! 	      }
! 	}
      }
  
!   pp_flush (pp);
! 
    if (args.m_node_annotator)
!     args.m_node_annotator->add_node_annotations (gv, *this);
  
!   pp_printf (pp, "<TR><TD>m_stmt_loc: 0x%lx</TD></TR>", m_stmt_loc);
  
    pp_string (pp, "</TABLE>>];\n\n");
    pp_flush (pp);
  }
  
  /* Write an ID for this node to PP, for use in .dot output.  */
*************** supernode::dump_dot (graphviz_out *gv, c
*** 692,875 ****
  void
  supernode::dump_dot_id (pretty_printer *pp) const
  {
!   pp_printf (pp, "node_%i", m_index);
  }
  
  /* Return a new json::object of the form
!    {"idx": int,
      "fun": optional str
!     "bb_idx": int,
!     "returning_call": optional str,
!     "phis": [str],
!     "stmts" : [str]}.  */
  
  std::unique_ptr<json::object>
  supernode::to_json () const
  {
    auto snode_obj = std::make_unique<json::object> ();
  
!   snode_obj->set_integer ("idx", m_index);
    snode_obj->set_integer ("bb_idx", m_bb->index);
    if (function *fun = get_function ())
      snode_obj->set_string ("fun", function_name (fun));
  
-   if (m_returning_call)
-     {
-       pretty_printer pp;
-       pp_format_decoder (&pp) = default_tree_printer;
-       pp_gimple_stmt_1 (&pp, m_returning_call, 0, (dump_flags_t)0);
-       snode_obj->set_string ("returning_call", pp_formatted_text (&pp));
-     }
- 
-   /* Phi nodes.  */
-   {
-     auto phi_arr = std::make_unique<json::array> ();
-     for (gphi_iterator gpi = const_cast<supernode *> (this)->start_phis ();
- 	 !gsi_end_p (gpi); gsi_next (&gpi))
-       {
- 	const gimple *stmt = gsi_stmt (gpi);
- 	pretty_printer pp;
- 	pp_format_decoder (&pp) = default_tree_printer;
- 	pp_gimple_stmt_1 (&pp, stmt, 0, (dump_flags_t)0);
- 	phi_arr->append_string (pp_formatted_text (&pp));
-       }
-     snode_obj->set ("phis", std::move (phi_arr));
-   }
- 
-   /* Statements.  */
-   {
-     auto stmt_arr = std::make_unique<json::array> ();
-     int i;
-     gimple *stmt;
-     FOR_EACH_VEC_ELT (m_stmts, i, stmt)
-       {
- 	pretty_printer pp;
- 	pp_format_decoder (&pp) = default_tree_printer;
- 	pp_gimple_stmt_1 (&pp, stmt, 0, (dump_flags_t)0);
- 	stmt_arr->append_string (pp_formatted_text (&pp));
-       }
-     snode_obj->set ("stmts", std::move (stmt_arr));
-   }
- 
    return snode_obj;
  }
  
- /* Get a location_t for the start of this supernode.  */
- 
- location_t
- supernode::get_start_location () const
- {
-   if (m_returning_call
-       && get_pure_location (m_returning_call->location) != UNKNOWN_LOCATION)
-     return m_returning_call->location;
- 
-   int i;
-   gimple *stmt;
-   FOR_EACH_VEC_ELT (m_stmts, i, stmt)
-     if (get_pure_location (stmt->location) != UNKNOWN_LOCATION)
-       return stmt->location;
- 
-   if (entry_p ())
-     {
-       // TWEAK: show the decl instead; this leads to more readable output:
-       return DECL_SOURCE_LOCATION (m_fun->decl);
- 
-       return m_fun->function_start_locus;
-     }
-   if (return_p ())
-     return m_fun->function_end_locus;
- 
-   /* We have no locations for stmts.  If we have a single out-edge that's
-      a CFG edge, the goto_locus of that edge is a better location for this
-      than UNKNOWN_LOCATION.  */
-   if (m_succs.length () == 1)
-     if (const cfg_superedge *cfg_sedge = m_succs[0]->dyn_cast_cfg_superedge ())
-       return cfg_sedge->get_goto_locus ();
- 
-   return UNKNOWN_LOCATION;
- }
- 
- /* Get a location_t for the end of this supernode.  */
- 
- location_t
- supernode::get_end_location () const
- {
-   int i;
-   gimple *stmt;
-   FOR_EACH_VEC_ELT_REVERSE (m_stmts, i, stmt)
-     if (get_pure_location (stmt->location) != UNKNOWN_LOCATION)
-       return stmt->location;
- 
-   if (m_returning_call
-       && get_pure_location (m_returning_call->location) != UNKNOWN_LOCATION)
-     return m_returning_call->location;
- 
-   if (entry_p ())
-     return m_fun->function_start_locus;
-   if (return_p ())
-     return m_fun->function_end_locus;
- 
-   /* If we have a single out-edge that's a CFG edge, use the goto_locus of
-      that edge.  */
-   if (m_succs.length () == 1)
-     if (const cfg_superedge *cfg_sedge = m_succs[0]->dyn_cast_cfg_superedge ())
-       return cfg_sedge->get_goto_locus ();
- 
-   return UNKNOWN_LOCATION;
- }
- 
- /* Given STMT within this supernode, return its index within m_stmts.  */
- 
- unsigned int
- supernode::get_stmt_index (const gimple *stmt) const
- {
-   unsigned i;
-   gimple *iter_stmt;
-   FOR_EACH_VEC_ELT (m_stmts, i, iter_stmt)
-     if (iter_stmt == stmt)
-       return i;
-   gcc_unreachable ();
- }
- 
- /* Get any label_decl for this supernode, or NULL_TREE if there isn't one.  */
- 
- tree
- supernode::get_label () const
- {
-   if (m_stmts.length () == 0)
-     return NULL_TREE;
-   const glabel *label_stmt = dyn_cast<const glabel *> (m_stmts[0]);
-   if (!label_stmt)
-     return NULL_TREE;
-   return gimple_label_label (label_stmt);
- }
- 
- /* Get a string for PK.  */
- 
- static const char *
- edge_kind_to_string (enum edge_kind kind)
- {
-   switch (kind)
-     {
-     default:
-       gcc_unreachable ();
-     case SUPEREDGE_CFG_EDGE:
-       return "SUPEREDGE_CFG_EDGE";
-     case SUPEREDGE_CALL:
-       return "SUPEREDGE_CALL";
-     case SUPEREDGE_RETURN:
-       return "SUPEREDGE_RETURN";
-     case SUPEREDGE_INTRAPROCEDURAL_CALL:
-       return "SUPEREDGE_INTRAPROCEDURAL_CALL";
-     }
- };
- 
  /* Dump this superedge to PP.  */
  
  void
  superedge::dump (pretty_printer *pp) const
  {
!   pp_printf (pp, "edge: SN: %i -> SN: %i", m_src->m_index, m_dest->m_index);
    label_text desc (get_description (false));
    if (strlen (desc.get ()) > 0)
      {
--- 893,925 ----
  void
  supernode::dump_dot_id (pretty_printer *pp) const
  {
!   pp_printf (pp, "node_%i", m_id);
  }
  
  /* Return a new json::object of the form
!    {"id": int,
      "fun": optional str
!     "bb_idx": int}.  */
  
  std::unique_ptr<json::object>
  supernode::to_json () const
  {
    auto snode_obj = std::make_unique<json::object> ();
  
!   snode_obj->set_integer ("id", m_id);
    snode_obj->set_integer ("bb_idx", m_bb->index);
    if (function *fun = get_function ())
      snode_obj->set_string ("fun", function_name (fun));
  
    return snode_obj;
  }
  
  /* Dump this superedge to PP.  */
  
  void
  superedge::dump (pretty_printer *pp) const
  {
!   pp_printf (pp, "edge: SN: %i -> SN: %i", m_src->m_id, m_dest->m_id);
    label_text desc (get_description (false));
    if (strlen (desc.get ()) > 0)
      {
*************** superedge::dump_dot (graphviz_out *gv, c
*** 899,921 ****
    int weight = 10;
    const char *constraint = "true";
  
-   switch (m_kind)
-     {
-     default:
-       gcc_unreachable ();
-     case SUPEREDGE_CFG_EDGE:
-       break;
-     case SUPEREDGE_CALL:
-       color = "red";
-       break;
-     case SUPEREDGE_RETURN:
-       color = "green";
-       break;
-     case SUPEREDGE_INTRAPROCEDURAL_CALL:
-       style = "\"dotted\"";
-       break;
-     }
- 
    /* Adapted from graph.cc:draw_cfg_node_succ_edges.  */
    if (::edge cfg_edge = get_any_cfg_edge ())
      {
--- 949,954 ----
*************** superedge::dump_dot (graphviz_out *gv, c
*** 950,1009 ****
    m_dest->dump_dot_id (pp);
    pp_printf (pp,
  	     (" [style=%s, color=%s, weight=%d, constraint=%s,"
- 	      " ltail=\"cluster_node_%i\", lhead=\"cluster_node_%i\""
  	      " headlabel=\""),
! 	     style, color, weight, constraint,
! 	     m_src->m_index, m_dest->m_index);
  
    dump_label_to_pp (pp, false);
  
    pp_printf (pp, "\"];\n");
  }
  
  /* Return a new json::object of the form
!    {"kind"   : str,
!     "src_idx": int, the index of the source supernode,
!     "dst_idx": int, the index of the destination supernode,
!     "desc"   : str.  */
  
  std::unique_ptr<json::object>
  superedge::to_json () const
  {
    auto sedge_obj = std::make_unique<json::object> ();
!   sedge_obj->set_string ("kind", edge_kind_to_string (m_kind));
!   sedge_obj->set_integer ("src_idx", m_src->m_index);
!   sedge_obj->set_integer ("dst_idx", m_dest->m_index);
! 
!   {
!     pretty_printer pp;
!     pp_format_decoder (&pp) = default_tree_printer;
!     dump_label_to_pp (&pp, false);
!     sedge_obj->set_string ("desc", pp_formatted_text (&pp));
!   }
! 
    return sedge_obj;
  }
  
! /* If this is an intraprocedural superedge, return the associated
!    CFG edge.  Otherwise, return nullptr.  */
! 
! ::edge
! superedge::get_any_cfg_edge () const
! {
!   if (const cfg_superedge *sub = dyn_cast_cfg_superedge ())
!     return sub->get_cfg_edge ();
!   return nullptr;
! }
! 
! /* If this is an interprocedural superedge, return the associated
!    cgraph_edge *.  Otherwise, return nullptr.  */
  
! cgraph_edge *
! superedge::get_any_callgraph_edge () const
  {
!   if (const callgraph_superedge *sub = dyn_cast_callgraph_superedge ())
!     return sub->m_cedge;
!   return nullptr;
  }
  
  /* Build a description of this superedge (e.g. "true" for the true
--- 983,1024 ----
    m_dest->dump_dot_id (pp);
    pp_printf (pp,
  	     (" [style=%s, color=%s, weight=%d, constraint=%s,"
  	      " headlabel=\""),
! 	     style, color, weight, constraint);
!   pp_flush (pp);
  
    dump_label_to_pp (pp, false);
+   pp_write_text_as_dot_label_to_stream (pp, false);
  
    pp_printf (pp, "\"];\n");
  }
  
  /* Return a new json::object of the form
!    {"src_id": int, the index of the source supernode,
!     "dst_id": int, the index of the destination supernode} */
  
  std::unique_ptr<json::object>
  superedge::to_json () const
  {
    auto sedge_obj = std::make_unique<json::object> ();
!   sedge_obj->set_integer ("src_id", m_src->m_id);
!   sedge_obj->set_integer ("dst_id", m_dest->m_id);
    return sedge_obj;
  }
  
! /* Return true iff this edge needs to be preserved during simplification.  */
  
! bool
! superedge::preserve_p () const
  {
!   if (m_cfg_edge)
!     if (m_cfg_edge->flags & (EDGE_EH | EDGE_DFS_BACK))
!       {
! 	/* We use EDGE_EH in get_eh_outedge, and EDGE_DFS_BACK
! 	   for detecting infinite loops.  */
! 	return true;
!       }
!   return false;
  }
  
  /* Build a description of this superedge (e.g. "true" for the true
*************** superedge::get_description (bool user_fa
*** 1021,1583 ****
    return label_text::take (xstrdup (pp_formatted_text (&pp)));
  }
  
- /* Implementation of superedge::dump_label_to_pp for non-switch CFG
-    superedges.
- 
-    For true/false edges, print "true" or "false" to PP.
- 
-    If USER_FACING is false, also print flags on the underlying CFG edge to
-    PP.  */
- 
  void
! cfg_superedge::dump_label_to_pp (pretty_printer *pp,
! 				 bool user_facing) const
  {
!   if (true_value_p ())
!     pp_printf (pp, "true");
!   else if (false_value_p ())
!     pp_printf (pp, "false");
  
    if (user_facing)
      return;
  
!   /* Express edge flags as a string with " | " separator.
!      e.g. " (flags FALLTHRU | DFS_BACK)".  */
!   if (get_flags ())
      {
!       pp_string (pp, " (flags ");
!       bool seen_flag = false;
  #define DEF_EDGE_FLAG(NAME,IDX)			\
!   do {						\
!     if (get_flags () & EDGE_##NAME)			\
!       {						\
! 	if (seen_flag)				\
! 	  pp_string (pp, " | ");			\
! 	pp_printf (pp, "%s", (#NAME));		\
! 	seen_flag = true;			\
!       }						\
!   } while (0);
  #include "cfg-flags.def"
  #undef DEF_EDGE_FLAG
!       pp_string (pp, ")");
!     }
! 
!   if (m_cfg_edge->goto_locus > BUILTINS_LOCATION)
!     pp_string (pp, " (has goto_locus)");
! 
!   /* Otherwise, no label.  */
! }
! 
! /* Get the index number for this edge for use in phi stmts
!    in its destination.  */
! 
! size_t
! cfg_superedge::get_phi_arg_idx () const
! {
!   return m_cfg_edge->dest_idx;
! }
! 
! /* Get the phi argument for PHI for this CFG edge.  */
! 
! tree
! cfg_superedge::get_phi_arg (const gphi *phi) const
! {
!   size_t index = get_phi_arg_idx ();
!   return gimple_phi_arg_def (phi, index);
! }
! 
! /* class switch_cfg_superedge : public cfg_superedge.  */
! 
! switch_cfg_superedge::switch_cfg_superedge (supernode *src,
! 					    supernode *dst,
! 					    ::edge e)
! : cfg_superedge (src, dst, e)
! {
!   /* Populate m_case_labels with all cases which go to DST.  */
!   const gswitch *gswitch = get_switch_stmt ();
!   for (unsigned i = 0; i < gimple_switch_num_labels (gswitch); i++)
!     {
!       tree case_ = gimple_switch_label (gswitch, i);
!       basic_block bb = label_to_block (src->get_function (),
! 				       CASE_LABEL (case_));
!       if (bb == dst->m_bb)
! 	m_case_labels.safe_push (case_);
!     }
! }
! 
! /* Implementation of superedge::dump_label_to_pp for CFG superedges for
!    "switch" statements.
! 
!    Print "case VAL:", "case LOWER ... UPPER:", or "default:" to PP.  */
! 
! void
! switch_cfg_superedge::dump_label_to_pp (pretty_printer *pp,
! 					bool user_facing ATTRIBUTE_UNUSED) const
! {
!   if (user_facing)
!     {
!       for (unsigned i = 0; i < m_case_labels.length (); ++i)
! 	{
! 	  if (i > 0)
! 	    pp_string (pp, ", ");
! 	  tree case_label = m_case_labels[i];
! 	  gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
! 	  tree lower_bound = CASE_LOW (case_label);
! 	  tree upper_bound = CASE_HIGH (case_label);
! 	  if (lower_bound)
! 	    {
! 	      pp_printf (pp, "case ");
! 	      dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0, false);
! 	      if (upper_bound)
! 		{
! 		  pp_printf (pp, " ... ");
! 		  dump_generic_node (pp, upper_bound, 0, (dump_flags_t)0,
! 				     false);
! 		}
! 	      pp_printf (pp, ":");
! 	    }
! 	  else
! 	    pp_printf (pp, "default:");
! 	}
!     }
!   else
!     {
!       pp_character (pp, '{');
!       for (unsigned i = 0; i < m_case_labels.length (); ++i)
! 	{
! 	  if (i > 0)
! 	    pp_string (pp, ", ");
! 	  tree case_label = m_case_labels[i];
! 	  gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
! 	  tree lower_bound = CASE_LOW (case_label);
! 	  tree upper_bound = CASE_HIGH (case_label);
! 	  if (lower_bound)
! 	    {
! 	      if (upper_bound)
! 		{
! 		  pp_character (pp, '[');
! 		  dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0,
! 				     false);
! 		  pp_string (pp, ", ");
! 		  dump_generic_node (pp, upper_bound, 0, (dump_flags_t)0,
! 				     false);
! 		  pp_character (pp, ']');
! 		}
! 	      else
! 		dump_generic_node (pp, lower_bound, 0, (dump_flags_t)0, false);
! 	    }
! 	  else
! 	    pp_printf (pp, "default");
! 	}
!       pp_character (pp, '}');
!       if (implicitly_created_default_p ())
! 	{
! 	  pp_string (pp, " IMPLICITLY CREATED");
! 	}
!     }
! }
! 
! /* Return true iff this edge is purely for an implicitly-created "default".  */
! 
! bool
! switch_cfg_superedge::implicitly_created_default_p () const
! {
!   if (m_case_labels.length () != 1)
!     return false;
! 
!   tree case_label = m_case_labels[0];
!   gcc_assert (TREE_CODE (case_label) == CASE_LABEL_EXPR);
!   if (CASE_LOW (case_label))
!     return false;
! 
!   /* We have a single "default" case.
!      Assume that it was implicitly created if it has UNKNOWN_LOCATION.  */
!   return EXPR_LOCATION (case_label) == UNKNOWN_LOCATION;
! }
! 
! /* class eh_dispatch_cfg_superedge : public cfg_superedge.  */
! 
! /* Given an ERT_TRY region, get the eh_catch corresponding to
!    the label of DST_SNODE, if any.  */
! 
! static eh_catch
! get_catch (eh_region eh_reg, supernode *dst_snode)
! {
!   gcc_assert (eh_reg->type == ERT_TRY);
! 
!   tree dst_snode_label = dst_snode->get_label ();
!   if (!dst_snode_label)
!     return nullptr;
! 
!   for (eh_catch iter = eh_reg->u.eh_try.first_catch;
!        iter;
!        iter = iter->next_catch)
!     if (iter->label == dst_snode_label)
!       return iter;
! 
!   return nullptr;
! }
! 
! std::unique_ptr<eh_dispatch_cfg_superedge>
! eh_dispatch_cfg_superedge::make (supernode *src_snode,
! 				 supernode *dst_snode,
! 				 ::edge e,
! 				 const geh_dispatch *eh_dispatch_stmt)
! {
!   const eh_status *eh = src_snode->get_function ()->eh;
!   gcc_assert (eh);
!   int region_idx = gimple_eh_dispatch_region (eh_dispatch_stmt);
!   gcc_assert (region_idx > 0);
!   gcc_assert ((*eh->region_array)[region_idx]);
!   eh_region eh_reg = (*eh->region_array)[region_idx];
!   gcc_assert (eh_reg);
!   switch (eh_reg->type)
!     {
!     default:
!       gcc_unreachable ();
!     case ERT_CLEANUP:
!       // TODO
!       gcc_unreachable ();
!       break;
!     case ERT_TRY:
!       {
! 	eh_catch ehc = get_catch (eh_reg, dst_snode);
! 	return std::make_unique<eh_dispatch_try_cfg_superedge>
! 	  (src_snode, dst_snode,
! 	   e, eh_dispatch_stmt,
! 	   eh_reg, ehc);
!       }
!       break;
!     case ERT_ALLOWED_EXCEPTIONS:
!       return std::make_unique<eh_dispatch_allowed_cfg_superedge>
! 	(src_snode, dst_snode,
! 	 e, eh_dispatch_stmt,
! 	 eh_reg);
!       break;
!     case ERT_MUST_NOT_THROW:
!       // TODO
!       gcc_unreachable ();
!       break;
!     }
! }
! 
! eh_dispatch_cfg_superedge::
! eh_dispatch_cfg_superedge (supernode *src,
! 			   supernode *dst,
! 			   ::edge e,
! 			   const geh_dispatch *eh_dispatch_stmt,
! 			   eh_region eh_reg)
! : cfg_superedge (src, dst, e),
!   m_eh_dispatch_stmt (eh_dispatch_stmt),
!   m_eh_region (eh_reg)
! {
!   gcc_assert (m_eh_region);
! }
! 
! const eh_status &
! eh_dispatch_cfg_superedge::get_eh_status () const
! {
!   const eh_status *eh = m_src->get_function ()->eh;
!   gcc_assert (eh);
!   return *eh;
! }
! 
! // class eh_dispatch_try_cfg_superedge : public eh_dispatch_cfg_superedge
! 
! /* Implementation of superedge::dump_label_to_pp for CFG superedges for
!    "eh_dispatch" statements for ERT_TRY regions.  */
! 
! void
! eh_dispatch_try_cfg_superedge::dump_label_to_pp (pretty_printer *pp,
! 						 bool user_facing) const
! {
!   if (!user_facing)
!     pp_string (pp, "ERT_TRY: ");
!   if (m_eh_catch)
!     {
!       bool first = true;
!       for (tree iter = m_eh_catch->type_list; iter; iter = TREE_CHAIN (iter))
! 	{
! 	  if (!first)
! 	    pp_string (pp, ", ");
! 	  pp_printf (pp, "on catch %qT", TREE_VALUE (iter));
! 	  first = false;
! 	}
!     }
!   else
!     pp_string (pp, "on uncaught exception");
! }
! 
! bool
! eh_dispatch_try_cfg_superedge::
! apply_constraints (region_model *model,
! 		   region_model_context *ctxt,
! 		   tree exception_type,
! 		   std::unique_ptr<rejected_constraint> *out) const
! {
!   return model->apply_constraints_for_eh_dispatch_try
!     (*this, ctxt, exception_type, out);
! }
! 
! // class eh_dispatch_allowed_cfg_superedge : public eh_dispatch_cfg_superedge
! 
! eh_dispatch_allowed_cfg_superedge::
! eh_dispatch_allowed_cfg_superedge (supernode *src, supernode *dst, ::edge e,
! 				   const geh_dispatch *eh_dispatch_stmt,
! 				   eh_region eh_reg)
! : eh_dispatch_cfg_superedge (src, dst, e, eh_dispatch_stmt, eh_reg)
! {
!   gcc_assert (eh_reg->type == ERT_ALLOWED_EXCEPTIONS);
! 
!   /* We expect two sibling out-edges at an eh_dispatch from such a region:
! 
!      - one to a bb without a gimple label, with a resx,
!      for exceptions of expected types
! 
!      - one to a bb with a gimple label, with a call to __cxa_unexpected,
!      for exceptions of unexpected types.
! 
!      Set m_kind for this edge accordingly.  */
!   gcc_assert (e->src->succs->length () == 2);
!   tree label_for_unexpected_exceptions = eh_reg->u.allowed.label;
!   tree label_for_dest_enode = dst->get_label ();
!   if (label_for_dest_enode == label_for_unexpected_exceptions)
!     m_kind = eh_kind::unexpected;
!   else
!     {
!       gcc_assert (label_for_dest_enode == nullptr);
!       m_kind = eh_kind::expected;
!     }
! }
! 
! void
! eh_dispatch_allowed_cfg_superedge::dump_label_to_pp (pretty_printer *pp,
! 						     bool user_facing) const
! {
!   if (!user_facing)
!     {
!       switch (m_kind)
! 	{
! 	default:
! 	  gcc_unreachable ();
! 	case eh_dispatch_allowed_cfg_superedge::eh_kind::expected:
! 	  pp_string (pp, "expected: ");
! 	  break;
! 	case eh_dispatch_allowed_cfg_superedge::eh_kind::unexpected:
! 	  pp_string (pp, "unexpected: ");
! 	  break;
! 	}
!       pp_string (pp, "ERT_ALLOWED_EXCEPTIONS: ");
!       eh_region eh_reg = get_eh_region ();
!       bool first = true;
!       for (tree iter = eh_reg->u.allowed.type_list; iter;
! 	   iter = TREE_CHAIN (iter))
! 	{
! 	  if (!first)
! 	    pp_string (pp, ", ");
! 	  pp_printf (pp, "%qT", TREE_VALUE (iter));
! 	  first = false;
  	}
      }
  }
  
  bool
! eh_dispatch_allowed_cfg_superedge::
! apply_constraints (region_model *model,
! 		   region_model_context *ctxt,
! 		   tree exception_type,
! 		   std::unique_ptr<rejected_constraint> *out) const
! {
!   return model->apply_constraints_for_eh_dispatch_allowed
!     (*this, ctxt, exception_type, out);
! }
! 
! /* Implementation of superedge::dump_label_to_pp for interprocedural
!    superedges.  */
! 
! void
! callgraph_superedge::dump_label_to_pp (pretty_printer *pp,
! 				       bool user_facing ATTRIBUTE_UNUSED) const
! {
!   switch (m_kind)
!     {
!     default:
!     case SUPEREDGE_CFG_EDGE:
!       gcc_unreachable ();
! 
!     case SUPEREDGE_CALL:
!       pp_printf (pp, "call");
!       break;
! 
!     case SUPEREDGE_RETURN:
!       pp_printf (pp, "return");
!       break;
! 
!     case SUPEREDGE_INTRAPROCEDURAL_CALL:
!       pp_printf (pp, "intraproc link");
!       break;
!     }
! }
! 
! /* Get the function that was called at this interprocedural call/return
!    edge.  */
! 
! function *
! callgraph_superedge::get_callee_function () const
! {
!   return get_ultimate_function_for_cgraph_edge (m_cedge);
! }
! 
! /* Get the calling function at this interprocedural call/return edge.  */
! 
! function *
! callgraph_superedge::get_caller_function () const
! {
!   return m_cedge->caller->get_fun ();
! }
! 
! /* Get the fndecl that was called at this interprocedural call/return
!    edge.  */
! 
! tree
! callgraph_superedge::get_callee_decl () const
! {
!   return get_callee_function ()->decl;
! }
! 
! /* Get the gcall * of this interprocedural call/return edge.  */
! 
! const gcall &
! callgraph_superedge::get_call_stmt () const
! {
!   if (m_cedge)
!     return *m_cedge->call_stmt;
! 
!   return *m_src->get_final_call ();
! }
! 
! /* Get the calling fndecl at this interprocedural call/return edge.  */
! 
! tree
! callgraph_superedge::get_caller_decl () const
! {
!   return get_caller_function ()->decl;
! }
! 
! /* Given PARM_TO_FIND, a PARM_DECL, identify its index (writing it
!    to *OUT if OUT is non-NULL), and return the corresponding argument
!    at the callsite.  */
! 
! tree
! callgraph_superedge::get_arg_for_parm (tree parm_to_find,
! 				       callsite_expr *out) const
! {
!   gcc_assert  (TREE_CODE (parm_to_find) == PARM_DECL);
! 
!   tree callee = get_callee_decl ();
!   const gcall &call_stmt = get_call_stmt ();
! 
!   unsigned i = 0;
!   for (tree iter_parm = DECL_ARGUMENTS (callee); iter_parm;
!        iter_parm = DECL_CHAIN (iter_parm), ++i)
!     {
!       if (i >= gimple_call_num_args (&call_stmt))
! 	return NULL_TREE;
!       if (iter_parm == parm_to_find)
! 	{
! 	  if (out)
! 	    *out = callsite_expr::from_zero_based_param (i);
! 	  return gimple_call_arg (&call_stmt, i);
! 	}
!     }
! 
!   /* Not found.  */
!   return NULL_TREE;
! }
! 
! /* Look for a use of ARG_TO_FIND as an argument at this callsite.
!    If found, return the default SSA def of the corresponding parm within
!    the callee, and if OUT is non-NULL, write the index to *OUT.
!    Only the first match is handled.  */
! 
! tree
! callgraph_superedge::get_parm_for_arg (tree arg_to_find,
! 				       callsite_expr *out) const
! {
!   tree callee = get_callee_decl ();
!   const gcall &call_stmt = get_call_stmt ();
! 
!   unsigned i = 0;
!   for (tree iter_parm = DECL_ARGUMENTS (callee); iter_parm;
!        iter_parm = DECL_CHAIN (iter_parm), ++i)
!     {
!       if (i >= gimple_call_num_args (&call_stmt))
! 	return NULL_TREE;
!       tree param = gimple_call_arg (&call_stmt, i);
!       if (arg_to_find == param)
! 	{
! 	  if (out)
! 	    *out = callsite_expr::from_zero_based_param (i);
! 	  return ssa_default_def (get_callee_function (), iter_parm);
! 	}
!     }
! 
!   /* Not found.  */
!   return NULL_TREE;
! }
! 
! /* Map caller_expr back to an expr within the callee, or return NULL_TREE.
!    If non-NULL is returned, populate OUT.  */
! 
! tree
! callgraph_superedge::map_expr_from_caller_to_callee (tree caller_expr,
! 						     callsite_expr *out) const
! {
!   /* Is it an argument (actual param)?  If so, convert to
!      parameter (formal param).  */
!   tree parm = get_parm_for_arg (caller_expr, out);
!   if (parm)
!     return parm;
!   /* Otherwise try return value.  */
!   if (caller_expr == gimple_call_lhs (&get_call_stmt ()))
!     {
!       if (out)
! 	*out = callsite_expr::from_return_value ();
!       return DECL_RESULT (get_callee_decl ());
!     }
! 
!   return NULL_TREE;
! }
! 
! /* Map callee_expr back to an expr within the caller, or return NULL_TREE.
!    If non-NULL is returned, populate OUT.  */
! 
! tree
! callgraph_superedge::map_expr_from_callee_to_caller (tree callee_expr,
! 						     callsite_expr *out) const
  {
!   if (callee_expr == NULL_TREE)
!     return NULL_TREE;
! 
!   /* If it's a parameter (formal param), get the argument (actual param).  */
!   if (TREE_CODE (callee_expr) == PARM_DECL)
!     return get_arg_for_parm (callee_expr, out);
! 
!   /* Similar for the default SSA name of the PARM_DECL.  */
!   if (TREE_CODE (callee_expr) == SSA_NAME
!       && SSA_NAME_IS_DEFAULT_DEF (callee_expr)
!       && TREE_CODE (SSA_NAME_VAR (callee_expr)) == PARM_DECL)
!     return get_arg_for_parm (SSA_NAME_VAR (callee_expr), out);
! 
!   /* Otherwise try return value.  */
!   if (callee_expr == DECL_RESULT (get_callee_decl ()))
!     {
!       if (out)
! 	*out = callsite_expr::from_return_value ();
!       return gimple_call_lhs (&get_call_stmt ());
!     }
! 
!   return NULL_TREE;
  }
  
  } // namespace ana
--- 1036,1083 ----
    return label_text::take (xstrdup (pp_formatted_text (&pp)));
  }
  
  void
! superedge::dump_label_to_pp (pretty_printer *pp, bool user_facing) const
  {
!   if (get_op ())
!     get_op ()->print_as_edge_label (pp, user_facing);
!   else
!     pp_printf (pp, "no-op");
  
    if (user_facing)
      return;
  
!   if (::edge cfg_edge = get_any_cfg_edge ())
      {
!       if (cfg_edge->flags)
! 	{
! 	  pp_string (pp, " (flags ");
! 	  bool seen_flag = false;
  #define DEF_EDGE_FLAG(NAME,IDX)			\
! 	  do {						\
! 	    if (cfg_edge->flags & EDGE_##NAME)		\
! 	      {						\
! 		if (seen_flag)					\
! 		  pp_string (pp, " | ");			\
! 		pp_printf (pp, "%s", (#NAME));			\
! 		seen_flag = true;				\
! 	      }						\
! 	  } while (0);
  #include "cfg-flags.def"
  #undef DEF_EDGE_FLAG
! 	  pp_string (pp, ")");
  	}
+       if (cfg_edge->goto_locus > BUILTINS_LOCATION)
+ 	pp_printf (pp, " (has goto_locus: 0x%lx)", cfg_edge->goto_locus);
      }
  }
  
  bool
! superedge::supports_bulk_merge_p () const
  {
!   if (!m_op)
!     return true;
!   return m_op->supports_bulk_merge_p ();
  }
  
  } // namespace ana
diff -Nrcpad gcc-16-20251207/gcc/analyzer/supergraph.h gcc-16-20251214/gcc/analyzer/supergraph.h
*** gcc-16-20251207/gcc/analyzer/supergraph.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/supergraph.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 24,34 ****
--- 24,37 ----
  #include "ordered-hash-map.h"
  #include "cfg.h"
  #include "basic-block.h"
+ #include "cfgloop.h"
  #include "gimple.h"
  #include "gimple-iterator.h"
  #include "digraph.h"
  #include "except.h"
  
+ #include "analyzer/ops.h"
+ 
  using namespace ana;
  
  namespace ana {
*************** namespace ana {
*** 38,66 ****
  class supergraph;
  class supernode;
  class superedge;
-   class callgraph_superedge;
-     class call_superedge;
-     class return_superedge;
-   class cfg_superedge;
-     class switch_cfg_superedge;
-     class eh_dispatch_cfg_superedge;
-       class eh_dispatch_try_cfg_superedge;
-       class eh_dispatch_allowed_cfg_superedge;
  class supercluster;
  class dot_annotator;
  
  class logger;
  
- /* An enum for discriminating between superedge subclasses.  */
- 
- enum edge_kind
- {
-   SUPEREDGE_CFG_EDGE,
-   SUPEREDGE_CALL,
-   SUPEREDGE_RETURN,
-   SUPEREDGE_INTRAPROCEDURAL_CALL
- };
- 
  /* Flags for controlling the appearance of .dot dumps.  */
  
  enum supergraph_dot_flags
--- 41,51 ----
*************** struct supergraph_traits
*** 79,91 ****
    struct dump_args_t
    {
      dump_args_t (enum supergraph_dot_flags flags,
! 		 const dot_annotator *node_annotator)
      : m_flags (flags),
!       m_node_annotator (node_annotator)
      {}
  
      enum supergraph_dot_flags m_flags;
      const dot_annotator *m_node_annotator;
    };
    typedef supercluster cluster_t;
  };
--- 64,79 ----
    struct dump_args_t
    {
      dump_args_t (enum supergraph_dot_flags flags,
! 		 const dot_annotator *node_annotator,
! 		 const exploded_graph *eg)
      : m_flags (flags),
!       m_node_annotator (node_annotator),
!       m_eg (eg)
      {}
  
      enum supergraph_dot_flags m_flags;
      const dot_annotator *m_node_annotator;
+     const exploded_graph *m_eg;
    };
    typedef supercluster cluster_t;
  };
*************** private:
*** 102,171 ****
    auto_vec<std::pair<gimple *, unsigned> > m_old_stmt_uids;
  };
  
! /* A "supergraph" is a directed graph formed by joining together all CFGs,
!    linking them via interprocedural call and return edges.
  
!    Basic blocks are split at callsites, so that a call statement occurs
!    twice: once at the end of a supernode, and a second instance at the
!    start of the next supernode (to handle the return).  */
  
  class supergraph : public digraph<supergraph_traits>
  {
  public:
!   supergraph (logger *logger);
    ~supergraph ();
  
    supernode *get_node_for_function_entry (const function &fun) const
    {
!     return get_node_for_block (ENTRY_BLOCK_PTR_FOR_FN (&fun));
    }
  
    supernode *get_node_for_function_exit (const function &fun) const
    {
!     return get_node_for_block (EXIT_BLOCK_PTR_FOR_FN (&fun));
    }
  
!   supernode *get_node_for_block (basic_block bb) const
    {
      return *const_cast <bb_to_node_t &> (m_bb_to_initial_node).get (bb);
    }
  
!   /* Get the supernode containing the second half of the gcall &
!      at an interprocedural call, within the caller.  */
!   supernode *get_caller_next_node (cgraph_edge *edge) const
!   {
!     return (*const_cast <cgraph_edge_to_node_t &>
! 	      (m_cgraph_edge_to_caller_next_node).get (edge));
!   }
! 
!   call_superedge *get_edge_for_call (cgraph_edge *edge) const
!   {
!     return (*const_cast <cgraph_edge_to_call_superedge_t &>
! 	      (m_cgraph_edge_to_call_superedge).get (edge));
!   }
! 
!   return_superedge *get_edge_for_return (cgraph_edge *edge) const
!   {
!     return (*const_cast <cgraph_edge_to_return_superedge_t &>
! 	      (m_cgraph_edge_to_return_superedge).get (edge));
!   }
! 
!   superedge *get_intraprocedural_edge_for_call (cgraph_edge *edge) const
    {
!     return (*const_cast <cgraph_edge_to_intraproc_superedge_t &>
! 	      (m_cgraph_edge_to_intraproc_superedge).get (edge));
    }
  
!   cfg_superedge *get_edge_for_cfg_edge (edge e) const
    {
!     return (*const_cast <cfg_edge_to_cfg_superedge_t &>
! 	      (m_cfg_edge_to_cfg_superedge).get (e));
    }
  
!   supernode *get_supernode_for_stmt (const gimple *stmt) const
    {
!     return (*const_cast <stmt_to_node_t &>(m_stmt_to_node_t).get
! 	    (const_cast <gimple *> (stmt)));
    }
  
    void dump_dot_to_pp (pretty_printer *pp, const dump_args_t &) const;
--- 90,145 ----
    auto_vec<std::pair<gimple *, unsigned> > m_old_stmt_uids;
  };
  
! /* A directed graph class representing the users's code,
!    with nodes representing locations within functions, and
!    edges representing transitions between them.
  
!    For historical reasons we call this the "supergraph", although
!    this is now a misnomer as we no longer add callgraph edges to this
!    graph: the edges within the supergraph are purely intraprocedural:
!    either linking consecutive stmts in a basic block, or linking
!    basic blocks (corresponding to CFG edges).  However, all functions
!    are within the same graph.  */
  
  class supergraph : public digraph<supergraph_traits>
  {
  public:
!   supergraph (region_model_manager &mgr, logger *logger);
    ~supergraph ();
  
    supernode *get_node_for_function_entry (const function &fun) const
    {
!     return get_initial_node_for_block (ENTRY_BLOCK_PTR_FOR_FN (&fun));
    }
  
    supernode *get_node_for_function_exit (const function &fun) const
    {
!     return get_final_node_for_block (EXIT_BLOCK_PTR_FOR_FN (&fun));
    }
  
!   supernode *get_initial_node_for_block (basic_block bb) const
    {
      return *const_cast <bb_to_node_t &> (m_bb_to_initial_node).get (bb);
    }
  
!   supernode *get_final_node_for_block (basic_block bb) const
    {
!     return *const_cast <bb_to_node_t &> (m_bb_to_final_node).get (bb);
    }
  
!   supernode *get_supernode_for_stmt (const gimple *stmt) const
    {
!     auto iter = m_node_for_stmt.find (stmt);
!     gcc_assert (iter != m_node_for_stmt.end ());
!     return iter->second;
    }
  
!   superedge *get_superedge_for_phis (::edge cfg_edge) const
    {
!     auto iter = m_edges_for_phis.find (cfg_edge);
!     if (iter != m_edges_for_phis.end ())
!       return iter->second;
!     return nullptr;
    }
  
    void dump_dot_to_pp (pretty_printer *pp, const dump_args_t &) const;
*************** public:
*** 177,187 ****
    int num_nodes () const { return m_nodes.length (); }
    int num_edges () const { return m_edges.length (); }
  
-   supernode *get_node_by_index (int idx) const
-   {
-     return m_nodes[idx];
-   }
- 
    unsigned get_num_snodes (const function *fun) const
    {
      function_to_num_snodes_t &map
--- 151,156 ----
*************** public:
*** 189,236 ****
      return *map.get (fun);
    }
  
! private:
!   supernode *add_node (function *fun, basic_block bb, gcall *returning_call,
! 		       gimple_seq phi_nodes);
!   cfg_superedge *add_cfg_edge (supernode *src, supernode *dest, ::edge e);
!   call_superedge *add_call_superedge (supernode *src, supernode *dest,
! 				      cgraph_edge *cedge);
!   return_superedge *add_return_superedge (supernode *src, supernode *dest,
! 					  cgraph_edge *cedge);
  
!   /* Data.  */
  
!   typedef ordered_hash_map<basic_block, supernode *> bb_to_node_t;
!   bb_to_node_t m_bb_to_initial_node;
!   bb_to_node_t m_bb_to_final_node;
  
!   typedef ordered_hash_map<cgraph_edge *, supernode *> cgraph_edge_to_node_t;
!   cgraph_edge_to_node_t m_cgraph_edge_to_caller_prev_node;
!   cgraph_edge_to_node_t m_cgraph_edge_to_caller_next_node;
  
!   typedef ordered_hash_map< ::edge, cfg_superedge *>
!     cfg_edge_to_cfg_superedge_t;
!   cfg_edge_to_cfg_superedge_t m_cfg_edge_to_cfg_superedge;
  
!   typedef ordered_hash_map<cgraph_edge *, call_superedge *>
!     cgraph_edge_to_call_superedge_t;
!   cgraph_edge_to_call_superedge_t m_cgraph_edge_to_call_superedge;
  
!   typedef ordered_hash_map<cgraph_edge *, return_superedge *>
!     cgraph_edge_to_return_superedge_t;
!   cgraph_edge_to_return_superedge_t m_cgraph_edge_to_return_superedge;
  
!   typedef ordered_hash_map<cgraph_edge *, superedge *>
!     cgraph_edge_to_intraproc_superedge_t;
!   cgraph_edge_to_intraproc_superedge_t m_cgraph_edge_to_intraproc_superedge;
  
!   typedef ordered_hash_map<gimple *, supernode *> stmt_to_node_t;
!   stmt_to_node_t m_stmt_to_node_t;
  
    typedef hash_map<const function *, unsigned> function_to_num_snodes_t;
    function_to_num_snodes_t m_function_to_num_snodes;
  
    saved_uids m_stmt_uids;
  };
  
  /* A node within a supergraph.  */
--- 158,221 ----
      return *map.get (fun);
    }
  
!   void log_stats (logger *logger) const;
  
!   void delete_nodes (const std::set<supernode *> &snodes);
  
!   /* Implemented in supergraph-fixup-locations.cc.  */
!   void fixup_locations (logger *);
  
!   /* Implemented in supergraph-simplify.cc.  */
!   void simplify (logger *);
  
!   /* Implemented in supergraph-sorting.cc.  */
!   void sort_nodes (logger *logger);
  
!   supernode *add_node (function *fun, basic_block bb, logger *logger);
  
! private:
!   gimple *
!   populate_for_basic_block (basic_block bb,
! 			    function *fun,
! 			    logger *logger);
  
!   void
!   add_sedges_for_cfg_edge (supernode *src,
! 			   supernode *dest,
! 			   ::edge e,
! 			   gimple *control_stmt,
! 			   region_model_manager &mgr,
! 			   logger *logger);
  
!   void dump_dot_to_gv_for_loop (graphviz_out &gv, const dump_args_t &,
! 				class loop *, function *) const;
!   void dump_dot_to_gv_for_bb (graphviz_out &gv, const dump_args_t &,
! 			      basic_block, function *) const;
! 
!   /* Implemented in supergraph-sorting.cc.  */
!   void
!   reorder_nodes_and_ids (const std::vector<supernode *> &ordering,
! 			 logger *logger);
! 
!   /* Data.  */
! 
!   typedef ordered_hash_map<basic_block, supernode *> bb_to_node_t;
!   bb_to_node_t m_bb_to_initial_node;
!   bb_to_node_t m_bb_to_final_node;
! 
!   std::map<const gimple *, supernode *> m_node_for_stmt;
!   std::map<::edge, superedge *> m_edges_for_phis;
  
    typedef hash_map<const function *, unsigned> function_to_num_snodes_t;
    function_to_num_snodes_t m_function_to_num_snodes;
  
    saved_uids m_stmt_uids;
+ 
+   /* Hand out unique IDs to supernodes, to make it easier
+      to track them when deleting/splitting etc (they're easier to
+      think about when debugging than pointer values).  */
+   int m_next_snode_id;
+   std::vector<supernode *> m_snode_by_id;
  };
  
  /* A node within a supergraph.  */
*************** private:
*** 238,247 ****
  class supernode : public dnode<supergraph_traits>
  {
   public:
!   supernode (function *fun, basic_block bb, gcall *returning_call,
! 	     gimple_seq phi_nodes, int index)
!   : m_fun (fun), m_bb (bb), m_returning_call (returning_call),
!     m_phi_nodes (phi_nodes), m_index (index)
    {}
  
    function *get_function () const { return m_fun; }
--- 223,237 ----
  class supernode : public dnode<supergraph_traits>
  {
   public:
!   supernode (function *fun, basic_block bb, int id)
!   : m_fun (fun), m_bb (bb),
!     m_loc (UNKNOWN_LOCATION),
!     m_stmt_loc (UNKNOWN_LOCATION),
!     m_id (id),
!     m_original_id (id),
!     m_label (NULL_TREE),
!     m_preserve_p (false),
!     m_state_merger_node (false)
    {}
  
    function *get_function () const { return m_fun; }
*************** class supernode : public dnode<supergrap
*** 250,257 ****
    {
      return m_bb == ENTRY_BLOCK_PTR_FOR_FN (m_fun);
    }
! 
!   bool return_p () const
    {
      return m_bb == EXIT_BLOCK_PTR_FOR_FN (m_fun);
    }
--- 240,246 ----
    {
      return m_bb == ENTRY_BLOCK_PTR_FOR_FN (m_fun);
    }
!   bool exit_p () const
    {
      return m_bb == EXIT_BLOCK_PTR_FOR_FN (m_fun);
    }
*************** class supernode : public dnode<supergrap
*** 259,322 ****
    void dump_dot (graphviz_out *gv, const dump_args_t &args) const override;
    void dump_dot_id (pretty_printer *pp) const;
  
!   std::unique_ptr<json::object> to_json () const;
! 
!   location_t get_start_location () const;
!   location_t get_end_location () const;
! 
!   /* Returns iterator at the start of the list of phi nodes, if any.  */
!   gphi_iterator start_phis ()
!   {
!     gimple_seq *pseq = &m_phi_nodes;
! 
!     /* Adapted from gsi_start_1. */
!     gphi_iterator i;
! 
!     i.ptr = gimple_seq_first (*pseq);
!     i.seq = pseq;
!     i.bb = i.ptr ? gimple_bb (i.ptr) : nullptr;
! 
!     return i;
!   }
! 
!   gcall *get_returning_call () const
    {
!     return m_returning_call;
    }
  
!   gimple *get_last_stmt () const
!   {
!     if (m_stmts.length () == 0)
!       return nullptr;
!     return m_stmts[m_stmts.length () - 1];
!   }
  
!   gcall *get_final_call () const
!   {
!     gimple *stmt = get_last_stmt ();
!     if (stmt == nullptr)
!       return nullptr;
!     return dyn_cast<gcall *> (stmt);
!   }
  
!   unsigned int get_stmt_index (const gimple *stmt) const;
  
!   tree get_label () const;
  
!   function * const m_fun; // alternatively could be stored as runs of indices within the supergraph
    const basic_block m_bb;
!   gcall * const m_returning_call; // for handling the result of a returned call
!   gimple_seq m_phi_nodes; // ptr to that of the underlying BB, for the first supernode for the BB
!   auto_vec<gimple *> m_stmts;
!   const int m_index; /* unique within the supergraph as a whole.  */
  };
  
! /* An abstract base class encapsulating an edge within a supergraph.
!    Edges can be CFG edges, or calls/returns for callgraph edges.  */
  
  class superedge : public dedge<supergraph_traits>
  {
   public:
    virtual ~superedge () {}
  
    void dump (pretty_printer *pp) const;
--- 248,297 ----
    void dump_dot (graphviz_out *gv, const dump_args_t &args) const override;
    void dump_dot_id (pretty_printer *pp) const;
  
!   void print (pretty_printer *pp) const
    {
!     pp_printf (pp, "SN %i", m_id);
    }
  
!   std::unique_ptr<json::object> to_json () const;
  
!   location_t get_location () const { return m_loc; }
  
!   tree get_label () const { return m_label; }
  
!   bool preserve_p () const { return m_preserve_p; }
  
!   function * const m_fun;
    const basic_block m_bb;
!   location_t m_loc;
!   location_t m_stmt_loc; // for debugging
!   int m_id; /* unique within the supergraph as a whole.  */
!   const int m_original_id;
!   tree m_label;
!   bool m_preserve_p;
!   bool m_state_merger_node;
  };
  
! /* An edge within the supergraph, with an optional operation.
!    Edges can be CFG edges or edges between statements, or persist
!    in order to give more opportunities for state-merging when
!    building the exploded graph.  */
  
  class superedge : public dedge<supergraph_traits>
  {
   public:
+   superedge (supernode *src, supernode *dest,
+ 	     std::unique_ptr<operation> op,
+ 	     ::edge cfg_edge)
+   : dedge<supergraph_traits> (src, dest),
+     m_op (std::move (op)),
+     m_cfg_edge (cfg_edge)
+   {
+     /* All edges are intraprocedural.  */
+     gcc_assert (m_src->get_function ()
+ 		== m_dest->get_function ());
+   }
+ 
    virtual ~superedge () {}
  
    void dump (pretty_printer *pp) const;
*************** class superedge : public dedge<supergrap
*** 324,362 ****
    void dump_dot (graphviz_out *gv, const dump_args_t &args)
      const final override;
  
!   virtual void dump_label_to_pp (pretty_printer *pp,
! 				 bool user_facing) const = 0;
  
    std::unique_ptr<json::object> to_json () const;
  
!   enum edge_kind get_kind () const { return m_kind; }
  
!   virtual cfg_superedge *dyn_cast_cfg_superedge () { return nullptr; }
!   virtual const cfg_superedge *dyn_cast_cfg_superedge () const { return nullptr; }
!   virtual const switch_cfg_superedge *dyn_cast_switch_cfg_superedge () const { return nullptr; }
!   virtual const eh_dispatch_cfg_superedge *dyn_cast_eh_dispatch_cfg_superedge () const { return nullptr; }
!   virtual const eh_dispatch_try_cfg_superedge *dyn_cast_eh_dispatch_try_cfg_superedge () const { return nullptr; }
!   virtual const eh_dispatch_allowed_cfg_superedge *dyn_cast_eh_dispatch_allowed_cfg_superedge () const { return nullptr; }
!   virtual callgraph_superedge *dyn_cast_callgraph_superedge () { return nullptr; }
!   virtual const callgraph_superedge *dyn_cast_callgraph_superedge () const { return nullptr; }
!   virtual call_superedge *dyn_cast_call_superedge () { return nullptr; }
!   virtual const call_superedge *dyn_cast_call_superedge () const { return nullptr; }
!   virtual return_superedge *dyn_cast_return_superedge () { return nullptr; }
!   virtual const return_superedge *dyn_cast_return_superedge () const { return nullptr; }
  
!   ::edge get_any_cfg_edge () const;
!   cgraph_edge *get_any_callgraph_edge () const;
  
    label_text get_description (bool user_facing) const;
  
!  protected:
!   superedge (supernode *src, supernode *dest, enum edge_kind kind)
!   : dedge<supergraph_traits> (src, dest),
!     m_kind (kind)
!   {}
  
!  public:
!   const enum edge_kind m_kind;
  };
  
  /* An ID representing an expression at a callsite:
--- 299,326 ----
    void dump_dot (graphviz_out *gv, const dump_args_t &args)
      const final override;
  
!   const operation *get_op () const { return m_op.get (); }
!   void set_op (std::unique_ptr<operation> op) { m_op = std::move (op); }
! 
!   void dump_label_to_pp (pretty_printer *pp,
! 				 bool user_facing) const;
  
    std::unique_ptr<json::object> to_json () const;
  
!   const supernode *get_dest_snode () const { return m_dest; }
  
!   ::edge get_any_cfg_edge () const { return m_cfg_edge; }
  
!   bool preserve_p () const;
  
    label_text get_description (bool user_facing) const;
  
!   bool
!   supports_bulk_merge_p () const;
  
! private:
!   std::unique_ptr<operation> m_op;
!   ::edge m_cfg_edge;
  };
  
  /* An ID representing an expression at a callsite:
*************** class callsite_expr
*** 393,791 ****
    int m_val; /* 1-based parm, 0 for return value, or -1 for "unknown".  */
  };
  
- /* A subclass of superedge with an associated callgraph edge (either a
-    call or a return).  */
- 
- class callgraph_superedge : public superedge
- {
-  public:
-   callgraph_superedge (supernode *src, supernode *dst, enum edge_kind kind,
- 		       cgraph_edge *cedge)
-   : superedge (src, dst, kind),
-     m_cedge (cedge)
-   {}
- 
-   void dump_label_to_pp (pretty_printer *pp, bool user_facing) const
-     final override;
- 
-   callgraph_superedge *dyn_cast_callgraph_superedge () final override
-   {
-     return this;
-   }
-   const callgraph_superedge *dyn_cast_callgraph_superedge () const
-     final override
-   {
-     return this;
-   }
- 
-   function *get_callee_function () const;
-   function *get_caller_function () const;
-   tree get_callee_decl () const;
-   tree get_caller_decl () const;
-   const gcall &get_call_stmt () const;
-   tree get_arg_for_parm (tree parm, callsite_expr *out) const;
-   tree get_parm_for_arg (tree arg, callsite_expr *out) const;
-   tree map_expr_from_caller_to_callee (tree caller_expr,
- 				       callsite_expr *out) const;
-   tree map_expr_from_callee_to_caller (tree callee_expr,
- 				       callsite_expr *out) const;
- 
-   cgraph_edge *const m_cedge;
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const callgraph_superedge *>::test (const superedge *sedge)
- {
-   return (sedge->get_kind () == SUPEREDGE_INTRAPROCEDURAL_CALL
- 	  || sedge->get_kind () == SUPEREDGE_CALL
- 	  || sedge->get_kind () == SUPEREDGE_RETURN);
- }
- 
- namespace ana {
- 
- /* A subclass of superedge representing an interprocedural call.  */
- 
- class call_superedge : public callgraph_superedge
- {
-  public:
-   call_superedge (supernode *src, supernode *dst, cgraph_edge *cedge)
-   : callgraph_superedge (src, dst, SUPEREDGE_CALL, cedge)
-   {}
- 
-   call_superedge *dyn_cast_call_superedge () final override
-   {
-     return this;
-   }
-   const call_superedge *dyn_cast_call_superedge () const final override
-   {
-     return this;
-   }
- 
-   return_superedge *get_edge_for_return (const supergraph &sg) const
-   {
-     return sg.get_edge_for_return (m_cedge);
-   }
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const call_superedge *>::test (const superedge *sedge)
- {
-   return sedge->get_kind () == SUPEREDGE_CALL;
- }
- 
- namespace ana {
- 
- /* A subclass of superedge represesnting an interprocedural return.  */
- 
- class return_superedge : public callgraph_superedge
- {
-  public:
-   return_superedge (supernode *src, supernode *dst, cgraph_edge *cedge)
-   : callgraph_superedge (src, dst, SUPEREDGE_RETURN, cedge)
-   {}
- 
-   return_superedge *dyn_cast_return_superedge () final override { return this; }
-   const return_superedge *dyn_cast_return_superedge () const final override
-   {
-     return this;
-   }
- 
-   call_superedge *get_edge_for_call (const supergraph &sg) const
-   {
-     return sg.get_edge_for_call (m_cedge);
-   }
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const return_superedge *>::test (const superedge *sedge)
- {
-   return sedge->get_kind () == SUPEREDGE_RETURN;
- }
- 
- namespace ana {
- 
- /* A subclass of superedge that corresponds to a CFG edge.  */
- 
- class cfg_superedge : public superedge
- {
-  public:
-   cfg_superedge (supernode *src, supernode *dst, ::edge e)
-   : superedge (src, dst, SUPEREDGE_CFG_EDGE),
-     m_cfg_edge (e)
-   {}
- 
-   void dump_label_to_pp (pretty_printer *pp, bool user_facing) const override;
-   cfg_superedge *dyn_cast_cfg_superedge () final override { return this; }
-   const cfg_superedge *dyn_cast_cfg_superedge () const final override { return this; }
- 
-   ::edge get_cfg_edge () const { return m_cfg_edge; }
-   int get_flags () const { return m_cfg_edge->flags; }
-   int true_value_p () const { return get_flags () & EDGE_TRUE_VALUE; }
-   int false_value_p () const { return get_flags () & EDGE_FALSE_VALUE; }
-   int back_edge_p () const { return get_flags () & EDGE_DFS_BACK; }
- 
-   size_t get_phi_arg_idx () const;
-   tree get_phi_arg (const gphi *phi) const;
- 
-   location_t get_goto_locus () const { return m_cfg_edge->goto_locus; }
- 
-  private:
-   const ::edge m_cfg_edge;
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const cfg_superedge *>::test (const superedge *sedge)
- {
-   return sedge->get_kind () == SUPEREDGE_CFG_EDGE;
- }
- 
- namespace ana {
- 
- /* A subclass for edges from switch statements, retaining enough
-    information to identify the pertinent cases, and for adding labels
-    when rendering via graphviz.  */
- 
- class switch_cfg_superedge : public cfg_superedge {
-  public:
-   switch_cfg_superedge (supernode *src, supernode *dst, ::edge e);
- 
-   const switch_cfg_superedge *dyn_cast_switch_cfg_superedge () const
-     final override
-   {
-     return this;
-   }
- 
-   void dump_label_to_pp (pretty_printer *pp, bool user_facing) const
-     final override;
- 
-   gswitch *get_switch_stmt () const
-   {
-     return as_a <gswitch *> (m_src->get_last_stmt ());
-   }
- 
-   const vec<tree> &get_case_labels () const { return m_case_labels; }
- 
-   bool implicitly_created_default_p () const;
- 
- private:
-   auto_vec<tree> m_case_labels;
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const switch_cfg_superedge *>::test (const superedge *sedge)
- {
-   return sedge->dyn_cast_switch_cfg_superedge () != nullptr;
- }
- 
- namespace ana {
- 
- /* A subclass for edges from eh_dispatch statements, retaining enough
-    information to identify the various types being caught, vs the
-    "unhandled type" case, and for adding labels when rendering
-    via graphviz.
-    This is abstract; there are concrete subclasses based on the type
-    of the eh_region.  */
- 
- class eh_dispatch_cfg_superedge : public cfg_superedge
- {
-  public:
-   static std::unique_ptr<eh_dispatch_cfg_superedge>
-   make (supernode *src,
- 	supernode *dest,
- 	::edge e,
- 	const geh_dispatch *eh_dispatch_stmt);
- 
-   const eh_dispatch_cfg_superedge *dyn_cast_eh_dispatch_cfg_superedge () const
-     final override
-   {
-     return this;
-   }
- 
-   const geh_dispatch *
-   get_eh_dispatch_stmt () const
-   {
-     return m_eh_dispatch_stmt;
-   }
- 
-   const eh_status &get_eh_status () const;
-   eh_region get_eh_region () const { return m_eh_region; }
- 
-   virtual bool
-   apply_constraints (region_model *model,
- 		     region_model_context *ctxt,
- 		     tree exception_type,
- 		     std::unique_ptr<rejected_constraint> *out) const = 0;
- 
- protected:
-   eh_dispatch_cfg_superedge (supernode *src, supernode *dst, ::edge e,
- 			     const geh_dispatch *eh_dispatch_stmt,
- 			     eh_region eh_reg);
- 
- private:
-   const geh_dispatch *m_eh_dispatch_stmt;
-   eh_region m_eh_region;
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const eh_dispatch_cfg_superedge *>::test (const superedge *sedge)
- {
-   return sedge->dyn_cast_eh_dispatch_cfg_superedge () != nullptr;
- }
- 
- namespace ana {
- 
- /* A concrete subclass for edges from an eh_dispatch statements
-    for ERT_TRY regions.  */
- 
- class eh_dispatch_try_cfg_superedge : public eh_dispatch_cfg_superedge
- {
-  public:
-   eh_dispatch_try_cfg_superedge (supernode *src, supernode *dst, ::edge e,
- 				 const geh_dispatch *eh_dispatch_stmt,
- 				 eh_region eh_reg,
- 				 eh_catch ehc)
-   : eh_dispatch_cfg_superedge (src, dst, e, eh_dispatch_stmt, eh_reg),
-     m_eh_catch (ehc)
-   {
-     gcc_assert (eh_reg->type == ERT_TRY);
-   }
- 
-   const eh_dispatch_try_cfg_superedge *
-   dyn_cast_eh_dispatch_try_cfg_superedge () const final override
-   {
-     return this;
-   }
- 
-   void dump_label_to_pp (pretty_printer *pp,
- 			 bool user_facing) const final override;
- 
-   eh_catch get_eh_catch () const { return m_eh_catch; }
- 
-   bool
-   apply_constraints (region_model *model,
- 		     region_model_context *ctxt,
- 		     tree exception_type,
- 		     std::unique_ptr<rejected_constraint> *out)
-     const final override;
- 
- private:
-   eh_catch m_eh_catch;
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const eh_dispatch_try_cfg_superedge *>::test (const superedge *sedge)
- {
-   return sedge->dyn_cast_eh_dispatch_try_cfg_superedge () != nullptr;
- }
- 
- namespace ana {
- 
- /* A concrete subclass for edges from an eh_dispatch statements
-    for ERT_ALLOWED_EXCEPTIONS regions.  */
- 
- class eh_dispatch_allowed_cfg_superedge : public eh_dispatch_cfg_superedge
- {
-  public:
-   enum eh_kind
-   {
-     expected,
-     unexpected
-   };
- 
-   eh_dispatch_allowed_cfg_superedge (supernode *src, supernode *dst, ::edge e,
- 				     const geh_dispatch *eh_dispatch_stmt,
- 				     eh_region eh_reg);
- 
-   const eh_dispatch_allowed_cfg_superedge *
-   dyn_cast_eh_dispatch_allowed_cfg_superedge () const final override
-   {
-     return this;
-   }
- 
-   void dump_label_to_pp (pretty_printer *pp,
- 			 bool user_facing) const final override;
- 
-   bool
-   apply_constraints (region_model *model,
- 		     region_model_context *ctxt,
- 		     tree exception_type,
- 		     std::unique_ptr<rejected_constraint> *out)
-     const final override;
- 
-   enum eh_kind get_eh_kind () const { return m_kind; }
- 
- private:
-   enum eh_kind m_kind;
- };
- 
- } // namespace ana
- 
- template <>
- template <>
- inline bool
- is_a_helper <const eh_dispatch_allowed_cfg_superedge *>::test (const superedge *sedge)
- {
-   return sedge->dyn_cast_eh_dispatch_allowed_cfg_superedge () != nullptr;
- }
- 
- namespace ana {
  /* Base class for adding additional content to the .dot output
     for a supergraph.  */
  
  class dot_annotator
  {
   public:
!   virtual ~dot_annotator () {}
!   virtual bool add_node_annotations (graphviz_out *gv ATTRIBUTE_UNUSED,
! 				     const supernode &n ATTRIBUTE_UNUSED,
! 				     bool within_table ATTRIBUTE_UNUSED)
!     const
    {
!     return false;
    }
!   virtual void add_stmt_annotations (graphviz_out *gv ATTRIBUTE_UNUSED,
! 				     const gimple *stmt ATTRIBUTE_UNUSED,
! 				     bool within_row ATTRIBUTE_UNUSED)
!     const {}
!   virtual bool add_after_node_annotations (graphviz_out *gv ATTRIBUTE_UNUSED,
! 					   const supernode &n ATTRIBUTE_UNUSED)
!     const
    {
!     return false;
    }
  };
  
- extern cgraph_edge *supergraph_call_edge (function *fun, const gimple *stmt);
- extern function *get_ultimate_function_for_cgraph_edge (cgraph_edge *edge);
- 
  } // namespace ana
  
  #endif /* GCC_ANALYZER_SUPERGRAPH_H */
--- 357,384 ----
    int m_val; /* 1-based parm, 0 for return value, or -1 for "unknown".  */
  };
  
  /* Base class for adding additional content to the .dot output
     for a supergraph.  */
  
  class dot_annotator
  {
   public:
!   virtual ~dot_annotator () = default;
! 
!   virtual void
!   add_node_annotations (graphviz_out *gv ATTRIBUTE_UNUSED,
! 			const supernode &n ATTRIBUTE_UNUSED) const
    {
!     // no-op
    }
! 
!   virtual void
!   add_extra_objects (graphviz_out *gv ATTRIBUTE_UNUSED) const
    {
!     // no-op
    }
  };
  
  } // namespace ana
  
  #endif /* GCC_ANALYZER_SUPERGRAPH_H */
diff -Nrcpad gcc-16-20251207/gcc/analyzer/svalue.cc gcc-16-20251214/gcc/analyzer/svalue.cc
*** gcc-16-20251207/gcc/analyzer/svalue.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/svalue.cc	Sun Dec 14 22:32:06 2025
*************** svalue::can_merge_p (const svalue *other
*** 335,348 ****
    if (!merger->mergeable_svalue_p (other))
      return nullptr;
  
    /* Widening.  */
    /* Merge: (new_cst, existing_cst) -> widen (existing, new).  */
    if (maybe_get_constant () && other->maybe_get_constant ())
!     {
!       return mgr->get_or_create_widening_svalue (other->get_type (),
! 						 merger->get_function_point (),
! 						 other, this);
!     }
  
    /* Merger of:
  	 this: BINOP (X, OP, CST)
--- 335,355 ----
    if (!merger->mergeable_svalue_p (other))
      return nullptr;
  
+   /* Reject attempts to merge pointers that point to different base regions,
+      except for the case where both are string literals.  */
+   if (auto this_region = maybe_get_region ())
+     if (auto other_region = other->maybe_get_region ())
+       if (this_region != other_region
+ 	  && (this_region->get_kind () != RK_STRING
+ 	      || other_region->get_kind () != RK_STRING))
+ 	return nullptr;
+ 
    /* Widening.  */
    /* Merge: (new_cst, existing_cst) -> widen (existing, new).  */
    if (maybe_get_constant () && other->maybe_get_constant ())
!     return mgr->get_or_create_widening_svalue (other->get_type (),
! 					       merger->get_supernode (),
! 					       other, this);
  
    /* Merger of:
  	 this: BINOP (X, OP, CST)
*************** svalue::can_merge_p (const svalue *other
*** 353,359 ****
  	&& binop_sval->get_arg1 ()->get_kind () == SK_CONSTANT
  	&& other->get_kind () != SK_WIDENING)
        return mgr->get_or_create_widening_svalue (other->get_type (),
! 						 merger->get_function_point (),
  						 other, this);
  
    /* Merge: (Widen(existing_val, V), existing_val) -> Widen (existing_val, V)
--- 360,366 ----
  	&& binop_sval->get_arg1 ()->get_kind () == SK_CONSTANT
  	&& other->get_kind () != SK_WIDENING)
        return mgr->get_or_create_widening_svalue (other->get_type (),
! 						 merger->get_supernode (),
  						 other, this);
  
    /* Merge: (Widen(existing_val, V), existing_val) -> Widen (existing_val, V)
*************** svalue::cmp_ptr (const svalue *sval1, co
*** 655,663 ****
        {
  	const widening_svalue *widening_sval1 = (const widening_svalue *)sval1;
  	const widening_svalue *widening_sval2 = (const widening_svalue *)sval2;
! 	if (int point_cmp = function_point::cmp (widening_sval1->get_point (),
! 						 widening_sval2->get_point ()))
! 	  return point_cmp;
  	if (int base_cmp = svalue::cmp_ptr (widening_sval1->get_base_svalue (),
  					    widening_sval2->get_base_svalue ()))
  	  return base_cmp;
--- 662,670 ----
        {
  	const widening_svalue *widening_sval1 = (const widening_svalue *)sval1;
  	const widening_svalue *widening_sval2 = (const widening_svalue *)sval2;
! 	if (int index_cmp = (widening_sval1->get_snode ()->m_id
! 			     - widening_sval2->get_snode ()->m_id))
! 	  return index_cmp;
  	if (int base_cmp = svalue::cmp_ptr (widening_sval1->get_base_svalue (),
  					    widening_sval2->get_base_svalue ()))
  	  return base_cmp;
*************** widening_svalue::dump_to_pp (pretty_prin
*** 1956,1962 ****
      {
        pp_string (pp, "WIDENING(");
        pp_character (pp, '{');
!       m_point.print (pp, format (false));
        pp_string (pp, "}, ");
        m_base_sval->dump_to_pp (pp, simple);
        pp_string (pp, ", ");
--- 1963,1969 ----
      {
        pp_string (pp, "WIDENING(");
        pp_character (pp, '{');
!       m_snode->print (pp);
        pp_string (pp, "}, ");
        m_base_sval->dump_to_pp (pp, simple);
        pp_string (pp, ", ");
*************** widening_svalue::dump_to_pp (pretty_prin
*** 1968,1974 ****
        pp_string (pp, "widening_svalue (");
        pp_string (pp, ", ");
        pp_character (pp, '{');
!       m_point.print (pp, format (false));
        pp_string (pp, "}, ");
        m_base_sval->dump_to_pp (pp, simple);
        pp_string (pp, ", ");
--- 1975,1981 ----
        pp_string (pp, "widening_svalue (");
        pp_string (pp, ", ");
        pp_character (pp, '{');
!       m_snode->print (pp);
        pp_string (pp, "}, ");
        m_base_sval->dump_to_pp (pp, simple);
        pp_string (pp, ", ");
*************** void
*** 1984,1990 ****
  widening_svalue::print_dump_widget_label (pretty_printer *pp) const
  {
    pp_printf (pp, "widening_svalue at ");
!   m_point.print (pp, format (false));
  }
  
  /* Implementation of svalue::add_dump_widget_children vfunc for
--- 1991,1997 ----
  widening_svalue::print_dump_widget_label (pretty_printer *pp) const
  {
    pp_printf (pp, "widening_svalue at ");
!   m_snode->print (pp);
  }
  
  /* Implementation of svalue::add_dump_widget_children vfunc for
diff -Nrcpad gcc-16-20251207/gcc/analyzer/svalue.h gcc-16-20251214/gcc/analyzer/svalue.h
*** gcc-16-20251207/gcc/analyzer/svalue.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/svalue.h	Sun Dec 14 22:32:06 2025
*************** namespace ana {
*** 530,555 ****
  struct setjmp_record
  {
    setjmp_record (const exploded_node *enode,
  		 const gcall &setjmp_call)
!   : m_enode (enode), m_setjmp_call (&setjmp_call)
    {
    }
  
    bool operator== (const setjmp_record &other) const
    {
      return (m_enode == other.m_enode
  	    && m_setjmp_call == other.m_setjmp_call);
    }
  
    void add_to_hash (inchash::hash *hstate) const
    {
      hstate->add_ptr (m_enode);
      hstate->add_ptr (m_setjmp_call);
    }
  
    static int cmp (const setjmp_record &rec1, const setjmp_record &rec2);
  
    const exploded_node *m_enode;
    const gcall *m_setjmp_call;
    // non-null, but we can't use a reference since we're putting these in a hash_map
  };
--- 530,559 ----
  struct setjmp_record
  {
    setjmp_record (const exploded_node *enode,
+ 		 const superedge *sedge,
  		 const gcall &setjmp_call)
!   : m_enode (enode), m_sedge (sedge), m_setjmp_call (&setjmp_call)
    {
    }
  
    bool operator== (const setjmp_record &other) const
    {
      return (m_enode == other.m_enode
+ 	    && m_sedge == other.m_sedge
  	    && m_setjmp_call == other.m_setjmp_call);
    }
  
    void add_to_hash (inchash::hash *hstate) const
    {
      hstate->add_ptr (m_enode);
+     hstate->add_ptr (m_sedge);
      hstate->add_ptr (m_setjmp_call);
    }
  
    static int cmp (const setjmp_record &rec1, const setjmp_record &rec2);
  
    const exploded_node *m_enode;
+   const superedge *m_sedge;
    const gcall *m_setjmp_call;
    // non-null, but we can't use a reference since we're putting these in a hash_map
  };
*************** public:
*** 1272,1280 ****
    /* A support class for uniquifying instances of widening_svalue.  */
    struct key_t
    {
!     key_t (tree type, const function_point &point,
  	   const svalue *base_sval, const svalue *iter_sval)
!     : m_type (type), m_point (point),
        m_base_sval (base_sval), m_iter_sval (iter_sval)
      {}
  
--- 1276,1284 ----
    /* A support class for uniquifying instances of widening_svalue.  */
    struct key_t
    {
!     key_t (tree type, const supernode *snode,
  	   const svalue *base_sval, const svalue *iter_sval)
!     : m_type (type), m_snode (snode),
        m_base_sval (base_sval), m_iter_sval (iter_sval)
      {}
  
*************** public:
*** 1289,1295 ****
      bool operator== (const key_t &other) const
      {
        return (m_type == other.m_type
! 	      && m_point == other.m_point
  	      && m_base_sval == other.m_base_sval
  	      && m_iter_sval == other.m_iter_sval);
      }
--- 1293,1299 ----
      bool operator== (const key_t &other) const
      {
        return (m_type == other.m_type
! 	      && m_snode == other.m_snode
  	      && m_base_sval == other.m_base_sval
  	      && m_iter_sval == other.m_iter_sval);
      }
*************** public:
*** 1300,1306 ****
      bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
!     function_point m_point;
      const svalue *m_base_sval;
      const svalue *m_iter_sval;
    };
--- 1304,1310 ----
      bool is_empty () const { return m_type == reinterpret_cast<tree> (2); }
  
      tree m_type;
!     const supernode *m_snode;
      const svalue *m_base_sval;
      const svalue *m_iter_sval;
    };
*************** public:
*** 1312,1324 ****
       DIR_UNKNOWN
      };
  
!   widening_svalue (symbol::id_t id, tree type, const function_point &point,
  		   const svalue *base_sval, const svalue *iter_sval)
    : svalue (complexity::from_pair (base_sval->get_complexity (),
  				   iter_sval->get_complexity ()),
  	    id,
  	    type),
!     m_point (point),
      m_base_sval (base_sval), m_iter_sval (iter_sval)
    {
      gcc_assert (base_sval->can_have_associated_state_p ());
--- 1316,1328 ----
       DIR_UNKNOWN
      };
  
!   widening_svalue (symbol::id_t id, tree type, const supernode *snode,
  		   const svalue *base_sval, const svalue *iter_sval)
    : svalue (complexity::from_pair (base_sval->get_complexity (),
  				   iter_sval->get_complexity ()),
  	    id,
  	    type),
!     m_snode (snode),
      m_base_sval (base_sval), m_iter_sval (iter_sval)
    {
      gcc_assert (base_sval->can_have_associated_state_p ());
*************** public:
*** 1341,1347 ****
  
    void accept (visitor *v) const final override;
  
!   const function_point &get_point () const { return m_point; }
    const svalue *get_base_svalue () const { return m_base_sval; }
    const svalue *get_iter_svalue () const { return m_iter_sval; }
  
--- 1345,1351 ----
  
    void accept (visitor *v) const final override;
  
!   const supernode *get_snode () const { return m_snode; }
    const svalue *get_base_svalue () const { return m_base_sval; }
    const svalue *get_iter_svalue () const { return m_iter_sval; }
  
*************** public:
*** 1351,1357 ****
  				      tree rhs_cst) const;
  
   private:
!   function_point m_point;
    const svalue *m_base_sval;
    const svalue *m_iter_sval;
  };
--- 1355,1361 ----
  				      tree rhs_cst) const;
  
   private:
!   const supernode *m_snode;
    const svalue *m_base_sval;
    const svalue *m_iter_sval;
  };
diff -Nrcpad gcc-16-20251207/gcc/analyzer/varargs.cc gcc-16-20251214/gcc/analyzer/varargs.cc
*** gcc-16-20251207/gcc/analyzer/varargs.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/analyzer/varargs.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 198,204 ****
    bool inherited_state_p () const final override { return false; }
  
    bool on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    bool can_purge_p (state_t s) const final override
--- 198,203 ----
*************** public:
*** 218,234 ****
    state_t m_ended;
  
  private:
!   void on_va_start (sm_context &sm_ctxt, const supernode *node,
! 		    const gcall &call) const;
!   void on_va_copy (sm_context &sm_ctxt, const supernode *node,
! 		   const gcall &call) const;
!   void on_va_arg (sm_context &sm_ctxt, const supernode *node,
! 		  const gcall &call) const;
!   void on_va_end (sm_context &sm_ctxt, const supernode *node,
! 		  const gcall &call) const;
    void check_for_ended_va_list (sm_context &sm_ctxt,
- 				const supernode *node,
- 				const gcall &call,
  				const svalue *arg,
  				const char *usage_fnname) const;
  };
--- 217,227 ----
    state_t m_ended;
  
  private:
!   void on_va_start (sm_context &sm_ctxt, const gcall &call) const;
!   void on_va_copy (sm_context &sm_ctxt, const gcall &call) const;
!   void on_va_arg (sm_context &sm_ctxt, const gcall &call) const;
!   void on_va_end (sm_context &sm_ctxt, const gcall &call) const;
    void check_for_ended_va_list (sm_context &sm_ctxt,
  				const svalue *arg,
  				const char *usage_fnname) const;
  };
*************** va_list_state_machine::va_list_state_mac
*** 247,253 ****
  
  bool
  va_list_state_machine::on_stmt (sm_context &sm_ctxt,
- 				const supernode *node,
  				const gimple *stmt) const
  {
    if (const gcall *call_stmt = dyn_cast <const gcall *> (stmt))
--- 240,245 ----
*************** va_list_state_machine::on_stmt (sm_conte
*** 257,263 ****
        if (gimple_call_internal_p (call_stmt)
  	  && gimple_call_internal_fn (call_stmt) == IFN_VA_ARG)
  	{
! 	  on_va_arg (sm_ctxt, node, call);
  	  return false;
  	}
  
--- 249,255 ----
        if (gimple_call_internal_p (call_stmt)
  	  && gimple_call_internal_fn (call_stmt) == IFN_VA_ARG)
  	{
! 	  on_va_arg (sm_ctxt, call);
  	  return false;
  	}
  
*************** va_list_state_machine::on_stmt (sm_conte
*** 270,284 ****
  	      break;
  
  	    case BUILT_IN_VA_START:
! 	      on_va_start (sm_ctxt, node, call);
  	      break;
  
  	    case BUILT_IN_VA_COPY:
! 	      on_va_copy (sm_ctxt, node, call);
  	      break;
  
  	    case BUILT_IN_VA_END:
! 	      on_va_end (sm_ctxt, node, call);
  	      break;
  	    }
      }
--- 262,276 ----
  	      break;
  
  	    case BUILT_IN_VA_START:
! 	      on_va_start (sm_ctxt, call);
  	      break;
  
  	    case BUILT_IN_VA_COPY:
! 	      on_va_copy (sm_ctxt, call);
  	      break;
  
  	    case BUILT_IN_VA_END:
! 	      on_va_end (sm_ctxt, call);
  	      break;
  	    }
      }
*************** private:
*** 548,562 ****
  
  void
  va_list_state_machine::on_va_start (sm_context &sm_ctxt,
- 				    const supernode *,
  				    const gcall &call) const
  {
    const svalue *arg = get_stateful_arg (sm_ctxt, call, 0);
    if (arg)
      {
        /* Transition from start state to "started".  */
!       if (sm_ctxt.get_state (&call, arg) == m_start)
! 	sm_ctxt.set_next_state (&call, arg, m_started);
      }
  }
  
--- 540,553 ----
  
  void
  va_list_state_machine::on_va_start (sm_context &sm_ctxt,
  				    const gcall &call) const
  {
    const svalue *arg = get_stateful_arg (sm_ctxt, call, 0);
    if (arg)
      {
        /* Transition from start state to "started".  */
!       if (sm_ctxt.get_state (arg) == m_start)
! 	sm_ctxt.set_next_state (arg, m_started);
      }
  }
  
*************** va_list_state_machine::on_va_start (sm_c
*** 564,576 ****
  
  void
  va_list_state_machine::check_for_ended_va_list (sm_context &sm_ctxt,
- 						const supernode *node,
- 						const gcall &call,
  						const svalue *arg,
  						const char *usage_fnname) const
  {
!   if (sm_ctxt.get_state (&call, arg) == m_ended)
!     sm_ctxt.warn (node, &call, arg,
  		  std::make_unique<va_list_use_after_va_end>
  		    (*this, arg, NULL_TREE, usage_fnname));
  }
--- 555,565 ----
  
  void
  va_list_state_machine::check_for_ended_va_list (sm_context &sm_ctxt,
  						const svalue *arg,
  						const char *usage_fnname) const
  {
!   if (sm_ctxt.get_state (arg) == m_ended)
!     sm_ctxt.warn (arg,
  		  std::make_unique<va_list_use_after_va_end>
  		    (*this, arg, NULL_TREE, usage_fnname));
  }
*************** get_stateful_va_copy_arg (sm_context &sm
*** 597,615 ****
  
  void
  va_list_state_machine::on_va_copy (sm_context &sm_ctxt,
- 				   const supernode *node,
  				   const gcall &call) const
  {
    const svalue *src_arg = get_stateful_va_copy_arg (sm_ctxt, call, 1);
    if (src_arg)
!     check_for_ended_va_list (sm_ctxt, node, call, src_arg, "va_copy");
  
    const svalue *dst_arg = get_stateful_arg (sm_ctxt, call, 0);
    if (dst_arg)
      {
        /* Transition from start state to "started".  */
!       if (sm_ctxt.get_state (&call, dst_arg) == m_start)
! 	sm_ctxt.set_next_state (&call, dst_arg, m_started);
      }
  }
  
--- 586,603 ----
  
  void
  va_list_state_machine::on_va_copy (sm_context &sm_ctxt,
  				   const gcall &call) const
  {
    const svalue *src_arg = get_stateful_va_copy_arg (sm_ctxt, call, 1);
    if (src_arg)
!     check_for_ended_va_list (sm_ctxt, src_arg, "va_copy");
  
    const svalue *dst_arg = get_stateful_arg (sm_ctxt, call, 0);
    if (dst_arg)
      {
        /* Transition from start state to "started".  */
!       if (sm_ctxt.get_state (dst_arg) == m_start)
! 	sm_ctxt.set_next_state (dst_arg, m_started);
      }
  }
  
*************** va_list_state_machine::on_va_copy (sm_co
*** 617,646 ****
  
  void
  va_list_state_machine::on_va_arg (sm_context &sm_ctxt,
- 				  const supernode *node,
  				  const gcall &call) const
  {
    const svalue *arg = get_stateful_arg (sm_ctxt, call, 0);
    if (arg)
!     check_for_ended_va_list (sm_ctxt, node, call, arg, "va_arg");
  }
  
  /* Update state machine for a "va_end" call.  */
  
  void
  va_list_state_machine::on_va_end (sm_context &sm_ctxt,
- 				  const supernode *node,
  				  const gcall &call) const
  {
    const svalue *arg = get_stateful_arg (sm_ctxt, call, 0);
    if (arg)
      {
!       state_t s = sm_ctxt.get_state (&call, arg);
        /* Transition from "started" to "ended".  */
        if (s == m_started)
! 	sm_ctxt.set_next_state (&call, arg, m_ended);
        else if (s == m_ended)
! 	check_for_ended_va_list (sm_ctxt, node, call, arg, "va_end");
      }
  }
  
--- 605,632 ----
  
  void
  va_list_state_machine::on_va_arg (sm_context &sm_ctxt,
  				  const gcall &call) const
  {
    const svalue *arg = get_stateful_arg (sm_ctxt, call, 0);
    if (arg)
!     check_for_ended_va_list (sm_ctxt, arg, "va_arg");
  }
  
  /* Update state machine for a "va_end" call.  */
  
  void
  va_list_state_machine::on_va_end (sm_context &sm_ctxt,
  				  const gcall &call) const
  {
    const svalue *arg = get_stateful_arg (sm_ctxt, call, 0);
    if (arg)
      {
!       state_t s = sm_ctxt.get_state (arg);
        /* Transition from "started" to "ended".  */
        if (s == m_started)
! 	sm_ctxt.set_next_state (arg, m_ended);
        else if (s == m_ended)
! 	check_for_ended_va_list (sm_ctxt, arg, "va_end");
      }
  }
  
*************** public:
*** 788,794 ****
    /* Override of pending_diagnostic::add_call_event,
       adding a custom call_event subclass.  */
    void add_call_event (const exploded_edge &eedge,
! 		       checker_path *emission_path) override
    {
      /* As per call_event, but show the number of variadic arguments
         in the call.  */
--- 774,781 ----
    /* Override of pending_diagnostic::add_call_event,
       adding a custom call_event subclass.  */
    void add_call_event (const exploded_edge &eedge,
! 		       const gcall &call_stmt,
! 		       checker_path &emission_path) override
    {
      /* As per call_event, but show the number of variadic arguments
         in the call.  */
*************** public:
*** 822,845 ****
      if (dst_node->get_state ().m_region_model->get_current_frame ()
  	== frame_reg)
        {
- 	const exploded_node *src_node = eedge.m_src;
- 	const program_point &src_point = src_node->get_point ();
- 	const int src_stack_depth = src_point.get_stack_depth ();
- 	const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt ();
- 	const gcall &call_stmt = *as_a <const gcall *> (last_stmt);
  	int num_variadic_arguments
  	  = get_num_variadic_arguments (dst_node->get_function ()->decl,
  					call_stmt);
! 	emission_path->add_event
  	  (std::make_unique<va_arg_call_event>
  	   (eedge,
! 	    event_loc_info (last_stmt ? last_stmt->location : UNKNOWN_LOCATION,
! 			    src_point.get_fndecl (),
! 			    src_stack_depth),
  	    num_variadic_arguments));
        }
      else
!       pending_diagnostic::add_call_event (eedge, emission_path);
    }
  
  protected:
--- 809,825 ----
      if (dst_node->get_state ().m_region_model->get_current_frame ()
  	== frame_reg)
        {
  	int num_variadic_arguments
  	  = get_num_variadic_arguments (dst_node->get_function ()->decl,
  					call_stmt);
! 	emission_path.add_event
  	  (std::make_unique<va_arg_call_event>
  	   (eedge,
! 	    event_loc_info (eedge.m_src),
  	    num_variadic_arguments));
        }
      else
!       pending_diagnostic::add_call_event (eedge, call_stmt, emission_path);
    }
  
  protected:
diff -Nrcpad gcc-16-20251207/gcc/auto-profile.cc gcc-16-20251214/gcc/auto-profile.cc
*** gcc-16-20251207/gcc/auto-profile.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/auto-profile.cc	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 55,61 ****
  #include "gimple-pretty-print.h"
  #include "output.h"
  
! /* The following routines implements AutoFDO optimization.
  
     This optimization uses sampling profiles to annotate basic block counts
     and uses heuristics to estimate branch probabilities.
--- 55,61 ----
  #include "gimple-pretty-print.h"
  #include "output.h"
  
! /* The following routines implement AutoFDO optimization.
  
     This optimization uses sampling profiles to annotate basic block counts
     and uses heuristics to estimate branch probabilities.
*************** along with GCC; see the file COPYING3.
*** 87,93 ****
     Phase 3: During early optimization.
       AFDO inline + value profile transformation.
       This happens during early optimization.
!      During early inlning AFDO inliner is executed which
       uses autofdo_source_profile to find if a callsite is:
          * inlined in the profiled binary.
          * callee body is hot in the profiling run.
--- 87,93 ----
     Phase 3: During early optimization.
       AFDO inline + value profile transformation.
       This happens during early optimization.
!      During early inlining AFDO inliner is executed which
       uses autofdo_source_profile to find if a callsite is:
          * inlined in the profiled binary.
          * callee body is hot in the profiling run.
*************** along with GCC; see the file COPYING3.
*** 95,103 ****
       regardless of the code growth.
  
       Performing this early has benefit of doing early optimizations
!      before read IPA passe and getting more "context sensitivity" of
       the profile read.  Profile of inlined functions may differ
!      significantly form one inline instance to another and from the
       offline version.
  
       This is controlled by -fauto-profile-inlining and is independent
--- 95,103 ----
       regardless of the code growth.
  
       Performing this early has benefit of doing early optimizations
!      before read IPA passes and getting more "context sensitivity" of
       the profile read.  Profile of inlined functions may differ
!      significantly from one inline instance to another and from the
       offline version.
  
       This is controlled by -fauto-profile-inlining and is independent
*************** along with GCC; see the file COPYING3.
*** 113,119 ****
          * Annotate basic block count
          * Estimate branch probability
  	* Use earlier static profile to fill in the gaps
! 	  if AFDO profile is ambigous
  
     After the above 5 phases, all profile is readily annotated on the GCC IR.
     AutoFDO tries to reuse all FDO infrastructure as much as possible to make
--- 113,119 ----
          * Annotate basic block count
          * Estimate branch probability
  	* Use earlier static profile to fill in the gaps
! 	  if AFDO profile is ambiguous
  
     After the above 5 phases, all profile is readily annotated on the GCC IR.
     AutoFDO tries to reuse all FDO infrastructure as much as possible to make
*************** along with GCC; see the file COPYING3.
*** 126,139 ****
  
  /* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
     considered cols.  */
! gcov_type afdo_hot_bb_threshod = -1;
  
  /* Return true if COUNT is possibly hot.  */
  bool
  maybe_hot_afdo_count_p (profile_count count)
  {
    gcc_checking_assert (count.ipa ().initialized_p ());
!   return count.ipa ().to_gcov_type () >= afdo_hot_bb_threshod;
  }
  
  /* Return true if location of STMT may be expressed by debug info.  */
--- 126,139 ----
  
  /* profile counts determined by AFDO smaller than afdo_hot_bb_threshold are
     considered cols.  */
! gcov_type afdo_hot_bb_threshold = -1;
  
  /* Return true if COUNT is possibly hot.  */
  bool
  maybe_hot_afdo_count_p (profile_count count)
  {
    gcc_checking_assert (count.ipa ().initialized_p ());
!   return count.ipa ().to_gcov_type () >= afdo_hot_bb_threshold;
  }
  
  /* Return true if location of STMT may be expressed by debug info.  */
*************** public:
*** 319,330 ****
  						    tree decl,
  						    location_t location) const;
  
!   /* Merge profile of clones.  Note that cloning hasnt been performed when
       we annotate the CFG (at this stage).  */
    void merge (function_instance *other,
  	      vec <function_instance *> &new_functions);
  
!   /* Look for inline instancs that was not realized and
       remove them while possibly merging them to offline variants.  */
    void offline_if_not_realized (vec <function_instance *> &new_functions);
  
--- 319,330 ----
  						    tree decl,
  						    location_t location) const;
  
!   /* Merge profile of clones.  Note that cloning hasn't been performed when
       we annotate the CFG (at this stage).  */
    void merge (function_instance *other,
  	      vec <function_instance *> &new_functions);
  
!   /* Look for inline instances that was not realized and
       remove them while possibly merging them to offline variants.  */
    void offline_if_not_realized (vec <function_instance *> &new_functions);
  
*************** static gcov_summary *afdo_profile_info;
*** 603,609 ****
  
  /* Scaling factor for afdo data.  Compared to normal profile
     AFDO profile counts are much lower, depending on sampling
!    frequency.  We scale data up to reudce effects of roundoff
     errors.  */
  
  static gcov_type afdo_count_scale = 1;
--- 603,609 ----
  
  /* Scaling factor for afdo data.  Compared to normal profile
     AFDO profile counts are much lower, depending on sampling
!    frequency.  We scale data up to reduce effects of roundoff
     errors.  */
  
  static gcov_type afdo_count_scale = 1;
*************** static gcov_type afdo_count_scale = 1;
*** 612,620 ****
  
  
  /* Return the original name of NAME: strip the suffix that starts
!    with '.' for names that are generetad after auto-profile pass.
     This is to match profiled names with the names in the IR at this stage.
!    Note that we only have to strip sufix and not in the middle.
     Caller is responsible for freeing RET.  */
  
  static char *
--- 612,620 ----
  
  
  /* Return the original name of NAME: strip the suffix that starts
!    with '.' for names that are generated after auto-profile pass.
     This is to match profiled names with the names in the IR at this stage.
!    Note that we only have to strip suffix and not in the middle.
     Caller is responsible for freeing RET.  */
  
  static char *
*************** function_instance::get_function_instance
*** 973,979 ****
  	  dump_printf_loc (MSG_NOTE | MSG_PRIORITY_INTERNALS,
  			   dump_user_location_t::from_location_t (location),
  			   "auto-profile has mismatched function name %s"
! 			   " insteed of %s at loc %i:%i",
  			   afdo_string_table->get_name (iter.first.second),
  			   raw_symbol_name (decl),
  			   lineno >> 16,
--- 973,979 ----
  	  dump_printf_loc (MSG_NOTE | MSG_PRIORITY_INTERNALS,
  			   dump_user_location_t::from_location_t (location),
  			   "auto-profile has mismatched function name %s"
! 			   " instead of %s at loc %i:%i",
  			   afdo_string_table->get_name (iter.first.second),
  			   raw_symbol_name (decl),
  			   lineno >> 16,
*************** function_instance::get_function_instance
*** 983,990 ****
    return NULL;
  }
  
! /* Merge profile of OTHER to THIS.  Note that cloning hasnt been performed when
!    we annotate the CFG (at this stage).  */
  
  void
  function_instance::merge (function_instance *other,
--- 983,990 ----
    return NULL;
  }
  
! /* Merge profile of OTHER to THIS.  Note that cloning hasn't been performed
!    when we annotate the CFG (at this stage).  */
  
  void
  function_instance::merge (function_instance *other,
*************** function_instance::merge (function_insta
*** 1017,1024 ****
  		f->dump_inline_stack (dump_file);
  		fprintf (dump_file, "\n");
  	      }
! 	    /* We already merged outer part of the function acounting
! 	       the inlined calll; compensate.  */
  	    for (function_instance *s = this; s; s = s->inlined_to ())
  	      {
  		s->total_count_ -= f->total_count ();
--- 1017,1024 ----
  		f->dump_inline_stack (dump_file);
  		fprintf (dump_file, "\n");
  	      }
! 	    /* We already merged outer part of the function accounting
! 	       the inlined call; compensate.  */
  	    for (function_instance *s = this; s; s = s->inlined_to ())
  	      {
  		s->total_count_ -= f->total_count ();
*************** function_instance::merge (function_insta
*** 1026,1032 ****
  	      }
  	    other->callsites.erase (iter);
  	    function_instance::offline (f, new_functions);
! 	    /* Start from begining as merging might have offlined
  	       some functions in the case of recursive inlining.  */
  	    iter = other->callsites.begin ();
  	  }
--- 1026,1032 ----
  	      }
  	    other->callsites.erase (iter);
  	    function_instance::offline (f, new_functions);
! 	    /* Start from beginning as merging might have offlined
  	       some functions in the case of recursive inlining.  */
  	    iter = other->callsites.begin ();
  	  }
*************** function_instance::offline_if_in_set (na
*** 1164,1170 ****
  	  }
  	iter = callsites.erase (iter);
  	function_instance::offline (f, new_functions);
! 	/* Start from begining as merging might have offlined
  	   some functions in the case of recursive inlining.  */
  	iter = callsites.begin ();
        }
--- 1164,1170 ----
  	  }
  	iter = callsites.erase (iter);
  	function_instance::offline (f, new_functions);
! 	/* Start from beginning as merging might have offlined
  	   some functions in the case of recursive inlining.  */
  	iter = callsites.begin ();
        }
*************** function_instance::offline_if_in_set (na
*** 1176,1182 ****
  }
  
  /* Try to check if inlined_fn can correspond to a call of function N.
!    Return non-zero if it correspons and 2 if renaming was done.  */
  
  static int
  match_with_target (cgraph_node *n,
--- 1176,1182 ----
  }
  
  /* Try to check if inlined_fn can correspond to a call of function N.
!    Return non-zero if it corresponds and 2 if renaming was done.  */
  
  static int
  match_with_target (cgraph_node *n,
*************** function_instance::match (cgraph_node *n
*** 1554,1560 ****
  			  if (warning (OPT_Wauto_profile,
  				       "function contains two calls of the same"
  				       " relative location +%i,"
! 				       " discrimnator %i,"
  				       " that leads to lost auto-profile",
  				       loc >> 16,
  				       loc & 65535))
--- 1554,1560 ----
  			  if (warning (OPT_Wauto_profile,
  				       "function contains two calls of the same"
  				       " relative location +%i,"
! 				       " discriminator %i,"
  				       " that leads to lost auto-profile",
  				       loc >> 16,
  				       loc & 65535))
*************** function_instance::remove_icall_target (
*** 1980,1986 ****
  
  /* Offline all functions not defined in the current unit.
     We will not be able to early inline them.
!    Doint so early will get VPT decisions more realistic.  */
  
  void
  autofdo_source_profile::offline_external_functions ()
--- 1980,1986 ----
  
  /* Offline all functions not defined in the current unit.
     We will not be able to early inline them.
!    Doing so early will get VPT decisions more realistic.  */
  
  void
  autofdo_source_profile::offline_external_functions ()
*************** autofdo_source_profile::offline_external
*** 2002,2008 ****
  	{
  	  free (n2);
  	  /* Watch for duplicate entries.
! 	     This seems to happen in practice and may be useful to distingush
  	     multiple static symbols of the same name, but we do not realy
  	     have a way to differentiate them in get_name lookup.  */
  	  int index = afdo_string_table->get_index (n1);
--- 2002,2008 ----
  	{
  	  free (n2);
  	  /* Watch for duplicate entries.
! 	     This seems to happen in practice and may be useful to distinguish
  	     multiple static symbols of the same name, but we do not realy
  	     have a way to differentiate them in get_name lookup.  */
  	  int index = afdo_string_table->get_index (n1);
*************** autofdo_source_profile::offline_external
*** 2017,2023 ****
  	  continue;
  	}
        if (dump_file)
! 	fprintf (dump_file, "Adding rename removing clone suffxes %s -> %s\n",
  		 n1, n2);
        int index = afdo_string_table->get_index (n2);
        if (index != -1)
--- 2017,2023 ----
  	  continue;
  	}
        if (dump_file)
! 	fprintf (dump_file, "Adding rename removing clone suffixes %s -> %s\n",
  		 n1, n2);
        int index = afdo_string_table->get_index (n2);
        if (index != -1)
*************** autofdo_source_profile::offline_external
*** 2084,2090 ****
    for (auto iter : to_symbol_name)
      {
        /* In case dwarf name was duplicated and later renamed,
! 	 handle both.  No more than one hop shold be needed.  */
        int *newn = to_symbol_name.get (iter.second);
        if (newn)
  	iter.second = *newn;
--- 2084,2090 ----
    for (auto iter : to_symbol_name)
      {
        /* In case dwarf name was duplicated and later renamed,
! 	 handle both.  No more than one hop should be needed.  */
        int *newn = to_symbol_name.get (iter.second);
        if (newn)
  	iter.second = *newn;
*************** autofdo_source_profile::offline_external
*** 2107,2113 ****
       that were not inlined.  */
    vec <function_instance *>&fns = duplicate_functions_;
    auto_vec <function_instance *, 20>fns2;
!   /* Poppulate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
    for (auto const &iter : map_)
      {
--- 2107,2113 ----
       that were not inlined.  */
    vec <function_instance *>&fns = duplicate_functions_;
    auto_vec <function_instance *, 20>fns2;
!   /* Populate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
    for (auto const &iter : map_)
      {
*************** void
*** 2257,2263 ****
  autofdo_source_profile::offline_unrealized_inlines ()
  {
    auto_vec <function_instance *>fns;
!   /* Poppulate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
    for (auto const &iter : map_)
      {
--- 2257,2263 ----
  autofdo_source_profile::offline_unrealized_inlines ()
  {
    auto_vec <function_instance *>fns;
!   /* Populate worklist with all functions to process.  Processing
       may introduce new functions by offlining.  */
    for (auto const &iter : map_)
      {
*************** autofdo_source_profile::update_inlined_i
*** 2477,2483 ****
    if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
      {
        if (dump_file)
! 	fprintf (dump_file, " bad locus (funciton end)\n");
        return false;
      }
  
--- 2477,2483 ----
    if (LOCATION_LOCUS (gimple_location (stmt)) == cfun->function_end_locus)
      {
        if (dump_file)
! 	fprintf (dump_file, " bad locus (function end)\n");
        return false;
      }
  
*************** autofdo_source_profile::read ()
*** 2635,2642 ****
        function_instance *s = function_instance::read_function_instance (
            &stack, gcov_read_counter ());
        int fun_id = s->name ();
!       /* If function_instace with get_original_name (without the clone
! 	 suffix) exixts, merge the function instances.  */
        if (map_.count (fun_id) == 0)
  	map_[fun_id] = s;
        else
--- 2635,2642 ----
        function_instance *s = function_instance::read_function_instance (
            &stack, gcov_read_counter ());
        int fun_id = s->name ();
!       /* If function_instance with get_original_name (without the clone
! 	 suffix) exits, merge the function instances.  */
        if (map_.count (fun_id) == 0)
  	map_[fun_id] = s;
        else
*************** autofdo_source_profile::read ()
*** 2652,2662 ****
        = MAX (((gcov_type)1 << (profile_count::n_bits - 10))
  	     / afdo_profile_info->sum_max, 1);
    afdo_profile_info->cutoff *= afdo_count_scale;
!   afdo_hot_bb_threshod
      = hot_frac
        ? afdo_profile_info->sum_max * afdo_count_scale / hot_frac
        : (gcov_type)profile_count::max_count;
!   set_hot_bb_threshold (afdo_hot_bb_threshod);
    if (dump_file)
      fprintf (dump_file, "Max count in profile %" PRIu64 "\n"
  			"Setting scale %" PRIu64 "\n"
--- 2652,2662 ----
        = MAX (((gcov_type)1 << (profile_count::n_bits - 10))
  	     / afdo_profile_info->sum_max, 1);
    afdo_profile_info->cutoff *= afdo_count_scale;
!   afdo_hot_bb_threshold
      = hot_frac
        ? afdo_profile_info->sum_max * afdo_count_scale / hot_frac
        : (gcov_type)profile_count::max_count;
!   set_hot_bb_threshold (afdo_hot_bb_threshold);
    if (dump_file)
      fprintf (dump_file, "Max count in profile %" PRIu64 "\n"
  			"Setting scale %" PRIu64 "\n"
*************** autofdo_source_profile::read ()
*** 2667,2673 ****
  	     (int64_t)afdo_count_scale,
  	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale),
  	     (int64_t)afdo_profile_info->cutoff,
! 	     (int64_t)afdo_hot_bb_threshod);
    afdo_profile_info->sum_max *= afdo_count_scale;
    return true;
  }
--- 2667,2673 ----
  	     (int64_t)afdo_count_scale,
  	     (int64_t)(afdo_profile_info->sum_max * afdo_count_scale),
  	     (int64_t)afdo_profile_info->cutoff,
! 	     (int64_t)afdo_hot_bb_threshold);
    afdo_profile_info->sum_max *= afdo_count_scale;
    return true;
  }
*************** autofdo_source_profile::get_function_ins
*** 2706,2712 ****
  			       (stack[i].location),
  			      "auto-profile has no inlined function instance "
  			      "for inlined call of %s at relative "
! 			      " locaction +%i, discriminator %i\n",
  			     raw_symbol_name (stack[i - 1].decl),
  			     stack[i].afdo_loc >> 16,
  			     stack[i].afdo_loc & 65535);
--- 2706,2712 ----
  			       (stack[i].location),
  			      "auto-profile has no inlined function instance "
  			      "for inlined call of %s at relative "
! 			      " location +%i, discriminator %i\n",
  			     raw_symbol_name (stack[i - 1].decl),
  			     stack[i].afdo_loc >> 16,
  			     stack[i].afdo_loc & 65535);
*************** afdo_propagate_edge (bool is_succ, bb_se
*** 3187,3193 ****
  		 "unknown edges %i, known count ",
  		 bb->index,
  		 is_bb_annotated (bb, *annotated_bb) ? "(annotated)" : "",
! 		 is_succ ? "succesors" : "predecessors", num_edges,
  		 num_unknown_edges);
  	total_known_count.dump (dump_file);
  	fprintf (dump_file, " bb count ");
--- 3187,3193 ----
  		 "unknown edges %i, known count ",
  		 bb->index,
  		 is_bb_annotated (bb, *annotated_bb) ? "(annotated)" : "",
! 		 is_succ ? "successors" : "predecessors", num_edges,
  		 num_unknown_edges);
  	total_known_count.dump (dump_file);
  	fprintf (dump_file, " bb count ");
*************** afdo_propagate_circuit (const bb_set &an
*** 3396,3402 ****
  }
  
  /* Propagate the basic block count and edge count on the control flow
!    graph. We do the propagation iteratively until stablize.  */
  
  static void
  afdo_propagate (bb_set *annotated_bb)
--- 3396,3402 ----
  }
  
  /* Propagate the basic block count and edge count on the control flow
!    graph.  We do the propagation iteratively until stabilize.  */
  
  static void
  afdo_propagate (bb_set *annotated_bb)
*************** cmp (const void *a, const void *b)
*** 3453,3459 ****
  
  struct scale
  {
!   /* Scale descired.  */
    sreal scale;
    /* Weight for averaging computed from execution count of the edge
       scale originates from.  */
--- 3453,3459 ----
  
  struct scale
  {
!   /* Scale desired.  */
    sreal scale;
    /* Weight for averaging computed from execution count of the edge
       scale originates from.  */
*************** afdo_adjust_guessed_profile (bb_set *ann
*** 3739,3745 ****
  		 boundary = true;
  		 if (dump_file)
  		   {
! 		     fprintf (dump_file, "    Annotated predecesor %i "
  			      "with count ", e->src->index);
  		     e->src->count.dump (dump_file);
  		     fprintf (dump_file, " edge count using static profile ");
--- 3739,3745 ----
  		 boundary = true;
  		 if (dump_file)
  		   {
! 		     fprintf (dump_file, "    Annotated predecessor %i "
  			      "with count ", e->src->index);
  		     e->src->count.dump (dump_file);
  		     fprintf (dump_file, " edge count using static profile ");
*************** afdo_adjust_guessed_profile (bb_set *ann
*** 3791,3797 ****
  		   continue;
  		 if (dump_file)
  		   fprintf (dump_file,
! 			    "    edge %i->%i has annotated sucessor; count ",
  			    b->index, e->dest->index);
  		 add_scale (&scales, annotated_count, e->count ());
  	       }
--- 3791,3797 ----
  		   continue;
  		 if (dump_file)
  		   fprintf (dump_file,
! 			    "    edge %i->%i has annotated successor; count ",
  			    b->index, e->dest->index);
  		 add_scale (&scales, annotated_count, e->count ());
  	       }
*************** afdo_adjust_guessed_profile (bb_set *ann
*** 3800,3806 ****
  
         /* If we failed to find annotated entry or exit edge,
  	  look for exit edges and scale profile so the dest
! 	  BB get all flow it needs.  This is inprecise because
  	  the edge is not annotated and thus BB has more than
  	  one such predecessor.  */
         if (!scales.length ())
--- 3800,3806 ----
  
         /* If we failed to find annotated entry or exit edge,
  	  look for exit edges and scale profile so the dest
! 	  BB get all flow it needs.  This is imprecise because
  	  the edge is not annotated and thus BB has more than
  	  one such predecessor.  */
         if (!scales.length ())
*************** afdo_adjust_guessed_profile (bb_set *ann
*** 3815,3821 ****
  		       annotated_count -= AFDO_EINFO (e2)->get_count ();
  		   if (dump_file)
  		     fprintf (dump_file,
! 			      "    edge %i->%i has annotated sucessor;"
  			      " upper bound count ",
  			      b->index, e->dest->index);
  		   add_scale (&scales, annotated_count, e->count ());
--- 3815,3821 ----
  		       annotated_count -= AFDO_EINFO (e2)->get_count ();
  		   if (dump_file)
  		     fprintf (dump_file,
! 			      "    edge %i->%i has annotated successor;"
  			      " upper bound count ",
  			      b->index, e->dest->index);
  		   add_scale (&scales, annotated_count, e->count ());
*************** afdo_annotate_cfg (void)
*** 4138,4144 ****
    free_dominance_info (CDI_POST_DOMINATORS);
  }
  
! /* Use AutoFDO profile to annoate the control flow graph.
     Return the todo flag.  */
  
  static unsigned int
--- 4138,4144 ----
    free_dominance_info (CDI_POST_DOMINATORS);
  }
  
! /* Use AutoFDO profile to annotate the control flow graph.
     Return the todo flag.  */
  
  static unsigned int
diff -Nrcpad gcc-16-20251207/gcc/c/ChangeLog gcc-16-20251214/gcc/c/ChangeLog
*** gcc-16-20251207/gcc/c/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c/ChangeLog	Sun Dec 14 22:32:06 2025
***************
*** 1,3 ****
--- 1,80 ----
+ 2025-12-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c-parser.cc (c_parser_omp_clause_reduction): Provide fixit hints
+ 	for -Wdeprecated-openmp diagnostics.
+ 	(c_parser_omp_clause_linear): Likewise.
+ 	(c_parser_omp_clause_depend): Likewise.  Add HERE argument.
+ 	(c_parser_omp_clause_map): Provide fixit hints for -Wdeprecated-openmp
+ 	diagnostics.  Reset num_commas after the diagnostics.
+ 	(c_parser_omp_clause_proc_bind): Provide fixit hints for
+ 	-Wdeprecated-openmp diagnostics.
+ 	(c_parser_omp_all_clauses): Move -Wdeprecated-openmp diagnostics
+ 	for to vs. enter here, add fixit hints for it.  Adjust
+ 	c_parser_omp_clause_depend caller.
+ 	(c_parser_omp_depobj): Adjust c_parser_omp_clause_depend caller.
+ 	(c_parser_omp_master): Add MASTER_LOC argument.  Provide fixit hints
+ 	for -Wdeprecated-openmp diagnostics.
+ 	(c_parser_omp_parallel): Adjust c_parser_omp_master caller.
+ 	(c_parser_omp_declare_target): Don't emit -Wdeprecated-openmp
+ 	warning for to vs. enter here.
+ 	(c_parser_omp_metadirective): Provide fixit hints for
+ 	-Wdeprecated-openmp diagnostics.
+ 	(c_parser_omp_construct): Adjust c_parser_omp_master caller.
+ 
+ 2025-12-12  Chung-Lin Tang  <cltang@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 	    Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* c-parser.cc (c_parser_omp_clause_uses_allocators): New function.
+ 	(c_parser_omp_clause_name, c_parser_omp_all_clauses,
+ 	OMP_TARGET_CLAUSE_MASK): Handle uses_allocators.
+ 	* c-typeck.cc (c_finish_omp_clauses): Likewise.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/123098
+ 	* c-parser.cc (c_parser_omp_clause_reduction): Only emit
+ 	-Wdeprecated-openmp warning for CPP_MINUS if is_omp.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c-parser.cc (c_parser_omp_clause_reduction,
+ 	c_parser_omp_clause_linear, c_parser_omp_clause_depend,
+ 	c_parser_omp_clause_map, c_parser_omp_clause_proc_bind,
+ 	c_parser_omp_master, c_parser_omp_declare_target,
+ 	c_parser_omp_metadirective): Formatting fixes.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* c-parser.cc (c_parser_omp_clause_reduction): Deprecate '-'
+ 	operator for reductions.
+ 	(c_parser_omp_clause_linear): Deprecate modifiers with parens.
+ 	(c_parser_omp_clause_depend): Deprecate 'sink' and 'source'
+ 	modifiers for 'depend' clause.
+ 	(c_parser_omp_clause_map): Map clause modifiers comma-separated.
+ 	(c_parser_omp_declare_target): Deprecate synonymous omp declare
+ 	target for omp begin declare target. Deprecate 'to' clause.
+ 	(c_parser_omp_metadirective): Deprecate default clause on
+ 	metadirectives.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* c-parser.cc (c_parser_omp_clause_proc_bind): Deprecate master
+ 	affinity.
+ 	(c_parser_omp_master): Deprecate master construct.
+ 	(c_parser_transaction): Whitespace.
+ 
+ 2025-12-09  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	PR c/122982
+ 	* c-typeck.cc (build_access_with_size_for_counted_by): Call
+ 	c_fully_fold on the first parameter.
+ 
+ 2025-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123018
+ 	* c-decl.cc (finish_struct): Diagnose bit-fields with vector type.
+ 
  2025-12-05  Richard Biener  <rguenther@suse.de>
  
  	* gimple-parser.cc (c_parser_gimple_postfix_expression):
diff -Nrcpad gcc-16-20251207/gcc/c/c-decl.cc gcc-16-20251214/gcc/c/c-decl.cc
*** gcc-16-20251207/gcc/c/c-decl.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c/c-decl.cc	Sun Dec 14 22:32:06 2025
*************** finish_struct (location_t loc, tree t, t
*** 9774,9779 ****
--- 9774,9786 ----
  	  unsigned HOST_WIDE_INT width
  	    = tree_to_uhwi (DECL_INITIAL (field));
  	  tree type = TREE_TYPE (field);
+ 	  if (VECTOR_TYPE_P (type))
+ 	    {
+ 	      error_at (DECL_SOURCE_LOCATION (field),
+ 			"bit-field %qD has invalid type", field);
+ 	      type = TREE_TYPE (type);
+ 	      TREE_TYPE (field) = type;
+ 	    }
  	  if (width != TYPE_PRECISION (type))
  	    {
  	      if (TREE_CODE (type) == BITINT_TYPE
diff -Nrcpad gcc-16-20251207/gcc/c/c-parser.cc gcc-16-20251214/gcc/c/c-parser.cc
*** gcc-16-20251207/gcc/c/c-parser.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c/c-parser.cc	Sun Dec 14 22:32:06 2025
*************** c_parser_omp_clause_name (c_parser *pars
*** 16589,16594 ****
--- 16589,16596 ----
  	    result = PRAGMA_OMP_CLAUSE_USE_DEVICE_ADDR;
  	  else if (!strcmp ("use_device_ptr", p))
  	    result = PRAGMA_OMP_CLAUSE_USE_DEVICE_PTR;
+ 	  else if (!strcmp ("uses_allocators", p))
+ 	    result = PRAGMA_OMP_CLAUSE_USES_ALLOCATORS;
  	  break;
  	case 'v':
  	  if (!strcmp ("vector", p))
*************** c_parser_omp_clause_reduction (c_parser
*** 18849,18854 ****
--- 18851,18865 ----
  	  code = MULT_EXPR;
  	  break;
  	case CPP_MINUS:
+ 	  if (is_omp)
+ 	    {
+ 	      location_t loc = c_parser_peek_token (parser)->location;
+ 	      gcc_rich_location richloc (loc);
+ 	      richloc.add_fixit_replace ("+");
+ 	      warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 			  "%<-%> operator for reductions deprecated in "
+ 			  "OpenMP 5.2");
+ 	    }
  	  code = MINUS_EXPR;
  	  break;
  	case CPP_AND:
*************** c_parser_omp_clause_allocate (c_parser *
*** 19557,19562 ****
--- 19568,19800 ----
    return nl;
  }
  
+ /* OpenMP 5.0:
+    uses_allocators ( allocator-list )
+ 
+    allocator-list:
+    allocator
+    allocator , allocator-list
+    allocator ( traits-array )
+    allocator ( traits-array ) , allocator-list
+ 
+    OpenMP 5.2:
+ 
+    uses_allocators ( modifier : allocator-list )
+    uses_allocators ( modifier , modifier : allocator-list )
+ 
+    modifier:
+    traits ( traits-array )
+    memspace ( mem-space-handle )  */
+ 
+ static tree
+ c_parser_omp_clause_uses_allocators (c_parser *parser, tree list)
+ {
+   location_t clause_loc = c_parser_peek_token (parser)->location;
+   tree nl = list;
+   matching_parens parens;
+   if (!parens.require_open (parser))
+     return list;
+ 
+   bool has_modifiers = false;
+   bool seen_allocators = false;
+   tree memspace_expr = NULL_TREE;
+   tree traits_var = NULL_TREE;
+ 
+   if (c_parser_next_token_is (parser, CPP_NAME)
+       && c_parser_peek_2nd_token (parser)->type == CPP_OPEN_PAREN)
+     {
+       unsigned int n = 3;
+       const char *p
+ 	= IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+       if ((strcmp (p, "traits") == 0 || strcmp (p, "memspace") == 0)
+ 	  && c_parser_check_balanced_raw_token_sequence (parser, &n)
+ 	  && (c_parser_peek_nth_token_raw (parser, n)->type
+ 	      == CPP_CLOSE_PAREN))
+ 	{
+ 	  if (c_parser_peek_nth_token_raw (parser, n + 1)->type
+ 	      == CPP_COLON)
+ 	    has_modifiers = true;
+ 	  else if (c_parser_peek_nth_token_raw (parser, n + 1)->type
+ 		   == CPP_COMMA
+ 		   && (c_parser_peek_nth_token_raw (parser, n + 2)->type
+ 		       == CPP_NAME)
+ 		   && (c_parser_peek_nth_token_raw (parser, n + 3)->type
+ 		       == CPP_OPEN_PAREN))
+ 	    {
+ 	      c_token *tok = c_parser_peek_nth_token_raw (parser, n + 2);
+ 	      const char *q = IDENTIFIER_POINTER (tok->value);
+ 	      n += 4;
+ 	      if ((strcmp (q, "traits") == 0
+ 		   || strcmp (q, "memspace") == 0)
+ 		  && c_parser_check_balanced_raw_token_sequence (parser, &n)
+ 		  && (c_parser_peek_nth_token_raw (parser, n)->type
+ 		      == CPP_CLOSE_PAREN))
+ 		{
+ 		  if (c_parser_peek_nth_token_raw (parser, n + 1)->type
+ 		      == CPP_COLON)
+ 		    has_modifiers = true;
+ 		  if ((c_parser_peek_nth_token_raw (parser, n + 1)->type
+ 		       == CPP_COMMA)
+ 		      && (c_parser_peek_nth_token_raw (parser, n + 2)->type
+ 			  == CPP_NAME))
+ 		    {
+ 		      c_token *tok
+ 			= c_parser_peek_nth_token_raw (parser, n + 2);
+ 		      const char *m = IDENTIFIER_POINTER (tok->value);
+ 		      if (strcmp (p, m) == 0 || strcmp (q, m) == 0)
+ 			{
+ 			  error_at (tok->location, "duplicate %qs modifier", m);
+ 			  goto end;
+ 			}
+ 		    }
+ 		}
+ 	    }
+ 	}
+       if (has_modifiers)
+ 	{
+ 	  c_parser_consume_token (parser);
+ 	  matching_parens parens2;
+ 	  parens2.require_open (parser);
+ 	  c_expr expr = c_parser_expr_no_commas (parser, NULL);
+ 	  if (expr.value == error_mark_node)
+ 	    ;
+ 	  else if (strcmp (p, "traits") == 0)
+ 	    {
+ 	      traits_var = expr.value;
+ 	      traits_var = c_fully_fold (traits_var, false, NULL);
+ 	    }
+ 	  else
+ 	    {
+ 	      memspace_expr = expr.value;
+ 	      memspace_expr = c_fully_fold (memspace_expr, false, NULL);
+ 	    }
+ 	  parens2.skip_until_found_close (parser);
+ 	  if (c_parser_next_token_is (parser, CPP_COMMA))
+ 	    {
+ 	      c_parser_consume_token (parser);
+ 	      c_token *tok = c_parser_peek_token (parser);
+ 	      const char *q = "";
+ 	      if (c_parser_next_token_is (parser, CPP_NAME))
+ 		q = IDENTIFIER_POINTER (tok->value);
+ 	      if (strcmp (q, "traits") != 0 && strcmp (q, "memspace") != 0)
+ 		{
+ 		  c_parser_error (parser, "expected %<traits%> or "
+ 				  "%<memspace%>");
+ 		  parens.skip_until_found_close (parser);
+ 		  return list;
+ 		}
+ 	      else if (strcmp (p, q) == 0)
+ 		{
+ 		  error_at (tok->location, "duplicate %qs modifier", p);
+ 		  parens.skip_until_found_close (parser);
+ 		  return list;
+ 		}
+ 	      c_parser_consume_token (parser);
+ 	      if (!parens2.require_open (parser))
+ 		{
+ 		  parens.skip_until_found_close (parser);
+ 		  return list;
+ 		}
+ 	      expr = c_parser_expr_no_commas (parser, NULL);
+ 	      if (strcmp (q, "traits") == 0)
+ 		{
+ 		  traits_var = expr.value;
+ 		  traits_var = c_fully_fold (traits_var, false, NULL);
+ 		}
+ 	      else
+ 		{
+ 		  memspace_expr = expr.value;
+ 		  memspace_expr = c_fully_fold (memspace_expr, false, NULL);
+ 		}
+ 	      parens2.skip_until_found_close (parser);
+ 	    }
+ 	  if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
+ 	    goto end;
+ 	}
+     }
+ 
+   while (c_parser_next_token_is (parser, CPP_NAME))
+     {
+       location_t alloc_loc = c_parser_peek_token (parser)->location;
+       c_token *tok = c_parser_peek_token (parser);
+       const char *tok_s = IDENTIFIER_POINTER (tok->value);
+       tree t = lookup_name (tok->value);
+       if (t == NULL_TREE)
+ 	{
+ 	  undeclared_variable (tok->location, tok->value);
+ 	  t = error_mark_node;
+ 	}
+       c_parser_consume_token (parser);
+ 
+       /* Legacy traits syntax.  */
+       tree legacy_traits = NULL_TREE;
+       if (c_parser_next_token_is (parser, CPP_OPEN_PAREN)
+ 	  && c_parser_peek_2nd_token (parser)->type == CPP_NAME
+ 	  && c_parser_peek_nth_token_raw (parser, 3)->type == CPP_CLOSE_PAREN)
+ 	{
+ 	  matching_parens parens2;
+ 	  parens2.require_open (parser);
+ 	  const char *tok_a
+ 	    = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+ 	  c_expr expr = c_parser_expr_no_commas (parser, NULL);
+ 	  location_t close_loc = c_parser_peek_token (parser)->location;
+ 	  parens2.skip_until_found_close (parser);
+ 
+ 	  if (has_modifiers)
+ 	    {
+ 	      error_at (make_location (alloc_loc, alloc_loc, close_loc),
+ 			"legacy %<%s(%s)%> traits syntax not allowed in "
+ 			"%<uses_allocators%> clause when using modifiers",
+ 			tok_s, tok_a);
+ 	      goto end;
+ 	    }
+ 	  legacy_traits = c_fully_fold (expr.value, false, NULL);
+ 	  if (legacy_traits == error_mark_node)
+ 	    goto end;
+ 
+ 	  gcc_rich_location richloc (make_location (alloc_loc, alloc_loc, close_loc));
+ 	  if (nl == list)
+ 	    {
+ 	      /* Fixit only works well if it is the only first item.  */
+ 	      richloc.add_fixit_replace (alloc_loc, "traits");
+ 	      richloc.add_fixit_insert_after (close_loc, ": ");
+ 	      richloc.add_fixit_insert_after (close_loc, tok_s);
+ 	    }
+ 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		      "the specification of arguments to %<uses_allocators%> "
+ 		      "where each item is of the form %<allocator(traits)%> is "
+ 		      "deprecated since OpenMP 5.2");
+ 	}
+ 
+       if (seen_allocators && has_modifiers)
+ 	{
+ 	  error_at (c_parser_peek_token (parser)->location,
+ 		    "%<uses_allocators%> clause only accepts a single "
+ 		    "allocator when using modifiers");
+ 	  goto end;
+ 	}
+       seen_allocators = true;
+ 
+       tree c = build_omp_clause (clause_loc,
+ 				 OMP_CLAUSE_USES_ALLOCATORS);
+       OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c) = t;
+       OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c) = memspace_expr;
+       OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c) = (legacy_traits
+ 					       ? legacy_traits : traits_var);
+       OMP_CLAUSE_CHAIN (c) = nl;
+       nl = c;
+ 
+       if (c_parser_next_token_is (parser, CPP_COMMA))
+ 	c_parser_consume_token (parser);
+       else
+ 	break;
+     }
+ 
+  end:
+   parens.skip_until_found_close (parser);
+   return nl;
+ }
+ 
  /* OpenMP 4.0:
     linear ( variable-list )
     linear ( variable-list : expression )
*************** static tree
*** 19579,19584 ****
--- 19817,19824 ----
  c_parser_omp_clause_linear (c_parser *parser, tree list)
  {
    location_t clause_loc = c_parser_peek_token (parser)->location;
+   location_t rm1_loc = UNKNOWN_LOCATION, rm2_loc = UNKNOWN_LOCATION;
+   location_t after_colon_loc = UNKNOWN_LOCATION;
    tree nl, c, step;
    enum omp_clause_linear_kind kind = OMP_CLAUSE_LINEAR_DEFAULT;
    bool old_linear_modifier = false;
*************** c_parser_omp_clause_linear (c_parser *pa
*** 19598,19603 ****
--- 19838,19845 ----
        if (kind != OMP_CLAUSE_LINEAR_DEFAULT)
  	{
  	  old_linear_modifier = true;
+ 	  rm1_loc = make_location (tok->location, tok->location,
+ 				   c_parser_peek_2nd_token (parser)->location);
  	  c_parser_consume_token (parser);
  	  c_parser_consume_token (parser);
  	}
*************** c_parser_omp_clause_linear (c_parser *pa
*** 19607,19618 ****
  				   OMP_CLAUSE_LINEAR, list);
  
    if (kind != OMP_CLAUSE_LINEAR_DEFAULT)
!     parens.skip_until_found_close (parser);
  
    if (c_parser_next_token_is (parser, CPP_COLON))
      {
        c_parser_consume_token (parser);
        location_t expr_loc = c_parser_peek_token (parser)->location;
        bool has_modifiers = false;
        if (kind == OMP_CLAUSE_LINEAR_DEFAULT
  	  && c_parser_next_token_is (parser, CPP_NAME))
--- 19849,19865 ----
  				   OMP_CLAUSE_LINEAR, list);
  
    if (kind != OMP_CLAUSE_LINEAR_DEFAULT)
!     {
!       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
! 	rm2_loc = c_parser_peek_token (parser)->location;
!       parens.skip_until_found_close (parser);
!     }
  
    if (c_parser_next_token_is (parser, CPP_COLON))
      {
        c_parser_consume_token (parser);
        location_t expr_loc = c_parser_peek_token (parser)->location;
+       after_colon_loc = expr_loc;
        bool has_modifiers = false;
        if (kind == OMP_CLAUSE_LINEAR_DEFAULT
  	  && c_parser_next_token_is (parser, CPP_NAME))
*************** c_parser_omp_clause_linear (c_parser *pa
*** 19715,19720 ****
--- 19962,19988 ----
        OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (c) = old_linear_modifier;
      }
  
+   if (old_linear_modifier)
+     {
+       gcc_rich_location richloc (clause_loc);
+       if (rm2_loc != UNKNOWN_LOCATION)
+ 	{
+ 	  richloc.add_fixit_remove (rm1_loc);
+ 	  if (after_colon_loc != UNKNOWN_LOCATION)
+ 	    {
+ 	      richloc.add_fixit_remove (rm2_loc);
+ 	      richloc.add_fixit_insert_before (after_colon_loc, "val, step (");
+ 	      location_t close_loc = c_parser_peek_token (parser)->location;
+ 	      richloc.add_fixit_insert_before (close_loc, ")");
+ 	    }
+ 	  else
+ 	    richloc.add_fixit_replace (rm2_loc, " : val");
+ 	}
+       warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		  "specifying the list items as arguments to the "
+ 		  "modifiers is deprecated since OpenMP 5.2");
+     }
+ 
    parens.skip_until_found_close (parser);
    return nl;
  }
*************** c_parser_omp_clause_affinity (c_parser *
*** 20097,20103 ****
       iterator ( iterators-definition )  */
  
  static tree
! c_parser_omp_clause_depend (c_parser *parser, tree list)
  {
    location_t clause_loc = c_parser_peek_token (parser)->location;
    enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_LAST;
--- 20365,20371 ----
       iterator ( iterators-definition )  */
  
  static tree
! c_parser_omp_clause_depend (c_parser *parser, tree list, location_t here)
  {
    location_t clause_loc = c_parser_peek_token (parser)->location;
    enum omp_clause_depend_kind kind = OMP_CLAUSE_DEPEND_LAST;
*************** c_parser_omp_clause_depend (c_parser *pa
*** 20133,20141 ****
        else if (strcmp ("depobj", p) == 0)
  	kind = OMP_CLAUSE_DEPEND_DEPOBJ;
        else if (strcmp ("sink", p) == 0)
! 	dkind = OMP_CLAUSE_DOACROSS_SINK;
        else if (strcmp ("source", p) == 0)
! 	dkind = OMP_CLAUSE_DOACROSS_SOURCE;
        else
  	goto invalid_kind;
        break;
--- 20401,20423 ----
        else if (strcmp ("depobj", p) == 0)
  	kind = OMP_CLAUSE_DEPEND_DEPOBJ;
        else if (strcmp ("sink", p) == 0)
! 	{
! 	  gcc_rich_location richloc (clause_loc);
! 	  richloc.add_fixit_replace (here, "doacross");
! 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
! 		      "%<sink%> modifier with %<depend%> clause deprecated "
! 		      "since OpenMP 5.2, use with %<doacross%>");
! 	  dkind = OMP_CLAUSE_DOACROSS_SINK;
! 	}
        else if (strcmp ("source", p) == 0)
! 	{
! 	  gcc_rich_location richloc (clause_loc);
! 	  richloc.add_fixit_replace (here, "doacross");
! 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
! 		      "%<source%> modifier with %<depend%> clause deprecated "
! 		      "since OpenMP 5.2, use with %<doacross%>");
! 	  dkind = OMP_CLAUSE_DOACROSS_SOURCE;
! 	}
        else
  	goto invalid_kind;
        break;
*************** c_parser_omp_clause_map (c_parser *parse
*** 20435,20440 ****
--- 20717,20724 ----
    int close_modifier = 0;
    int present_modifier = 0;
    int mapper_modifier = 0;
+   int num_commas = 0;
+   int num_identifiers = 0;
    tree mapper_name = NULL_TREE;
    tree iterators = NULL_TREE;
    for (int pos = 1; pos < map_kind_pos; ++pos)
*************** c_parser_omp_clause_map (c_parser *parse
*** 20443,20448 ****
--- 20727,20735 ----
  
        if (tok->type == CPP_COMMA)
  	{
+ 	  ++num_commas;
+ 	  if (num_commas > num_identifiers)
+ 	    c_parser_error (parser, "illegal comma");
  	  c_parser_consume_token (parser);
  	  continue;
  	}
*************** c_parser_omp_clause_map (c_parser *parse
*** 20559,20564 ****
--- 20846,20861 ----
  	  parens.skip_until_found_close (parser);
  	  return list;
  	}
+       ++num_identifiers;
+       if (num_identifiers - 1 > num_commas)
+ 	{
+ 	  gcc_rich_location richloc (clause_loc);
+ 	  richloc.add_fixit_insert_before (tok->location, ",");
+ 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		      "%<map%> clause modifiers without comma separation is "
+ 		      "deprecated since OpenMP 5.2");
+ 	}
+       num_commas = num_identifiers - 1;
      }
  
    if (c_parser_next_token_is (parser, CPP_NAME)
*************** c_parser_omp_clause_proc_bind (c_parser
*** 20801,20807 ****
        if (strcmp ("primary", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_PRIMARY;
        else if (strcmp ("master", p) == 0)
! 	kind = OMP_CLAUSE_PROC_BIND_MASTER;
        else if (strcmp ("close", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_CLOSE;
        else if (strcmp ("spread", p) == 0)
--- 21098,21112 ----
        if (strcmp ("primary", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_PRIMARY;
        else if (strcmp ("master", p) == 0)
! 	{
! 	  gcc_rich_location richloc (clause_loc);
! 	  richloc.add_fixit_replace (c_parser_peek_token (parser)->location,
! 				     "primary");
! 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
! 		      "%<master%> affinity deprecated since OpenMP 5.1, "
! 		      "use %<primary%>");
! 	  kind = OMP_CLAUSE_PROC_BIND_MASTER;
! 	}
        else if (strcmp ("close", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_CLOSE;
        else if (strcmp ("spread", p) == 0)
*************** c_parser_omp_all_clauses (c_parser *pars
*** 22018,22023 ****
--- 22323,22333 ----
  	case PRAGMA_OMP_CLAUSE_TO:
  	  if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_LINK)) != 0)
  	    {
+ 	      gcc_rich_location richloc (here);
+ 	      richloc.add_fixit_replace ("enter");
+ 	      warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 			  "%<to%> clause with %<declare target%> deprecated "
+ 			  "since OpenMP 5.2, use %<enter%>");
  	      tree nl = c_parser_omp_var_list_parens (parser, OMP_CLAUSE_ENTER,
  						      clauses);
  	      for (tree c = nl; c != clauses; c = OMP_CLAUSE_CHAIN (c))
*************** c_parser_omp_all_clauses (c_parser *pars
*** 22058,22069 ****
  	  clauses = c_parser_omp_clause_linear (parser, clauses);
  	  c_name = "linear";
  	  break;
  	case PRAGMA_OMP_CLAUSE_AFFINITY:
  	  clauses = c_parser_omp_clause_affinity (parser, clauses);
  	  c_name = "affinity";
  	  break;
  	case PRAGMA_OMP_CLAUSE_DEPEND:
! 	  clauses = c_parser_omp_clause_depend (parser, clauses);
  	  c_name = "depend";
  	  break;
  	case PRAGMA_OMP_CLAUSE_DOACROSS:
--- 22368,22383 ----
  	  clauses = c_parser_omp_clause_linear (parser, clauses);
  	  c_name = "linear";
  	  break;
+ 	case PRAGMA_OMP_CLAUSE_USES_ALLOCATORS:
+ 	  clauses = c_parser_omp_clause_uses_allocators (parser, clauses);
+ 	  c_name = "uses_allocators";
+ 	  break;
  	case PRAGMA_OMP_CLAUSE_AFFINITY:
  	  clauses = c_parser_omp_clause_affinity (parser, clauses);
  	  c_name = "affinity";
  	  break;
  	case PRAGMA_OMP_CLAUSE_DEPEND:
! 	  clauses = c_parser_omp_clause_depend (parser, clauses, here);
  	  c_name = "depend";
  	  break;
  	case PRAGMA_OMP_CLAUSE_DOACROSS:
*************** c_parser_omp_depobj (c_parser *parser)
*** 24274,24280 ****
        c_parser_consume_token (parser);
        if (!strcmp ("depend", p))
  	{
! 	  clause = c_parser_omp_clause_depend (parser, NULL_TREE);
  	  clause = c_finish_omp_clauses (clause, C_ORT_OMP);
  	  if (!clause)
  	    clause = error_mark_node;
--- 24588,24594 ----
        c_parser_consume_token (parser);
        if (!strcmp ("depend", p))
  	{
! 	  clause = c_parser_omp_clause_depend (parser, NULL_TREE, c_loc);
  	  clause = c_finish_omp_clauses (clause, C_ORT_OMP);
  	  if (!clause)
  	    clause = error_mark_node;
*************** static tree c_parser_omp_taskloop (locat
*** 25417,25425 ****
  static tree
  c_parser_omp_master (location_t loc, c_parser *parser,
  		     char *p_name, omp_clause_mask mask, tree *cclauses,
! 		     bool *if_p)
  {
    tree block, clauses, ret;
  
    strcat (p_name, " master");
  
--- 25731,25745 ----
  static tree
  c_parser_omp_master (location_t loc, c_parser *parser,
  		     char *p_name, omp_clause_mask mask, tree *cclauses,
! 		     bool *if_p, location_t master_loc)
  {
    tree block, clauses, ret;
+   gcc_rich_location richloc (loc);
+   if (master_loc != UNKNOWN_LOCATION)
+     richloc.add_fixit_replace (master_loc, "masked");
+   warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 	      "%<master%> construct deprecated since OpenMP 5.1, use "
+ 	      "%<masked%>");
  
    strcat (p_name, " master");
  
*************** c_parser_omp_parallel (location_t loc, c
*** 25833,25838 ****
--- 26153,26159 ----
    else if (c_parser_next_token_is (parser, CPP_NAME))
      {
        const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+       location_t ploc = c_parser_peek_token (parser)->location;
        if (cclauses == NULL && strcmp (p, "masked") == 0)
  	{
  	  tree cclauses_buf[C_OMP_CLAUSE_SPLIT_COUNT];
*************** c_parser_omp_parallel (location_t loc, c
*** 25870,25879 ****
  	  c_parser_consume_token (parser);
  	  if (!flag_openmp)  /* flag_openmp_simd  */
  	    return c_parser_omp_master (loc, parser, p_name, mask, cclauses,
! 					if_p);
  	  block = c_begin_omp_parallel ();
  	  tree ret = c_parser_omp_master (loc, parser, p_name, mask, cclauses,
! 					  if_p);
  	  stmt = c_finish_omp_parallel (loc,
  					cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
  					block);
--- 26191,26200 ----
  	  c_parser_consume_token (parser);
  	  if (!flag_openmp)  /* flag_openmp_simd  */
  	    return c_parser_omp_master (loc, parser, p_name, mask, cclauses,
! 					if_p, ploc);
  	  block = c_begin_omp_parallel ();
  	  tree ret = c_parser_omp_master (loc, parser, p_name, mask, cclauses,
! 					  if_p, ploc);
  	  stmt = c_finish_omp_parallel (loc,
  					cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
  					block);
*************** c_parser_omp_target_exit_data (location_
*** 26905,26911 ****
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_MAP)		\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NOWAIT)	\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_PRIVATE)	\
! 	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_THREAD_LIMIT))
  
  static bool
  c_parser_omp_target (c_parser *parser, enum pragma_context context, bool *if_p)
--- 27226,27233 ----
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_MAP)		\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NOWAIT)	\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_PRIVATE)	\
! 	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_THREAD_LIMIT)	\
! 	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_USES_ALLOCATORS))
  
  static bool
  c_parser_omp_target (c_parser *parser, enum pragma_context context, bool *if_p)
*************** c_parser_omp_declare_target (c_parser *p
*** 28350,28355 ****
--- 28672,28682 ----
      }
    else
      {
+       warning_at (c_parser_peek_token (parser)->location,
+ 		  OPT_Wdeprecated_openmp,
+ 		  "use of %<omp declare target%> as a synonym for "
+ 		  "%<omp begin declare target%> has been deprecated since "
+ 		  "OpenMP 5.2");
        bool attr_syntax = parser->in_omp_attribute_pragma != NULL;
        c_parser_skip_to_pragma_eol (parser);
        c_omp_declare_target_attr attr = { attr_syntax, -1, 0 };
*************** c_parser_omp_metadirective (c_parser *pa
*** 30163,30168 ****
--- 30490,30503 ----
  
        location_t match_loc = c_parser_peek_token (parser)->location;
        const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
+       if (strcmp (p, "default") == 0)
+ 	{
+ 	  gcc_rich_location richloc (pragma_loc);
+ 	  richloc.add_fixit_replace (match_loc, "otherwise");
+ 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		      "%<default%> clause on metadirectives deprecated since "
+ 		      "OpenMP 5.2, use %<otherwise%>");
+ 	}
        c_parser_consume_token (parser);
        bool default_p
  	= strcmp (p, "default") == 0 || strcmp (p, "otherwise") == 0;
*************** c_parser_omp_construct (c_parser *parser
*** 30545,30551 ****
        break;
      case PRAGMA_OMP_MASTER:
        strcpy (p_name, "#pragma omp");
!       stmt = c_parser_omp_master (loc, parser, p_name, mask, NULL, if_p);
        break;
      case PRAGMA_OMP_PARALLEL:
        strcpy (p_name, "#pragma omp");
--- 30880,30887 ----
        break;
      case PRAGMA_OMP_MASTER:
        strcpy (p_name, "#pragma omp");
!       stmt = c_parser_omp_master (loc, parser, p_name, mask, NULL, if_p,
! 				  UNKNOWN_LOCATION);
        break;
      case PRAGMA_OMP_PARALLEL:
        strcpy (p_name, "#pragma omp");
*************** c_parser_transaction (c_parser *parser,
*** 30708,30714 ****
    if (flag_tm)
      stmt = c_finish_transaction (loc, stmt, this_in);
    else
!     error_at (loc, 
  	      keyword == RID_TRANSACTION_ATOMIC
  	      ? G_("%<__transaction_atomic%> without transactional memory "
  		   "support enabled")
--- 31044,31050 ----
    if (flag_tm)
      stmt = c_finish_transaction (loc, stmt, this_in);
    else
!     error_at (loc,
  	      keyword == RID_TRANSACTION_ATOMIC
  	      ? G_("%<__transaction_atomic%> without transactional memory "
  		   "support enabled")
diff -Nrcpad gcc-16-20251207/gcc/c/c-typeck.cc gcc-16-20251214/gcc/c/c-typeck.cc
*** gcc-16-20251207/gcc/c/c-typeck.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c/c-typeck.cc	Sun Dec 14 22:32:06 2025
*************** build_access_with_size_for_counted_by (l
*** 3187,3193 ****
    tree first_param = is_fam
  		     ? c_fully_fold (array_to_pointer_conversion (loc, ref),
  				     false, NULL)
! 		     : ref;
    tree second_param
      = c_fully_fold (counted_by_ref, false, NULL);
    tree third_param = build_int_cst (c_build_pointer_type (counted_by_type), 0);
--- 3187,3193 ----
    tree first_param = is_fam
  		     ? c_fully_fold (array_to_pointer_conversion (loc, ref),
  				     false, NULL)
! 		     : c_fully_fold (ref, false, NULL);
    tree second_param
      = c_fully_fold (counted_by_ref, false, NULL);
    tree third_param = build_int_cst (c_build_pointer_type (counted_by_type), 0);
*************** c_finish_omp_clauses (tree clauses, enum
*** 17259,17264 ****
--- 17259,17403 ----
  	      break;
  	    }
  	  gcc_unreachable ();
+ 
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
+ 	  t = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c);
+ 	  if (t == error_mark_node)
+ 	    {
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  if ((VAR_P (t) || TREE_CODE (t) == PARM_DECL)
+ 	      && (bitmap_bit_p (&generic_head, DECL_UID (t))
+ 		  || bitmap_bit_p (&map_head, DECL_UID (t))
+ 		  || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
+ 		  || bitmap_bit_p (&lastprivate_head, DECL_UID (t))))
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c),
+ 			"%qE appears more than once in data clauses", t);
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  else
+ 	    bitmap_set_bit (&generic_head, DECL_UID (t));
+ 	  if (TREE_CODE (TREE_TYPE (t)) != ENUMERAL_TYPE
+ 	      || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (TREE_TYPE (t))),
+ 			 "omp_allocator_handle_t") != 0)
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c),
+ 			"allocator %qE must be of %<omp_allocator_handle_t%> "
+ 			"type", t);
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  tree init;
+ 	  if (!DECL_P (t)
+ 	      || (TREE_CODE (t) == CONST_DECL
+ 		  && ((init = DECL_INITIAL(t)) == nullptr
+ 		      || TREE_CODE (init) != INTEGER_CST
+ 		      || ((wi::to_widest (init) < 0
+ 			   || wi::to_widest (init) > GOMP_OMP_PREDEF_ALLOC_MAX)
+ 			  && (wi::to_widest (init) < GOMP_OMPX_PREDEF_ALLOC_MIN
+ 			      || (wi::to_widest (init)
+ 				  > GOMP_OMPX_PREDEF_ALLOC_MAX))))))
+ 	    {
+ 	      remove = true;
+ 	      error_at (OMP_CLAUSE_LOCATION (c),
+ 			"allocator %qE must be either a variable or a "
+ 			"predefined allocator", t);
+ 	      break;
+ 	    }
+ 	  else if (TREE_CODE (t) == CONST_DECL)
+ 	    {
+ 	      /* omp_null_allocator is ignored and for predefined allocators,
+ 		 not special handling is required; thus, remove them removed. */
+ 	      remove = true;
+ 
+ 	      if (OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c)
+ 		  || OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c))
+ 		{
+ 		  error_at (OMP_CLAUSE_LOCATION (c),
+ 			    "modifiers cannot be used with predefined "
+ 			    "allocator %qE", t);
+ 		  break;
+ 		}
+ 	    }
+ 	  t = OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c);
+ 	  if (t == error_mark_node)
+ 	    {
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  if (t != NULL_TREE
+ 	      && ((TREE_CODE (t) != CONST_DECL && TREE_CODE (t) != INTEGER_CST)
+ 		  || TREE_CODE (TREE_TYPE (t)) != ENUMERAL_TYPE
+ 		  || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (TREE_TYPE (t))),
+ 			     "omp_memspace_handle_t") != 0))
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c), "memspace modifier %qE must be"
+ 			" constant enum of %<omp_memspace_handle_t%> type", t);
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  t = OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c);
+ 	  if (t == error_mark_node)
+ 	    {
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  if (t != NULL_TREE
+ 	      && t != error_mark_node
+ 	      && (DECL_EXTERNAL (t)
+ 		  || TREE_CODE (t) == PARM_DECL))
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c), "traits array %qE must be "
+ 			"defined in same scope as the construct on which the "
+ 			"clause appears", t);
+ 	      remove = true;
+ 	    }
+ 	  if (t != NULL_TREE)
+ 	    {
+ 	      bool type_err = false;
+ 
+ 	      if (TREE_CODE (TREE_TYPE (t)) != ARRAY_TYPE
+ 		  || DECL_SIZE (t) == NULL_TREE
+ 		  || !COMPLETE_TYPE_P (TREE_TYPE (t)))
+ 		type_err = true;
+ 	      else
+ 		{
+ 		  tree elem_t = TREE_TYPE (TREE_TYPE (t));
+ 		  if (TREE_CODE (elem_t) != RECORD_TYPE
+ 		      || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (elem_t)),
+ 				 "omp_alloctrait_t") != 0
+ 		      || !TYPE_READONLY (elem_t))
+ 		    type_err = true;
+ 		}
+ 	      if (type_err)
+ 		{
+ 		  if (t != error_mark_node)
+ 		    error_at (OMP_CLAUSE_LOCATION (c), "traits array %qE must "
+ 			      "be of %<const omp_alloctrait_t []%> type", t);
+ 		  else
+ 		    error_at (OMP_CLAUSE_LOCATION (c), "traits array must "
+ 			      "be of %<const omp_alloctrait_t []%> type");
+ 		  remove = true;
+ 		}
+ 	      else
+ 		{
+ 		  tree cst_val = decl_constant_value_1 (t, true);
+ 		  if (cst_val == t)
+ 		    {
+ 		      error_at (OMP_CLAUSE_LOCATION (c), "traits array must be "
+ 				"initialized with constants");
+ 
+ 		      remove = true;
+ 		    }
+ 		}
+ 	    }
+ 	  if (remove)
+ 	    break;
+ 	  pc = &OMP_CLAUSE_CHAIN (c);
+ 	  continue;
  	case OMP_CLAUSE_DEPEND:
  	  depend_clause = c;
  	  /* FALLTHRU */
diff -Nrcpad gcc-16-20251207/gcc/c-family/ChangeLog gcc-16-20251214/gcc/c-family/ChangeLog
*** gcc-16-20251207/gcc/c-family/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c-family/ChangeLog	Sun Dec 14 22:32:06 2025
***************
*** 1,3 ****
--- 1,17 ----
+ 2025-12-12  Chung-Lin Tang  <cltang@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 	    Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* c-omp.cc (c_omp_split_clauses): Hande uses_allocators.
+ 	* c-pragma.h (enum pragma_omp_clause): Add
+ 	PRAGMA_OMP_CLAUSE_USES_ALLOCATORS.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* c-cppbuiltin.cc (c_cpp_builtins): Bump _OPENMP version.
+ 	* c.opt (Wdeprecated-openmp): Add warning.
+ 	* c.opt.urls: Regenerated.
+ 
  2025-12-05  Tobias Burnus  <tburnus@baylibre.com>
  
  	* c-omp.cc (c_omp_split_clauses): Handle
diff -Nrcpad gcc-16-20251207/gcc/c-family/c-cppbuiltin.cc gcc-16-20251214/gcc/c-family/c-cppbuiltin.cc
*** gcc-16-20251207/gcc/c-family/c-cppbuiltin.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c-family/c-cppbuiltin.cc	Sun Dec 14 22:32:06 2025
*************** c_cpp_builtins (cpp_reader *pfile)
*** 1687,1693 ****
      cpp_define (pfile, "_OPENACC=201711");
  
    if (flag_openmp)
!     cpp_define (pfile, "_OPENMP=201511");
  
    for (i = 0; i < NUM_INT_N_ENTS; i ++)
      if (int_n_enabled_p[i])
--- 1687,1693 ----
      cpp_define (pfile, "_OPENACC=201711");
  
    if (flag_openmp)
!     cpp_define (pfile, "_OPENMP=202111");
  
    for (i = 0; i < NUM_INT_N_ENTS; i ++)
      if (int_n_enabled_p[i])
diff -Nrcpad gcc-16-20251207/gcc/c-family/c-omp.cc gcc-16-20251214/gcc/c-family/c-omp.cc
*** gcc-16-20251207/gcc/c-family/c-omp.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c-family/c-omp.cc	Sun Dec 14 22:32:06 2025
*************** c_omp_split_clauses (location_t loc, enu
*** 2182,2187 ****
--- 2182,2188 ----
  	case OMP_CLAUSE_IS_DEVICE_PTR:
  	case OMP_CLAUSE_HAS_DEVICE_ADDR:
  	case OMP_CLAUSE_MAP:
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
  	  s = C_OMP_CLAUSE_SPLIT_TARGET;
  	  break;
  	case OMP_CLAUSE_DOACROSS:
diff -Nrcpad gcc-16-20251207/gcc/c-family/c-pragma.h gcc-16-20251214/gcc/c-family/c-pragma.h
*** gcc-16-20251207/gcc/c-family/c-pragma.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c-family/c-pragma.h	Sun Dec 14 22:32:06 2025
*************** enum pragma_omp_clause {
*** 175,180 ****
--- 175,181 ----
    PRAGMA_OMP_CLAUSE_USE,
    PRAGMA_OMP_CLAUSE_USE_DEVICE_PTR,
    PRAGMA_OMP_CLAUSE_USE_DEVICE_ADDR,
+   PRAGMA_OMP_CLAUSE_USES_ALLOCATORS,
  
    /* Clauses for OpenACC.  */
    PRAGMA_OACC_CLAUSE_ASYNC,
diff -Nrcpad gcc-16-20251207/gcc/c-family/c.opt gcc-16-20251214/gcc/c-family/c.opt
*** gcc-16-20251207/gcc/c-family/c.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c-family/c.opt	Sun Dec 14 22:32:06 2025
*************** Wdeprecated-non-prototype
*** 685,690 ****
--- 685,694 ----
  C ObjC Var(warn_deprecated_non_prototype) Init(-1) Warning
  Warn about calls with arguments to functions declared without parameters.
  
+ Wdeprecated-openmp
+ C ObjC C++ ObjC++ Warning Var(warn_deprecated_openmp) Init(1)
+ Warn about deprecated OpenMP code.
+ 
  Wdeprecated-variadic-comma-omission
  C++ ObjC++ Var(warn_deprecated_variadic_comma_omission) Warning
  Warn about deprecated omission of comma before ... in varargs function declaration.
diff -Nrcpad gcc-16-20251207/gcc/c-family/c.opt.urls gcc-16-20251214/gcc/c-family/c.opt.urls
*** gcc-16-20251207/gcc/c-family/c.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/c-family/c.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/C_002b_002b-Dialect-Option
*** 322,327 ****
--- 322,330 ----
  Wdeprecated-non-prototype
  UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated-non-prototype)
  
+ Wdeprecated-openmp
+ UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated-openmp) LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wdeprecated-openmp)
+ 
  Wdeprecated-variadic-comma-omission
  UrlSuffix(gcc/C_002b_002b-Dialect-Options.html#index-Wdeprecated-variadic-comma-omission)
  
diff -Nrcpad gcc-16-20251207/gcc/cgraph.cc gcc-16-20251214/gcc/cgraph.cc
*** gcc-16-20251207/gcc/cgraph.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cgraph.cc	Sun Dec 14 22:32:06 2025
*************** cgraph_edge::redirect_callee (cgraph_nod
*** 1696,1703 ****
        old_ref->remove_reference ();
        ipa_ref *new_ref = caller->create_reference (n, IPA_REF_ADDR, call_stmt);
        new_ref->lto_stmt_uid = lto_stmt_uid;
!       if (!old_callee->referred_to_p ())
  	old_callee->address_taken = 0;
      }
  
    if (!inline_failed)
--- 1696,1707 ----
        old_ref->remove_reference ();
        ipa_ref *new_ref = caller->create_reference (n, IPA_REF_ADDR, call_stmt);
        new_ref->lto_stmt_uid = lto_stmt_uid;
!       /* If the last reference to OLD_CALLEE has been redirected, unset
! 	 address_taken.  old_ref is only used as a placeholder when looking for
! 	 a different reference.  */
!       if (!old_callee->iterate_referring (0, old_ref))
  	old_callee->address_taken = 0;
+       n->mark_address_taken ();
      }
  
    if (!inline_failed)
diff -Nrcpad gcc-16-20251207/gcc/cgraph.h gcc-16-20251214/gcc/cgraph.h
*** gcc-16-20251207/gcc/cgraph.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cgraph.h	Sun Dec 14 22:32:06 2025
*************** enum symbol_partitioning_class
*** 107,113 ****
  
  /* Base of all toplevel entries.
     Inherited by symtab_node and asm_node.  */
! struct GTY ((desc ("%h.type"), tag ("TOPLEVEL_BASE"))) toplevel_node {
    /* Constructor.  */
    explicit toplevel_node (toplevel_type t)
      : lto_file_data (NULL), order (-1), type (t)
--- 107,115 ----
  
  /* Base of all toplevel entries.
     Inherited by symtab_node and asm_node.  */
! struct GTY ((desc ("%h.type"), tag ("TOPLEVEL_BASE"),
! 	    chain_next("%h.next"),
! 	    chain_prev("%h.previous"))) toplevel_node {
    /* Constructor.  */
    explicit toplevel_node (toplevel_type t)
      : lto_file_data (NULL), order (-1), type (t)
*************** struct GTY ((desc ("%h.type"), tag ("TOP
*** 116,121 ****
--- 118,127 ----
    /* File stream where this node is being written to.  */
    struct lto_file_decl_data * lto_file_data;
  
+   /* Linked list of toplevel entries.  */
+   toplevel_node *next = nullptr;
+   toplevel_node *previous = nullptr;
+ 
    /* Ordering of all cgraph nodes.  */
    int order;
  
*************** struct GTY ((desc ("%h.type"), tag ("TOP
*** 125,132 ****
  
  /* Base of all entries in the symbol table.
     The symtab_node is inherited by cgraph and varpol nodes.  */
! struct GTY ((tag ("SYMTAB_SYMBOL"),
! 	    chain_next ("%h.next"), chain_prev ("%h.previous")))
    symtab_node: public toplevel_node
  {
  public:
--- 131,137 ----
  
  /* Base of all entries in the symbol table.
     The symtab_node is inherited by cgraph and varpol nodes.  */
! struct GTY ((tag ("SYMTAB_SYMBOL")))
    symtab_node: public toplevel_node
  {
  public:
*************** public:
*** 633,642 ****
    /* Declaration representing the symbol.  */
    tree decl;
  
-   /* Linked list of symbol table entries starting with symtab_nodes.  */
-   symtab_node *next;
-   symtab_node *previous;
- 
    /* Linked list of symbols with the same asm name.  There may be multiple
       entries for single symbol name during LTO, because symbols are renamed
       only after partitioning.
--- 638,643 ----
*************** private:
*** 2243,2252 ****
  
  struct GTY ((tag ("TOPLEVEL_ASM"))) asm_node: public toplevel_node {
    explicit asm_node (tree asm_str)
!     : toplevel_node (TOPLEVEL_ASM), next (NULL), asm_str (asm_str)
    {}
-   /* Next asm node.  */
-   asm_node *next;
    /* String for this asm node.  */
    tree asm_str;
  };
--- 2244,2251 ----
  
  struct GTY ((tag ("TOPLEVEL_ASM"))) asm_node: public toplevel_node {
    explicit asm_node (tree asm_str)
!     : toplevel_node (TOPLEVEL_ASM), asm_str (asm_str)
    {}
    /* String for this asm node.  */
    tree asm_str;
  };
*************** symtab_node::get_alias_target_tree ()
*** 2867,2875 ****
  inline symtab_node *
  symtab_node::next_defined_symbol (void)
  {
!   symtab_node *node1 = next;
  
!   for (; node1; node1 = node1->next)
      if (node1->definition)
        return node1;
  
--- 2866,2874 ----
  inline symtab_node *
  symtab_node::next_defined_symbol (void)
  {
!   symtab_node *node1 = safe_as_a<symtab_node *>(next);
  
!   for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
      if (node1->definition)
        return node1;
  
*************** symbol_table::unregister (symtab_node *n
*** 2997,3003 ****
    if (node->previous)
      node->previous->next = node->next;
    else
!     nodes = node->next;
  
    if (node->next)
      node->next->previous = node->previous;
--- 2996,3002 ----
    if (node->previous)
      node->previous->next = node->next;
    else
!     nodes = safe_as_a<symtab_node *>(node->next);
  
    if (node->next)
      node->next->previous = node->previous;
*************** symbol_table::first_symbol (void)
*** 3026,3032 ****
  
  /* Walk all symbols.  */
  #define FOR_EACH_SYMBOL(node) \
!    for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
  
  /* Return first static symbol with definition.  */
  inline symtab_node *
--- 3025,3032 ----
  
  /* Walk all symbols.  */
  #define FOR_EACH_SYMBOL(node) \
!    for ((node) = symtab->first_symbol (); (node); \
! 	(node) = safe_as_a<symtab_node *>((node)->next))
  
  /* Return first static symbol with definition.  */
  inline symtab_node *
*************** symbol_table::first_defined_symbol (void
*** 3034,3040 ****
  {
    symtab_node *node;
  
!   for (node = nodes; node; node = node->next)
      if (node->definition)
        return node;
  
--- 3034,3041 ----
  {
    symtab_node *node;
  
!   for (node = nodes; node;
!        node = safe_as_a<symtab_node *>(node->next))
      if (node->definition)
        return node;
  
*************** inline varpool_node *
*** 3051,3057 ****
  symbol_table::first_variable (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = node->next)
      if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
        return vnode;
    return NULL;
--- 3052,3058 ----
  symbol_table::first_variable (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
      if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
        return vnode;
    return NULL;
*************** symbol_table::first_variable (void)
*** 3061,3068 ****
  inline varpool_node *
  symbol_table::next_variable (varpool_node *node)
  {
!   symtab_node *node1 = node->next;
!   for (; node1; node1 = node1->next)
      if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
        return vnode1;
    return NULL;
--- 3062,3069 ----
  inline varpool_node *
  symbol_table::next_variable (varpool_node *node)
  {
!   symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
!   for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
      if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
        return vnode1;
    return NULL;
*************** inline varpool_node *
*** 3078,3084 ****
  symbol_table::first_static_initializer (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = node->next)
      {
        varpool_node *vnode = dyn_cast <varpool_node *> (node);
        if (vnode && DECL_INITIAL (node->decl))
--- 3079,3085 ----
  symbol_table::first_static_initializer (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
      {
        varpool_node *vnode = dyn_cast <varpool_node *> (node);
        if (vnode && DECL_INITIAL (node->decl))
*************** symbol_table::first_static_initializer (
*** 3091,3098 ****
  inline varpool_node *
  symbol_table::next_static_initializer (varpool_node *node)
  {
!   symtab_node *node1 = node->next;
!   for (; node1; node1 = node1->next)
      {
        varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
        if (vnode1 && DECL_INITIAL (node1->decl))
--- 3092,3099 ----
  inline varpool_node *
  symbol_table::next_static_initializer (varpool_node *node)
  {
!   symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
!   for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
      {
        varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
        if (vnode1 && DECL_INITIAL (node1->decl))
*************** inline varpool_node *
*** 3111,3117 ****
  symbol_table::first_defined_variable (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = node->next)
      {
        varpool_node *vnode = dyn_cast <varpool_node *> (node);
        if (vnode && vnode->definition)
--- 3112,3118 ----
  symbol_table::first_defined_variable (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
      {
        varpool_node *vnode = dyn_cast <varpool_node *> (node);
        if (vnode && vnode->definition)
*************** symbol_table::first_defined_variable (vo
*** 3124,3131 ****
  inline varpool_node *
  symbol_table::next_defined_variable (varpool_node *node)
  {
!   symtab_node *node1 = node->next;
!   for (; node1; node1 = node1->next)
      {
        varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
        if (vnode1 && vnode1->definition)
--- 3125,3132 ----
  inline varpool_node *
  symbol_table::next_defined_variable (varpool_node *node)
  {
!   symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
!   for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
      {
        varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
        if (vnode1 && vnode1->definition)
*************** inline cgraph_node *
*** 3143,3149 ****
  symbol_table::first_defined_function (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = node->next)
      {
        cgraph_node *cn = dyn_cast <cgraph_node *> (node);
        if (cn && cn->definition)
--- 3144,3150 ----
  symbol_table::first_defined_function (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
      {
        cgraph_node *cn = dyn_cast <cgraph_node *> (node);
        if (cn && cn->definition)
*************** symbol_table::first_defined_function (vo
*** 3156,3163 ****
  inline cgraph_node *
  symbol_table::next_defined_function (cgraph_node *node)
  {
!   symtab_node *node1 = node->next;
!   for (; node1; node1 = node1->next)
      {
        cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
        if (cn1 && cn1->definition)
--- 3157,3164 ----
  inline cgraph_node *
  symbol_table::next_defined_function (cgraph_node *node)
  {
!   symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
!   for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
      {
        cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
        if (cn1 && cn1->definition)
*************** inline cgraph_node *
*** 3176,3182 ****
  symbol_table::first_function (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = node->next)
      if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
        return cn;
    return NULL;
--- 3177,3183 ----
  symbol_table::first_function (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
      if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
        return cn;
    return NULL;
*************** symbol_table::first_function (void)
*** 3186,3193 ****
  inline cgraph_node *
  symbol_table::next_function (cgraph_node *node)
  {
!   symtab_node *node1 = node->next;
!   for (; node1; node1 = node1->next)
      if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
        return cn1;
    return NULL;
--- 3187,3194 ----
  inline cgraph_node *
  symbol_table::next_function (cgraph_node *node)
  {
!   symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
!   for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
      if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
        return cn1;
    return NULL;
*************** inline cgraph_node *
*** 3198,3204 ****
  symbol_table::first_function_with_gimple_body (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = node->next)
      {
        cgraph_node *cn = dyn_cast <cgraph_node *> (node);
        if (cn && cn->has_gimple_body_p ())
--- 3199,3205 ----
  symbol_table::first_function_with_gimple_body (void)
  {
    symtab_node *node;
!   for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
      {
        cgraph_node *cn = dyn_cast <cgraph_node *> (node);
        if (cn && cn->has_gimple_body_p ())
*************** symbol_table::first_function_with_gimple
*** 3211,3218 ****
  inline cgraph_node *
  symbol_table::next_function_with_gimple_body (cgraph_node *node)
  {
!   symtab_node *node1 = node->next;
!   for (; node1; node1 = node1->next)
      {
        cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
        if (cn1 && cn1->has_gimple_body_p ())
--- 3212,3219 ----
  inline cgraph_node *
  symbol_table::next_function_with_gimple_body (cgraph_node *node)
  {
!   symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
!   for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
      {
        cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
        if (cn1 && cn1->has_gimple_body_p ())
diff -Nrcpad gcc-16-20251207/gcc/cgraphclones.cc gcc-16-20251214/gcc/cgraphclones.cc
*** gcc-16-20251207/gcc/cgraphclones.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cgraphclones.cc	Sun Dec 14 22:32:06 2025
*************** set_new_clone_decl_and_node_flags (cgrap
*** 176,182 ****
    DECL_IS_REPLACEABLE_OPERATOR (new_node->decl) = 0;
  
    new_node->externally_visible = 0;
!   new_node->local = 1;
    new_node->lowered = true;
    new_node->semantic_interposition = 0;
  }
--- 176,184 ----
    DECL_IS_REPLACEABLE_OPERATOR (new_node->decl) = 0;
  
    new_node->externally_visible = 0;
!   /* Clones of callbacks might have their address taken, and thus cannot be
!      local.  */
!   new_node->local = !new_node->address_taken;
    new_node->lowered = true;
    new_node->semantic_interposition = 0;
  }
diff -Nrcpad gcc-16-20251207/gcc/cgraphunit.cc gcc-16-20251214/gcc/cgraphunit.cc
*** gcc-16-20251207/gcc/cgraphunit.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cgraphunit.cc	Sun Dec 14 22:32:06 2025
*************** analyze_functions (bool first_time)
*** 1210,1217 ****
  
        /* First identify the trivially needed symbols.  */
        for (node = symtab->first_symbol ();
! 	   node != first_analyzed
! 	   && node != first_analyzed_var; node = node->next)
  	{
  	  /* Convert COMDAT group designators to IDENTIFIER_NODEs.  */
  	  node->get_comdat_group_id ();
--- 1210,1217 ----
  
        /* First identify the trivially needed symbols.  */
        for (node = symtab->first_symbol ();
! 	   node != first_analyzed && node != first_analyzed_var;
! 	   node = safe_as_a<symtab_node *>(node->next))
  	{
  	  /* Convert COMDAT group designators to IDENTIFIER_NODEs.  */
  	  node->get_comdat_group_id ();
*************** analyze_functions (bool first_time)
*** 1373,1379 ****
         node != first_handled
         && node != first_handled_var; node = next)
      {
!       next = node->next;
        /* For symbols declared locally we clear TREE_READONLY when emitting
  	 the constructor (if one is needed).  For external declarations we can
  	 not safely assume that the type is readonly because we may be called
--- 1373,1379 ----
         node != first_handled
         && node != first_handled_var; node = next)
      {
!       next = safe_as_a<symtab_node *>(node->next);
        /* For symbols declared locally we clear TREE_READONLY when emitting
  	 the constructor (if one is needed).  For external declarations we can
  	 not safely assume that the type is readonly because we may be called
*************** analyze_functions (bool first_time)
*** 1428,1434 ****
  	}
        node->aux = NULL;
      }
!   for (;node; node = node->next)
      node->aux = NULL;
    first_analyzed = symtab->first_function ();
    first_analyzed_var = symtab->first_variable ();
--- 1428,1434 ----
  	}
        node->aux = NULL;
      }
!   for (;node; node = safe_as_a<symtab_node *>(node->next))
      node->aux = NULL;
    first_analyzed = symtab->first_function ();
    first_analyzed_var = symtab->first_variable ();
*************** output_in_order (void)
*** 2203,2209 ****
  	&& !DECL_HAS_VALUE_EXPR_P (vnode->decl))
        nodes.safe_push (cgraph_order_sort (vnode));
  
!   for (anode = symtab->first_asm_symbol (); anode; anode = anode->next)
      nodes.safe_push (cgraph_order_sort (anode));
  
    /* Sort nodes by order.  */
--- 2203,2210 ----
  	&& !DECL_HAS_VALUE_EXPR_P (vnode->decl))
        nodes.safe_push (cgraph_order_sort (vnode));
  
!   for (anode = symtab->first_asm_symbol (); anode;
!        anode = safe_as_a<asm_node*>(anode->next))
      nodes.safe_push (cgraph_order_sort (anode));
  
    /* Sort nodes by order.  */
diff -Nrcpad gcc-16-20251207/gcc/cobol/ChangeLog gcc-16-20251214/gcc/cobol/ChangeLog
*** gcc-16-20251207/gcc/cobol/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cobol/ChangeLog	Sun Dec 14 22:32:06 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* util.cc (class temp_loc_t): Fix comment typo, paramters
+ 	-> parameters.
+ 	* lexio.cc (valid_sequence_area): Fix comment typo, begining
+ 	-> beginning.
+ 
  2025-12-03  Jakub Jelinek  <jakub@redhat.com>
  
  	* lang.opt: Make sure all option descriptions are terminated with
diff -Nrcpad gcc-16-20251207/gcc/cobol/lexio.cc gcc-16-20251214/gcc/cobol/lexio.cc
*** gcc-16-20251207/gcc/cobol/lexio.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cobol/lexio.cc	Sun Dec 14 22:32:06 2025
*************** cdftext::map_file( int fd ) {
*** 1682,1690 ****
  bool lexio_dialect_mf();
  
  /*
!  * A valid sequence area is 6 digits or blanks at the begining of the line that
!  * contains PROGRAM-ID. Return NULL if no valid sequence area, else return
!  * pointer to BOL.
   */
  static const char *
  valid_sequence_area( const char *data, const char *eodata ) {
--- 1682,1690 ----
  bool lexio_dialect_mf();
  
  /*
!  * A valid sequence area is 6 digits or blanks at the beginning of the line
!  * that contains PROGRAM-ID. Return NULL if no valid sequence area, else
!  * return pointer to BOL.
   */
  static const char *
  valid_sequence_area( const char *data, const char *eodata ) {
diff -Nrcpad gcc-16-20251207/gcc/cobol/util.cc gcc-16-20251214/gcc/cobol/util.cc
*** gcc-16-20251207/gcc/cobol/util.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cobol/util.cc	Sun Dec 14 22:32:06 2025
*************** class temp_loc_t {
*** 2288,2294 ****
   * this is where we are.
   *
   * Because we can't reliably instantiate it as a forward-declared template
!  * function, and because the paramters are variadic, we can't use a template
   * function or call one.  So, a macro.
   */
  
--- 2288,2294 ----
   * this is where we are.
   *
   * Because we can't reliably instantiate it as a forward-declared template
!  * function, and because the parameters are variadic, we can't use a template
   * function or call one.  So, a macro.
   */
  
diff -Nrcpad gcc-16-20251207/gcc/common.opt.urls gcc-16-20251214/gcc/common.opt.urls
*** gcc-16-20251207/gcc/common.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/common.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/Directory-Options.html#ind
*** 14,20 ****
  ;   duplicate: 'gcc/Overall-Options.html#index-E'
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
  
  N
  UrlSuffix(gcc/Link-Options.html#index-N)
--- 14,20 ----
  ;   duplicate: 'gcc/Overall-Options.html#index-E'
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-L)
  
  N
  UrlSuffix(gcc/Link-Options.html#index-N)
diff -Nrcpad gcc-16-20251207/gcc/config/aarch64/aarch64-cores.def gcc-16-20251214/gcc/config/aarch64/aarch64-cores.def
*** gcc-16-20251207/gcc/config/aarch64/aarch64-cores.def	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/aarch64/aarch64-cores.def	Sun Dec 14 22:32:06 2025
*************** AARCH64_CORE("grace", grace, cortexa57,
*** 229,234 ****
--- 229,239 ----
  AARCH64_CORE("neoverse-v3", neoversev3, cortexa57, V9_2A, (SVE2_BITPERM, RNG, LS64, MEMTAG, PROFILE), neoversev3, 0x41, 0xd84, -1)
  AARCH64_CORE("neoverse-v3ae", neoversev3ae, cortexa57, V9_2A, (SVE2_BITPERM, RNG, LS64, MEMTAG, PROFILE), neoversev3ae, 0x41, 0xd83, -1)
  
+ AARCH64_CORE("c1-nano", c1nano, cortexa53, V9_3A, (MEMTAG, SVE2_BITPERM, F16FML, SME2, RCPC3), cortexa53, 0x41, 0xd8a, -1)
+ AARCH64_CORE("c1-pro", c1pro, cortexa57, V9_3A, (MEMTAG, SVE2_BITPERM, F16FML, PROFILE, SME2, RCPC3), neoversen3, 0x41, 0xd8b, -1)
+ AARCH64_CORE("c1-premium", c1premium, cortexa57, V9_3A, (MEMTAG, SVE2_BITPERM, F16FML, PROFILE, SME2, RCPC3), neoversev3, 0x41, 0xd90, -1)
+ AARCH64_CORE("c1-ultra", c1ultra, cortexa57, V9_3A, (MEMTAG, SVE2_BITPERM, F16FML, PROFILE, SME2, RCPC3), cortexx925, 0x41, 0xd8c, -1)
+ 
  AARCH64_CORE("demeter", demeter, cortexa57, V9A, (I8MM, BF16, SVE2_BITPERM, RNG, MEMTAG, PROFILE), neoversev2, 0x41, 0xd4f, -1)
  
  /* NVIDIA ('N') cores. */
diff -Nrcpad gcc-16-20251207/gcc/config/aarch64/aarch64-simd.md gcc-16-20251214/gcc/config/aarch64/aarch64-simd.md
*** gcc-16-20251207/gcc/config/aarch64/aarch64-simd.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/aarch64/aarch64-simd.md	Sun Dec 14 22:32:06 2025
***************
*** 3544,3553 ****
        rtx reduc = gen_lowpart (V4SImode, tmp);
        rtx res = gen_reg_rtx (V4SImode);
        emit_insn (gen_aarch64_uminpv4si (res, reduc, reduc));
!       emit_move_insn (tmp, gen_lowpart (<MODE>mode, res));
      }
!   rtx val = gen_reg_rtx (DImode);
!   emit_move_insn (val, gen_lowpart (DImode, tmp));
    rtx cc_reg = aarch64_gen_compare_reg (EQ, val, constm1_rtx);
    rtx cmp = gen_rtx_fmt_ee (EQ, SImode, cc_reg, constm1_rtx);
    rtx tmp2 = gen_reg_rtx (SImode);
--- 3544,3553 ----
        rtx reduc = gen_lowpart (V4SImode, tmp);
        rtx res = gen_reg_rtx (V4SImode);
        emit_insn (gen_aarch64_uminpv4si (res, reduc, reduc));
!       tmp = gen_lowpart (<MODE>mode, res);
      }
! 
!   rtx val = force_lowpart_subreg (DImode, tmp, <MODE>mode);
    rtx cc_reg = aarch64_gen_compare_reg (EQ, val, constm1_rtx);
    rtx cmp = gen_rtx_fmt_ee (EQ, SImode, cc_reg, constm1_rtx);
    rtx tmp2 = gen_reg_rtx (SImode);
***************
*** 3607,3616 ****
        rtx reduc = gen_lowpart (V4SImode, tmp);
        rtx res = gen_reg_rtx (V4SImode);
        emit_insn (gen_aarch64_umaxpv4si (res, reduc, reduc));
!       emit_move_insn (tmp, gen_lowpart (<MODE>mode, res));
      }
!   rtx val = gen_reg_rtx (DImode);
!   emit_move_insn (val, gen_lowpart (DImode, tmp));
    rtx cc_reg = aarch64_gen_compare_reg (NE, val, const0_rtx);
    rtx cmp = gen_rtx_fmt_ee (NE, SImode, cc_reg, const0_rtx);
    rtx tmp2 = gen_reg_rtx (SImode);
--- 3607,3616 ----
        rtx reduc = gen_lowpart (V4SImode, tmp);
        rtx res = gen_reg_rtx (V4SImode);
        emit_insn (gen_aarch64_umaxpv4si (res, reduc, reduc));
!       tmp = gen_lowpart (<MODE>mode, res);
      }
! 
!   rtx val = force_lowpart_subreg (DImode, tmp, <MODE>mode);
    rtx cc_reg = aarch64_gen_compare_reg (NE, val, const0_rtx);
    rtx cmp = gen_rtx_fmt_ee (NE, SImode, cc_reg, const0_rtx);
    rtx tmp2 = gen_reg_rtx (SImode);
diff -Nrcpad gcc-16-20251207/gcc/config/aarch64/aarch64-tune.md gcc-16-20251214/gcc/config/aarch64/aarch64-tune.md
*** gcc-16-20251207/gcc/config/aarch64/aarch64-tune.md	Sun Dec  7 22:32:20 2025
--- gcc-16-20251214/gcc/config/aarch64/aarch64-tune.md	Sun Dec 14 22:32:20 2025
***************
*** 1,5 ****
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,ampere1c,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,applem3_1,applem3_2,applem4_0,applem4_1,applem4_2,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,demeter,olympus,gb10,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- 1,5 ----
  ;; -*- buffer-read-only: t -*-
  ;; Generated automatically by gentune.sh from aarch64-cores.def
  (define_attr "tune"
! 	"cortexa34,cortexa35,cortexa53,cortexa57,cortexa72,cortexa73,thunderx,thunderxt88,thunderxt88p1,octeontx,octeontxt81,octeontxt83,thunderxt81,thunderxt83,ampere1,ampere1a,ampere1b,ampere1c,emag,xgene1,falkor,qdf24xx,exynosm1,phecda,thunderx2t99p1,vulcan,thunderx2t99,cortexa55,cortexa75,cortexa76,cortexa76ae,cortexa77,cortexa78,cortexa78ae,cortexa78c,cortexa65,cortexa65ae,cortexx1,cortexx1c,neoversen1,ares,neoversee1,octeontx2,octeontx2t98,octeontx2t96,octeontx2t93,octeontx2f95,octeontx2f95n,octeontx2f95mm,a64fx,fujitsu_monaka,tsv110,thunderx3t110,neoversev1,zeus,neoverse512tvb,saphira,oryon1,cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35,cortexa73cortexa53,cortexa75cortexa55,cortexa76cortexa55,cortexr82,cortexr82ae,applea12,applem1_0,applem1_1,applem1_2,applem1_3,applem2_0,applem2_1,applem2_2,applem2_3,applem3_0,applem3_1,applem3_2,applem4_0,applem4_1,applem4_2,cortexa510,cortexa520,cortexa520ae,cortexa710,cortexa715,cortexa720,cortexa720ae,cortexa725,cortexx2,cortexx3,cortexx4,cortexx925,neoversen2,cobalt100,neoversen3,neoversev2,grace,neoversev3,neoversev3ae,c1nano,c1pro,c1premium,c1ultra,demeter,olympus,gb10,generic,generic_armv8_a,generic_armv9_a"
  	(const (symbol_ref "((enum attr_tune) aarch64_tune)")))
diff -Nrcpad gcc-16-20251207/gcc/config/aarch64/aarch64.cc gcc-16-20251214/gcc/config/aarch64/aarch64.cc
*** gcc-16-20251207/gcc/config/aarch64/aarch64.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/aarch64/aarch64.cc	Sun Dec 14 22:32:06 2025
*************** aarch64_merge_string_arguments (tree arg
*** 736,741 ****
--- 736,768 ----
    return !use_old_attr;
  }
  
+ /* Get the PCS for a strcut function and store the result to avoid needing to
+    do too many calls to fndecl_abi which can be expensive.  */
+ 
+ static arm_pcs
+ aarch64_function_abi (struct function *fun)
+ {
+   gcc_assert (fun);
+   if (fun->machine->pcs == ARM_PCS_UNKNOWN)
+     fun->machine->pcs = arm_pcs (fndecl_abi (fun->decl).id ());
+ 
+   return fun->machine->pcs;
+ }
+ 
+ /* Get the PCS for a decl and store the result to avoid needing to do
+    too many calls to fndecl_abi which can be expensive.  */
+ 
+ static arm_pcs
+ aarch64_fndecl_abi (tree fn)
+ {
+   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
+   struct function *fun = DECL_STRUCT_FUNCTION (fn);
+   if (!fun)
+     return arm_pcs (fndecl_abi (fn).id ());
+ 
+   return aarch64_function_abi (fun);
+ }
+ 
  /* Check whether an 'aarch64_vector_pcs' attribute is valid.  */
  
  static tree
*************** aarch64_preferred_else_value (unsigned,
*** 2180,2185 ****
--- 2207,2274 ----
    return nops == 3 ? ops[2] : ops[0];
  }
  
+ /* Implement TARGET_INSTRUCTION_SELECTION.  The target hook is used to
+    change generic sequences to a form AArch64 has an easier time expanding
+    instructions for.  It's not supposed to be used for generic rewriting that
+    all targets would benefit from.  */
+ 
+ static bool
+ aarch64_instruction_selection (function * /* fun */, gimple_stmt_iterator *gsi)
+ {
+   auto stmt = gsi_stmt (*gsi);
+   gassign *assign = dyn_cast<gassign *> (stmt);
+ 
+   if (!assign)
+     return false;
+ 
+   /* Convert
+ 	p == q ? s1 : s2;
+      to
+ 	p != q ? s2 : s1;
+      where p and q are svbool_t expr.  Due to the absence of predicate
+      comparison instructions, we use bitwise xor for checking inequality.
+      Transforming == to != avoids an extra bitwise inversion to the xor.  */
+   if (gimple_assign_rhs_code (assign) != VEC_COND_EXPR)
+     return false;
+ 
+   tree lhs = gimple_assign_lhs (assign);
+   tree rhs1 = gimple_assign_rhs1 (assign);
+   tree rhs2 = gimple_assign_rhs2 (assign);
+   tree rhs3 = gimple_assign_rhs3 (assign);
+ 
+   if (TREE_CODE (rhs1) != SSA_NAME || !VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (rhs1)))
+     return false;
+ 
+   gassign *da = dyn_cast<gassign *> (SSA_NAME_DEF_STMT (rhs1));
+ 
+   if (!da)
+     return false;
+ 
+   if (gimple_assign_rhs_code (da) != EQ_EXPR)
+     return false;
+ 
+   tree eqa = gimple_assign_rhs1 (da);
+   tree eqb = gimple_assign_rhs2 (da);
+ 
+   if (!VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (eqa))
+       || !VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (eqb)))
+     return false;
+ 
+   tree ne_expr_var = create_tmp_var (TREE_TYPE (rhs1));
+   gimple *ne_stmt = gimple_build_assign (ne_expr_var, NE_EXPR, eqa, eqb);
+   gsi_safe_insert_before (gsi, ne_stmt);
+ 
+   gimple *g = gimple_build_call_internal (IFN_VCOND_MASK, 3,
+ 					  ne_expr_var, rhs3, rhs2);
+   if (!g)
+     return false;
+ 
+   gimple_set_lhs (g, lhs);
+   gsi_replace (gsi, g, false);
+ 
+   return true;
+ }
+ 
  /* Implement TARGET_HARD_REGNO_NREGS.  */
  
  static unsigned int
*************** function_arg_preserve_none_regno_p (unsi
*** 7996,8003 ****
  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)
      {
--- 8085,8091 ----
  bool
  aarch64_function_arg_regno_p (unsigned regno)
  {
!   enum arm_pcs pcs = cfun ? aarch64_function_abi (cfun) : ARM_PCS_AAPCS64;
  
    switch (pcs)
      {
*************** aarch64_output_mi_thunk (FILE *file, tre
*** 10865,10871 ****
    funexp = XEXP (DECL_RTL (function), 0);
    funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
    auto isa_mode = aarch64_fntype_isa_mode (TREE_TYPE (function));
!   auto pcs_variant = arm_pcs (fndecl_abi (function).id ());
    bool ir = lookup_attribute ("indirect_return",
  			      TYPE_ATTRIBUTES (TREE_TYPE (function)));
    rtx callee_abi = aarch64_gen_callee_cookie (isa_mode, pcs_variant, ir);
--- 10953,10959 ----
    funexp = XEXP (DECL_RTL (function), 0);
    funexp = gen_rtx_MEM (FUNCTION_MODE, funexp);
    auto isa_mode = aarch64_fntype_isa_mode (TREE_TYPE (function));
!   auto pcs_variant = aarch64_fndecl_abi (function);
    bool ir = lookup_attribute ("indirect_return",
  			      TYPE_ATTRIBUTES (TREE_TYPE (function)));
    rtx callee_abi = aarch64_gen_callee_cookie (isa_mode, pcs_variant, ir);
*************** aarch64_init_machine_status (void)
*** 19858,19863 ****
--- 19946,19952 ----
  {
    struct machine_function *machine;
    machine = ggc_cleared_alloc<machine_function> ();
+   machine->pcs = ARM_PCS_UNKNOWN;
    return machine;
  }
  
*************** aarch64_set_current_function (tree fndec
*** 20014,20019 ****
--- 20103,20113 ----
  
    aarch64_previous_fndecl = fndecl;
  
+   /* Initialize the PCS value to UNKNOWN.  */
+   if (fndecl && TREE_CODE (fndecl) == FUNCTION_DECL)
+     if (function *fn = DECL_STRUCT_FUNCTION (fndecl))
+       fn->machine->pcs = ARM_PCS_UNKNOWN;
+ 
    /* First set the target options.  */
    cl_target_option_restore (&global_options, &global_options_set,
  			    TREE_TARGET_OPTION (new_tree));
*************** static bool
*** 25821,25827 ****
  aarch64_is_variant_pcs (tree fndecl)
  {
    /* 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;
  
--- 25915,25921 ----
  aarch64_is_variant_pcs (tree fndecl)
  {
    /* Check for ABIs that preserve more registers than usual.  */
!   arm_pcs pcs = aarch64_fndecl_abi (fndecl);
    if (pcs == ARM_PCS_SIMD || pcs == ARM_PCS_SVE || pcs == ARM_PCS_PRESERVE_NONE)
      return true;
  
*************** aarch64_libgcc_floating_mode_supported_p
*** 33109,33114 ****
--- 33203,33211 ----
  #define TARGET_PREFERRED_ELSE_VALUE \
    aarch64_preferred_else_value
  
+ #undef TARGET_INSTRUCTION_SELECTION
+ #define TARGET_INSTRUCTION_SELECTION aarch64_instruction_selection
+ 
  #undef TARGET_INIT_LIBFUNCS
  #define TARGET_INIT_LIBFUNCS aarch64_init_libfuncs
  
diff -Nrcpad gcc-16-20251207/gcc/config/aarch64/aarch64.h gcc-16-20251214/gcc/config/aarch64/aarch64.h
*** gcc-16-20251207/gcc/config/aarch64/aarch64.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/aarch64/aarch64.h	Sun Dec 14 22:32:06 2025
*************** extern enum aarch64_cpu aarch64_tune;
*** 989,994 ****
--- 989,1013 ----
  
  #define DEFAULT_PCC_STRUCT_RETURN 0
  
+ /* The set of available Procedure Call Stardards.  */
+ 
+ enum arm_pcs
+ {
+   ARM_PCS_AAPCS64,		/* Base standard AAPCS for 64 bit.  */
+   ARM_PCS_SIMD,			/* For aarch64_vector_pcs functions.  */
+   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_MS_VARIADIC,		/* PCS variant with no call-preserved
+ 				   differently.
+ 				   All composites are treated alike.
+ 				   SIMD and floating-point registers
+ 				   aren't used.  */
+   ARM_PCS_UNKNOWN
+ };
+ 
  #if defined(HAVE_POLY_INT_H) && defined(GCC_VEC_H)
  struct GTY (()) aarch64_frame
  {
*************** typedef struct GTY (()) machine_function
*** 1159,1164 ****
--- 1178,1186 ----
  
    /* During SEH output, this is non-null.  */
    struct seh_frame_state * GTY ((skip (""))) seh;
+ 
+   /* The Procedure Call Standard for the function.  */
+   enum arm_pcs pcs;
  } machine_function;
  #endif
  #endif
*************** enum aarch64_abi_type
*** 1176,1201 ****
  
  #define TARGET_ILP32	(aarch64_abi & AARCH64_ABI_ILP32)
  
- enum arm_pcs
- {
-   ARM_PCS_AAPCS64,		/* Base standard AAPCS for 64 bit.  */
-   ARM_PCS_SIMD,			/* For aarch64_vector_pcs functions.  */
-   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_MS_VARIADIC,	/* PCS variant with no call-preserved
- 			   differently.
- 			   All composites are treated alike.
- 			   SIMD and floating-point registers
- 			   aren't used.  */
-   ARM_PCS_UNKNOWN
- };
- 
- 
- 
- 
  /* We can't use machine_mode inside a generator file because it
     hasn't been created yet; we shouldn't be using any code that
     needs the real definition though, so this ought to be safe.  */
--- 1198,1203 ----
diff -Nrcpad gcc-16-20251207/gcc/config/alpha/alpha.opt.urls gcc-16-20251214/gcc/config/alpha/alpha.opt.urls
*** gcc-16-20251207/gcc/config/alpha/alpha.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/alpha/alpha.opt.urls	Sun Dec 14 22:32:06 2025
*************** mcpu=
*** 69,75 ****
  UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcpu-4)
  
  mtune=
! UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtune-6)
  
  mfp-rounding-mode=
  UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-rounding-mode)
--- 69,75 ----
  UrlSuffix(gcc/DEC-Alpha-Options.html#index-mcpu-4)
  
  mtune=
! UrlSuffix(gcc/DEC-Alpha-Options.html#index-mtune-5)
  
  mfp-rounding-mode=
  UrlSuffix(gcc/DEC-Alpha-Options.html#index-mfp-rounding-mode)
diff -Nrcpad gcc-16-20251207/gcc/config/arc/arc.cc gcc-16-20251214/gcc/config/arc/arc.cc
*** gcc-16-20251207/gcc/config/arc/arc.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/arc/arc.cc	Sun Dec 14 22:32:06 2025
*************** hwloop_optimize (hwloop_info loop)
*** 8278,8284 ****
    /* Insert the loop end label before the last instruction of the
       loop.  */
    emit_label_after (end_label, loop->last_insn);
!   /* Make sure we mark the begining and end label as used.  */
    LABEL_NUSES (loop->end_label)++;
    LABEL_NUSES (loop->start_label)++;
  
--- 8278,8284 ----
    /* Insert the loop end label before the last instruction of the
       loop.  */
    emit_label_after (end_label, loop->last_insn);
!   /* Make sure we mark the beginning and end label as used.  */
    LABEL_NUSES (loop->end_label)++;
    LABEL_NUSES (loop->start_label)++;
  
diff -Nrcpad gcc-16-20251207/gcc/config/arc/arc.opt gcc-16-20251214/gcc/config/arc/arc.opt
*** gcc-16-20251207/gcc/config/arc/arc.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/arc/arc.opt	Sun Dec 14 22:32:06 2025
***************
*** 21,32 ****
  HeaderInclude
  config/arc/arc-opts.h
  
  mbig-endian
! Target RejectNegative Mask(BIG_ENDIAN)
  Compile code for big endian mode.
  
  mlittle-endian
! Target RejectNegative InverseMask(BIG_ENDIAN)
  Compile code for little endian mode.  This is the default.
  
  mno-cond-exec
--- 21,34 ----
  HeaderInclude
  config/arc/arc-opts.h
  
+ ; Formerly documented as deprecated; use configure options instead.
  mbig-endian
! Target RejectNegative Mask(BIG_ENDIAN) Undocumented
  Compile code for big endian mode.
  
+ ; Formerly documented as deprecated; use configure options instead.
  mlittle-endian
! Target RejectNegative InverseMask(BIG_ENDIAN) Undocumented
  Compile code for little endian mode.  This is the default.
  
  mno-cond-exec
*************** Target Mask(CODE_DENSITY)
*** 136,142 ****
  Enable code density instructions for ARCv2.
  
  mmixed-code
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  ; We use an explict definition for the negative form because that is the
--- 138,144 ----
  Enable code density instructions for ARCv2.
  
  mmixed-code
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  ; We use an explict definition for the negative form because that is the
*************** Target Mask(MUL64_SET)
*** 166,172 ****
  Generate mul64 and mulu64 instructions.
  
  mno-mpy
! Target Mask(NOMPY_SET) Warn(%qs is deprecated)
  Do not generate mpy instructions for ARC700.
  
  mea
--- 168,174 ----
  Generate mul64 and mulu64 instructions.
  
  mno-mpy
! Target Mask(NOMPY_SET) Undocumented Warn(%qs is deprecated)
  Do not generate mpy instructions for ARC700.
  
  mea
*************** mlong-calls
*** 181,189 ****
  Target Mask(LONG_CALLS_SET)
  Generate call insns as register indirect calls.
  
! mno-brcc
! Target Mask(NO_BRCC_SET)
! Do no generate BRcc instructions in arc_reorg.
  
  msdata
  Target InverseMask(NO_SDATA_SET)
--- 183,191 ----
  Target Mask(LONG_CALLS_SET)
  Generate call insns as register indirect calls.
  
! mbrcc
! Target InverseMask(NO_BRCC_SET)
! Generate BRcc instructions in arc_reorg.
  
  msdata
  Target InverseMask(NO_SDATA_SET)
*************** mspfp-fast
*** 205,212 ****
  Target Mask(SPFP_FAST_SET)
  FPX: Generate Single Precision FPX (fast) instructions.
  
  margonaut
! Target Mask(ARGONAUT_SET)
  FPX: Enable Argonaut ARC CPU Double Precision Floating Point extensions.
  
  mdpfp
--- 207,215 ----
  Target Mask(SPFP_FAST_SET)
  FPX: Generate Single Precision FPX (fast) instructions.
  
+ ; Formerly documented as deprecated, "obsolete FPX"
  margonaut
! Target Mask(ARGONAUT_SET) Undocumented
  FPX: Enable Argonaut ARC CPU Double Precision Floating Point extensions.
  
  mdpfp
*************** mdpfp-fast
*** 221,229 ****
  Target Mask(DPFP_FAST_SET)
  FPX: Generate Double Precision FPX (fast) instructions.
  
! mno-dpfp-lrsr
! Target Mask(DPFP_DISABLE_LRSR)
! Disable LR and SR instructions from using FPX extension aux registers.
  
  msimd
  Target Mask(SIMD_SET)
--- 224,232 ----
  Target Mask(DPFP_FAST_SET)
  FPX: Generate Double Precision FPX (fast) instructions.
  
! mdpfp-lrsr
! Target InverseMask(DPFP_DISABLE_LRSR)
! Enable LR and SR instructions to use FPX extension aux registers.
  
  msimd
  Target Mask(SIMD_SET)
*************** Target Mask(MULMAC_32BY16_SET)
*** 292,298 ****
  Generate 32x16 multiply and mac instructions.
  
  munalign-prob-threshold=
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  mmedium-calls
--- 295,301 ----
  Generate 32x16 multiply and mac instructions.
  
  munalign-prob-threshold=
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  mmedium-calls
*************** Target Var(TARGET_MEDIUM_CALLS) Init(TAR
*** 300,319 ****
  Don't use less than 25 bit addressing range for calls.
  
  mannotate-align
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  malign-call
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  mRcq
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  
  mRcw
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  
--- 303,322 ----
  Don't use less than 25 bit addressing range for calls.
  
  mannotate-align
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  malign-call
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  mRcq
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  
  mRcw
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  
*************** Target Var(TARGET_EARLY_CBRANCHSI)
*** 322,328 ****
  Enable pre-reload use of cbranchsi pattern.
  
  mbbit-peephole
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  mcase-vector-pcrel
--- 325,331 ----
  Enable pre-reload use of cbranchsi pattern.
  
  mbbit-peephole
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  mcase-vector-pcrel
*************** Target Var(TARGET_CASE_VECTOR_PC_RELATIV
*** 330,359 ****
  Use pc-relative switch case tables - this enables case table shortening.
  
  mcompact-casesi
! Target Warn(%qs is deprecated)
  Enable compact casesi pattern.
  
  mq-class
! Target Warn(%qs is deprecated)
  Enable 'q' instruction alternatives.
  
  mexpand-adddi
! Target Warn(%qs is deprecated)
  Expand adddi3 and subdi3 at rtl generation time into add.f / adc etc.
  
  
  ; Flags used by the assembler, but for which we define preprocessor
  ; macro symbols as well.
  mcrc
! Target Warn(%qs is deprecated)
  Enable variable polynomial CRC extension.
  
  mdsp-packa
! Target Warn(%qs is deprecated)
  Enable DSP 3.1 Pack A extensions.
  
  mdvbf
! Target Warn(%qs is deprecated)
  Enable dual viterbi butterfly extension.
  
  mmac-d16
--- 333,362 ----
  Use pc-relative switch case tables - this enables case table shortening.
  
  mcompact-casesi
! Target Undocumented Warn(%qs is deprecated)
  Enable compact casesi pattern.
  
  mq-class
! Target Undocumented Warn(%qs is deprecated)
  Enable 'q' instruction alternatives.
  
  mexpand-adddi
! Target Undocumented Warn(%qs is deprecated)
  Expand adddi3 and subdi3 at rtl generation time into add.f / adc etc.
  
  
  ; Flags used by the assembler, but for which we define preprocessor
  ; macro symbols as well.
  mcrc
! Target Undocumented Warn(%qs is deprecated)
  Enable variable polynomial CRC extension.
  
  mdsp-packa
! Target Undocumented Warn(%qs is deprecated)
  Enable DSP 3.1 Pack A extensions.
  
  mdvbf
! Target Undocumented Warn(%qs is deprecated)
  Enable dual viterbi butterfly extension.
  
  mmac-d16
*************** mmac-24
*** 363,369 ****
  Target Undocumented Warn(%qs is deprecated)
  
  mtelephony
! Target RejectNegative Warn(%qs is deprecated)
  Enable Dual and Single Operand Instructions for Telephony.
  
  mxy
--- 366,372 ----
  Target Undocumented Warn(%qs is deprecated)
  
  mtelephony
! Target RejectNegative Undocumented Warn(%qs is deprecated)
  Enable Dual and Single Operand Instructions for Telephony.
  
  mxy
*************** Target
*** 380,394 ****
  Enable swap byte ordering extension instruction.
  
  mrtsc
! Target Warn(%qs is deprecated)
  Enable 64-bit Time-Stamp Counter extension instruction.
  
  EB
! Target
  Pass -EB option through to linker.
  
  EL
! Target
  Pass -EL option through to linker.
  
  marclinux
--- 383,399 ----
  Enable swap byte ordering extension instruction.
  
  mrtsc
! Target Undocumented Warn(%qs is deprecated)
  Enable 64-bit Time-Stamp Counter extension instruction.
  
+ ; Formerly documented as deprecated.
  EB
! Target Undocumented
  Pass -EB option through to linker.
  
+ ; Formerly documented as deprecated.
  EL
! Target Undocumented
  Pass -EL option through to linker.
  
  marclinux
*************** marclinux_prof
*** 399,407 ****
  Target
  Pass -marclinux_prof option through to linker.
  
- ;; lra is still unproven for ARC, so allow to fall back to reload with -mno-lra.
  mlra
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  mlra-priority-none
--- 404,411 ----
  Target
  Pass -marclinux_prof option through to linker.
  
  mlra
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  mlra-priority-none
*************** Reduce priority for r0..r3 / r12..r15 wi
*** 419,428 ****
  ; backward-compatibility aliases, translated by DRIVER_SELF_SPECS
  
  mEA
! Target
  
  multcost=
! Target RejectNegative Joined
  
  matomic
  Target Mask(ATOMIC)
--- 423,433 ----
  ; backward-compatibility aliases, translated by DRIVER_SELF_SPECS
  
  mEA
! Target Undocumented
  
  multcost=
! Target RejectNegative Joined Undocumented
! 
  
  matomic
  Target Mask(ATOMIC)
diff -Nrcpad gcc-16-20251207/gcc/config/arc/arc.opt.urls gcc-16-20251214/gcc/config/arc/arc.opt.urls
*** gcc-16-20251207/gcc/config/arc/arc.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/arc/arc.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,10 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc.opt and generated HTML
  
! mbig-endian
! UrlSuffix(gcc/ARC-Options.html#index-mbig-endian-1)
  
! mlittle-endian
! UrlSuffix(gcc/ARC-Options.html#index-mlittle-endian-1)
  
  mno-cond-exec
  UrlSuffix(gcc/ARC-Options.html#index-mno-cond-exec)
--- 1,8 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/arc/arc.opt and generated HTML
  
! ; skipping UrlSuffix for 'mbig-endian' due to finding no URLs
  
! ; skipping UrlSuffix for 'mlittle-endian' due to finding no URLs
  
  mno-cond-exec
  UrlSuffix(gcc/ARC-Options.html#index-mno-cond-exec)
*************** UrlSuffix(gcc/ARC-Options.html#index-mdi
*** 36,44 ****
  mcode-density
  UrlSuffix(gcc/ARC-Options.html#index-mcode-density)
  
- mmixed-code
- UrlSuffix(gcc/ARC-Options.html#index-mmixed-code)
- 
  mvolatile-cache
  UrlSuffix(gcc/ARC-Options.html#index-mvolatile-cache)
  
--- 34,39 ----
*************** UrlSuffix(gcc/ARC-Options.html#index-msw
*** 57,65 ****
  mmul64
  UrlSuffix(gcc/ARC-Options.html#index-mmul64)
  
- mno-mpy
- UrlSuffix(gcc/ARC-Options.html#index-mno-mpy)
- 
  mea
  UrlSuffix(gcc/ARC-Options.html#index-mea)
  
--- 52,57 ----
*************** UrlSuffix(gcc/ARC-Options.html#index-mso
*** 69,76 ****
  mlong-calls
  UrlSuffix(gcc/ARC-Options.html#index-mlong-calls-1)
  
! mno-brcc
! UrlSuffix(gcc/ARC-Options.html#index-mno-brcc)
  
  msdata
  UrlSuffix(gcc/ARC-Options.html#index-msdata)
--- 61,68 ----
  mlong-calls
  UrlSuffix(gcc/ARC-Options.html#index-mlong-calls-1)
  
! mbrcc
! UrlSuffix(gcc/ARC-Options.html#index-mbrcc)
  
  msdata
  UrlSuffix(gcc/ARC-Options.html#index-msdata)
*************** UrlSuffix(gcc/ARC-Options.html#index-msp
*** 87,95 ****
  mspfp-fast
  UrlSuffix(gcc/ARC-Options.html#index-mspfp-fast)
  
- margonaut
- UrlSuffix(gcc/ARC-Options.html#index-margonaut)
- 
  mdpfp
  UrlSuffix(gcc/ARC-Options.html#index-mdpfp)
  
--- 79,84 ----
*************** UrlSuffix(gcc/ARC-Options.html#index-mdp
*** 99,106 ****
  mdpfp-fast
  UrlSuffix(gcc/ARC-Options.html#index-mdpfp-fast)
  
! mno-dpfp-lrsr
! UrlSuffix(gcc/ARC-Options.html#index-mno-dpfp-lrsr)
  
  msimd
  UrlSuffix(gcc/ARC-Options.html#index-msimd)
--- 88,95 ----
  mdpfp-fast
  UrlSuffix(gcc/ARC-Options.html#index-mdpfp-fast)
  
! mdpfp-lrsr
! UrlSuffix(gcc/ARC-Options.html#index-mdpfp-lrsr)
  
  msimd
  UrlSuffix(gcc/ARC-Options.html#index-msimd)
*************** UrlSuffix(gcc/ARC-Options.html#index-mau
*** 129,187 ****
  mmul32x16
  UrlSuffix(gcc/ARC-Options.html#index-mmul32x16)
  
- munalign-prob-threshold=
- UrlSuffix(gcc/ARC-Options.html#index-munalign-prob-threshold)
- 
  mmedium-calls
  UrlSuffix(gcc/ARC-Options.html#index-mmedium-calls)
  
- mannotate-align
- UrlSuffix(gcc/ARC-Options.html#index-mannotate-align)
- 
- malign-call
- UrlSuffix(gcc/ARC-Options.html#index-malign-call)
- 
- mRcq
- UrlSuffix(gcc/ARC-Options.html#index-mRcq)
- 
- mRcw
- UrlSuffix(gcc/ARC-Options.html#index-mRcw)
- 
  mearly-cbranchsi
  UrlSuffix(gcc/ARC-Options.html#index-mearly-cbranchsi)
  
- mbbit-peephole
- UrlSuffix(gcc/ARC-Options.html#index-mbbit-peephole)
- 
  mcase-vector-pcrel
  UrlSuffix(gcc/ARC-Options.html#index-mcase-vector-pcrel)
  
- mcompact-casesi
- UrlSuffix(gcc/ARC-Options.html#index-mcompact-casesi)
- 
- mq-class
- UrlSuffix(gcc/ARC-Options.html#index-mq-class)
- 
- mexpand-adddi
- UrlSuffix(gcc/ARC-Options.html#index-mexpand-adddi)
- 
  ; skipping UrlSuffix for 'mcrc' due to finding no URLs
  
- mdsp-packa
- UrlSuffix(gcc/ARC-Options.html#index-mdsp-packa)
- 
- mdvbf
- UrlSuffix(gcc/ARC-Options.html#index-mdvbf)
- 
- mmac-d16
- UrlSuffix(gcc/ARC-Options.html#index-mmac-d16)
- 
- mmac-24
- UrlSuffix(gcc/ARC-Options.html#index-mmac-24)
- 
- mtelephony
- UrlSuffix(gcc/ARC-Options.html#index-mtelephony)
- 
  mxy
  UrlSuffix(gcc/ARC-Options.html#index-mxy)
  
--- 118,134 ----
*************** UrlSuffix(gcc/ARC-Options.html#index-mlo
*** 191,204 ****
  mswape
  UrlSuffix(gcc/ARC-Options.html#index-mswape)
  
! mrtsc
! UrlSuffix(gcc/ARC-Options.html#index-mrtsc)
! 
! EB
! UrlSuffix(gcc/ARC-Options.html#index-EB)
  
! EL
! UrlSuffix(gcc/ARC-Options.html#index-EL)
  
  marclinux
  UrlSuffix(gcc/ARC-Options.html#index-marclinux)
--- 138,146 ----
  mswape
  UrlSuffix(gcc/ARC-Options.html#index-mswape)
  
! ; skipping UrlSuffix for 'EB' due to finding no URLs
  
! ; skipping UrlSuffix for 'EL' due to finding no URLs
  
  marclinux
  UrlSuffix(gcc/ARC-Options.html#index-marclinux)
*************** UrlSuffix(gcc/ARC-Options.html#index-mar
*** 206,213 ****
  marclinux_prof
  UrlSuffix(gcc/ARC-Options.html#index-marclinux_005fprof)
  
! mlra
! UrlSuffix(gcc/ARC-Options.html#index-mlra)
  
  mlra-priority-none
  UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-none)
--- 148,154 ----
  marclinux_prof
  UrlSuffix(gcc/ARC-Options.html#index-marclinux_005fprof)
  
! ; skipping UrlSuffix for 'mlra' due to finding no URLs
  
  mlra-priority-none
  UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-none)
*************** UrlSuffix(gcc/ARC-Options.html#index-mlr
*** 218,229 ****
  mlra-priority-noncompact
  UrlSuffix(gcc/ARC-Options.html#index-mlra-priority-noncompact)
  
- mEA
- UrlSuffix(gcc/ARC-Options.html#index-mEA)
- 
- multcost=
- UrlSuffix(gcc/ARC-Options.html#index-multcost)
- 
  matomic
  UrlSuffix(gcc/ARC-Options.html#index-matomic)
  
--- 159,164 ----
diff -Nrcpad gcc-16-20251207/gcc/config/arm/arm.opt.urls gcc-16-20251214/gcc/config/arm/arm.opt.urls
*** gcc-16-20251207/gcc/config/arm/arm.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/arm/arm.opt.urls	Sun Dec 14 22:32:06 2025
*************** marm
*** 19,25 ****
  UrlSuffix(gcc/ARM-Options.html#index-marm)
  
  mbig-endian
! UrlSuffix(gcc/ARM-Options.html#index-mbig-endian-2)
  
  mcallee-super-interworking
  UrlSuffix(gcc/ARM-Options.html#index-mcallee-super-interworking)
--- 19,25 ----
  UrlSuffix(gcc/ARM-Options.html#index-marm)
  
  mbig-endian
! UrlSuffix(gcc/ARM-Options.html#index-mbig-endian-1)
  
  mcallee-super-interworking
  UrlSuffix(gcc/ARM-Options.html#index-mcallee-super-interworking)
*************** UrlSuffix(gcc/ARM-Options.html#index-mfp
*** 45,51 ****
  ; skipping UrlSuffix for 'mhard-float' due to finding no URLs
  
  mlittle-endian
! UrlSuffix(gcc/ARM-Options.html#index-mlittle-endian-2)
  
  mlong-calls
  UrlSuffix(gcc/ARM-Options.html#index-mlong-calls-2)
--- 45,51 ----
  ; skipping UrlSuffix for 'mhard-float' due to finding no URLs
  
  mlittle-endian
! UrlSuffix(gcc/ARM-Options.html#index-mlittle-endian-1)
  
  mlong-calls
  UrlSuffix(gcc/ARM-Options.html#index-mlong-calls-2)
*************** mtpcs-leaf-frame
*** 89,95 ****
  UrlSuffix(gcc/ARM-Options.html#index-mtpcs-leaf-frame)
  
  mtune=
! UrlSuffix(gcc/ARM-Options.html#index-mtune-4)
  
  mword-relocations
  UrlSuffix(gcc/ARM-Options.html#index-mword-relocations)
--- 89,95 ----
  UrlSuffix(gcc/ARM-Options.html#index-mtpcs-leaf-frame)
  
  mtune=
! UrlSuffix(gcc/ARM-Options.html#index-mtune-3)
  
  mword-relocations
  UrlSuffix(gcc/ARM-Options.html#index-mword-relocations)
diff -Nrcpad gcc-16-20251207/gcc/config/bpf/bpf.opt.urls gcc-16-20251214/gcc/config/bpf/bpf.opt.urls
*** gcc-16-20251207/gcc/config/bpf/bpf.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/bpf/bpf.opt.urls	Sun Dec 14 22:32:06 2025
*************** mxbpf
*** 4,13 ****
  UrlSuffix(gcc/eBPF-Options.html#index-mxbpf)
  
  mbig-endian
! UrlSuffix(gcc/eBPF-Options.html#index-mbig-endian-5)
  
  mlittle-endian
! UrlSuffix(gcc/eBPF-Options.html#index-mlittle-endian-5)
  
  mco-re
  UrlSuffix(gcc/eBPF-Options.html#index-mco-re)
--- 4,13 ----
  UrlSuffix(gcc/eBPF-Options.html#index-mxbpf)
  
  mbig-endian
! UrlSuffix(gcc/eBPF-Options.html#index-mbig-endian-4)
  
  mlittle-endian
! UrlSuffix(gcc/eBPF-Options.html#index-mlittle-endian-4)
  
  mco-re
  UrlSuffix(gcc/eBPF-Options.html#index-mco-re)
diff -Nrcpad gcc-16-20251207/gcc/config/c6x/c6x.opt.urls gcc-16-20251214/gcc/config/c6x/c6x.opt.urls
*** gcc-16-20251207/gcc/config/c6x/c6x.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/c6x/c6x.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,10 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x.opt and generated HTML
  
  mbig-endian
! UrlSuffix(gcc/C6X-Options.html#index-mbig-endian-3)
  
  mlittle-endian
! UrlSuffix(gcc/C6X-Options.html#index-mlittle-endian-3)
  
  msim
  UrlSuffix(gcc/C6X-Options.html#index-msim-1)
--- 1,10 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/c6x/c6x.opt and generated HTML
  
  mbig-endian
! UrlSuffix(gcc/C6X-Options.html#index-mbig-endian-2)
  
  mlittle-endian
! UrlSuffix(gcc/C6X-Options.html#index-mlittle-endian-2)
  
  msim
  UrlSuffix(gcc/C6X-Options.html#index-msim-1)
diff -Nrcpad gcc-16-20251207/gcc/config/cris/cris.opt.urls gcc-16-20251214/gcc/config/cris/cris.opt.urls
*** gcc-16-20251207/gcc/config/cris/cris.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/cris/cris.opt.urls	Sun Dec 14 22:32:06 2025
*************** march=
*** 70,76 ****
  UrlSuffix(gcc/CRIS-Options.html#index-march-4)
  
  mtune=
! UrlSuffix(gcc/CRIS-Options.html#index-mtune-5)
  
  mtrap-using-break8
  UrlSuffix(gcc/CRIS-Options.html#index-mtrap-using-break8)
--- 70,76 ----
  UrlSuffix(gcc/CRIS-Options.html#index-march-4)
  
  mtune=
! UrlSuffix(gcc/CRIS-Options.html#index-mtune-4)
  
  mtrap-using-break8
  UrlSuffix(gcc/CRIS-Options.html#index-mtrap-using-break8)
diff -Nrcpad gcc-16-20251207/gcc/config/csky/csky.opt.urls gcc-16-20251214/gcc/config/csky/csky.opt.urls
*** gcc-16-20251207/gcc/config/csky/csky.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/csky/csky.opt.urls	Sun Dec 14 22:32:06 2025
*************** mcpu=
*** 7,18 ****
  UrlSuffix(gcc/C-SKY-Options.html#index-mcpu_003d-1)
  
  mbig-endian
! UrlSuffix(gcc/C-SKY-Options.html#index-mbig-endian-4)
  
  ; skipping UrlSuffix for 'EB' due to finding no URLs
  
  mlittle-endian
! UrlSuffix(gcc/C-SKY-Options.html#index-mlittle-endian-4)
  
  ; skipping UrlSuffix for 'EL' due to finding no URLs
  
--- 7,18 ----
  UrlSuffix(gcc/C-SKY-Options.html#index-mcpu_003d-1)
  
  mbig-endian
! UrlSuffix(gcc/C-SKY-Options.html#index-mbig-endian-3)
  
  ; skipping UrlSuffix for 'EB' due to finding no URLs
  
  mlittle-endian
! UrlSuffix(gcc/C-SKY-Options.html#index-mlittle-endian-3)
  
  ; skipping UrlSuffix for 'EL' due to finding no URLs
  
diff -Nrcpad gcc-16-20251207/gcc/config/gcn/gcn.cc gcc-16-20251214/gcc/config/gcn/gcn.cc
*** gcc-16-20251207/gcc/config/gcn/gcn.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/gcn/gcn.cc	Sun Dec 14 22:32:06 2025
*************** gcn_init_cumulative_args (CUMULATIVE_ARG
*** 2940,2953 ****
    if (!caller && cfun->machine->normal_function)
      gcn_detect_incoming_pointer_arg (fndecl);
  
!   if ((omp_requires_mask & (OMP_REQUIRES_UNIFIED_SHARED_MEMORY
! 			    | OMP_REQUIRES_SELF_MAPS))
        && gcn_devices[gcn_arch].xnack_default != HSACO_ATTR_UNSUPPORTED
        && flag_xnack == HSACO_ATTR_OFF)
      {
        warning_at (UNKNOWN_LOCATION, 0,
! 		  "Unified Shared Memory is enabled, but XNACK is disabled");
        inform (UNKNOWN_LOCATION, "Try -foffload-options=-mxnack=any");
      }
  
    reinit_regs ();
--- 2940,2956 ----
    if (!caller && cfun->machine->normal_function)
      gcn_detect_incoming_pointer_arg (fndecl);
  
!   static bool warned_xnack = 0;
!   if (!warned_xnack
!       && (omp_requires_mask & (OMP_REQUIRES_UNIFIED_SHARED_MEMORY
! 			       | OMP_REQUIRES_SELF_MAPS))
        && gcn_devices[gcn_arch].xnack_default != HSACO_ATTR_UNSUPPORTED
        && flag_xnack == HSACO_ATTR_OFF)
      {
        warning_at (UNKNOWN_LOCATION, 0,
! 		  "Unified Shared Memory is required, but XNACK is disabled");
        inform (UNKNOWN_LOCATION, "Try -foffload-options=-mxnack=any");
+       warned_xnack = 1;
      }
  
    reinit_regs ();
diff -Nrcpad gcc-16-20251207/gcc/config/gcn/mkoffload.cc gcc-16-20251214/gcc/config/gcn/mkoffload.cc
*** gcc-16-20251207/gcc/config/gcn/mkoffload.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/gcn/mkoffload.cc	Sun Dec 14 22:32:06 2025
*************** process_asm (FILE *in, FILE *out, FILE *
*** 627,635 ****
  		      || TEST_XNACK_ON (elf_flags)
  		      || xnack_required);
    if (TEST_XNACK_OFF (elf_flags) && xnack_required)
!     fatal_error (input_location,
! 		 "conflicting settings; XNACK is forced off but Unified "
! 		 "Shared Memory is on");
  
    /* Start generating the C code.  */
    if (gcn_stack_size)
--- 627,638 ----
  		      || TEST_XNACK_ON (elf_flags)
  		      || xnack_required);
    if (TEST_XNACK_OFF (elf_flags) && xnack_required)
!     {
!       warning (input_location,
! 	       "conflicting settings; XNACK is forced off but Unified "
! 	       "Shared Memory is required");
!       xnack_required = 0;
!     }
  
    /* Start generating the C code.  */
    if (gcn_stack_size)
diff -Nrcpad gcc-16-20251207/gcc/config/h8300/h8300.opt gcc-16-20251214/gcc/config/h8300/h8300.opt
*** gcc-16-20251207/gcc/config/h8300/h8300.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/h8300/h8300.opt	Sun Dec 14 22:32:06 2025
*************** malign-300
*** 61,66 ****
--- 61,68 ----
  Target RejectNegative Mask(ALIGN_300)
  Use H8/300 alignment rules.
  
+ ; FIXME: -mexr and -mno-exr should be merged or both marked RejectNegative.
+ ; As things stand now, -mno-exr is ambiguous.
  mexr
  Target Mask(EXR)
  Push extended registers on stack in monitor functions.
diff -Nrcpad gcc-16-20251207/gcc/config/h8300/h8300.opt.urls gcc-16-20251214/gcc/config/h8300/h8300.opt.urls
*** gcc-16-20251207/gcc/config/h8300/h8300.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/h8300/h8300.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 3,14 ****
--- 3,23 ----
  ms
  UrlSuffix(gcc/H8_002f300-Options.html#index-ms)
  
+ msx
+ UrlSuffix(gcc/H8_002f300-Options.html#index-msx)
+ 
  ms2600
  UrlSuffix(gcc/H8_002f300-Options.html#index-ms2600)
  
  mint32
  UrlSuffix(gcc/H8_002f300-Options.html#index-mint32)
  
+ mquickcall
+ UrlSuffix(gcc/H8_002f300-Options.html#index-mquickcall)
+ 
+ mslowbyte
+ UrlSuffix(gcc/H8_002f300-Options.html#index-mslowbyte)
+ 
  mrelax
  UrlSuffix(gcc/H8_002f300-Options.html#index-mrelax-1)
  
diff -Nrcpad gcc-16-20251207/gcc/config/i386/i386-expand.cc gcc-16-20251214/gcc/config/i386/i386-expand.cc
*** gcc-16-20251207/gcc/config/i386/i386-expand.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/i386/i386-expand.cc	Sun Dec 14 22:32:06 2025
*************** static bool
*** 4159,4170 ****
  ix86_expand_sse_fp_minmax (rtx dest, enum rtx_code code, rtx cmp_op0,
  			   rtx cmp_op1, rtx if_true, rtx if_false)
  {
!   machine_mode mode;
    bool is_min;
    rtx tmp;
  
    if (code == LT)
      ;
    else if (code == UNGE)
      std::swap (if_true, if_false);
    else
--- 4159,4176 ----
  ix86_expand_sse_fp_minmax (rtx dest, enum rtx_code code, rtx cmp_op0,
  			   rtx cmp_op1, rtx if_true, rtx if_false)
  {
!   machine_mode mode = GET_MODE (dest);
    bool is_min;
    rtx tmp;
  
    if (code == LT)
      ;
+   else if (code == LE && !HONOR_NANS (mode))
+     {
+       /* We can swap LE to GE and then invert to LT.  */
+       std::swap (cmp_op0, cmp_op1);
+       std::swap (if_true, if_false);
+     }
    else if (code == UNGE)
      std::swap (if_true, if_false);
    else
*************** ix86_expand_sse_fp_minmax (rtx dest, enu
*** 4177,4183 ****
    else
      return false;
  
-   mode = GET_MODE (dest);
    if (immediate_operand (if_false, mode))
      if_false = force_reg (mode, if_false);
    if (immediate_operand (if_true, mode))
--- 4183,4188 ----
diff -Nrcpad gcc-16-20251207/gcc/config/i386/i386.cc gcc-16-20251214/gcc/config/i386/i386.cc
*** gcc-16-20251207/gcc/config/i386/i386.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/i386/i386.cc	Sun Dec 14 22:32:06 2025
*************** get_thread_pointer (machine_mode tp_mode
*** 12454,12460 ****
  
  static GTY(()) rtx ix86_tls_index_symbol;
  
- #if TARGET_WIN32_TLS
  static rtx
  ix86_tls_index (void)
  {
--- 12454,12459 ----
*************** ix86_tls_index (void)
*** 12462,12472 ****
      ix86_tls_index_symbol = gen_rtx_SYMBOL_REF (SImode, "_tls_index");
  
    if (flag_pic)
!     return gen_rtx_CONST (Pmode, gen_rtx_UNSPEC (Pmode, gen_rtvec (1, ix86_tls_index_symbol), UNSPEC_PCREL));
    else
      return ix86_tls_index_symbol;
  }
- #endif
  
  /* Construct the SYMBOL_REF for the tls_get_addr function.  */
  
--- 12461,12473 ----
      ix86_tls_index_symbol = gen_rtx_SYMBOL_REF (SImode, "_tls_index");
  
    if (flag_pic)
!     return gen_rtx_CONST (Pmode,
! 			  gen_rtx_UNSPEC (Pmode,
! 					  gen_rtvec (1, ix86_tls_index_symbol),
! 					  UNSPEC_PCREL));
    else
      return ix86_tls_index_symbol;
  }
  
  /* Construct the SYMBOL_REF for the tls_get_addr function.  */
  
*************** legitimize_tls_address (rtx x, enum tls_
*** 12548,12573 ****
    machine_mode tp_mode = Pmode;
    int type;
  
! #if TARGET_WIN32_TLS
!   off = gen_const_mem (SImode, ix86_tls_index ());
!   set_mem_alias_set (off, GOT_ALIAS_SET);
! 
!   tp = gen_const_mem (Pmode, GEN_INT (TARGET_64BIT ? 88 : 44));
!   set_mem_addr_space (tp, DEFAULT_TLS_SEG_REG);
! 
!   if (TARGET_64BIT)
!     off = convert_to_mode (Pmode, off, 1);
! 
!   base = force_reg (Pmode, off);
!   tp = copy_to_mode_reg (Pmode, tp);
  
!   tp = gen_const_mem (Pmode, gen_rtx_PLUS (Pmode, tp, gen_rtx_MULT (Pmode, base, GEN_INT (UNITS_PER_WORD))));
!   set_mem_alias_set (tp, GOT_ALIAS_SET);
  
!   base = force_reg (Pmode, tp);
  
-   return gen_rtx_PLUS (Pmode, base, gen_rtx_CONST (Pmode, gen_rtx_UNSPEC (SImode, gen_rtvec (1, x), UNSPEC_SECREL32)));
- #else
    /* Fall back to global dynamic model if tool chain cannot support local
       dynamic.  */
    if (TARGET_SUN_TLS && !TARGET_64BIT
--- 12549,12581 ----
    machine_mode tp_mode = Pmode;
    int type;
  
!   /* Windows implements a single form of TLS.  */
!   if (TARGET_WIN32_TLS)
!     {
!       /* Load the 32-bit index.  */
!       rtx ind = gen_const_mem (SImode, ix86_tls_index ());
!       set_mem_alias_set (ind, GOT_ALIAS_SET);
!       if (TARGET_64BIT)
! 	ind = convert_to_mode (Pmode, ind, 1);
!       ind = force_reg (Pmode, ind);
  
!       /* Add it to the thread pointer and load the base.  */
!       tp = get_thread_pointer (Pmode, true);
!       rtx addr = gen_rtx_PLUS (Pmode, tp,
! 			       gen_rtx_MULT (Pmode, ind,
! 					     GEN_INT (UNITS_PER_WORD)));
!       base = gen_const_mem (Pmode, addr);
!       set_mem_alias_set (base, GOT_ALIAS_SET);
  
!       /* Add the 32-bit section-relative offset to the base.  */
!       base = force_reg (Pmode, base);
!       off = gen_rtx_CONST (Pmode,
! 			   gen_rtx_UNSPEC (SImode,
! 					   gen_rtvec (1, x),
! 					   UNSPEC_SECREL32));
!       return gen_rtx_PLUS (Pmode, base, off);
!     }
  
    /* Fall back to global dynamic model if tool chain cannot support local
       dynamic.  */
    if (TARGET_SUN_TLS && !TARGET_64BIT
*************** legitimize_tls_address (rtx x, enum tls_
*** 12790,12796 ****
      }
  
    return dest;
- #endif
  }
  
  /* Return true if the TLS address requires insn using integer registers.
--- 12798,12803 ----
*************** ix86_vector_costs::add_stmt_cost (int co
*** 26397,26403 ****
  				(TREE_OPERAND (gimple_assign_rhs1 (def), 0))))))
  	    {
  	      if (fp)
! 		m_num_sse_needed[where]++;
  	      else
  		{
  		  m_num_gpr_needed[where]++;
--- 26404,26423 ----
  				(TREE_OPERAND (gimple_assign_rhs1 (def), 0))))))
  	    {
  	      if (fp)
! 		{
! 		  /* Scalar FP values residing in x87 registers need to be
! 		     spilled and reloaded.  */
! 		  auto mode2 = TYPE_MODE (TREE_TYPE (op));
! 		  if (IS_STACK_MODE (mode2))
! 		    {
! 		      int cost
! 			= (ix86_cost->hard_register.fp_store[mode2 == SFmode
! 							     ? 0 : 1]
! 			   + ix86_cost->sse_load[sse_store_index (mode2)]);
! 		      stmt_cost += COSTS_N_INSNS (cost) / 2;
! 		    }
! 		  m_num_sse_needed[where]++;
! 		}
  	      else
  		{
  		  m_num_gpr_needed[where]++;
diff -Nrcpad gcc-16-20251207/gcc/config/i386/i386.h gcc-16-20251214/gcc/config/i386/i386.h
*** gcc-16-20251207/gcc/config/i386/i386.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/i386/i386.h	Sun Dec 14 22:32:06 2025
*************** extern GTY(()) tree x86_mfence;
*** 619,624 ****
--- 619,627 ----
  #define DEFAULT_TLS_SEG_REG \
    (TARGET_64BIT ? ADDR_SPACE_SEG_FS : ADDR_SPACE_SEG_GS)
  
+ /* The default TLS segment offset used by target.  */
+ #define DEFAULT_TLS_SEG_OFFSET 0
+ 
  /* Subtargets may reset this to 1 in order to enable 96-bit long double
     with the rounding mode forced to 53 bits.  */
  #define TARGET_96_ROUND_53_LONG_DOUBLE 0
diff -Nrcpad gcc-16-20251207/gcc/config/i386/i386.md gcc-16-20251214/gcc/config/i386/i386.md
*** gcc-16-20251207/gcc/config/i386/i386.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/i386/i386.md	Sun Dec 14 22:32:06 2025
***************
*** 6452,6457 ****
--- 6452,6499 ----
    [(set (match_dup 0) (plus:SWI48 (plus:SWI48 (match_dup 0)
  					      (match_dup 1))
  				  (match_dup 2)))])
+ 
+ (define_peephole2
+   [(parallel [(set (match_operand:SWI48 0 "register_operand")
+ 		   (plus:SWI48 (match_dup 0)
+ 			       (match_operand 1 "register_operand")))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (set (match_dup 0)
+ 	(plus:SWI48 (match_dup 0)
+ 		    (match_operand 2 "x86_64_immediate_operand")))]
+   "!TARGET_AVOID_LEA_FOR_ADDR || optimize_function_for_size_p (cfun)"
+   [(set (match_dup 0) (plus:SWI48 (plus:SWI48 (match_dup 0)
+ 					      (match_dup 1))
+ 				  (match_dup 2)))])
+ 
+ (define_peephole2
+   [(parallel [(set (match_operand:SWI48 0 "register_operand")
+ 		   (plus:SWI48 (match_dup 0)
+ 			       (match_operand 1 "register_operand")))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (parallel [(set (match_operand:SWI48 3 "register_operand")
+ 		   (plus:SWI48 (match_dup 0)
+ 			       (match_operand 2 "x86_64_immediate_operand")))
+ 	      (clobber (reg:CC FLAGS_REG))])]
+   "(!TARGET_AVOID_LEA_FOR_ADDR || optimize_function_for_size_p (cfun))
+    && peep2_reg_dead_p (2, operands[0])"
+   [(set (match_dup 3) (plus:SWI48 (plus:SWI48 (match_dup 0)
+ 					      (match_dup 1))
+ 				  (match_dup 2)))])
+ 
+ (define_peephole2
+   [(parallel [(set (match_operand:SWI48 0 "register_operand")
+ 		   (plus:SWI48 (match_dup 0)
+ 			       (match_operand 1 "register_operand")))
+ 	      (clobber (reg:CC FLAGS_REG))])
+    (set (match_operand:SWI48 3 "register_operand")
+ 	(plus:SWI48 (match_dup 0)
+ 		    (match_operand 2 "x86_64_immediate_operand")))]
+   "(!TARGET_AVOID_LEA_FOR_ADDR || optimize_function_for_size_p (cfun))
+    && peep2_reg_dead_p (2, operands[0])"
+   [(set (match_dup 3) (plus:SWI48 (plus:SWI48 (match_dup 0)
+ 					      (match_dup 1))
+ 				  (match_dup 2)))])
  
  ;; Add instructions
  
***************
*** 23507,23516 ****
    [(set (match_dup 0)
  	(match_dup 1))]
  {
!   addr_space_t as = DEFAULT_TLS_SEG_REG;
! 
!   operands[1] = gen_const_mem (<MODE>mode, const0_rtx);
!   set_mem_addr_space (operands[1], as);
  })
  
  (define_insn_and_split "*load_tp_x32_zext"
--- 23549,23556 ----
    [(set (match_dup 0)
  	(match_dup 1))]
  {
!   operands[1] = gen_const_mem (<MODE>mode, GEN_INT (DEFAULT_TLS_SEG_OFFSET));
!   set_mem_addr_space (operands[1], DEFAULT_TLS_SEG_REG);
  })
  
  (define_insn_and_split "*load_tp_x32_zext"
***************
*** 23523,23532 ****
    [(set (match_dup 0)
  	(zero_extend:DI (match_dup 1)))]
  {
!   addr_space_t as = DEFAULT_TLS_SEG_REG;
! 
!   operands[1] = gen_const_mem (SImode, const0_rtx);
!   set_mem_addr_space (operands[1], as);
  })
  
  (define_insn_and_split "*add_tp_<mode>"
--- 23563,23570 ----
    [(set (match_dup 0)
  	(zero_extend:DI (match_dup 1)))]
  {
!   operands[1] = gen_const_mem (SImode, GEN_INT (DEFAULT_TLS_SEG_OFFSET));
!   set_mem_addr_space (operands[1], DEFAULT_TLS_SEG_REG);
  })
  
  (define_insn_and_split "*add_tp_<mode>"
***************
*** 23543,23552 ****
  	   (plus:PTR (match_dup 1) (match_dup 2)))
        (clobber (reg:CC FLAGS_REG))])]
  {
!   addr_space_t as = DEFAULT_TLS_SEG_REG;
! 
!   operands[2] = gen_const_mem (<MODE>mode, const0_rtx);
!   set_mem_addr_space (operands[2], as);
  })
  
  (define_insn_and_split "*add_tp_x32_zext"
--- 23581,23588 ----
  	   (plus:PTR (match_dup 1) (match_dup 2)))
        (clobber (reg:CC FLAGS_REG))])]
  {
!   operands[2] = gen_const_mem (<MODE>mode, GEN_INT (DEFAULT_TLS_SEG_OFFSET));
!   set_mem_addr_space (operands[2], DEFAULT_TLS_SEG_REG);
  })
  
  (define_insn_and_split "*add_tp_x32_zext"
***************
*** 23564,23573 ****
  	     (plus:SI (match_dup 1) (match_dup 2))))
        (clobber (reg:CC FLAGS_REG))])]
  {
!   addr_space_t as = DEFAULT_TLS_SEG_REG;
! 
!   operands[2] = gen_const_mem (SImode, const0_rtx);
!   set_mem_addr_space (operands[2], as);
  })
  
  ;; GNU2 TLS patterns can be split.
--- 23600,23607 ----
  	     (plus:SI (match_dup 1) (match_dup 2))))
        (clobber (reg:CC FLAGS_REG))])]
  {
!   operands[2] = gen_const_mem (SImode, GEN_INT (DEFAULT_TLS_SEG_OFFSET));
!   set_mem_addr_space (operands[2], DEFAULT_TLS_SEG_REG);
  })
  
  ;; GNU2 TLS patterns can be split.
diff -Nrcpad gcc-16-20251207/gcc/config/i386/i386.opt.urls gcc-16-20251214/gcc/config/i386/i386.opt.urls
*** gcc-16-20251207/gcc/config/i386/i386.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/i386/i386.opt.urls	Sun Dec 14 22:32:06 2025
*************** malign-data=
*** 33,39 ****
  UrlSuffix(gcc/x86-Options.html#index-malign-data-1)
  
  march=
! UrlSuffix(gcc/x86-Options.html#index-march-15)
  
  ; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
  
--- 33,39 ----
  UrlSuffix(gcc/x86-Options.html#index-malign-data-1)
  
  march=
! UrlSuffix(gcc/x86-Options.html#index-march-14)
  
  ; skipping UrlSuffix for 'mbranch-cost=' due to finding no URLs
  
*************** mtls-direct-seg-refs
*** 135,141 ****
  UrlSuffix(gcc/x86-Options.html#index-mtls-direct-seg-refs)
  
  mtune=
! UrlSuffix(gcc/x86-Options.html#index-mtune-17)
  
  mno-default
  UrlSuffix(gcc/x86-Options.html#index-mno-default)
--- 135,141 ----
  UrlSuffix(gcc/x86-Options.html#index-mtls-direct-seg-refs)
  
  mtune=
! UrlSuffix(gcc/x86-Options.html#index-mtune-16)
  
  mno-default
  UrlSuffix(gcc/x86-Options.html#index-mno-default)
diff -Nrcpad gcc-16-20251207/gcc/config/i386/predicates.md gcc-16-20251214/gcc/config/i386/predicates.md
*** gcc-16-20251207/gcc/config/i386/predicates.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/i386/predicates.md	Sun Dec 14 22:32:06 2025
***************
*** 543,554 ****
    /* Rule out relocations that translate into 64bit constants.  */
    if (TARGET_64BIT && GET_CODE (op) == CONST)
      {
!       op = XEXP (op, 0);
!       if (GET_CODE (op) == PLUS && CONST_INT_P (XEXP (op, 1)))
! 	op = XEXP (op, 0);
!       if (GET_CODE (op) == UNSPEC
! 	  && (XINT (op, 1) == UNSPEC_GOTOFF
! 	      || XINT (op, 1) == UNSPEC_GOT))
  	return false;
      }
  
--- 543,554 ----
    /* Rule out relocations that translate into 64bit constants.  */
    if (TARGET_64BIT && GET_CODE (op) == CONST)
      {
!       rtx tmp = XEXP (op, 0);
!       if (GET_CODE (tmp) == PLUS && CONST_INT_P (XEXP (tmp, 1)))
! 	tmp = XEXP (tmp, 0);
!       if (GET_CODE (tmp) == UNSPEC
! 	  && (XINT (tmp, 1) == UNSPEC_GOTOFF
! 	      || XINT (tmp, 1) == UNSPEC_GOT))
  	return false;
      }
  
***************
*** 578,583 ****
--- 578,584 ----
  	  || (GET_CODE (op) == UNSPEC
  	      && (XINT (op, 1) == UNSPEC_GOT
  		  || XINT (op, 1) == UNSPEC_GOTOFF
+ 		  || XINT (op, 1) == UNSPEC_SECREL32
  		  || XINT (op, 1) == UNSPEC_PCREL
  		  || XINT (op, 1) == UNSPEC_GOTPCREL)))
  	return true;
***************
*** 589,597 ****
        if (SYMBOL_REF_P (op)
  	  || LABEL_REF_P (op))
  	return true;
!       /* Only @GOTOFF gets offsets.  */
        if (GET_CODE (op) != UNSPEC
! 	  || XINT (op, 1) != UNSPEC_GOTOFF)
  	return false;
  
        op = XVECEXP (op, 0, 0);
--- 590,599 ----
        if (SYMBOL_REF_P (op)
  	  || LABEL_REF_P (op))
  	return true;
!       /* Only @GOTOFF and @SECREL32 get offsets.  */
        if (GET_CODE (op) != UNSPEC
! 	  || (XINT (op, 1) != UNSPEC_GOTOFF
! 	      && XINT (op, 1) != UNSPEC_SECREL32))
  	return false;
  
        op = XVECEXP (op, 0, 0);
***************
*** 1901,1907 ****
  {
    int nelt = XVECLEN (op, 0);
    int elt, i;
!   
    if (nelt < 2)
      return false;
  
--- 1903,1909 ----
  {
    int nelt = XVECLEN (op, 0);
    int elt, i;
! 
    if (nelt < 2)
      return false;
  
diff -Nrcpad gcc-16-20251207/gcc/config/i386/sse.md gcc-16-20251214/gcc/config/i386/sse.md
*** gcc-16-20251207/gcc/config/i386/sse.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/i386/sse.md	Sun Dec 14 22:32:06 2025
***************
*** 4900,4906 ****
  	   (match_operand:SI 3 "<cmp_imm_predicate>")]
  	  UNSPEC_PCMP_ITER))]
    "TARGET_AVX512F && ix86_pre_reload_split ()
!    && rtx_equal_p (operands[1], operands[2])"
    "#"
    "&& 1"
    [(set (match_dup 0) (match_dup 4))]
--- 4900,4907 ----
  	   (match_operand:SI 3 "<cmp_imm_predicate>")]
  	  UNSPEC_PCMP_ITER))]
    "TARGET_AVX512F && ix86_pre_reload_split ()
!    && rtx_equal_p (operands[1], operands[2])
!    && (!MEM_P (operands[1]) || !MEM_VOLATILE_P (operands[1]))"
    "#"
    "&& 1"
    [(set (match_dup 0) (match_dup 4))]
diff -Nrcpad gcc-16-20251207/gcc/config/ia64/ia64.opt gcc-16-20251214/gcc/config/ia64/ia64.opt
*** gcc-16-20251207/gcc/config/ia64/ia64.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/ia64/ia64.opt	Sun Dec 14 22:32:06 2025
*************** Target Var(mflag_sched_spec_control_ldc)
*** 164,173 ****
  Use simple data speculation check for control speculation.
  
  msched-prefer-non-data-spec-insns
! Target WarnRemoved
  
  msched-prefer-non-control-spec-insns
! Target WarnRemoved
  
  msched-count-spec-in-critical-path
  Target Var(mflag_sched_count_spec_in_critical_path) Init(0)
--- 164,173 ----
  Use simple data speculation check for control speculation.
  
  msched-prefer-non-data-spec-insns
! Target WarnRemoved Undocumented
  
  msched-prefer-non-control-spec-insns
! Target WarnRemoved Undocumented
  
  msched-count-spec-in-critical-path
  Target Var(mflag_sched_count_spec_in_critical_path) Init(0)
diff -Nrcpad gcc-16-20251207/gcc/config/ia64/ia64.opt.urls gcc-16-20251214/gcc/config/ia64/ia64.opt.urls
*** gcc-16-20251207/gcc/config/ia64/ia64.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/ia64/ia64.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,10 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ia64.opt and generated HTML
  
  mbig-endian
! UrlSuffix(gcc/IA-64-Options.html#index-mbig-endian-6)
  
  mlittle-endian
! UrlSuffix(gcc/IA-64-Options.html#index-mlittle-endian-6)
  
  mgnu-as
  UrlSuffix(gcc/IA-64-Options.html#index-mgnu-as)
--- 1,10 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/ia64/ia64.opt and generated HTML
  
  mbig-endian
! UrlSuffix(gcc/IA-64-Options.html#index-mbig-endian-5)
  
  mlittle-endian
! UrlSuffix(gcc/IA-64-Options.html#index-mlittle-endian-5)
  
  mgnu-as
  UrlSuffix(gcc/IA-64-Options.html#index-mgnu-as)
*************** mtls-size=
*** 73,79 ****
  UrlSuffix(gcc/IA-64-Options.html#index-mtls-size-2)
  
  mtune=
! UrlSuffix(gcc/IA-64-Options.html#index-mtune-7)
  
  msched-br-data-spec
  UrlSuffix(gcc/IA-64-Options.html#index-msched-br-data-spec)
--- 73,79 ----
  UrlSuffix(gcc/IA-64-Options.html#index-mtls-size-2)
  
  mtune=
! UrlSuffix(gcc/IA-64-Options.html#index-mtune-6)
  
  msched-br-data-spec
  UrlSuffix(gcc/IA-64-Options.html#index-msched-br-data-spec)
*************** UrlSuffix(gcc/IA-64-Options.html#index-m
*** 96,106 ****
  msched-spec-ldc
  UrlSuffix(gcc/IA-64-Options.html#index-msched-spec-ldc)
  
! msched-prefer-non-data-spec-insns
! UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-data-spec-insns)
! 
! msched-prefer-non-control-spec-insns
! UrlSuffix(gcc/IA-64-Options.html#index-msched-prefer-non-control-spec-insns)
  
  msched-count-spec-in-critical-path
  UrlSuffix(gcc/IA-64-Options.html#index-msched-count-spec-in-critical-path)
--- 96,103 ----
  msched-spec-ldc
  UrlSuffix(gcc/IA-64-Options.html#index-msched-spec-ldc)
  
! msched-spec-control-ldc
! UrlSuffix(gcc/IA-64-Options.html#index-msched-spec-control-ldc)
  
  msched-count-spec-in-critical-path
  UrlSuffix(gcc/IA-64-Options.html#index-msched-count-spec-in-critical-path)
diff -Nrcpad gcc-16-20251207/gcc/config/lm32/lm32.opt.urls gcc-16-20251214/gcc/config/lm32/lm32.opt.urls
*** gcc-16-20251207/gcc/config/lm32/lm32.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/lm32/lm32.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,5 ****
--- 1,8 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/lm32/lm32.opt and generated HTML
  
+ mmultiply-enabled
+ UrlSuffix(gcc/LM32-Options.html#index-mmultiply-enabled)
+ 
  mdivide-enabled
  UrlSuffix(gcc/LM32-Options.html#index-mdivide-enabled)
  
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/constraints.md gcc-16-20251214/gcc/config/loongarch/constraints.md
*** gcc-16-20251207/gcc/config/loongarch/constraints.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/constraints.md	Sun Dec 14 22:32:06 2025
***************
*** 133,138 ****
--- 133,139 ----
    "A memory operand whose address is formed by a base register and (optionally scaled)
     index register."
    (and (match_code "mem")
+        (match_test "TARGET_64BIT")
         (match_test "loongarch_base_index_address_p (XEXP (op, 0), mode)")))
  
  (define_constraint "l"
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/genopts/loongarch-strings gcc-16-20251214/gcc/config/loongarch/genopts/loongarch-strings
*** gcc-16-20251207/gcc/config/loongarch/genopts/loongarch-strings	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/genopts/loongarch-strings	Sun Dec 14 22:32:06 2025
*************** STR_CPU_LA664	      la664
*** 31,37 ****
--- 31,44 ----
  STR_ARCH_LA64V1_0     la64v1.0
  STR_ARCH_LA64V1_1     la64v1.1
  
+ STR_ARCH_LA32V1_0     la32v1.0
+ STR_ARCH_LA32RV1_0    la32rv1.0
+ 
+ STR_TUNE_LOONGARCH32  loongarch32 # No loongarch32 arch, only loongarch32 tune
+ 
  # Base architecture
+ STR_ISA_BASE_LA32 la32
+ STR_ISA_BASE_LA32R la32r
  STR_ISA_BASE_LA64 la64
  
  # -mfpu
*************** STR_ISA_EXT_LASX      lasx
*** 52,57 ****
--- 59,67 ----
  
  # -mabi=
  OPTSTR_ABI_BASE	      abi
+ STR_ABI_BASE_ILP32D   ilp32d
+ STR_ABI_BASE_ILP32F   ilp32f
+ STR_ABI_BASE_ILP32S   ilp32s
  STR_ABI_BASE_LP64D    lp64d
  STR_ABI_BASE_LP64F    lp64f
  STR_ABI_BASE_LP64S    lp64s
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/genopts/loongarch.opt.in gcc-16-20251214/gcc/config/loongarch/genopts/loongarch.opt.in
*** gcc-16-20251207/gcc/config/loongarch/genopts/loongarch.opt.in	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/genopts/loongarch.opt.in	Sun Dec 14 22:32:06 2025
*************** Name(isa_base) Type(int)
*** 33,38 ****
--- 33,44 ----
  Basic ISAs of LoongArch:
  
  EnumValue
+ Enum(isa_base) String(@@STR_ISA_BASE_LA32@@) Value(ISA_BASE_LA32)
+ 
+ EnumValue
+ Enum(isa_base) String(@@STR_ISA_BASE_LA32R@@) Value(ISA_BASE_LA32R)
+ 
+ EnumValue
  Enum(isa_base) String(@@STR_ISA_BASE_LA64@@) Value(ISA_BASE_LA64)
  
  ;; ISA extensions / adjustments
*************** Enum(arch_type) String(@@STR_ARCH_LA64V1
*** 119,124 ****
--- 125,136 ----
  EnumValue
  Enum(arch_type) String(@@STR_ARCH_LA64V1_1@@) Value(ARCH_LA64V1_1)
  
+ EnumValue
+ Enum(arch_type) String(@@STR_ARCH_LA32V1_0@@) Value(ARCH_LA32V1_0)
+ 
+ EnumValue
+ Enum(arch_type) String(@@STR_ARCH_LA32RV1_0@@) Value(ARCH_LA32RV1_0)
+ 
  m@@OPTSTR_ARCH@@=
  Target RejectNegative Joined Enum(arch_type) Var(la_opt_cpu_arch) Init(M_OPT_UNSET) Save
  -m@@OPTSTR_ARCH@@=PROCESSOR	Generate code for the given PROCESSOR ISA.
*************** Enum(tune_type) String(@@STR_CPU_LA464@@
*** 142,147 ****
--- 154,162 ----
  EnumValue
  Enum(tune_type) String(@@STR_CPU_LA664@@) Value(TUNE_LA664)
  
+ EnumValue
+ Enum(tune_type) String(@@STR_TUNE_LOONGARCH32@@) Value(TUNE_LOONGARCH32)
+ 
  m@@OPTSTR_TUNE@@=
  Target RejectNegative Joined Enum(tune_type) Var(la_opt_cpu_tune) Init(M_OPT_UNSET) Save
  -m@@OPTSTR_TUNE@@=PROCESSOR	Generate optimized code for PROCESSOR.
*************** Name(abi_base) Type(int)
*** 156,161 ****
--- 171,185 ----
  Base ABI types for LoongArch:
  
  EnumValue
+ Enum(abi_base) String(@@STR_ABI_BASE_ILP32D@@) Value(ABI_BASE_ILP32D)
+ 
+ EnumValue
+ Enum(abi_base) String(@@STR_ABI_BASE_ILP32F@@) Value(ABI_BASE_ILP32F)
+ 
+ EnumValue
+ Enum(abi_base) String(@@STR_ABI_BASE_ILP32S@@) Value(ABI_BASE_ILP32S)
+ 
+ EnumValue
  Enum(abi_base) String(@@STR_ABI_BASE_LP64D@@) Value(ABI_BASE_LP64D)
  
  EnumValue
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/gnu-user.h gcc-16-20251214/gcc/config/loongarch/gnu-user.h
*** gcc-16-20251207/gcc/config/loongarch/gnu-user.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/gnu-user.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 34,39 ****
--- 34,42 ----
    "/lib" ABI_GRLEN_SPEC "/ld-linux-loongarch-" ABI_SPEC ".so.1"
  
  #define MUSL_ABI_SPEC \
+   "%{mabi=ilp32d:}" \
+   "%{mabi=ilp32f:-sp}" \
+   "%{mabi=ilp32s:-sf}" \
    "%{mabi=lp64d:}" \
    "%{mabi=lp64f:-sp}" \
    "%{mabi=lp64s:-sf}"
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/larchintrin.h gcc-16-20251214/gcc/config/loongarch/larchintrin.h
*** gcc-16-20251207/gcc/config/loongarch/larchintrin.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/larchintrin.h	Sun Dec 14 22:32:06 2025
*************** __rdtimel_w (void)
*** 80,85 ****
--- 80,86 ----
    return __rdtime;
  }
  
+ #ifdef __loongarch_hard_float
  /* Assembly instruction format:	rj, fcsr.  */
  /* Data types in instruction templates:  USI, UQI.  */
  #define __movfcsr2gr(/*ui5*/ _1) __builtin_loongarch_movfcsr2gr ((_1));
*************** __rdtimel_w (void)
*** 88,101 ****
  /* Data types in instruction templates:  VOID, UQI, USI.  */
  #define __movgr2fcsr(/*ui5*/ _1, _2) \
    __builtin_loongarch_movgr2fcsr ((_1), _2);
  
! #if defined __loongarch64
  /* Assembly instruction format:	ui5, rj, si12.  */
  /* Data types in instruction templates:  VOID, USI, UDI, SI.  */
  #define __cacop_d(/*ui5*/ _1, /*unsigned long int*/ _2, /*si12*/ _3) \
    __builtin_loongarch_cacop_d ((_1), (_2), (_3))
! #else
! #error "Unsupported ABI."
  #endif
  
  /* Assembly instruction format:	rd, rj.  */
--- 89,104 ----
  /* Data types in instruction templates:  VOID, UQI, USI.  */
  #define __movgr2fcsr(/*ui5*/ _1, _2) \
    __builtin_loongarch_movgr2fcsr ((_1), _2);
+ #endif
  
! #if __loongarch_grlen == 64
  /* Assembly instruction format:	ui5, rj, si12.  */
  /* Data types in instruction templates:  VOID, USI, UDI, SI.  */
  #define __cacop_d(/*ui5*/ _1, /*unsigned long int*/ _2, /*si12*/ _3) \
    __builtin_loongarch_cacop_d ((_1), (_2), (_3))
! #elif __loongarch_grlen == 32
! #define __cacop_w(/*ui5*/ _1, /*unsigned long int*/ _2, /*si12*/ _3) \
!   __builtin_loongarch_cacop_w ((_1), (_2), (_3))
  #endif
  
  /* Assembly instruction format:	rd, rj.  */
*************** __asrtgt_d (long int _1, long int _2)
*** 127,150 ****
  }
  #endif
  
! #if defined __loongarch64
  /* Assembly instruction format:	rd, rj, ui5.  */
  /* Data types in instruction templates:  DI, DI, UQI.  */
  #define __lddir_d(/*long int*/ _1, /*ui5*/ _2) \
    __builtin_loongarch_lddir_d ((_1), (_2))
- #else
- #error "Unsupported ABI."
  #endif
  
! #if defined __loongarch64
  /* Assembly instruction format:	rj, ui5.  */
  /* Data types in instruction templates:  VOID, DI, UQI.  */
  #define __ldpte_d(/*long int*/ _1, /*ui5*/ _2) \
    __builtin_loongarch_ldpte_d ((_1), (_2))
- #else
- #error "Unsupported ABI."
  #endif
  
  /* Assembly instruction format:	rd, rj, rk.  */
  /* Data types in instruction templates:  SI, QI, SI.  */
  extern __inline int
--- 130,150 ----
  }
  #endif
  
! #if __loongarch_grlen == 64
  /* Assembly instruction format:	rd, rj, ui5.  */
  /* Data types in instruction templates:  DI, DI, UQI.  */
  #define __lddir_d(/*long int*/ _1, /*ui5*/ _2) \
    __builtin_loongarch_lddir_d ((_1), (_2))
  #endif
  
! #if __loongarch_grlen == 64
  /* Assembly instruction format:	rj, ui5.  */
  /* Data types in instruction templates:  VOID, DI, UQI.  */
  #define __ldpte_d(/*long int*/ _1, /*ui5*/ _2) \
    __builtin_loongarch_ldpte_d ((_1), (_2))
  #endif
  
+ #ifdef __loongarch64
  /* Assembly instruction format:	rd, rj, rk.  */
  /* Data types in instruction templates:  SI, QI, SI.  */
  extern __inline int
*************** __crc_w_w_w (int _1, int _2)
*** 172,178 ****
    return __builtin_loongarch_crc_w_w_w (_1, _2);
  }
  
- #ifdef __loongarch64
  /* Assembly instruction format:	rd, rj, rk.  */
  /* Data types in instruction templates:  SI, DI, SI.  */
  extern __inline int
--- 172,177 ----
*************** __crc_w_d_w (long int _1, int _2)
*** 181,187 ****
  {
    return __builtin_loongarch_crc_w_d_w (_1, _2);
  }
- #endif
  
  /* Assembly instruction format:	rd, rj, rk.  */
  /* Data types in instruction templates:  SI, QI, SI.  */
--- 180,185 ----
*************** __crcc_w_w_w (int _1, int _2)
*** 210,216 ****
    return __builtin_loongarch_crcc_w_w_w (_1, _2);
  }
  
- #ifdef __loongarch64
  /* Assembly instruction format:	rd, rj, rk.  */
  /* Data types in instruction templates:  SI, DI, SI.  */
  extern __inline int
--- 208,213 ----
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/linux.h gcc-16-20251214/gcc/config/loongarch/linux.h
*** gcc-16-20251207/gcc/config/loongarch/linux.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/linux.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 25,31 ****
    && defined(LA_DISABLE_MULTILIB) \
    && defined(LA_DISABLE_MULTIARCH)
  
!   #if DEFAULT_ABI_BASE == ABI_BASE_LP64D
      #define ABI_LIBDIR "lib64"
    #elif DEFAULT_ABI_BASE == ABI_BASE_LP64F
      #define ABI_LIBDIR "lib64/f32"
--- 25,37 ----
    && defined(LA_DISABLE_MULTILIB) \
    && defined(LA_DISABLE_MULTIARCH)
  
!   #if DEFAULT_ABI_BASE == ABI_BASE_ILP32D
!     #define ABI_LIBDIR "lib32"
!   #elif DEFAULT_ABI_BASE == ABI_BASE_ILP32F
!     #define ABI_LIBDIR "lib32/f32"
!   #elif DEFAULT_ABI_BASE == ABI_BASE_ILP32S
!     #define ABI_LIBDIR "lib32/sf"
!   #elif DEFAULT_ABI_BASE == ABI_BASE_LP64D
      #define ABI_LIBDIR "lib64"
    #elif DEFAULT_ABI_BASE == ABI_BASE_LP64F
      #define ABI_LIBDIR "lib64/f32"
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-builtins.cc gcc-16-20251214/gcc/config/loongarch/loongarch-builtins.cc
*** gcc-16-20251207/gcc/config/loongarch/loongarch-builtins.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-builtins.cc	Sun Dec 14 22:32:06 2025
*************** struct loongarch_builtin_description
*** 117,122 ****
--- 117,124 ----
    unsigned int (*avail) (void);
  };
  
+ AVAIL_ALL (la64, TARGET_64BIT)
+ AVAIL_ALL (la64_or_la32s, (TARGET_64BIT || TARGET_32BIT_S))
  AVAIL_ALL (hard_float, TARGET_HARD_FLOAT_ABI)
  AVAIL_ALL (lsx, ISA_HAS_LSX)
  AVAIL_ALL (lasx, ISA_HAS_LASX)
*************** static const struct loongarch_builtin_de
*** 893,936 ****
    DIRECT_NO_TARGET_BUILTIN (movgr2fcsr, LARCH_VOID_FTYPE_UQI_USI, hard_float),
  
    DIRECT_NO_TARGET_BUILTIN (cacop_w, LARCH_VOID_FTYPE_USI_USI_SI, default),
!   DIRECT_NO_TARGET_BUILTIN (cacop_d, LARCH_VOID_FTYPE_USI_UDI_SI, default),
    DIRECT_NO_TARGET_BUILTIN (dbar, LARCH_VOID_FTYPE_USI, default),
    DIRECT_NO_TARGET_BUILTIN (ibar, LARCH_VOID_FTYPE_USI, default),
  
!   DIRECT_BUILTIN (lddir_d, LARCH_DI_FTYPE_DI_UQI, default),
!   DIRECT_BUILTIN (lddir_w, LARCH_SI_FTYPE_SI_UQI, default),
!   DIRECT_NO_TARGET_BUILTIN (ldpte_d, LARCH_VOID_FTYPE_DI_UQI, default),
!   DIRECT_NO_TARGET_BUILTIN (ldpte_w, LARCH_VOID_FTYPE_SI_UQI, default),
  
    /* CRC Instrinsic */
  
!   DIRECT_BUILTIN (crc_w_b_w, LARCH_SI_FTYPE_QI_SI, default),
!   DIRECT_BUILTIN (crc_w_h_w, LARCH_SI_FTYPE_HI_SI, default),
!   DIRECT_BUILTIN (crc_w_w_w, LARCH_SI_FTYPE_SI_SI, default),
!   DIRECT_BUILTIN (crc_w_d_w, LARCH_SI_FTYPE_DI_SI, default),
!   DIRECT_BUILTIN (crcc_w_b_w, LARCH_SI_FTYPE_QI_SI, default),
!   DIRECT_BUILTIN (crcc_w_h_w, LARCH_SI_FTYPE_HI_SI, default),
!   DIRECT_BUILTIN (crcc_w_w_w, LARCH_SI_FTYPE_SI_SI, default),
!   DIRECT_BUILTIN (crcc_w_d_w, LARCH_SI_FTYPE_DI_SI, default),
  
    DIRECT_BUILTIN (csrrd_w, LARCH_USI_FTYPE_USI, default),
!   DIRECT_BUILTIN (csrrd_d, LARCH_UDI_FTYPE_USI, default),
    DIRECT_BUILTIN (csrwr_w, LARCH_USI_FTYPE_USI_USI, default),
!   DIRECT_BUILTIN (csrwr_d, LARCH_UDI_FTYPE_UDI_USI, default),
    DIRECT_BUILTIN (csrxchg_w, LARCH_USI_FTYPE_USI_USI_USI, default),
!   DIRECT_BUILTIN (csrxchg_d, LARCH_UDI_FTYPE_UDI_UDI_USI, default),
    DIRECT_BUILTIN (iocsrrd_b, LARCH_UQI_FTYPE_USI, default),
    DIRECT_BUILTIN (iocsrrd_h, LARCH_UHI_FTYPE_USI, default),
    DIRECT_BUILTIN (iocsrrd_w, LARCH_USI_FTYPE_USI, default),
!   DIRECT_BUILTIN (iocsrrd_d, LARCH_UDI_FTYPE_USI, default),
    DIRECT_NO_TARGET_BUILTIN (iocsrwr_b, LARCH_VOID_FTYPE_UQI_USI, default),
    DIRECT_NO_TARGET_BUILTIN (iocsrwr_h, LARCH_VOID_FTYPE_UHI_USI, default),
    DIRECT_NO_TARGET_BUILTIN (iocsrwr_w, LARCH_VOID_FTYPE_USI_USI, default),
!   DIRECT_NO_TARGET_BUILTIN (iocsrwr_d, LARCH_VOID_FTYPE_UDI_USI, default),
  
    DIRECT_BUILTIN (cpucfg, LARCH_USI_FTYPE_USI, default),
!   DIRECT_NO_TARGET_BUILTIN (asrtle_d, LARCH_VOID_FTYPE_DI_DI, default),
!   DIRECT_NO_TARGET_BUILTIN (asrtgt_d, LARCH_VOID_FTYPE_DI_DI, default),
    DIRECT_NO_TARGET_BUILTIN (syscall, LARCH_VOID_FTYPE_USI, default),
    DIRECT_NO_TARGET_BUILTIN (break, LARCH_VOID_FTYPE_USI, default),
  
--- 895,938 ----
    DIRECT_NO_TARGET_BUILTIN (movgr2fcsr, LARCH_VOID_FTYPE_UQI_USI, hard_float),
  
    DIRECT_NO_TARGET_BUILTIN (cacop_w, LARCH_VOID_FTYPE_USI_USI_SI, default),
!   DIRECT_NO_TARGET_BUILTIN (cacop_d, LARCH_VOID_FTYPE_USI_UDI_SI, la64),
    DIRECT_NO_TARGET_BUILTIN (dbar, LARCH_VOID_FTYPE_USI, default),
    DIRECT_NO_TARGET_BUILTIN (ibar, LARCH_VOID_FTYPE_USI, default),
  
!   DIRECT_BUILTIN (lddir_d, LARCH_DI_FTYPE_DI_UQI, la64),
!   DIRECT_BUILTIN (lddir_w, LARCH_SI_FTYPE_SI_UQI,  la64_or_la32s),
!   DIRECT_NO_TARGET_BUILTIN (ldpte_d, LARCH_VOID_FTYPE_DI_UQI, la64),
!   DIRECT_NO_TARGET_BUILTIN (ldpte_w, LARCH_VOID_FTYPE_SI_UQI,  la64_or_la32s),
  
    /* CRC Instrinsic */
  
!   DIRECT_BUILTIN (crc_w_b_w, LARCH_SI_FTYPE_QI_SI, la64),
!   DIRECT_BUILTIN (crc_w_h_w, LARCH_SI_FTYPE_HI_SI, la64),
!   DIRECT_BUILTIN (crc_w_w_w, LARCH_SI_FTYPE_SI_SI, la64),
!   DIRECT_BUILTIN (crc_w_d_w, LARCH_SI_FTYPE_DI_SI, la64),
!   DIRECT_BUILTIN (crcc_w_b_w, LARCH_SI_FTYPE_QI_SI, la64),
!   DIRECT_BUILTIN (crcc_w_h_w, LARCH_SI_FTYPE_HI_SI, la64),
!   DIRECT_BUILTIN (crcc_w_w_w, LARCH_SI_FTYPE_SI_SI, la64),
!   DIRECT_BUILTIN (crcc_w_d_w, LARCH_SI_FTYPE_DI_SI, la64),
  
    DIRECT_BUILTIN (csrrd_w, LARCH_USI_FTYPE_USI, default),
!   DIRECT_BUILTIN (csrrd_d, LARCH_UDI_FTYPE_USI, la64),
    DIRECT_BUILTIN (csrwr_w, LARCH_USI_FTYPE_USI_USI, default),
!   DIRECT_BUILTIN (csrwr_d, LARCH_UDI_FTYPE_UDI_USI, la64),
    DIRECT_BUILTIN (csrxchg_w, LARCH_USI_FTYPE_USI_USI_USI, default),
!   DIRECT_BUILTIN (csrxchg_d, LARCH_UDI_FTYPE_UDI_UDI_USI, la64),
    DIRECT_BUILTIN (iocsrrd_b, LARCH_UQI_FTYPE_USI, default),
    DIRECT_BUILTIN (iocsrrd_h, LARCH_UHI_FTYPE_USI, default),
    DIRECT_BUILTIN (iocsrrd_w, LARCH_USI_FTYPE_USI, default),
!   DIRECT_BUILTIN (iocsrrd_d, LARCH_UDI_FTYPE_USI, la64),
    DIRECT_NO_TARGET_BUILTIN (iocsrwr_b, LARCH_VOID_FTYPE_UQI_USI, default),
    DIRECT_NO_TARGET_BUILTIN (iocsrwr_h, LARCH_VOID_FTYPE_UHI_USI, default),
    DIRECT_NO_TARGET_BUILTIN (iocsrwr_w, LARCH_VOID_FTYPE_USI_USI, default),
!   DIRECT_NO_TARGET_BUILTIN (iocsrwr_d, LARCH_VOID_FTYPE_UDI_USI, la64),
  
    DIRECT_BUILTIN (cpucfg, LARCH_USI_FTYPE_USI, default),
!   DIRECT_NO_TARGET_BUILTIN (asrtle_d, LARCH_VOID_FTYPE_DI_DI, la64),
!   DIRECT_NO_TARGET_BUILTIN (asrtgt_d, LARCH_VOID_FTYPE_DI_DI, la64),
    DIRECT_NO_TARGET_BUILTIN (syscall, LARCH_VOID_FTYPE_USI, default),
    DIRECT_NO_TARGET_BUILTIN (break, LARCH_VOID_FTYPE_USI, default),
  
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-c.cc gcc-16-20251214/gcc/config/loongarch/loongarch-c.cc
*** gcc-16-20251207/gcc/config/loongarch/loongarch-c.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-c.cc	Sun Dec 14 22:32:06 2025
*************** loongarch_define_unconditional_macros (c
*** 55,60 ****
--- 55,65 ----
        builtin_define ("__loongarch_grlen=64");
        builtin_define ("__loongarch64");
      }
+   else
+       builtin_define ("__loongarch_grlen=32");
+ 
+   if (TARGET_ABI_ILP32)
+       builtin_define ("__loongarch_ilp32");
  
    if (TARGET_ABI_LP64)
      {
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-def.cc gcc-16-20251214/gcc/config/loongarch/loongarch-def.cc
*** gcc-16-20251207/gcc/config/loongarch/loongarch-def.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-def.cc	Sun Dec 14 22:32:06 2025
*************** array_arch<const char *> loongarch_arch_
*** 43,56 ****
    .set (ARCH_LA464, STR_CPU_LA464)
    .set (ARCH_LA664, STR_CPU_LA664)
    .set (ARCH_LA64V1_0, STR_ARCH_LA64V1_0)
!   .set (ARCH_LA64V1_1, STR_ARCH_LA64V1_1);
  
  array_tune<const char *> loongarch_tune_strings = array_tune<const char *> ()
    .set (TUNE_NATIVE, STR_CPU_NATIVE)
    .set (TUNE_GENERIC, STR_TUNE_GENERIC)
    .set (TUNE_LOONGARCH64, STR_CPU_LOONGARCH64)
    .set (TUNE_LA464, STR_CPU_LA464)
!   .set (TUNE_LA664, STR_CPU_LA664);
  
  array_arch<loongarch_isa> loongarch_cpu_default_isa =
    array_arch<loongarch_isa> ()
--- 43,59 ----
    .set (ARCH_LA464, STR_CPU_LA464)
    .set (ARCH_LA664, STR_CPU_LA664)
    .set (ARCH_LA64V1_0, STR_ARCH_LA64V1_0)
!   .set (ARCH_LA64V1_1, STR_ARCH_LA64V1_1)
!   .set (ARCH_LA32V1_0, STR_ARCH_LA32V1_0)
!   .set (ARCH_LA32RV1_0, STR_ARCH_LA32RV1_0);
  
  array_tune<const char *> loongarch_tune_strings = array_tune<const char *> ()
    .set (TUNE_NATIVE, STR_CPU_NATIVE)
    .set (TUNE_GENERIC, STR_TUNE_GENERIC)
    .set (TUNE_LOONGARCH64, STR_CPU_LOONGARCH64)
    .set (TUNE_LA464, STR_CPU_LA464)
!   .set (TUNE_LA664, STR_CPU_LA664)
!   .set (TUNE_LOONGARCH32, STR_TUNE_LOONGARCH32);
  
  array_arch<loongarch_isa> loongarch_cpu_default_isa =
    array_arch<loongarch_isa> ()
*************** array_arch<loongarch_isa> loongarch_cpu_
*** 86,93 ****
  	    .simd_ (ISA_EXT_SIMD_LSX)
  	    .evolution_ (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA
  			 | OPTION_MASK_ISA_LAM_BH | OPTION_MASK_ISA_LAMCAS
! 			 | OPTION_MASK_ISA_FRECIPE | OPTION_MASK_ISA_SCQ));
  
  
  static inline loongarch_cache la464_cache ()
  {
--- 89,105 ----
  	    .simd_ (ISA_EXT_SIMD_LSX)
  	    .evolution_ (OPTION_MASK_ISA_DIV32 | OPTION_MASK_ISA_LD_SEQ_SA
  			 | OPTION_MASK_ISA_LAM_BH | OPTION_MASK_ISA_LAMCAS
! 			 | OPTION_MASK_ISA_FRECIPE | OPTION_MASK_ISA_SCQ))
! 
!     .set (ARCH_LA32V1_0,
! 	  loongarch_isa ()
! 	    .base_ (ISA_BASE_LA32)
! 	    .fpu_ (ISA_EXT_NONE))
  
+     .set (ARCH_LA32RV1_0,
+ 	  loongarch_isa ()
+ 	    .base_ (ISA_BASE_LA32R)
+ 	    .fpu_ (ISA_EXT_NONE));
  
  static inline loongarch_cache la464_cache ()
  {
*************** array_tune<loongarch_cache> loongarch_cp
*** 103,109 ****
      .set (TUNE_GENERIC, la464_cache ())
      .set (TUNE_LOONGARCH64, la464_cache ())
      .set (TUNE_LA464, la464_cache ())
!     .set (TUNE_LA664, la464_cache ());
  
  static inline loongarch_align la464_align ()
  {
--- 115,122 ----
      .set (TUNE_GENERIC, la464_cache ())
      .set (TUNE_LOONGARCH64, la464_cache ())
      .set (TUNE_LA464, la464_cache ())
!     .set (TUNE_LA664, la464_cache ())
!     .set (TUNE_LOONGARCH32, la464_cache ());
  
  static inline loongarch_align la464_align ()
  {
*************** array_tune<loongarch_align> loongarch_cp
*** 120,126 ****
      .set (TUNE_GENERIC, la664_align ())
      .set (TUNE_LOONGARCH64, la664_align ())
      .set (TUNE_LA464, la464_align ())
!     .set (TUNE_LA664, la664_align ());
  
  /* Default RTX cost initializer.  */
  loongarch_rtx_cost_data::loongarch_rtx_cost_data ()
--- 133,140 ----
      .set (TUNE_GENERIC, la664_align ())
      .set (TUNE_LOONGARCH64, la664_align ())
      .set (TUNE_LA464, la464_align ())
!     .set (TUNE_LA664, la664_align ())
!     .set (TUNE_LOONGARCH32, la664_align ());
  
  /* Default RTX cost initializer.  */
  loongarch_rtx_cost_data::loongarch_rtx_cost_data ()
*************** array_tune<int> loongarch_cpu_issue_rate
*** 172,185 ****
    .set (TUNE_GENERIC, 4)
    .set (TUNE_LOONGARCH64, 4)
    .set (TUNE_LA464, 4)
!   .set (TUNE_LA664, 6);
  
  array_tune<int> loongarch_cpu_multipass_dfa_lookahead = array_tune<int> ()
    .set (TUNE_NATIVE, 4)
    .set (TUNE_GENERIC, 4)
    .set (TUNE_LOONGARCH64, 4)
    .set (TUNE_LA464, 4)
!   .set (TUNE_LA664, 6);
  
  /* Wiring string definitions from loongarch-str.h to global arrays
     with standard index values from loongarch-opts.h, so we can
--- 186,201 ----
    .set (TUNE_GENERIC, 4)
    .set (TUNE_LOONGARCH64, 4)
    .set (TUNE_LA464, 4)
!   .set (TUNE_LA664, 6)
!   .set (TUNE_LOONGARCH32, 4);
  
  array_tune<int> loongarch_cpu_multipass_dfa_lookahead = array_tune<int> ()
    .set (TUNE_NATIVE, 4)
    .set (TUNE_GENERIC, 4)
    .set (TUNE_LOONGARCH64, 4)
    .set (TUNE_LA464, 4)
!   .set (TUNE_LA664, 6)
!   .set (TUNE_LOONGARCH32, 4);
  
  /* Wiring string definitions from loongarch-str.h to global arrays
     with standard index values from loongarch-opts.h, so we can
*************** array_tune<int> loongarch_cpu_multipass_
*** 188,193 ****
--- 204,211 ----
  
  array<const char *, N_ISA_BASE_TYPES> loongarch_isa_base_strings =
    array<const char *, N_ISA_BASE_TYPES> ()
+     .set (ISA_BASE_LA32, STR_ISA_BASE_LA32)
+     .set (ISA_BASE_LA32R, STR_ISA_BASE_LA32R)
      .set (ISA_BASE_LA64, STR_ISA_BASE_LA64);
  
  array<const char *, N_ISA_EXT_TYPES> loongarch_isa_ext_strings =
*************** array<const char *, N_ISA_EXT_TYPES> loo
*** 200,205 ****
--- 218,226 ----
  
  array<const char *, N_ABI_BASE_TYPES> loongarch_abi_base_strings =
    array<const char *, N_ABI_BASE_TYPES> ()
+     .set (ABI_BASE_ILP32D, STR_ABI_BASE_ILP32D)
+     .set (ABI_BASE_ILP32F, STR_ABI_BASE_ILP32F)
+     .set (ABI_BASE_ILP32S, STR_ABI_BASE_ILP32S)
      .set (ABI_BASE_LP64D, STR_ABI_BASE_LP64D)
      .set (ABI_BASE_LP64F, STR_ABI_BASE_LP64F)
      .set (ABI_BASE_LP64S, STR_ABI_BASE_LP64S);
*************** array<const char *, N_CMODEL_TYPES> loon
*** 220,225 ****
--- 241,262 ----
  array<array<loongarch_isa, N_ABI_EXT_TYPES>, N_ABI_BASE_TYPES>
    abi_minimal_isa = array<array<loongarch_isa, N_ABI_EXT_TYPES>,
  			  N_ABI_BASE_TYPES> ()
+     .set (ABI_BASE_ILP32D,
+ 	  array<loongarch_isa, N_ABI_EXT_TYPES> ()
+ 	    .set (ABI_EXT_BASE,
+ 		  loongarch_isa ()
+ 		    .base_ (ISA_BASE_LA32R)
+ 		    .fpu_ (ISA_EXT_FPU64)))
+     .set (ABI_BASE_ILP32F,
+ 	  array<loongarch_isa, N_ABI_EXT_TYPES> ()
+ 	    .set (ABI_EXT_BASE,
+ 		  loongarch_isa ()
+ 		    .base_ (ISA_BASE_LA32R)
+ 		    .fpu_ (ISA_EXT_FPU32)))
+     .set (ABI_BASE_ILP32S,
+ 	  array<loongarch_isa, N_ABI_EXT_TYPES> ()
+ 	    .set (ABI_EXT_BASE,
+ 		  loongarch_isa ().base_ (ISA_BASE_LA32R)))
      .set (ABI_BASE_LP64D,
  	  array<loongarch_isa, N_ABI_EXT_TYPES> ()
  	    .set (ABI_EXT_BASE,
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-def.h gcc-16-20251214/gcc/config/loongarch/loongarch-def.h
*** gcc-16-20251207/gcc/config/loongarch/loongarch-def.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-def.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 55,61 ****
  /* ISA base */
  enum {
    ISA_BASE_LA64		= 0,  /* LoongArch64 */
!   N_ISA_BASE_TYPES	= 1
  };
  
  extern loongarch_def_array<const char *, N_ISA_BASE_TYPES>
--- 55,63 ----
  /* ISA base */
  enum {
    ISA_BASE_LA64		= 0,  /* LoongArch64 */
!   ISA_BASE_LA32		= 1,  /* LoongArch32 */
!   ISA_BASE_LA32R	= 2,  /* LoongArch32 Reduced */
!   N_ISA_BASE_TYPES	= 3
  };
  
  extern loongarch_def_array<const char *, N_ISA_BASE_TYPES>
*************** extern loongarch_def_array<const char *,
*** 81,105 ****
  #define ABI_BASE_LP64D	  0
  #define ABI_BASE_LP64F	  1
  #define ABI_BASE_LP64S	  2
! #define N_ABI_BASE_TYPES  3
  
  extern loongarch_def_array<const char *, N_ABI_BASE_TYPES>
    loongarch_abi_base_strings;
  
  #define TO_LP64_ABI_BASE(C) (C)
  
  #define ABI_LP64_P(abi_base) \
    (abi_base == ABI_BASE_LP64D \
     || abi_base == ABI_BASE_LP64F \
     || abi_base == ABI_BASE_LP64S)
  
  #define ABI_FPU64_P(abi_base) \
!   (abi_base == ABI_BASE_LP64D)
  #define ABI_FPU32_P(abi_base) \
!   (abi_base == ABI_BASE_LP64F)
  #define ABI_NOFPU_P(abi_base) \
!   (abi_base == ABI_BASE_LP64S)
! 
  
  /* ABI Extension */
  enum {
--- 83,114 ----
  #define ABI_BASE_LP64D	  0
  #define ABI_BASE_LP64F	  1
  #define ABI_BASE_LP64S	  2
! #define ABI_BASE_ILP32D	  3
! #define ABI_BASE_ILP32F	  4
! #define ABI_BASE_ILP32S	  5
! #define N_ABI_BASE_TYPES  6
  
  extern loongarch_def_array<const char *, N_ABI_BASE_TYPES>
    loongarch_abi_base_strings;
  
  #define TO_LP64_ABI_BASE(C) (C)
  
+ #define ABI_ILP32_P(abi_base) \
+   (abi_base == ABI_BASE_ILP32D \
+    || abi_base == ABI_BASE_ILP32F \
+    || abi_base == ABI_BASE_ILP32S)
+ 
  #define ABI_LP64_P(abi_base) \
    (abi_base == ABI_BASE_LP64D \
     || abi_base == ABI_BASE_LP64F \
     || abi_base == ABI_BASE_LP64S)
  
  #define ABI_FPU64_P(abi_base) \
!   (abi_base == ABI_BASE_LP64D || abi_base == ABI_BASE_ILP32D)
  #define ABI_FPU32_P(abi_base) \
!   (abi_base == ABI_BASE_LP64F || abi_base == ABI_BASE_ILP32F)
  #define ABI_NOFPU_P(abi_base) \
!   (abi_base == ABI_BASE_LP64S || abi_base == ABI_BASE_ILP32S)
  
  /* ABI Extension */
  enum {
*************** enum {
*** 190,196 ****
    ARCH_LA664	    = 4,
    ARCH_LA64V1_0     = 5,
    ARCH_LA64V1_1     = 6,
!   N_ARCH_TYPES      = 7,
  };
  
  /* Tune target presets (-mtune=*) */
--- 199,207 ----
    ARCH_LA664	    = 4,
    ARCH_LA64V1_0     = 5,
    ARCH_LA64V1_1     = 6,
!   ARCH_LA32V1_0     = 7,
!   ARCH_LA32RV1_0    = 8,
!   N_ARCH_TYPES      = 9,
  };
  
  /* Tune target presets (-mtune=*) */
*************** enum {
*** 200,206 ****
    TUNE_LOONGARCH64  = 2,
    TUNE_LA464	    = 3,
    TUNE_LA664	    = 4,
!   N_TUNE_TYPES      = 5,
  };
  
  /* TLS types.  */
--- 211,218 ----
    TUNE_LOONGARCH64  = 2,
    TUNE_LA464	    = 3,
    TUNE_LA664	    = 4,
!   TUNE_LOONGARCH32  = 5,
!   N_TUNE_TYPES      = 6,
  };
  
  /* TLS types.  */
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-driver.h gcc-16-20251214/gcc/config/loongarch/loongarch-driver.h
*** gcc-16-20251207/gcc/config/loongarch/loongarch-driver.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-driver.h	Sun Dec 14 22:32:06 2025
*************** driver_get_normalized_m_opts (int argc,
*** 118,126 ****
--- 118,130 ----
  
  /* ABI spec strings.  */
  #define ABI_GRLEN_SPEC \
+   "%{mabi=ilp32*:32}"   \
    "%{mabi=lp64*:64}"   \
  
  #define ABI_SPEC \
+   "%{mabi=ilp32d:ilp32d}" \
+   "%{mabi=ilp32f:ilp32f}" \
+   "%{mabi=ilp32s:ilp32s}" \
    "%{mabi=lp64d:lp64d}" \
    "%{mabi=lp64f:lp64f}" \
    "%{mabi=lp64s:lp64s}" \
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-opts.cc gcc-16-20251214/gcc/config/loongarch/loongarch-opts.cc
*** gcc-16-20251207/gcc/config/loongarch/loongarch-opts.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-opts.cc	Sun Dec 14 22:32:06 2025
*************** abi_priority_list[] = {
*** 46,51 ****
--- 46,54 ----
      {ABI_BASE_LP64D, ABI_EXT_BASE},
      {ABI_BASE_LP64F, ABI_EXT_BASE},
      {ABI_BASE_LP64S, ABI_EXT_BASE},
+     {ABI_BASE_ILP32D, ABI_EXT_BASE},
+     {ABI_BASE_ILP32F, ABI_EXT_BASE},
+     {ABI_BASE_ILP32S, ABI_EXT_BASE},
  };
  
  /* Initialize enabled_abi_types from TM_MULTILIB_LIST.  */
*************** config_target_isa:
*** 355,360 ****
--- 358,369 ----
  	  }
        }
  
+   /* TARGET_32BIT and TARGET_64BIT init at the end of this function,
+      can't use here.  */
+   if ((t.isa.base == ISA_BASE_LA32 || t.isa.base == ISA_BASE_LA32R)
+       && (t.isa.simd == ISA_EXT_SIMD_LSX || t.isa.simd == ISA_EXT_SIMD_LASX))
+     fatal_error (UNKNOWN_LOCATION, "SIMD is not supported on LA32");
+ 
    /* All SIMD extensions imply a 64-bit FPU:
       - silently adjust t.isa.fpu to "fpu64" if it is unconstrained.
       - warn if -msingle-float / -msoft-float is on,
*************** fallback:
*** 554,560 ****
--- 563,577 ----
  
      case CMODEL_NORMAL:
      case CMODEL_MEDIUM:
+       break;
+ 
      case CMODEL_EXTREME:
+       if (t.isa.base == ISA_BASE_LA32 || t.isa.base == ISA_BASE_LA32R)
+ 	{
+ 	  warning (0, "%qs is not supported, now cmodel is set to %qs",
+ 		   loongarch_cmodel_strings[t.cmodel], "normal");
+ 	  t.cmodel = CMODEL_NORMAL;
+ 	}
        break;
  
      default:
*************** fallback:
*** 567,572 ****
--- 584,593 ----
    /* Cleanup and return.  */
    obstack_free (&msg_obstack, NULL);
    *target = t;
+ 
+   /* TODO: mexplicit-relocs support for LA32.  */
+   if (TARGET_32BIT)
+     la_opt_explicit_relocs = EXPLICIT_RELOCS_NONE;
  }
  
  /* Returns the default ABI for the given instruction set.  */
*************** isa_default_abi (const struct loongarch_
*** 578,595 ****
    switch (isa->fpu)
      {
        case ISA_EXT_FPU64:
! 	if (isa->base >= ISA_BASE_LA64)
  	  abi.base = ABI_BASE_LP64D;
  	break;
  
        case ISA_EXT_FPU32:
! 	if (isa->base >= ISA_BASE_LA64)
  	  abi.base = ABI_BASE_LP64F;
  	break;
  
        case ISA_EXT_NONE:
! 	if (isa->base >= ISA_BASE_LA64)
  	  abi.base = ABI_BASE_LP64S;
  	break;
  
        default:
--- 599,622 ----
    switch (isa->fpu)
      {
        case ISA_EXT_FPU64:
! 	if (isa->base == ISA_BASE_LA64)
  	  abi.base = ABI_BASE_LP64D;
+ 	else if (isa->base == ISA_BASE_LA32 || isa->base == ISA_BASE_LA32R)
+ 	  abi.base = ABI_BASE_ILP32D;
  	break;
  
        case ISA_EXT_FPU32:
! 	if (isa->base == ISA_BASE_LA64)
  	  abi.base = ABI_BASE_LP64F;
+ 	else if (isa->base == ISA_BASE_LA32 || isa->base == ISA_BASE_LA32R)
+ 	  abi.base = ABI_BASE_ILP32F;
  	break;
  
        case ISA_EXT_NONE:
! 	if (isa->base == ISA_BASE_LA64)
  	  abi.base = ABI_BASE_LP64S;
+ 	else if (isa->base == ISA_BASE_LA32 || isa->base == ISA_BASE_LA32R)
+ 	  abi.base = ABI_BASE_ILP32S;
  	break;
  
        default:
*************** isa_base_compat_p (const struct loongarc
*** 608,614 ****
    switch (set2->base)
      {
        case ISA_BASE_LA64:
! 	return (set1->base >= ISA_BASE_LA64);
  
        default:
  	gcc_unreachable ();
--- 635,647 ----
    switch (set2->base)
      {
        case ISA_BASE_LA64:
! 	return (set1->base == ISA_BASE_LA64);
! 
!       case ISA_BASE_LA32:
! 	return (set1->base == ISA_BASE_LA32);
! 
!       case ISA_BASE_LA32R:
! 	return (set1->base == ISA_BASE_LA32R || set1->base == ISA_BASE_LA32);
  
        default:
  	gcc_unreachable ();
*************** abi_default_cpu_arch (struct loongarch_a
*** 661,666 ****
--- 694,705 ----
    if (abi.ext == ABI_EXT_BASE)
      switch (abi.base)
        {
+ 	case ABI_BASE_ILP32D:
+ 	case ABI_BASE_ILP32F:
+ 	case ABI_BASE_ILP32S:
+ 	  *isa = isa_required (abi);
+ 	  return ARCH_LA32V1_0;
+ 
  	case ABI_BASE_LP64D:
  	case ABI_BASE_LP64F:
  	case ABI_BASE_LP64S:
*************** default_tune_for_arch (int arch, int fal
*** 692,697 ****
--- 731,738 ----
      case ARCH_ABI_DEFAULT:
      case ARCH_LA64V1_0:
      case ARCH_LA64V1_1:
+     case ARCH_LA32V1_0:
+     case ARCH_LA32RV1_0:
        ret = fallback;
      }
  
*************** loongarch_target_option_override (struct
*** 1016,1024 ****
    if (!opts_set->x_la_addr_reg_reg_cost)
      opts->x_la_addr_reg_reg_cost = loongarch_cost->addr_reg_reg_cost;
  
!   /* other stuff */
!   if (ABI_LP64_P (target->abi.base))
!     opts->x_flag_pcc_struct_return = 0;
  
    switch (target->cmodel)
      {
--- 1057,1065 ----
    if (!opts_set->x_la_addr_reg_reg_cost)
      opts->x_la_addr_reg_reg_cost = loongarch_cost->addr_reg_reg_cost;
  
!   /* Enable -mstrict-align by default on LA32.  */
!   if (TARGET_32BIT && !(opts_set->x_target_flags & MASK_STRICT_ALIGN))
!     opts->x_target_flags |= MASK_STRICT_ALIGN;
  
    switch (target->cmodel)
      {
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-opts.h gcc-16-20251214/gcc/config/loongarch/loongarch-opts.h
*** gcc-16-20251207/gcc/config/loongarch/loongarch-opts.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-opts.h	Sun Dec 14 22:32:06 2025
*************** struct loongarch_flags {
*** 93,107 ****
  #define TARGET_CMODEL_EXTREME	    (la_target.cmodel == CMODEL_EXTREME)
  
  #define TARGET_HARD_FLOAT	    (la_target.isa.fpu != ISA_EXT_NONE)
! #define TARGET_HARD_FLOAT_ABI	    (la_target.abi.base == ABI_BASE_LP64D \
  				     || la_target.abi.base == ABI_BASE_LP64F)
  
  #define TARGET_SOFT_FLOAT	  (la_target.isa.fpu == ISA_EXT_NONE)
! #define TARGET_SOFT_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_LP64S)
  #define TARGET_SINGLE_FLOAT	  (la_target.isa.fpu == ISA_EXT_FPU32)
! #define TARGET_SINGLE_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_LP64F)
  #define TARGET_DOUBLE_FLOAT	  (la_target.isa.fpu == ISA_EXT_FPU64)
! #define TARGET_DOUBLE_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_LP64D)
  
  #define TARGET_64BIT		  (la_target.isa.base == ISA_BASE_LA64)
  #define TARGET_ABI_LP64		  ABI_LP64_P(la_target.abi.base)
--- 93,118 ----
  #define TARGET_CMODEL_EXTREME	    (la_target.cmodel == CMODEL_EXTREME)
  
  #define TARGET_HARD_FLOAT	    (la_target.isa.fpu != ISA_EXT_NONE)
! #define TARGET_HARD_FLOAT_ABI	    (la_target.abi.base == ABI_BASE_ILP32D \
! 				     || la_target.abi.base == ABI_BASE_ILP32F \
! 				     || la_target.abi.base == ABI_BASE_LP64D \
  				     || la_target.abi.base == ABI_BASE_LP64F)
  
  #define TARGET_SOFT_FLOAT	  (la_target.isa.fpu == ISA_EXT_NONE)
! #define TARGET_SOFT_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_ILP32S \
! 				     || la_target.abi.base == ABI_BASE_LP64S)
  #define TARGET_SINGLE_FLOAT	  (la_target.isa.fpu == ISA_EXT_FPU32)
! #define TARGET_SINGLE_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_ILP32F \
! 				     || la_target.abi.base == ABI_BASE_LP64F)
  #define TARGET_DOUBLE_FLOAT	  (la_target.isa.fpu == ISA_EXT_FPU64)
! #define TARGET_DOUBLE_FLOAT_ABI	  (la_target.abi.base == ABI_BASE_ILP32D \
! 				     || la_target.abi.base == ABI_BASE_LP64D)
! 
! 
! #define TARGET_32BIT_S		  (la_target.isa.base == ISA_BASE_LA32)
! #define TARGET_32BIT_R		  (la_target.isa.base == ISA_BASE_LA32R)
! #define TARGET_32BIT		  (TARGET_32BIT_S || TARGET_32BIT_R)
! #define TARGET_ABI_ILP32	  ABI_ILP32_P(la_target.abi.base)
  
  #define TARGET_64BIT		  (la_target.isa.base == ISA_BASE_LA64)
  #define TARGET_ABI_LP64		  ABI_LP64_P(la_target.abi.base)
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch-str.h gcc-16-20251214/gcc/config/loongarch/loongarch-str.h
*** gcc-16-20251207/gcc/config/loongarch/loongarch-str.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch-str.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 35,40 ****
--- 35,47 ----
  #define STR_ARCH_LA64V1_0 "la64v1.0"
  #define STR_ARCH_LA64V1_1 "la64v1.1"
  
+ #define STR_ARCH_LA32V1_0 "la32v1.0"
+ #define STR_ARCH_LA32RV1_0 "la32rv1.0"
+ 
+ #define STR_TUNE_LOONGARCH32 "loongarch32"
+ 
+ #define STR_ISA_BASE_LA32 "la32"
+ #define STR_ISA_BASE_LA32R "la32r"
  #define STR_ISA_BASE_LA64 "la64"
  
  #define OPTSTR_ISA_EXT_FPU "fpu"
*************** along with GCC; see the file COPYING3.
*** 52,57 ****
--- 59,67 ----
  #define STR_ISA_EXT_LASX "lasx"
  
  #define OPTSTR_ABI_BASE "abi"
+ #define STR_ABI_BASE_ILP32D "ilp32d"
+ #define STR_ABI_BASE_ILP32F "ilp32f"
+ #define STR_ABI_BASE_ILP32S "ilp32s"
  #define STR_ABI_BASE_LP64D "lp64d"
  #define STR_ABI_BASE_LP64F "lp64f"
  #define STR_ABI_BASE_LP64S "lp64s"
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch.cc gcc-16-20251214/gcc/config/loongarch/loongarch.cc
*** gcc-16-20251207/gcc/config/loongarch/loongarch.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch.cc	Sun Dec 14 22:32:06 2025
*************** loongarch_for_each_saved_reg (HOST_WIDE_
*** 1051,1057 ****
      if (BITSET_P (cfun->machine->frame.fmask, regno - FP_REG_FIRST))
        {
  	if (!cfun->machine->reg_is_wrapped_separately[regno])
! 	  loongarch_save_restore_reg (word_mode, regno, offset, fn);
  
  	offset -= GET_MODE_SIZE (mode);
        }
--- 1051,1057 ----
      if (BITSET_P (cfun->machine->frame.fmask, regno - FP_REG_FIRST))
        {
  	if (!cfun->machine->reg_is_wrapped_separately[regno])
! 	  loongarch_save_restore_reg (mode, regno, offset, fn);
  
  	offset -= GET_MODE_SIZE (mode);
        }
*************** loongarch_symbolic_constant_p (rtx x, en
*** 2289,2294 ****
--- 2289,2297 ----
  bool
  loongarch_explicit_relocs_p (enum loongarch_symbol_type type)
  {
+   if (TARGET_32BIT)
+     return false;
+ 
    if (la_opt_explicit_relocs != EXPLICIT_RELOCS_AUTO)
      return la_opt_explicit_relocs == EXPLICIT_RELOCS_ALWAYS;
  
*************** loongarch_valid_offset_p (rtx x, machine
*** 2445,2451 ****
       or check that X is a signed 16-bit number
       and offset 4 byte aligned.  */
    if (!(const_arith_operand (x, Pmode)
! 	|| ((mode == E_SImode || mode == E_DImode)
  	    && const_imm16_operand (x, Pmode)
  	    && (loongarch_signed_immediate_p (INTVAL (x), 14, 2)))))
      return false;
--- 2448,2456 ----
       or check that X is a signed 16-bit number
       and offset 4 byte aligned.  */
    if (!(const_arith_operand (x, Pmode)
! 	/* FIXME: la32 atomic insns support 16-bit imm.  */
! 	|| (TARGET_64BIT
! 	    && (mode == E_SImode || mode == E_DImode)
  	    && const_imm16_operand (x, Pmode)
  	    && (loongarch_signed_immediate_p (INTVAL (x), 14, 2)))))
      return false;
*************** static bool
*** 2491,2497 ****
  loongarch_valid_lo_sum_p (enum loongarch_symbol_type symbol_type,
  			  machine_mode mode, rtx x)
  {
!   int align, size;
  
    /* Check that symbols of type SYMBOL_TYPE can be used to access values
       of mode MODE.  */
--- 2496,2502 ----
  loongarch_valid_lo_sum_p (enum loongarch_symbol_type symbol_type,
  			  machine_mode mode, rtx x)
  {
!   int align, size, word_size;
  
    /* Check that symbols of type SYMBOL_TYPE can be used to access values
       of mode MODE.  */
*************** loongarch_valid_lo_sum_p (enum loongarch
*** 2532,2538 ****
  
    /* We may need to split multiword moves, so make sure that each word
       can be accessed without inducing a carry.  */
!   if (size > BITS_PER_WORD
        && (!TARGET_STRICT_ALIGN || size > align))
      return false;
  
--- 2537,2546 ----
  
    /* We may need to split multiword moves, so make sure that each word
       can be accessed without inducing a carry.  */
!   word_size = (GET_MODE_CLASS (mode) == MODE_FLOAT
! 	       ? (UNITS_PER_HWFPVALUE * BITS_PER_UNIT)
! 	       : BITS_PER_WORD);
!   if (size > word_size
        && (!TARGET_STRICT_ALIGN || size > align))
      return false;
  
*************** loongarch_valid_index_p (struct loongarc
*** 2558,2564 ****
        && contains_reg_of_mode[GENERAL_REGS][GET_MODE (SUBREG_REG (index))])
      index = SUBREG_REG (index);
  
!   if (loongarch_valid_base_register_p (index, mode, strict_p))
      {
        info->type = ADDRESS_REG_REG;
        info->offset = index;
--- 2566,2573 ----
        && contains_reg_of_mode[GENERAL_REGS][GET_MODE (SUBREG_REG (index))])
      index = SUBREG_REG (index);
  
!   /* LA32 does not provide LDX/STX.  */
!   if (TARGET_64BIT && loongarch_valid_base_register_p (index, mode, strict_p))
      {
        info->type = ADDRESS_REG_REG;
        info->offset = index;
*************** loongarch_call_tls_get_addr (rtx sym, en
*** 3142,3160 ****
  		{
  		  rtx call;
  
! 		 if (HAVE_AS_SUPPORT_CALL36)
! 		   call = gen_call_value_internal (v0, loongarch_tls_symbol,
! 						   const0_rtx);
! 		 else
! 		   {
! 		     rtx reg = gen_reg_rtx (Pmode);
! 		     emit_insn (gen_pcalau12i (Pmode, reg,
! 					       loongarch_tls_symbol));
! 		     call = gen_call_value_internal_1 (Pmode, v0, reg,
! 						       loongarch_tls_symbol,
! 						       const0_rtx);
! 		   }
! 		 insn = emit_call_insn (call);
  		}
  	      else
  		{
--- 3151,3172 ----
  		{
  		  rtx call;
  
! 		  /* Use call36 or call30.
! 		    TARGET_32BIT always support call30.  */
! 		  if ((TARGET_64BIT && HAVE_AS_SUPPORT_CALL36)
! 		      || TARGET_32BIT)
! 		    call = gen_call_value_internal (v0, loongarch_tls_symbol,
! 						    const0_rtx);
! 		  else
! 		    {
! 		      rtx reg = gen_reg_rtx (Pmode);
! 		      emit_insn (gen_pcalau12i (Pmode, reg,
! 						loongarch_tls_symbol));
! 		      call = gen_call_value_internal_1 (Pmode, v0, reg,
! 							loongarch_tls_symbol,
! 							const0_rtx);
! 		    }
! 		  insn = emit_call_insn (call);
  		}
  	      else
  		{
*************** loongarch_legitimize_address (rtx x, rtx
*** 3608,3614 ****
    if (offset != 0)
      {
        /* Handle (plus (plus (mult (a) (mem_shadd_constant)) (fp)) (C)) case.  */
!       if (GET_CODE (base) == PLUS && mem_shadd_or_shadd_rtx_p (XEXP (base, 0))
  	  && IMM12_OPERAND (offset))
  	{
  	  rtx index = XEXP (base, 0);
--- 3620,3628 ----
    if (offset != 0)
      {
        /* Handle (plus (plus (mult (a) (mem_shadd_constant)) (fp)) (C)) case.  */
!       if ((TARGET_64BIT || TARGET_32BIT_S)
! 	  && GET_CODE (base) == PLUS
! 	  && mem_shadd_or_shadd_rtx_p (XEXP (base, 0))
  	  && IMM12_OPERAND (offset))
  	{
  	  rtx index = XEXP (base, 0);
*************** loongarch_split_move_p (rtx dest, rtx sr
*** 4899,4910 ****
  void
  loongarch_split_move (rtx dest, rtx src)
  {
    gcc_checking_assert (loongarch_split_move_p (dest, src));
    if (LSX_SUPPORTED_MODE_P (GET_MODE (dest))
        || LASX_SUPPORTED_MODE_P (GET_MODE (dest)))
      loongarch_split_vector_move (dest, src);
    else
!     gcc_unreachable ();
  }
  
  /* Check if adding an integer constant value for a specific mode can be
--- 4913,4953 ----
  void
  loongarch_split_move (rtx dest, rtx src)
  {
+   rtx low_dest;
+ 
    gcc_checking_assert (loongarch_split_move_p (dest, src));
    if (LSX_SUPPORTED_MODE_P (GET_MODE (dest))
        || LASX_SUPPORTED_MODE_P (GET_MODE (dest)))
      loongarch_split_vector_move (dest, src);
+   else if (FP_REG_RTX_P (dest) || FP_REG_RTX_P (src))
+     {
+       if (TARGET_32BIT && GET_MODE (dest) == DImode)
+ 	emit_insn (gen_move_doubleword_2_di (dest, src));
+       else if (TARGET_32BIT && GET_MODE (dest) == DFmode)
+ 	emit_insn (gen_move_doubleword_2_df (dest, src));
+       else if (TARGET_64BIT && GET_MODE (dest) == TFmode)
+ 	emit_insn (gen_move_doubleword_2_tf (dest, src));
+       else
+ 	gcc_unreachable ();
+     }
    else
!     {
!       /* The operation can be split into two normal moves.  Decide in
! 	 which order to do them.  */
!       low_dest = loongarch_subword (dest, false);
!       if (REG_P (low_dest) && reg_overlap_mentioned_p (low_dest, src))
! 	{
! 	  loongarch_emit_move (loongarch_subword (dest, true),
! 			       loongarch_subword (src, true));
! 	  loongarch_emit_move (low_dest, loongarch_subword (src, false));
! 	}
!       else
! 	{
! 	  loongarch_emit_move (low_dest, loongarch_subword (src, false));
! 	  loongarch_emit_move (loongarch_subword (dest, true),
! 			       loongarch_subword (src, true));
! 	}
!     }
  }
  
  /* Check if adding an integer constant value for a specific mode can be
*************** loongarch_output_move_index (rtx x, mach
*** 5033,5038 ****
--- 5076,5082 ----
        }
      };
  
+   gcc_assert (TARGET_64BIT);
    return insn[ldr][index];
  }
  
*************** loongarch_output_move (rtx *operands)
*** 5284,5293 ****
  	      /* Matching address type with a 12bit offset and
  		 ADDRESS_LO_SUM.  */
  	      if (const_arith_operand (offset, Pmode)
! 		  || GET_CODE (offset) == LO_SUM)
  		return "st.w\t%z1,%0";
  	      else
! 		return "stptr.w\t%z1,%0";
  	    case 8:
  	      if (const_arith_operand (offset, Pmode)
  		  || GET_CODE (offset) == LO_SUM)
--- 5328,5341 ----
  	      /* Matching address type with a 12bit offset and
  		 ADDRESS_LO_SUM.  */
  	      if (const_arith_operand (offset, Pmode)
! 		  || GET_CODE (offset) == LO_SUM
! 		  || GET_CODE (XEXP (dest, 0)) == REG)
  		return "st.w\t%z1,%0";
  	      else
! 		{
! 		  gcc_assert (TARGET_64BIT);
! 		  return "stptr.w\t%z1,%0";
! 		}
  	    case 8:
  	      if (const_arith_operand (offset, Pmode)
  		  || GET_CODE (offset) == LO_SUM)
*************** loongarch_output_move (rtx *operands)
*** 5329,5338 ****
  	      /* Matching address type with a 12bit offset and
  		 ADDRESS_LO_SUM.  */
  	      if (const_arith_operand (offset, Pmode)
! 		  || GET_CODE (offset) == LO_SUM)
  		return "ld.w\t%0,%1";
  	      else
! 		return "ldptr.w\t%0,%1";
  	    case 8:
  	      if (const_arith_operand (offset, Pmode)
  		  || GET_CODE (offset) == LO_SUM)
--- 5377,5390 ----
  	      /* Matching address type with a 12bit offset and
  		 ADDRESS_LO_SUM.  */
  	      if (const_arith_operand (offset, Pmode)
! 		  || GET_CODE (offset) == LO_SUM
! 		  || GET_CODE (XEXP (src, 0)) == REG)
  		return "ld.w\t%0,%1";
  	      else
! 		{
! 		  gcc_assert (TARGET_64BIT);
! 		  return "ldptr.w\t%0,%1";
! 		}
  	    case 8:
  	      if (const_arith_operand (offset, Pmode)
  		  || GET_CODE (offset) == LO_SUM)
*************** loongarch_emit_int_compare (enum rtx_cod
*** 5709,5714 ****
--- 5761,5767 ----
  		break;
  
  	      new_rhs = rhs + (increment ? 1 : -1);
+ 	      new_rhs = trunc_int_for_mode (new_rhs, GET_MODE (*op0));
  	      if (loongarch_integer_cost (new_rhs)
  		    < loongarch_integer_cost (rhs))
  		{
*************** loongarch_adjust_block_mem (rtx mem, HOS
*** 6142,6149 ****
     the memory regions do not overlap.  */
  
  static void
! loongarch_block_move_loop (rtx dest, rtx src, HOST_WIDE_INT length,
! 			   HOST_WIDE_INT align)
  {
    rtx_code_label *label;
    rtx src_reg, dest_reg, final_src, test;
--- 6195,6202 ----
     the memory regions do not overlap.  */
  
  static void
! loongarch_block_move_loop (rtx dest, rtx src, unsigned HOST_WIDE_INT length,
! 			   unsigned HOST_WIDE_INT align)
  {
    rtx_code_label *label;
    rtx src_reg, dest_reg, final_src, test;
*************** loongarch_expand_block_move (rtx dest, r
*** 6199,6209 ****
    if (!CONST_INT_P (r_length))
      return false;
  
!   HOST_WIDE_INT length = INTVAL (r_length);
!   if (length > la_max_inline_memcpy_size)
      return false;
  
!   HOST_WIDE_INT align = INTVAL (r_align);
  
    if (!TARGET_STRICT_ALIGN || align > LARCH_MAX_MOVE_PER_INSN)
      align = LARCH_MAX_MOVE_PER_INSN;
--- 6252,6262 ----
    if (!CONST_INT_P (r_length))
      return false;
  
!   unsigned HOST_WIDE_INT length = UINTVAL (r_length);
!   if (length > (unsigned HOST_WIDE_INT) la_max_inline_memcpy_size)
      return false;
  
!   unsigned HOST_WIDE_INT align = UINTVAL (r_align);
  
    if (!TARGET_STRICT_ALIGN || align > LARCH_MAX_MOVE_PER_INSN)
      align = LARCH_MAX_MOVE_PER_INSN;
*************** loongarch_output_equal_conditional_branc
*** 7840,7846 ****
  					   bool inverted_p)
  {
    const char *branch[2];
!   if (operands[3] == const0_rtx)
      {
        branch[!inverted_p] = LARCH_BRANCH ("b%C1z", "%2,%0");
        branch[inverted_p] = LARCH_BRANCH ("b%N1z", "%2,%0");
--- 7893,7900 ----
  					   bool inverted_p)
  {
    const char *branch[2];
!   if ((TARGET_64BIT || TARGET_32BIT_S)
!       && operands[3] == const0_rtx)
      {
        branch[!inverted_p] = LARCH_BRANCH ("b%C1z", "%2,%0");
        branch[inverted_p] = LARCH_BRANCH ("b%N1z", "%2,%0");
*************** loongarch_trampoline_init (rtx m_tramp,
*** 8508,8518 ****
  
    /* Build up the code in TRAMPOLINE.  */
    i = 0;
!   /*pcaddi $static_chain,0
      ld.[dw] $tmp,$static_chain,target_function_offset
      ld.[dw] $static_chain,$static_chain,static_chain_offset
      jirl $r0,$tmp,0  */
!   trampoline[i++] = OP (0x18000000 | (STATIC_CHAIN_REGNUM - GP_REG_FIRST));
    trampoline[i++] = OP ((ptr_mode == DImode ? 0x28c00000 : 0x28800000)
  			| 19 /* $t7  */
  			| ((STATIC_CHAIN_REGNUM - GP_REG_FIRST) << 5)
--- 8562,8572 ----
  
    /* Build up the code in TRAMPOLINE.  */
    i = 0;
!   /*pcaddu12i $static_chain,0
      ld.[dw] $tmp,$static_chain,target_function_offset
      ld.[dw] $static_chain,$static_chain,static_chain_offset
      jirl $r0,$tmp,0  */
!   trampoline[i++] = OP (0x1c000000 | (STATIC_CHAIN_REGNUM - GP_REG_FIRST));
    trampoline[i++] = OP ((ptr_mode == DImode ? 0x28c00000 : 0x28800000)
  			| 19 /* $t7  */
  			| ((STATIC_CHAIN_REGNUM - GP_REG_FIRST) << 5)
*************** loongarch_get_separate_components (void)
*** 8721,8731 ****
  	/* We can wrap general registers saved at [sp, sp + 32768) using the
  	   ldptr/stptr instructions.  For large offsets a pseudo register
  	   might be needed which cannot be created during the shrink
! 	   wrapping pass.
! 
! 	   TODO: This may need a revise when we add LA32 as ldptr.w is not
! 	   guaranteed available by the manual.  */
! 	if (offset < 32768)
  	  bitmap_set_bit (components, regno);
  
  	offset -= UNITS_PER_WORD;
--- 8775,8783 ----
  	/* We can wrap general registers saved at [sp, sp + 32768) using the
  	   ldptr/stptr instructions.  For large offsets a pseudo register
  	   might be needed which cannot be created during the shrink
! 	   wrapping pass.  */
! 	if ((TARGET_64BIT && IMM16_OPERAND (offset))
! 	    || IMM12_OPERAND (offset))
  	  bitmap_set_bit (components, regno);
  
  	offset -= UNITS_PER_WORD;
*************** static machine_mode
*** 11323,11329 ****
  loongarch_c_mode_for_floating_type (enum tree_index ti)
  {
    if (ti == TI_LONG_DOUBLE_TYPE)
!     return TARGET_64BIT ? TFmode : DFmode;
    return default_mode_for_floating_type (ti);
  }
  
--- 11375,11381 ----
  loongarch_c_mode_for_floating_type (enum tree_index ti)
  {
    if (ti == TI_LONG_DOUBLE_TYPE)
!     return TFmode;
    return default_mode_for_floating_type (ti);
  }
  
*************** loongarch_c_mode_for_suffix (char suffix
*** 11393,11398 ****
--- 11445,11454 ----
  bool
  loongarch_bitint_type_info (int n, struct bitint_info *info)
  {
+   /* LA32 not support BitInt.  */
+   if (TARGET_32BIT)
+     return false;
+ 
    if (n <= 8)
      info->limb_mode = QImode;
    else if (n <= 16)
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch.h gcc-16-20251214/gcc/config/loongarch/loongarch.h
*** gcc-16-20251207/gcc/config/loongarch/loongarch.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 158,164 ****
  #define LONG_LONG_TYPE_SIZE 64
  
  /* LONG_DOUBLE_TYPE_SIZE get poisoned, so add LA_ prefix.  */
! #define LA_LONG_DOUBLE_TYPE_SIZE (TARGET_64BIT ? 128 : 64)
  
  /* Define the sizes of fixed-point types.  */
  #define SHORT_FRACT_TYPE_SIZE 8
--- 158,164 ----
  #define LONG_LONG_TYPE_SIZE 64
  
  /* LONG_DOUBLE_TYPE_SIZE get poisoned, so add LA_ prefix.  */
! #define LA_LONG_DOUBLE_TYPE_SIZE 128
  
  /* Define the sizes of fixed-point types.  */
  #define SHORT_FRACT_TYPE_SIZE 8
*************** along with GCC; see the file COPYING3.
*** 171,179 ****
  #define LONG_ACCUM_TYPE_SIZE 64
  #define LONG_LONG_ACCUM_TYPE_SIZE (TARGET_64BIT ? 128 : 64)
  
! /* long double is not a fixed mode, but the idea is that, if we
!    support long double, we also want a 128-bit integer type.  */
! #define MAX_FIXED_MODE_SIZE LA_LONG_DOUBLE_TYPE_SIZE
  
  /* Width in bits of a pointer.  */
  #ifndef POINTER_SIZE
--- 171,179 ----
  #define LONG_ACCUM_TYPE_SIZE 64
  #define LONG_LONG_ACCUM_TYPE_SIZE (TARGET_64BIT ? 128 : 64)
  
! /* An integer expression for the size in bits of the largest integer machine
!    mode that should actually be used.  */
! #define MAX_FIXED_MODE_SIZE GET_MODE_BITSIZE (TARGET_64BIT ? TImode : DImode)
  
  /* Width in bits of a pointer.  */
  #ifndef POINTER_SIZE
*************** enum reg_class
*** 656,661 ****
--- 656,664 ----
  
  #define REG_PARM_STACK_SPACE(FNDECL) 0
  
+ /* If the size of struct <= 2 * GRLEN, pass by registers if available.  */
+ #define DEFAULT_PCC_STRUCT_RETURN 0
+ 
  /* Define this if it is the responsibility of the caller to
     allocate the area reserved for arguments passed in registers.
     If `ACCUMULATE_OUTGOING_ARGS' is also defined, the only effect
*************** enum reg_class
*** 663,669 ****
     `crtl->outgoing_args_size'.  */
  #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
  
! #define STACK_BOUNDARY (TARGET_ABI_LP64 ? 128 : 64)
  
  /* This value controls how many pages we manually unroll the loop for when
     generating stack clash probes.  */
--- 666,672 ----
     `crtl->outgoing_args_size'.  */
  #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
  
! #define STACK_BOUNDARY 128
  
  /* This value controls how many pages we manually unroll the loop for when
     generating stack clash probes.  */
*************** typedef struct {
*** 750,757 ****
  
  /* Treat LOC as a byte offset from the stack pointer and round it up
     to the next fully-aligned offset.  */
! #define LARCH_STACK_ALIGN(LOC) \
!   (TARGET_ABI_LP64 ? ROUND_UP ((LOC), 16) : ROUND_UP ((LOC), 8))
  
  #define MCOUNT_NAME "_mcount"
  
--- 753,759 ----
  
  /* Treat LOC as a byte offset from the stack pointer and round it up
     to the next fully-aligned offset.  */
! #define LARCH_STACK_ALIGN(LOC) ROUND_UP ((LOC), 16)
  
  #define MCOUNT_NAME "_mcount"
  
*************** typedef struct {
*** 781,788 ****
  
  #define TRAMPOLINE_CODE_SIZE 16
  #define TRAMPOLINE_SIZE \
!   ((Pmode == SImode) ? TRAMPOLINE_CODE_SIZE \
! 		     : (TRAMPOLINE_CODE_SIZE + POINTER_SIZE * 2))
  #define TRAMPOLINE_ALIGNMENT POINTER_SIZE
  
  /* loongarch_trampoline_init calls this library function to flush
--- 783,789 ----
  
  #define TRAMPOLINE_CODE_SIZE 16
  #define TRAMPOLINE_SIZE \
! 	  (TRAMPOLINE_CODE_SIZE + GET_MODE_SIZE (ptr_mode) * 2)
  #define TRAMPOLINE_ALIGNMENT POINTER_SIZE
  
  /* loongarch_trampoline_init calls this library function to flush
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch.md gcc-16-20251214/gcc/config/loongarch/loongarch.md
*** gcc-16-20251207/gcc/config/loongarch/loongarch.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch.md	Sun Dec 14 22:32:06 2025
***************
*** 409,414 ****
--- 409,420 ----
  (define_mode_iterator ANYFI [(SI "TARGET_HARD_FLOAT")
  			     (DI "TARGET_DOUBLE_FLOAT")])
  
+ ;; A mode for which moves involving FPRs may need to be split.
+ (define_mode_iterator SPLITF
+   [(DF "!TARGET_64BIT && TARGET_DOUBLE_FLOAT")
+    (DI "!TARGET_64BIT && TARGET_DOUBLE_FLOAT")
+    (TF "TARGET_64BIT && TARGET_DOUBLE_FLOAT")])
+ 
  ;; A mode for anything with 32 bits or more, and able to be loaded with
  ;; the same addressing mode as ld.w.
  (define_mode_iterator LD_AT_LEAST_32_BIT [GPR ANYF])
***************
*** 633,639 ****
  ;; so the redundant sign extension can be removed if the output is used as
  ;; an input of a bitwise operation.  Note plus, rotl, and div are handled
  ;; separately.
! (define_code_iterator shift_w [any_shift rotatert])
  (define_code_iterator arith_w [minus mult])
  
  (define_expand "<optab><mode>3"
--- 639,645 ----
  ;; so the redundant sign extension can be removed if the output is used as
  ;; an input of a bitwise operation.  Note plus, rotl, and div are handled
  ;; separately.
! (define_code_iterator shift_w [any_shift (rotatert "!TARGET_32BIT_R")])
  (define_code_iterator arith_w [minus mult])
  
  (define_expand "<optab><mode>3"
***************
*** 743,772 ****
    [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r")
  	(plus:SI (match_operand:SI 1 "register_operand" "r,r,r,r,r")
  		 (match_operand:SI 2 "plus_si_operand"  "r,I,La,Le,Lb")))]
!   "TARGET_64BIT"
  {
!   if (CONST_INT_P (operands[2]) && !IMM12_INT (operands[2])
!       && ADDU16I_OPERAND (INTVAL (operands[2])))
!     {
!       rtx t1 = gen_reg_rtx (DImode);
!       rtx t2 = gen_reg_rtx (DImode);
!       rtx t3 = gen_reg_rtx (DImode);
!       emit_insn (gen_extend_insn (t1, operands[1], DImode, SImode, 0));
!       t2 = operands[2];
!       emit_insn (gen_adddi3 (t3, t1, t2));
!       t3 = gen_lowpart (SImode, t3);
!       emit_move_insn (operands[0], t3);
!       DONE;
!     }
!   else
      {
!       rtx t = gen_reg_rtx (DImode);
!       emit_insn (gen_addsi3_extended (t, operands[1], operands[2]));
!       t = gen_lowpart (SImode, t);
!       SUBREG_PROMOTED_VAR_P (t) = 1;
!       SUBREG_PROMOTED_SET (t, SRP_SIGNED);
!       emit_move_insn (operands[0], t);
!       DONE;
      }
  })
  
--- 749,781 ----
    [(set (match_operand:SI 0 "register_operand" "=r,r,r,r,r")
  	(plus:SI (match_operand:SI 1 "register_operand" "r,r,r,r,r")
  		 (match_operand:SI 2 "plus_si_operand"  "r,I,La,Le,Lb")))]
!   ""
  {
!   if (TARGET_64BIT)
      {
!       if (CONST_INT_P (operands[2]) && !IMM12_INT (operands[2])
! 	  && ADDU16I_OPERAND (INTVAL (operands[2])))
! 	{
! 	  rtx t1 = gen_reg_rtx (DImode);
! 	  rtx t2 = gen_reg_rtx (DImode);
! 	  rtx t3 = gen_reg_rtx (DImode);
! 	  emit_insn (gen_extend_insn (t1, operands[1], DImode, SImode, 0));
! 	  t2 = operands[2];
! 	  emit_insn (gen_adddi3 (t3, t1, t2));
! 	  t3 = gen_lowpart (SImode, t3);
! 	  emit_move_insn (operands[0], t3);
! 	  DONE;
! 	}
!       else
! 	{
! 	  rtx t = gen_reg_rtx (DImode);
! 	  emit_insn (gen_addsi3_extended (t, operands[1], operands[2]));
! 	  t = gen_lowpart (SImode, t);
! 	  SUBREG_PROMOTED_VAR_P (t) = 1;
! 	  SUBREG_PROMOTED_SET (t, SRP_SIGNED);
! 	  emit_move_insn (operands[0], t);
! 	  DONE;
! 	}
      }
  })
  
***************
*** 1376,1382 ****
  	(unspec:ANYF [(match_operand:ANYF    1 "register_operand" "f")
  		      (match_operand:<IMODE> 2 "register_operand" "f")]
  		     UNSPEC_FSCALEB))]
!   "TARGET_HARD_FLOAT"
    "fscaleb.<fmt>\t%0,%1,%2"
    [(set_attr "type" "fscaleb")
     (set_attr "mode" "<UNITMODE>")])
--- 1385,1391 ----
  	(unspec:ANYF [(match_operand:ANYF    1 "register_operand" "f")
  		      (match_operand:<IMODE> 2 "register_operand" "f")]
  		     UNSPEC_FSCALEB))]
!   "TARGET_64BIT"
    "fscaleb.<fmt>\t%0,%1,%2"
    [(set_attr "type" "fscaleb")
     (set_attr "mode" "<UNITMODE>")])
***************
*** 1392,1398 ****
    [(set (match_operand:ANYF 0 "register_operand" "=f")
  	(unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")]
  		     UNSPEC_FLOGB))]
!   "TARGET_HARD_FLOAT"
    "flogb.<fmt>\t%0,%1"
    [(set_attr "type" "flogb")
     (set_attr "mode" "<UNITMODE>")])
--- 1401,1407 ----
    [(set (match_operand:ANYF 0 "register_operand" "=f")
  	(unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")]
  		     UNSPEC_FLOGB))]
!   "TARGET_64BIT"
    "flogb.<fmt>\t%0,%1"
    [(set_attr "type" "flogb")
     (set_attr "mode" "<UNITMODE>")])
***************
*** 1401,1407 ****
    [(set (match_operand:ANYF 0 "register_operand")
  	(unspec:ANYF [(abs:ANYF (match_operand:ANYF 1 "register_operand"))]
  		     UNSPEC_FLOGB))]
!   "TARGET_HARD_FLOAT"
  {
    rtx tmp = gen_reg_rtx (<MODE>mode);
  
--- 1410,1416 ----
    [(set (match_operand:ANYF 0 "register_operand")
  	(unspec:ANYF [(abs:ANYF (match_operand:ANYF 1 "register_operand"))]
  		     UNSPEC_FLOGB))]
!   "TARGET_64BIT"
  {
    rtx tmp = gen_reg_rtx (<MODE>mode);
  
***************
*** 1421,1427 ****
  (define_insn "clz<mode>2"
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(clz:GPR (match_operand:GPR 1 "register_operand" "r")))]
!   ""
    "clz.<d>\t%0,%1"
    [(set_attr "type" "clz")
     (set_attr "mode" "<MODE>")])
--- 1430,1436 ----
  (define_insn "clz<mode>2"
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(clz:GPR (match_operand:GPR 1 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "clz.<d>\t%0,%1"
    [(set_attr "type" "clz")
     (set_attr "mode" "<MODE>")])
***************
*** 1437,1443 ****
  (define_insn "ctz<mode>2"
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(ctz:GPR (match_operand:GPR 1 "register_operand" "r")))]
!   ""
    "ctz.<d>\t%0,%1"
    [(set_attr "type" "clz")
     (set_attr "mode" "<MODE>")])
--- 1446,1452 ----
  (define_insn "ctz<mode>2"
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(ctz:GPR (match_operand:GPR 1 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "ctz.<d>\t%0,%1"
    [(set_attr "type" "clz")
     (set_attr "mode" "<MODE>")])
***************
*** 1553,1580 ****
  
  (define_insn "*<optab><mode>3"
    [(set (match_operand:GPR 0 "register_operand" "=r,r")
! 	(any_or:GPR (match_operand:GPR 1 "register_operand" "%r,r")
! 		    (match_operand:GPR 2 "uns_arith_operand" "r,K")))]
    ""
    "<insn>%i2\t%0,%1,%2"
    [(set_attr "type" "logical")
     (set_attr "mode" "<MODE>")])
  
! (define_insn "*and<mode>3"
!   [(set (match_operand:GPR 0 "register_operand" "=r,r,r,r")
! 	(and:GPR (match_operand:GPR 1 "register_operand" "%r,r,r,0")
! 		 (match_operand:GPR 2 "and_operand" "r,K,Yx,Yy")))]
!   ""
    "@
-    and\t%0,%1,%2
-    andi\t%0,%1,%2
     * operands[2] = GEN_INT (INTVAL (operands[2]) \
  			    & GET_MODE_MASK (<MODE>mode)); \
       return \"bstrpick.<d>\t%0,%1,%M2\";
     * operands[2] = GEN_INT (~INTVAL (operands[2]) \
  			    & GET_MODE_MASK (<MODE>mode)); \
       return \"bstrins.<d>\t%0,%.,%M2\";"
!   [(set_attr "move_type" "logical,logical,pick_ins,pick_ins")
     (set_attr "mode" "<MODE>")])
  
  (define_expand "<optab><mode>3"
--- 1562,1587 ----
  
  (define_insn "*<optab><mode>3"
    [(set (match_operand:GPR 0 "register_operand" "=r,r")
! 	(any_bitwise:GPR (match_operand:GPR 1 "register_operand" "%r,r")
! 			 (match_operand:GPR 2 "uns_arith_operand" "r,K")))]
    ""
    "<insn>%i2\t%0,%1,%2"
    [(set_attr "type" "logical")
     (set_attr "mode" "<MODE>")])
  
! (define_insn "*and<mode>3_extend"
!   [(set (match_operand:GPR 0 "register_operand" "=r,r")
! 	(and:GPR (match_operand:GPR 1 "register_operand" "%r,0")
! 		 (match_operand:GPR 2 "and_operand" "Yx,Yy")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "@
     * operands[2] = GEN_INT (INTVAL (operands[2]) \
  			    & GET_MODE_MASK (<MODE>mode)); \
       return \"bstrpick.<d>\t%0,%1,%M2\";
     * operands[2] = GEN_INT (~INTVAL (operands[2]) \
  			    & GET_MODE_MASK (<MODE>mode)); \
       return \"bstrins.<d>\t%0,%.,%M2\";"
!   [(set_attr "move_type" "pick_ins,pick_ins")
     (set_attr "mode" "<MODE>")])
  
  (define_expand "<optab><mode>3"
***************
*** 1606,1612 ****
  		   (match_operand:GPR 2 "const_int_operand" "i"))
  	  (and:GPR (match_operand:GPR 3 "register_operand" "r")
  		   (match_operand:GPR 4 "const_int_operand" "i"))))]
!   "loongarch_pre_reload_split ()
     && loongarch_use_bstrins_for_ior_with_mask (<MODE>mode, operands)"
    "#"
    "&& true"
--- 1613,1620 ----
  		   (match_operand:GPR 2 "const_int_operand" "i"))
  	  (and:GPR (match_operand:GPR 3 "register_operand" "r")
  		   (match_operand:GPR 4 "const_int_operand" "i"))))]
!   "(TARGET_64BIT || TARGET_32BIT_S)
!    && loongarch_pre_reload_split ()
     && loongarch_use_bstrins_for_ior_with_mask (<MODE>mode, operands)"
    "#"
    "&& true"
***************
*** 1734,1740 ****
  			  (match_operand:SI 3 "const_int_operand")
  			  (const_int 0))
  	(match_dup 0))]
!   "peep2_reg_dead_p (3, operands[0])"
    [(const_int 0)]
    {
      int len = GET_MODE_BITSIZE (<MODE>mode) - INTVAL (operands[3]);
--- 1742,1748 ----
  			  (match_operand:SI 3 "const_int_operand")
  			  (const_int 0))
  	(match_dup 0))]
!   "(TARGET_64BIT || TARGET_32BIT_S) && peep2_reg_dead_p (3, operands[0])"
    [(const_int 0)]
    {
      int len = GET_MODE_BITSIZE (<MODE>mode) - INTVAL (operands[3]);
***************
*** 1795,1801 ****
  	(neg_bitwise:X
  	    (not:X (match_operand:X 2 "register_operand" "r"))
  	    (match_operand:X 1 "register_operand" "r")))]
!   ""
    "<insn>n\t%0,%1,%2"
    [(set_attr "type" "logical")
     (set_attr "mode" "<MODE>")])
--- 1803,1809 ----
  	(neg_bitwise:X
  	    (not:X (match_operand:X 2 "register_operand" "r"))
  	    (match_operand:X 1 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "<insn>n\t%0,%1,%2"
    [(set_attr "type" "logical")
     (set_attr "mode" "<MODE>")])
***************
*** 1894,1900 ****
    [(set (match_operand:GPR 0 "register_operand" "=r,r,r")
  	(zero_extend:GPR
  	     (match_operand:SHORT 1 "nonimmediate_operand" "r,m,k")))]
!   ""
    "@
     bstrpick.w\t%0,%1,<SHORT:7_or_15>,0
     ld.<SHORT:size>u\t%0,%1
--- 1902,1908 ----
    [(set (match_operand:GPR 0 "register_operand" "=r,r,r")
  	(zero_extend:GPR
  	     (match_operand:SHORT 1 "nonimmediate_operand" "r,m,k")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "@
     bstrpick.w\t%0,%1,<SHORT:7_or_15>,0
     ld.<SHORT:size>u\t%0,%1
***************
*** 1902,1907 ****
--- 1910,1924 ----
    [(set_attr "move_type" "pick_ins,load,load")
     (set_attr "mode" "<GPR:MODE>")])
  
+ (define_insn "zero_extend<SHORT:mode><GPR:mode>2_la32r"
+   [(set (match_operand:GPR 0 "register_operand" "=r")
+ 	(zero_extend:GPR
+ 	     (match_operand:SHORT 1 "nonimmediate_operand" "m")))]
+   "TARGET_32BIT_R"
+   "ld.<SHORT:size>u\t%0,%1"
+   [(set_attr "move_type" "load")
+    (set_attr "mode" "<GPR:MODE>")])
+ 
  (define_insn "zero_extendqihi2"
    [(set (match_operand:HI 0 "register_operand" "=r,r,r")
  	(zero_extend:HI (match_operand:QI 1 "nonimmediate_operand" "r,k,m")))]
***************
*** 1919,1925 ****
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(zero_extend:GPR
  	    (truncate:SHORT (match_operand:DI 1 "register_operand" "r"))))]
!   "TARGET_64BIT"
    "bstrpick.w\t%0,%1,<SHORT:7_or_15>,0"
    [(set_attr "move_type" "pick_ins")
     (set_attr "mode" "<GPR:MODE>")])
--- 1936,1942 ----
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(zero_extend:GPR
  	    (truncate:SHORT (match_operand:DI 1 "register_operand" "r"))))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "bstrpick.w\t%0,%1,<SHORT:7_or_15>,0"
    [(set_attr "move_type" "pick_ins")
     (set_attr "mode" "<GPR:MODE>")])
***************
*** 1958,1964 ****
    [(set (match_operand:GPR 0 "register_operand" "=r,r,r")
  	(sign_extend:GPR
  	     (match_operand:SHORT 1 "nonimmediate_operand" "r,m,k")))]
!   ""
    "@
     ext.w.<SHORT:size>\t%0,%1
     ld.<SHORT:size>\t%0,%1
--- 1975,1981 ----
    [(set (match_operand:GPR 0 "register_operand" "=r,r,r")
  	(sign_extend:GPR
  	     (match_operand:SHORT 1 "nonimmediate_operand" "r,m,k")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "@
     ext.w.<SHORT:size>\t%0,%1
     ld.<SHORT:size>\t%0,%1
***************
*** 1966,1976 ****
    [(set_attr "move_type" "signext,load,load")
     (set_attr "mode" "<GPR:MODE>")])
  
  (define_insn "extendqihi2"
    [(set (match_operand:HI 0 "register_operand" "=r,r,r")
  	(sign_extend:HI
  	     (match_operand:QI 1 "nonimmediate_operand" "r,m,k")))]
!   ""
    "@
     ext.w.b\t%0,%1
     ld.b\t%0,%1
--- 1983,2002 ----
    [(set_attr "move_type" "signext,load,load")
     (set_attr "mode" "<GPR:MODE>")])
  
+ (define_insn "extend<SHORT:mode><GPR:mode>2_la32r"
+   [(set (match_operand:GPR 0 "register_operand" "=r")
+ 	(sign_extend:GPR
+ 	     (match_operand:SHORT 1 "nonimmediate_operand" "m")))]
+   "TARGET_32BIT_R"
+   "ld.<SHORT:size>\t%0,%1"
+   [(set_attr "move_type" "load")
+    (set_attr "mode" "<GPR:MODE>")])
+ 
  (define_insn "extendqihi2"
    [(set (match_operand:HI 0 "register_operand" "=r,r,r")
  	(sign_extend:HI
  	     (match_operand:QI 1 "nonimmediate_operand" "r,m,k")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "@
     ext.w.b\t%0,%1
     ld.b\t%0,%1
***************
*** 1978,1983 ****
--- 2004,2018 ----
    [(set_attr "move_type" "signext,load,load")
     (set_attr "mode" "SI")])
  
+ (define_insn "extendqihi2_la32r"
+   [(set (match_operand:HI 0 "register_operand" "=r")
+ 	(sign_extend:HI
+ 	     (match_operand:QI 1 "nonimmediate_operand" "m")))]
+   ""
+   "ld.b\t%0,%1"
+   [(set_attr "move_type" "load")
+    (set_attr "mode" "SI")])
+ 
  (define_insn "extendsfdf2"
    [(set (match_operand:DF 0 "register_operand" "=f")
  	(float_extend:DF (match_operand:SF 1 "register_operand" "f")))]
***************
*** 2090,2096 ****
  (define_expand "fixuns_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand")
  	(unsigned_fix:DI (match_operand:DF 1 "register_operand")))]
!   "TARGET_DOUBLE_FLOAT"
  {
    rtx reg1 = gen_reg_rtx (DFmode);
    rtx reg2 = gen_reg_rtx (DFmode);
--- 2125,2131 ----
  (define_expand "fixuns_truncdfdi2"
    [(set (match_operand:DI 0 "register_operand")
  	(unsigned_fix:DI (match_operand:DF 1 "register_operand")))]
!   "TARGET_64BIT && TARGET_DOUBLE_FLOAT"
  {
    rtx reg1 = gen_reg_rtx (DFmode);
    rtx reg2 = gen_reg_rtx (DFmode);
***************
*** 2172,2178 ****
  (define_expand "fixuns_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand")
  	(unsigned_fix:DI (match_operand:SF 1 "register_operand")))]
!   "TARGET_DOUBLE_FLOAT"
  {
    rtx reg1 = gen_reg_rtx (SFmode);
    rtx reg2 = gen_reg_rtx (SFmode);
--- 2207,2213 ----
  (define_expand "fixuns_truncsfdi2"
    [(set (match_operand:DI 0 "register_operand")
  	(unsigned_fix:DI (match_operand:SF 1 "register_operand")))]
!   "TARGET_64BIT && TARGET_DOUBLE_FLOAT"
  {
    rtx reg1 = gen_reg_rtx (SFmode);
    rtx reg2 = gen_reg_rtx (SFmode);
***************
*** 2222,2228 ****
  	(zero_extract:X (match_operand:X 1 "register_operand")
  			(match_operand 2 "const_int_operand")
  			(match_operand 3 "const_int_operand")))]
!   ""
  {
    if (!loongarch_use_ins_ext_p (operands[1], INTVAL (operands[2]),
  				INTVAL (operands[3])))
--- 2257,2263 ----
  	(zero_extract:X (match_operand:X 1 "register_operand")
  			(match_operand 2 "const_int_operand")
  			(match_operand 3 "const_int_operand")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
  {
    if (!loongarch_use_ins_ext_p (operands[1], INTVAL (operands[2]),
  				INTVAL (operands[3])))
***************
*** 2232,2241 ****
  (define_insn "*extzv<mode>"
    [(set (match_operand:X 0 "register_operand" "=r")
  	(zero_extract:X (match_operand:X 1 "register_operand" "r")
! 			  (match_operand 2 "const_int_operand" "")
! 			  (match_operand 3 "const_int_operand" "")))]
!   "loongarch_use_ins_ext_p (operands[1], INTVAL (operands[2]),
! 			    INTVAL (operands[3]))"
  {
    operands[2] = GEN_INT (INTVAL (operands[2]) + INTVAL (operands[3]) - 1);
    return "bstrpick.<d>\t%0,%1,%2,%3";
--- 2267,2277 ----
  (define_insn "*extzv<mode>"
    [(set (match_operand:X 0 "register_operand" "=r")
  	(zero_extract:X (match_operand:X 1 "register_operand" "r")
! 			(match_operand 2 "const_int_operand" "")
! 			(match_operand 3 "const_int_operand" "")))]
!   "(TARGET_64BIT || TARGET_32BIT_S)
!    && loongarch_use_ins_ext_p (operands[1], INTVAL (operands[2]),
! 			       INTVAL (operands[3]))"
  {
    operands[2] = GEN_INT (INTVAL (operands[2]) + INTVAL (operands[3]) - 1);
    return "bstrpick.<d>\t%0,%1,%2,%3";
***************
*** 2248,2254 ****
  			  (match_operand 1 "const_int_operand")
  			  (match_operand 2 "const_int_operand"))
  	(match_operand:GPR 3 "reg_or_0_operand"))]
!   ""
  {
    if (!loongarch_use_ins_ext_p (operands[0], INTVAL (operands[1]),
  				INTVAL (operands[2])))
--- 2284,2290 ----
  			  (match_operand 1 "const_int_operand")
  			  (match_operand 2 "const_int_operand"))
  	(match_operand:GPR 3 "reg_or_0_operand"))]
!   "TARGET_64BIT || TARGET_32BIT_S"
  {
    if (!loongarch_use_ins_ext_p (operands[0], INTVAL (operands[1]),
  				INTVAL (operands[2])))
***************
*** 2260,2267 ****
  			  (match_operand:SI 1 "const_int_operand" "")
  			  (match_operand:SI 2 "const_int_operand" ""))
  	(match_operand:GPR 3 "reg_or_0_operand" "rJ"))]
!   "loongarch_use_ins_ext_p (operands[0], INTVAL (operands[1]),
! 			    INTVAL (operands[2]))"
  {
    operands[1] = GEN_INT (INTVAL (operands[1]) + INTVAL (operands[2]) - 1);
    return "bstrins.<d>\t%0,%z3,%1,%2";
--- 2296,2304 ----
  			  (match_operand:SI 1 "const_int_operand" "")
  			  (match_operand:SI 2 "const_int_operand" ""))
  	(match_operand:GPR 3 "reg_or_0_operand" "rJ"))]
!   "(TARGET_64BIT || TARGET_32BIT_S)
!    && loongarch_use_ins_ext_p (operands[0], INTVAL (operands[1]),
! 			       INTVAL (operands[2]))"
  {
    operands[1] = GEN_INT (INTVAL (operands[1]) + INTVAL (operands[2]) - 1);
    return "bstrins.<d>\t%0,%z3,%1,%2";
***************
*** 2291,2314 ****
      DONE;
  })
  
! (define_insn_and_split "*movdi_32bit"
    [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,w,*f,*f,*r,*m")
         (match_operand:DI 1 "move_operand" "r,i,w,r,*J*r,*m,*f,*f"))]
    "!TARGET_64BIT
     && (register_operand (operands[0], DImode)
         || reg_or_0_operand (operands[1], DImode))"
    { return loongarch_output_move (operands); }
!   "CONST_INT_P (operands[1]) && REG_P (operands[0]) && GP_REG_P (REGNO
!   (operands[0]))"
    [(const_int 0)]
-   "
  {
!   loongarch_move_integer (operands[0], operands[0], INTVAL (operands[1]));
    DONE;
! }
!   "
!   [(set_attr "move_type" "move,const,load,store,mgtf,fpload,mftg,fpstore")
!    (set_attr "mode" "DI")])
  
  (define_insn_and_split "*movdi_64bit"
    [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,w,*f,*f,*r,*m")
--- 2328,2355 ----
      DONE;
  })
  
! (define_insn "*movdi_32bit"
    [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,w,*f,*f,*r,*m")
         (match_operand:DI 1 "move_operand" "r,i,w,r,*J*r,*m,*f,*f"))]
    "!TARGET_64BIT
     && (register_operand (operands[0], DImode)
         || reg_or_0_operand (operands[1], DImode))"
    { return loongarch_output_move (operands); }
!   [(set_attr "move_type" "move,const,load,store,mgtf,fpload,mftg,fpstore")
!    (set_attr "mode" "DI")])
! 
! ;; Split 64-bit move in LoongArch32
! 
! (define_split
!   [(set (match_operand:MOVE64 0 "nonimmediate_operand")
! 	(match_operand:MOVE64 1 "move_operand"))]
!   "TARGET_32BIT && reload_completed
!    && loongarch_split_move_p (operands[0], operands[1])"
    [(const_int 0)]
  {
!   loongarch_split_move (operands[0], operands[1]);
    DONE;
! })
  
  (define_insn_and_split "*movdi_64bit"
    [(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r,w,*f,*f,*r,*m")
***************
*** 2319,2326 ****
    {
      return loongarch_output_move (operands);
    }
!   "CONST_INT_P (operands[1]) && REG_P (operands[0]) && GP_REG_P (REGNO
!   (operands[0]))"
    [(const_int 0)]
    "
  {
--- 2360,2367 ----
    {
      return loongarch_output_move (operands);
    }
!   "&& CONST_INT_P (operands[1]) && REG_P (operands[0])
!    && GP_REG_P (REGNO (operands[0]))"
    [(const_int 0)]
    "
  {
***************
*** 2378,2384 ****
  	(unspec:DI [(match_operand:DI 2 "") (pc)] UNSPEC_LA_PCREL_64_PART1))
     (set (match_operand:DI 1 "register_operand" "=r")
  	(unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
!   "TARGET_ABI_LP64 && la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE"
    {
      return "pcalau12i\t%0,%r2\n\t"
  	   "addi.d\t%1,$r0,%L2\n\t"
--- 2419,2425 ----
  	(unspec:DI [(match_operand:DI 2 "") (pc)] UNSPEC_LA_PCREL_64_PART1))
     (set (match_operand:DI 1 "register_operand" "=r")
  	(unspec:DI [(match_dup 2) (pc)] UNSPEC_LA_PCREL_64_PART2))]
!   "TARGET_64BIT && la_opt_explicit_relocs != EXPLICIT_RELOCS_NONE"
    {
      return "pcalau12i\t%0,%r2\n\t"
  	   "addi.d\t%1,$r0,%L2\n\t"
***************
*** 2396,2401 ****
--- 2437,2451 ----
  	(match_operand:SI 1 ""))]
    ""
  {
+   if (TARGET_32BIT
+       && ((MEM_P (operands[0])
+ 	   && loongarch_14bit_shifted_offset_address_p (XEXP (operands[0], 0), SImode)
+ 	   && !loongarch_12bit_offset_address_p (XEXP (operands[0], 0), SImode))
+ 	  || (MEM_P (operands[1])
+ 	      && loongarch_14bit_shifted_offset_address_p (XEXP (operands[1], 0), SImode)
+ 	      && !loongarch_12bit_offset_address_p (XEXP (operands[1], 0), SImode))))
+     FAIL;
+ 
    if (loongarch_legitimize_move (SImode, operands[0], operands[1]))
      DONE;
  })
***************
*** 2404,2413 ****
    [(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); }
!   "CONST_INT_P (operands[1]) && REG_P (operands[0]) && GP_REG_P (REGNO
!   (operands[0]))"
    [(const_int 0)]
    "
  {
--- 2454,2470 ----
    [(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))
!    && !(TARGET_32BIT
! 	&& ((MEM_P (operands[0])
! 	     && loongarch_14bit_shifted_offset_address_p (XEXP (operands[0], 0), SImode)
! 	     && !loongarch_12bit_offset_address_p (XEXP (operands[0], 0), SImode))
! 	    || (MEM_P (operands[1])
! 		&& loongarch_14bit_shifted_offset_address_p (XEXP (operands[1], 0), SImode)
! 		&& !loongarch_12bit_offset_address_p (XEXP (operands[1], 0), SImode))))"
    { return loongarch_output_move (operands); }
!   "&& CONST_INT_P (operands[1]) && REG_P (operands[0])
!    && GP_REG_P (REGNO (operands[0]))"
    [(const_int 0)]
    "
  {
***************
*** 2482,2488 ****
  (define_expand "movsf"
    [(set (match_operand:SF 0 "")
  	(match_operand:SF 1 ""))]
!   ""
  {
    if (loongarch_legitimize_move (SFmode, operands[0], operands[1]))
      DONE;
--- 2539,2545 ----
  (define_expand "movsf"
    [(set (match_operand:SF 0 "")
  	(match_operand:SF 1 ""))]
!   "TARGET_HARD_FLOAT"
  {
    if (loongarch_legitimize_move (SFmode, operands[0], operands[1]))
      DONE;
***************
*** 2513,2519 ****
  (define_expand "movdf"
    [(set (match_operand:DF 0 "")
  	(match_operand:DF 1 ""))]
!   ""
  {
    if (loongarch_legitimize_move (DFmode, operands[0], operands[1]))
      DONE;
--- 2570,2576 ----
  (define_expand "movdf"
    [(set (match_operand:DF 0 "")
  	(match_operand:DF 1 ""))]
!   "TARGET_DOUBLE_FLOAT"
  {
    if (loongarch_legitimize_move (DFmode, operands[0], operands[1]))
      DONE;
***************
*** 2540,2545 ****
--- 2597,2637 ----
    [(set_attr "move_type" "move,load,store")
     (set_attr "mode" "DF")])
  
+ ;; Emit a doubleword move in which exactly one of the operands is
+ ;; a floating-point register.  We can't just emit two normal moves
+ ;; because of the constraints imposed by the FPU register model;
+ ;; see loongarch_can_change_mode_class for details.  Instead, we keep
+ ;; the FPR whole and use special patterns to refer to each word of
+ ;; the other operand.
+ 
+ (define_expand "move_doubleword_2_<mode>"
+   [(set (match_operand:SPLITF 0)
+ 	(match_operand:SPLITF 1))]
+   ""
+ {
+   if (FP_REG_RTX_P (operands[0]))
+     {
+       rtx low = loongarch_subword (operands[1], 0);
+       rtx high = loongarch_subword (operands[1], 1);
+       emit_insn (gen_load_low<mode> (operands[0], low));
+       if (!TARGET_64BIT)
+        emit_insn (gen_movgr2frh<mode> (operands[0], high, operands[0]));
+       else
+        emit_insn (gen_load_high<mode> (operands[0], high, operands[0]));
+     }
+   else
+     {
+       rtx low = loongarch_subword (operands[0], 0);
+       rtx high = loongarch_subword (operands[0], 1);
+       emit_insn (gen_store_word<mode> (low, operands[1], const0_rtx));
+       if (!TARGET_64BIT)
+        emit_insn (gen_movfrh2gr<mode> (high, operands[1]));
+       else
+        emit_insn (gen_store_word<mode> (high, operands[1], const1_rtx));
+     }
+   DONE;
+ })
+ 
  ;; Clear one FCC register
  
  (define_expand "movfcc"
***************
*** 2618,2625 ****
  			(const_int 0))
  	 (match_operand:GPR 2 "reg_or_0_operand" "r,J")
  	 (match_operand:GPR 3 "reg_or_0_operand" "J,r")))]
!   "register_operand (operands[2], <GPR:MODE>mode)
!    != register_operand (operands[3], <GPR:MODE>mode)"
    "@
     <sel>\t%0,%2,%1
     <selinv>\t%0,%3,%1"
--- 2710,2718 ----
  			(const_int 0))
  	 (match_operand:GPR 2 "reg_or_0_operand" "r,J")
  	 (match_operand:GPR 3 "reg_or_0_operand" "J,r")))]
!   "(TARGET_64BIT || TARGET_32BIT_S)
!     && register_operand (operands[2], <GPR:MODE>mode)
!        != register_operand (operands[3], <GPR:MODE>mode)"
    "@
     <sel>\t%0,%2,%1
     <selinv>\t%0,%3,%1"
***************
*** 2681,2687 ****
  	(if_then_else:GPR (match_operator 1 "comparison_operator"
  			 [(match_operand:GPR 2 "reg_or_0_operand")
  			  (match_operand:GPR 3 "reg_or_0_operand")])))]
!   "TARGET_COND_MOVE_INT"
  {
    if (!INTEGRAL_MODE_P (GET_MODE (XEXP (operands[1], 0))))
      FAIL;
--- 2774,2780 ----
  	(if_then_else:GPR (match_operator 1 "comparison_operator"
  			 [(match_operand:GPR 2 "reg_or_0_operand")
  			  (match_operand:GPR 3 "reg_or_0_operand")])))]
!   "(TARGET_64BIT || TARGET_32BIT_S) && TARGET_COND_MOVE_INT"
  {
    if (!INTEGRAL_MODE_P (GET_MODE (XEXP (operands[1], 0))))
      FAIL;
***************
*** 2786,2792 ****
    [(set (match_operand:P 0 "register_operand" "=j")
  	(unspec:P [(match_operand:P 1 "symbolic_operand" "")]
  	UNSPEC_PCALAU12I))]
!   ""
    "pcalau12i\t%0,%%pc_hi20(%1)"
    [(set_attr "type" "move")])
  
--- 2879,2885 ----
    [(set (match_operand:P 0 "register_operand" "=j")
  	(unspec:P [(match_operand:P 1 "symbolic_operand" "")]
  	UNSPEC_PCALAU12I))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "pcalau12i\t%0,%%pc_hi20(%1)"
    [(set_attr "type" "move")])
  
***************
*** 2796,2802 ****
    [(set (match_operand:P 0 "register_operand" "=r")
         (unspec:P [(match_operand:P 1 "symbolic_operand" "")]
         UNSPEC_PCALAU12I_GR))]
!   ""
    "pcalau12i\t%0,%%pc_hi20(%1)"
    [(set_attr "type" "move")])
  
--- 2889,2895 ----
    [(set (match_operand:P 0 "register_operand" "=r")
         (unspec:P [(match_operand:P 1 "symbolic_operand" "")]
         UNSPEC_PCALAU12I_GR))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "pcalau12i\t%0,%%pc_hi20(%1)"
    [(set_attr "type" "move")])
  
***************
*** 2846,2852 ****
    [(set (match_operand:ANYF 0 "register_operand" "=f")
  	(unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")]
  		      UNSPEC_FRINT))]
!   ""
    "frint.<fmt>\t%0,%1"
    [(set_attr "type" "fcvt")
     (set_attr "mode" "<MODE>")])
--- 2939,2945 ----
    [(set (match_operand:ANYF 0 "register_operand" "=f")
  	(unspec:ANYF [(match_operand:ANYF 1 "register_operand" "f")]
  		      UNSPEC_FRINT))]
!   "TARGET_64BIT"
    "frint.<fmt>\t%0,%1"
    [(set_attr "type" "fcvt")
     (set_attr "mode" "<MODE>")])
***************
*** 2864,2869 ****
--- 2957,3027 ----
    [(set_attr "type" "fcvt")
     (set_attr "mode" "<ANYF:MODE>")])
  
+ ;; Load the low word of operand 0 with operand 1.
+ (define_insn "load_low<mode>"
+   [(set (match_operand:SPLITF 0 "register_operand" "=f,f")
+ 	(unspec:SPLITF [(match_operand:<HALFMODE> 1 "general_operand" "rJ,m")]
+ 		       UNSPEC_LOAD_LOW))]
+   "TARGET_HARD_FLOAT"
+ {
+   operands[0] = loongarch_subword (operands[0], 0);
+   return loongarch_output_move (operands);
+ }
+   [(set_attr "move_type" "mgtf,fpload")
+    (set_attr "mode" "<HALFMODE>")])
+ 
+ ;; Load the high word of operand 0 from operand 1, preserving the value
+ ;; in the low word.
+ (define_insn "load_high<mode>"
+   [(set (match_operand:SPLITF 0 "register_operand" "=f,f")
+ 	(unspec:SPLITF [(match_operand:<HALFMODE> 1 "general_operand" "rJ,m")
+ 			(match_operand:SPLITF 2 "register_operand" "0,0")]
+ 		       UNSPEC_LOAD_HIGH))]
+   "TARGET_HARD_FLOAT"
+ {
+   operands[0] = loongarch_subword (operands[0], 1);
+   return loongarch_output_move (operands);
+ }
+   [(set_attr "move_type" "mgtf,fpload")
+    (set_attr "mode" "<HALFMODE>")])
+ 
+ ;; Store one word of operand 1 in operand 0.  Operand 2 is 1 to store the
+ ;; high word and 0 to store the low word.
+ (define_insn "store_word<mode>"
+   [(set (match_operand:<HALFMODE> 0 "nonimmediate_operand" "=r,m")
+ 	(unspec:<HALFMODE> [(match_operand:SPLITF 1 "register_operand" "f,f")
+ 			    (match_operand 2 "const_int_operand")]
+ 			   UNSPEC_STORE_WORD))]
+   "TARGET_HARD_FLOAT"
+ {
+   operands[1] = loongarch_subword (operands[1], INTVAL (operands[2]));
+   return loongarch_output_move (operands);
+ }
+   [(set_attr "move_type" "mftg,fpstore")
+    (set_attr "mode" "<HALFMODE>")])
+ 
+ ;; Move operand 1 to the high word of operand 0 using movgr2frh.w, preserving the
+ ;; value in the low word.
+ (define_insn "movgr2frh<mode>"
+   [(set (match_operand:SPLITF 0 "register_operand" "=f")
+ 	(unspec:SPLITF [(match_operand:<HALFMODE> 1 "reg_or_0_operand" "rJ")
+ 			(match_operand:SPLITF 2 "register_operand" "0")]
+ 			UNSPEC_MOVGR2FRH))]
+   "TARGET_DOUBLE_FLOAT"
+   "movgr2frh.w\t%0,%z1"
+   [(set_attr "move_type" "mgtf")
+    (set_attr "mode" "<HALFMODE>")])
+ 
+ ;; Move high word of operand 1 to operand 0 using movfrh2gr.s.
+ (define_insn "movfrh2gr<mode>"
+   [(set (match_operand:<HALFMODE> 0 "register_operand" "=r")
+ 	(unspec:<HALFMODE> [(match_operand:SPLITF 1 "register_operand" "f")]
+ 			    UNSPEC_MOVFRH2GR))]
+   "TARGET_DOUBLE_FLOAT"
+   "movfrh2gr.s\t%0,%1"
+   [(set_attr "move_type" "mftg")
+    (set_attr "mode" "<HALFMODE>")])
+ 
  ;; Thread-Local Storage
  
  (define_insn "@got_load_tls_desc<mode>"
***************
*** 2879,2891 ****
      (clobber (reg:SI FCC5_REGNUM))
      (clobber (reg:SI FCC6_REGNUM))
      (clobber (reg:SI FCC7_REGNUM))
!     (clobber (reg:SI RETURN_ADDR_REGNUM))]
    "TARGET_TLS_DESC"
  {
    return TARGET_EXPLICIT_RELOCS
      ? "pcalau12i\t$r4,%%desc_pc_hi20(%0)\n\t"
!       "addi.d\t$r4,$r4,%%desc_pc_lo12(%0)\n\t"
!       "ld.d\t$r1,$r4,%%desc_ld(%0)\n\t"
        "jirl\t$r1,$r1,%%desc_call(%0)"
      : "la.tls.desc\t$r4,%0";
  }
--- 3037,3049 ----
      (clobber (reg:SI FCC5_REGNUM))
      (clobber (reg:SI FCC6_REGNUM))
      (clobber (reg:SI FCC7_REGNUM))
!     (clobber (reg:P RETURN_ADDR_REGNUM))]
    "TARGET_TLS_DESC"
  {
    return TARGET_EXPLICIT_RELOCS
      ? "pcalau12i\t$r4,%%desc_pc_hi20(%0)\n\t"
!       "addi.<d>\t$r4,$r4,%%desc_pc_lo12(%0)\n\t"
!       "ld.<d>\t$r1,$r4,%%desc_ld(%0)\n\t"
        "jirl\t$r1,$r1,%%desc_call(%0)"
      : "la.tls.desc\t$r4,%0";
  }
***************
*** 3102,3108 ****
  		       (match_operand 2 "const_uimm5_operand")]
  		       UNSPECV_LDDIR)
     (clobber (mem:BLK (scratch)))]
!   ""
    "lddir\t%0,%1,%2"
    [(set_attr "type" "load")
     (set_attr "mode" "<MODE>")])
--- 3260,3266 ----
  		       (match_operand 2 "const_uimm5_operand")]
  		       UNSPECV_LDDIR)
     (clobber (mem:BLK (scratch)))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "lddir\t%0,%1,%2"
    [(set_attr "type" "load")
     (set_attr "mode" "<MODE>")])
***************
*** 3112,3118 ****
  		       (match_operand 1 "const_uimm5_operand")]
  		       UNSPECV_LDPTE)
     (clobber (mem:BLK (scratch)))]
!   ""
    "ldpte\t%0,%1"
    [(set_attr "type" "load")
     (set_attr "mode" "<MODE>")])
--- 3270,3276 ----
  		       (match_operand 1 "const_uimm5_operand")]
  		       UNSPECV_LDPTE)
     (clobber (mem:BLK (scratch)))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "ldpte\t%0,%1"
    [(set_attr "type" "load")
     (set_attr "mode" "<MODE>")])
***************
*** 3190,3196 ****
    [(set (match_operand:GPR 0 "register_operand" "=r,r")
  	(rotatert:GPR (match_operand:GPR 1 "register_operand" "r,r")
  		      (match_operand:SI 2 "arith_operand" "r,I")))]
!   ""
    "rotr%i2.<d>\t%0,%1,%2"
    [(set_attr "type" "shift,shift")
     (set_attr "mode" "<MODE>")])
--- 3348,3354 ----
    [(set (match_operand:GPR 0 "register_operand" "=r,r")
  	(rotatert:GPR (match_operand:GPR 1 "register_operand" "r,r")
  		      (match_operand:SI 2 "arith_operand" "r,I")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "rotr%i2.<d>\t%0,%1,%2"
    [(set_attr "type" "shift,shift")
     (set_attr "mode" "<MODE>")])
***************
*** 3200,3206 ****
  	(sign_extend:DI
  	  (rotatert:SI (match_operand:SI 1 "register_operand" "r,r")
  		       (match_operand:SI 2 "arith_operand" "r,I"))))]
!   "TARGET_64BIT"
    "rotr%i2.w\t%0,%1,%2"
    [(set_attr "type" "shift,shift")
     (set_attr "mode" "SI")])
--- 3358,3364 ----
  	(sign_extend:DI
  	  (rotatert:SI (match_operand:SI 1 "register_operand" "r,r")
  		       (match_operand:SI 2 "arith_operand" "r,I"))))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "rotr%i2.w\t%0,%1,%2"
    [(set_attr "type" "shift,shift")
     (set_attr "mode" "SI")])
***************
*** 3212,3218 ****
     (set (match_operand:GPR 0 "register_operand")
  	(rotatert:GPR (match_operand:GPR 1 "register_operand")
  		      (match_dup 3)))]
!   ""
    {
      operands[3] = gen_reg_rtx (SImode);
  
--- 3370,3376 ----
     (set (match_operand:GPR 0 "register_operand")
  	(rotatert:GPR (match_operand:GPR 1 "register_operand")
  		      (match_dup 3)))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    {
      operands[3] = gen_reg_rtx (SImode);
  
***************
*** 3235,3241 ****
  	(plus:GPR (ashift:GPR (match_operand:GPR 1 "register_operand" "r")
  			      (match_operand 2 "const_immalsl_operand" ""))
  		  (match_operand:GPR 3 "register_operand" "r")))]
!   ""
    "alsl.<d>\t%0,%1,%3,%2"
    [(set_attr "type" "arith")
     (set_attr "mode" "<MODE>")])
--- 3393,3399 ----
  	(plus:GPR (ashift:GPR (match_operand:GPR 1 "register_operand" "r")
  			      (match_operand 2 "const_immalsl_operand" ""))
  		  (match_operand:GPR 3 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "alsl.<d>\t%0,%1,%3,%2"
    [(set_attr "type" "arith")
     (set_attr "mode" "<MODE>")])
***************
*** 3278,3285 ****
  	  (ashift:X (match_operand:X  1 "register_operand"  "r")
  		    (match_operand:SI 2 "const_int_operand" "i"))
  	  (match_operand:X 3 "const_int_operand" "i")))]
!   "(const_immalsl_operand (operands[2], SImode)
!     || !<bitwise_operand> (operands[3], <MODE>mode))
     && loongarch_reassoc_shift_bitwise (<is_and>, operands[2], operands[3],
  				       <MODE>mode)"
    "#"
--- 3436,3444 ----
  	  (ashift:X (match_operand:X  1 "register_operand"  "r")
  		    (match_operand:SI 2 "const_int_operand" "i"))
  	  (match_operand:X 3 "const_int_operand" "i")))]
!   "TARGET_64BIT
!    && (const_immalsl_operand (operands[2], SImode)
!        || !<bitwise_operand> (operands[3], <MODE>mode))
     && loongarch_reassoc_shift_bitwise (<is_and>, operands[2], operands[3],
  				       <MODE>mode)"
    "#"
***************
*** 3360,3366 ****
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(rotatert:SI (bswap:SI (match_operand:SI 1 "register_operand" "r"))
  		     (const_int 16)))]
!   ""
    "revb.2h\t%0,%1"
    [(set_attr "type" "shift")])
  
--- 3519,3525 ----
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(rotatert:SI (bswap:SI (match_operand:SI 1 "register_operand" "r"))
  		     (const_int 16)))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "revb.2h\t%0,%1"
    [(set_attr "type" "shift")])
  
***************
*** 3370,3383 ****
  	  (rotatert:SI
  	    (bswap:SI (match_operand:SI 1 "register_operand" "r"))
  	    (const_int 16))))]
!   "TARGET_64BIT"
    "revb.2h\t%0,%1"
    [(set_attr "type" "shift")])
  
  (define_insn "bswaphi2"
    [(set (match_operand:HI 0 "register_operand" "=r")
  	(bswap:HI (match_operand:HI 1 "register_operand" "r")))]
!   ""
    "revb.2h\t%0,%1"
    [(set_attr "type" "shift")])
  
--- 3529,3542 ----
  	  (rotatert:SI
  	    (bswap:SI (match_operand:SI 1 "register_operand" "r"))
  	    (const_int 16))))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "revb.2h\t%0,%1"
    [(set_attr "type" "shift")])
  
  (define_insn "bswaphi2"
    [(set (match_operand:HI 0 "register_operand" "=r")
  	(bswap:HI (match_operand:HI 1 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "revb.2h\t%0,%1"
    [(set_attr "type" "shift")])
  
***************
*** 3399,3407 ****
  (define_expand "bswapsi2"
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(bswap:SI (match_operand:SI 1 "register_operand" "r")))]
!   ""
  {
!   if (!TARGET_64BIT)
      {
        rtx t = gen_reg_rtx (SImode);
        emit_insn (gen_revb_2h (t, operands[1]));
--- 3558,3566 ----
  (define_expand "bswapsi2"
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(bswap:SI (match_operand:SI 1 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
  {
!   if (TARGET_32BIT_S)
      {
        rtx t = gen_reg_rtx (SImode);
        emit_insn (gen_revb_2h (t, operands[1]));
***************
*** 3565,3571 ****
  	(match_operator:SI 1 "loongarch_cstore_operator"
  	 [(match_operand:GPR 2 "register_operand")
  	  (match_operand:GPR 3 "nonmemory_operand")]))]
!   ""
  {
    loongarch_expand_scc (operands);
    DONE;
--- 3724,3730 ----
  	(match_operator:SI 1 "loongarch_cstore_operator"
  	 [(match_operand:GPR 2 "register_operand")
  	  (match_operand:GPR 3 "nonmemory_operand")]))]
!   "TARGET_64BIT"
  {
    loongarch_expand_scc (operands);
    DONE;
***************
*** 3933,3944 ****
        return "jr\t%0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r12,%%call36(%0)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%0";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r12,%%call36(%0)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%%plt(%0)";
      default:
--- 4092,4109 ----
        return "jr\t%0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r12,%%call36(%0)\n\tjirl\t$r0,$r12,0";
! 	else
! 	  return "pcaddu12i\t$r12,%%call30(%0)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%0";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r12,%%call36(%0)\n\tjirl\t$r0,$r12,0";
! 	else
! 	  return "pcaddu12i\t$r12,%%call30(%0)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%%plt(%0)";
      default:
***************
*** 4026,4037 ****
        return "jr\t%1";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%%plt(%1)";
      default:
--- 4191,4208 ----
        return "jr\t%1";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
! 	else
! 	  return "pcaddu12i\t$r12,%%call30(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
! 	else
! 	  return "pcaddu12i\t$r12,%%call30(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%%plt(%1)";
      default:
***************
*** 4064,4075 ****
        return "jr\t%1";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%%plt(%1)";
      default:
--- 4235,4252 ----
        return "jr\t%1";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
! 	else
! 	  return "pcaddu12i\t$r12,%%call30(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r12,%%call36(%1)\n\tjirl\t$r0,$r12,0";
! 	else
! 	  return "pcaddu12i\t$r12,%%call30(%1)\n\tjirl\t$r0,$r12,0";
        else
  	return "b\t%%plt(%1)";
      default:
***************
*** 4122,4133 ****
        return "jirl\t$r1,%0,0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r1,%%call36(%0)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%0";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r1,%%call36(%0)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%%plt(%0)";
      default:
--- 4299,4316 ----
        return "jirl\t$r1,%0,0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r1,%%call36(%0)\n\tjirl\t$r1,$r1,0";
! 	else
! 	  return "pcaddu12i\t$r1,%%call30(%0)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%0";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r1,%%call36(%0)\n\tjirl\t$r1,$r1,0";
! 	else
! 	  return "pcaddu12i\t$r1,%%call30(%0)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%%plt(%0)";
      default:
***************
*** 4199,4210 ****
        return "jirl\t$r1,%1,0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%%plt(%1)";
      default:
--- 4382,4399 ----
        return "jirl\t$r1,%1,0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
! 	else
! 	  return "pcaddu12i\t$r1,%%call30(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
! 	else
! 	  return "pcaddu12i\t$r1,%%call30(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%%plt(%1)";
      default:
***************
*** 4239,4250 ****
        return "jirl\t$r1,%1,0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%%plt(%1)";
      default:
--- 4428,4445 ----
        return "jirl\t$r1,%1,0";
      case 1:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
! 	else
! 	  return "pcaddu12i\t$r1,%%call30(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%1";
      case 2:
        if (TARGET_CMODEL_MEDIUM)
! 	if (TARGET_64BIT)
! 	  return "pcaddu18i\t$r1,%%call36(%1)\n\tjirl\t$r1,$r1,0";
! 	else
! 	  return "pcaddu12i\t$r1,%%call30(%1)\n\tjirl\t$r1,$r1,0";
        else
  	return "bl\t%%plt(%1)";
      default:
***************
*** 4393,4399 ****
  		       (const_int <bytepick_w_lshiftrt_amount>))
  	  (ashift:SI (match_operand:SI 2 "register_operand" "r")
  		     (const_int bytepick_w_ashift_amount))))]
!   ""
    "bytepick.w\t%0,%1,%2,<bytepick_imm>"
    [(set_attr "mode" "SI")])
  
--- 4588,4594 ----
  		       (const_int <bytepick_w_lshiftrt_amount>))
  	  (ashift:SI (match_operand:SI 2 "register_operand" "r")
  		     (const_int bytepick_w_ashift_amount))))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "bytepick.w\t%0,%1,%2,<bytepick_imm>"
    [(set_attr "mode" "SI")])
  
***************
*** 4411,4417 ****
  	  (zero_extract:DI (match_operand:DI 2 "register_operand" "r")
  			   (const_int <bytepick_w_ashift_amount>)
  			   (const_int <bitsize>))))]
!   "TARGET_64BIT"
    "bytepick.w\t%0,%2,%1,<bytepick_imm>"
    [(set_attr "mode" "SI")])
  
--- 4606,4612 ----
  	  (zero_extract:DI (match_operand:DI 2 "register_operand" "r")
  			   (const_int <bytepick_w_ashift_amount>)
  			   (const_int <bitsize>))))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "bytepick.w\t%0,%2,%1,<bytepick_imm>"
    [(set_attr "mode" "SI")])
  
***************
*** 4426,4432 ****
  	  (zero_extract:DI (match_operand:DI 2 "register_operand" "r")
  			   (const_int 8)
  			   (const_int 24))))]
!   "TARGET_64BIT"
    "bytepick.w\t%0,%2,%1,1"
    [(set_attr "mode" "SI")])
  
--- 4621,4627 ----
  	  (zero_extract:DI (match_operand:DI 2 "register_operand" "r")
  			   (const_int 8)
  			   (const_int 24))))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "bytepick.w\t%0,%2,%1,1"
    [(set_attr "mode" "SI")])
  
***************
*** 4456,4462 ****
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(unspec:SI [(match_operand:SI 1 "register_operand" "r")]
  		    UNSPEC_BITREV_4B))]
!   ""
    "bitrev.4b\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "SI")])
--- 4651,4657 ----
    [(set (match_operand:SI 0 "register_operand" "=r")
  	(unspec:SI [(match_operand:SI 1 "register_operand" "r")]
  		    UNSPEC_BITREV_4B))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "bitrev.4b\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "SI")])
***************
*** 4465,4471 ****
    [(set (match_operand:DI 0 "register_operand" "=r")
  	(unspec:DI [(match_operand:DI 1 "register_operand" "r")]
  		    UNSPEC_BITREV_8B))]
!   ""
    "bitrev.8b\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "DI")])
--- 4660,4666 ----
    [(set (match_operand:DI 0 "register_operand" "=r")
  	(unspec:DI [(match_operand:DI 1 "register_operand" "r")]
  		    UNSPEC_BITREV_8B))]
!   "TARGET_64BIT"
    "bitrev.8b\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "DI")])
***************
*** 4473,4479 ****
  (define_insn "@rbit<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(bitreverse:GPR (match_operand:GPR 1 "register_operand" "r")))]
!   ""
    "bitrev.<size>\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "<MODE>")])
--- 4668,4674 ----
  (define_insn "@rbit<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(bitreverse:GPR (match_operand:GPR 1 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "bitrev.<size>\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "<MODE>")])
***************
*** 4492,4498 ****
  (define_insn "rbitqi"
    [(set (match_operand:QI 0 "register_operand" "=r")
  	(bitreverse:QI (match_operand:QI 1 "register_operand" "r")))]
!   ""
    "bitrev.4b\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "SI")])
--- 4687,4693 ----
  (define_insn "rbitqi"
    [(set (match_operand:QI 0 "register_operand" "=r")
  	(bitreverse:QI (match_operand:QI 1 "register_operand" "r")))]
!   "TARGET_64BIT || TARGET_32BIT_S"
    "bitrev.4b\t%0,%1"
    [(set_attr "type" "unknown")
     (set_attr "mode" "SI")])
***************
*** 4635,4641 ****
  	(unspec:SI [(match_operand:QHWD 1 "register_operand" "r")
  		   (match_operand:SI 2 "register_operand" "r")]
  		     CRC))]
!   ""
    "<crc>.w.<size>.w\t%0,%1,%2"
    [(set_attr "type" "unknown")
     (set_attr "mode" "<MODE>")])
--- 4830,4836 ----
  	(unspec:SI [(match_operand:QHWD 1 "register_operand" "r")
  		   (match_operand:SI 2 "register_operand" "r")]
  		     CRC))]
!   "TARGET_64BIT"
    "<crc>.w.<size>.w\t%0,%1,%2"
    [(set_attr "type" "unknown")
     (set_attr "mode" "<MODE>")])
***************
*** 4656,4662 ****
     (match_operand:SI	1 "register_operand")	; old_chksum
     (match_operand:SUBDI	2 "reg_or_0_operand")	; msg
     (match_operand	3 "const_int_operand")]	; poly
!   ""
    {
      unsigned HOST_WIDE_INT poly = UINTVAL (operands[3]);
      rtx msg = operands[2];
--- 4851,4857 ----
     (match_operand:SI	1 "register_operand")	; old_chksum
     (match_operand:SUBDI	2 "reg_or_0_operand")	; msg
     (match_operand	3 "const_int_operand")]	; poly
!   "TARGET_64BIT"
    {
      unsigned HOST_WIDE_INT poly = UINTVAL (operands[3]);
      rtx msg = operands[2];
***************
*** 4753,4759 ****
  (define_insn_and_rewrite "simple_load<mode>"
    [(set (match_operand:LD_AT_LEAST_32_BIT 0 "register_operand" "=r,f")
  	(match_operand:LD_AT_LEAST_32_BIT 1 "mem_simple_ldst_operand" ""))]
!   "loongarch_pre_reload_split ()
     && la_opt_explicit_relocs == EXPLICIT_RELOCS_AUTO
     && (TARGET_CMODEL_NORMAL || TARGET_CMODEL_MEDIUM)"
    "#"
--- 4948,4955 ----
  (define_insn_and_rewrite "simple_load<mode>"
    [(set (match_operand:LD_AT_LEAST_32_BIT 0 "register_operand" "=r,f")
  	(match_operand:LD_AT_LEAST_32_BIT 1 "mem_simple_ldst_operand" ""))]
!   "(TARGET_64BIT || TARGET_32BIT_S)
!    && loongarch_pre_reload_split ()
     && la_opt_explicit_relocs == EXPLICIT_RELOCS_AUTO
     && (TARGET_CMODEL_NORMAL || TARGET_CMODEL_MEDIUM)"
    "#"
***************
*** 4766,4772 ****
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(any_extend:GPR
  	  (match_operand:SUBDI 1 "mem_simple_ldst_operand" "")))]
!   "loongarch_pre_reload_split ()
     && la_opt_explicit_relocs == EXPLICIT_RELOCS_AUTO
     && (TARGET_CMODEL_NORMAL || TARGET_CMODEL_MEDIUM)"
    "#"
--- 4962,4969 ----
    [(set (match_operand:GPR 0 "register_operand" "=r")
  	(any_extend:GPR
  	  (match_operand:SUBDI 1 "mem_simple_ldst_operand" "")))]
!   "(TARGET_64BIT || TARGET_32BIT_S)
!    && loongarch_pre_reload_split ()
     && la_opt_explicit_relocs == EXPLICIT_RELOCS_AUTO
     && (TARGET_CMODEL_NORMAL || TARGET_CMODEL_MEDIUM)"
    "#"
***************
*** 4778,4784 ****
  (define_insn_and_rewrite "simple_store<mode>"
    [(set (match_operand:ST_ANY 0 "mem_simple_ldst_operand" "")
  	(match_operand:ST_ANY 1 "reg_or_0_operand" "r,f"))]
!   "loongarch_pre_reload_split ()
     && la_opt_explicit_relocs == EXPLICIT_RELOCS_AUTO
     && (TARGET_CMODEL_NORMAL || TARGET_CMODEL_MEDIUM)"
    "#"
--- 4975,4982 ----
  (define_insn_and_rewrite "simple_store<mode>"
    [(set (match_operand:ST_ANY 0 "mem_simple_ldst_operand" "")
  	(match_operand:ST_ANY 1 "reg_or_0_operand" "r,f"))]
!   "(TARGET_64BIT || TARGET_32BIT_S)
!    && loongarch_pre_reload_split ()
     && la_opt_explicit_relocs == EXPLICIT_RELOCS_AUTO
     && (TARGET_CMODEL_NORMAL || TARGET_CMODEL_MEDIUM)"
    "#"
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch.opt gcc-16-20251214/gcc/config/loongarch/loongarch.opt
*** gcc-16-20251207/gcc/config/loongarch/loongarch.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch.opt	Sun Dec 14 22:32:06 2025
*************** Name(isa_base) Type(int)
*** 41,46 ****
--- 41,52 ----
  Basic ISAs of LoongArch:
  
  EnumValue
+ Enum(isa_base) String(la32) Value(ISA_BASE_LA32)
+ 
+ EnumValue
+ Enum(isa_base) String(la32r) Value(ISA_BASE_LA32R)
+ 
+ EnumValue
  Enum(isa_base) String(la64) Value(ISA_BASE_LA64)
  
  ;; ISA extensions / adjustments
*************** Enum(arch_type) String(la64v1.0) Value(A
*** 127,132 ****
--- 133,144 ----
  EnumValue
  Enum(arch_type) String(la64v1.1) Value(ARCH_LA64V1_1)
  
+ EnumValue
+ Enum(arch_type) String(la32v1.0) Value(ARCH_LA32V1_0)
+ 
+ EnumValue
+ Enum(arch_type) String(la32rv1.0) Value(ARCH_LA32RV1_0)
+ 
  march=
  Target RejectNegative Joined Enum(arch_type) Var(la_opt_cpu_arch) Init(M_OPT_UNSET) Save
  -march=PROCESSOR	Generate code for the given PROCESSOR ISA.
*************** Enum(tune_type) String(la464) Value(TUNE
*** 150,155 ****
--- 162,170 ----
  EnumValue
  Enum(tune_type) String(la664) Value(TUNE_LA664)
  
+ EnumValue
+ Enum(tune_type) String(loongarch32) Value(TUNE_LOONGARCH32)
+ 
  mtune=
  Target RejectNegative Joined Enum(tune_type) Var(la_opt_cpu_tune) Init(M_OPT_UNSET) Save
  -mtune=PROCESSOR	Generate optimized code for PROCESSOR.
*************** Name(abi_base) Type(int)
*** 164,169 ****
--- 179,193 ----
  Base ABI types for LoongArch:
  
  EnumValue
+ Enum(abi_base) String(ilp32d) Value(ABI_BASE_ILP32D)
+ 
+ EnumValue
+ Enum(abi_base) String(ilp32f) Value(ABI_BASE_ILP32F)
+ 
+ EnumValue
+ Enum(abi_base) String(ilp32s) Value(ABI_BASE_ILP32S)
+ 
+ EnumValue
  Enum(abi_base) String(lp64d) Value(ABI_BASE_LP64D)
  
  EnumValue
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/loongarch.opt.urls gcc-16-20251214/gcc/config/loongarch/loongarch.opt.urls
*** gcc-16-20251207/gcc/config/loongarch/loongarch.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/loongarch.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/LoongArch-Options.html#ind
*** 15,25 ****
  msimd=
  UrlSuffix(gcc/LoongArch-Options.html#index-msimd-1)
  
  march=
  UrlSuffix(gcc/LoongArch-Options.html#index-march-7)
  
  mtune=
! UrlSuffix(gcc/LoongArch-Options.html#index-mtune-8)
  
  mabi=
  UrlSuffix(gcc/LoongArch-Options.html#index-mabi-2)
--- 15,31 ----
  msimd=
  UrlSuffix(gcc/LoongArch-Options.html#index-msimd-1)
  
+ mlsx
+ UrlSuffix(gcc/LoongArch-Options.html#index-mlsx)
+ 
+ mlasx
+ UrlSuffix(gcc/LoongArch-Options.html#index-mlasx)
+ 
  march=
  UrlSuffix(gcc/LoongArch-Options.html#index-march-7)
  
  mtune=
! UrlSuffix(gcc/LoongArch-Options.html#index-mtune-7)
  
  mabi=
  UrlSuffix(gcc/LoongArch-Options.html#index-mabi-2)
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/predicates.md gcc-16-20251214/gcc/config/loongarch/predicates.md
*** gcc-16-20251207/gcc/config/loongarch/predicates.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/predicates.md	Sun Dec 14 22:32:06 2025
***************
*** 295,301 ****
  
  (define_predicate "low_bitmask_operand"
    (and (match_code "const_int")
!        (match_test "low_bitmask_len (mode, INTVAL (op)) > 12")))
  
  (define_predicate "d_operand"
    (and (match_code "reg")
--- 295,304 ----
  
  (define_predicate "low_bitmask_operand"
    (and (match_code "const_int")
!        (ior
! 	 (match_test "low_bitmask_len (mode, INTVAL (op)) > 12")
! 	 (match_test "op == CONSTM1_RTX (GET_MODE (op))"))
!        (match_test "!TARGET_32BIT_R")))
  
  (define_predicate "d_operand"
    (and (match_code "reg")
***************
*** 406,411 ****
--- 409,415 ----
  
  (define_predicate "ins_zero_bitmask_operand"
    (and (match_code "const_int")
+        (match_test "!TARGET_32BIT_R")
         (match_test "low_bitmask_len (mode, \
  				     ~UINTVAL (op) | (~UINTVAL(op) - 1)) \
  		    > 0")
***************
*** 438,443 ****
--- 442,451 ----
    if (offset != const0_rtx)
      return false;
  
+   /* TARGET_32BIT always support call30.  */
+   if (TARGET_32BIT)
+     return true;
+ 
    /* When compiling with '-mcmodel=medium -mexplicit-relocs'
       symbols are splited in loongarch_legitimize_call_address.
  
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/sync.md gcc-16-20251214/gcc/config/loongarch/sync.md
*** gcc-16-20251207/gcc/config/loongarch/sync.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/sync.md	Sun Dec 14 22:32:06 2025
***************
*** 45,50 ****
--- 45,54 ----
  ;; particular code.
  (define_code_attr amop [(ior "or") (xor "xor") (and "and") (plus "add")])
  
+ ;; For 32 bit.
+ (define_code_attr atomic_optab_insn
+   [(plus "add.w") (ior "or") (xor "xor") (and "and")])
+ 
  ;; Memory barriers.
  
  (define_expand "mem_thread_fence"
***************
*** 260,276 ****
    DONE;
  })
  
! (define_insn "atomic_<amop><mode>"
    [(set (match_operand:GPR 0 "memory_operand" "+ZB")
  	(unspec_volatile:GPR
  	  [(any_atomic:GPR (match_dup 0)
  			   (match_operand:GPR 1 "reg_or_0_operand" "rJ"))
  	   (match_operand:SI 2 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
!   ""
    "am<amop>%A2.<size>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_add<mode>"
    [(set (match_operand:SHORT 0 "memory_operand" "+ZB")
  	(unspec_volatile:SHORT
--- 264,311 ----
    DONE;
  })
  
! (define_expand "atomic_<amop><mode>"
!   [(any_atomic:GPR (match_operand:GPR 0 "memory_operand")    ;; mem location
! 		   (match_operand:GPR 1 "reg_or_0_operand")) ;; value for op
!    (match_operand:SI 2 "const_int_operand")]		     ;; model
!   ""
! {
!   if (TARGET_64BIT)
!     emit_insn (gen_la64_atomic_<amop><mode> (operands[0], operands[1], operands[2]));
!   else
!     emit_insn (gen_la32_atomic_<amop>si (operands[0], operands[1], operands[2]));
!   DONE;
! })
! 
! (define_insn "la64_atomic_<amop><mode>"
    [(set (match_operand:GPR 0 "memory_operand" "+ZB")
  	(unspec_volatile:GPR
  	  [(any_atomic:GPR (match_dup 0)
  			   (match_operand:GPR 1 "reg_or_0_operand" "rJ"))
  	   (match_operand:SI 2 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
!   "TARGET_64BIT"
    "am<amop>%A2.<size>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
+ (define_insn "la32_atomic_<amop>si"
+   [(set (match_operand:SI 0 "memory_operand" "+ZB")
+ 	(unspec_volatile:SI
+ 	  [(any_atomic:SI (match_dup 0)
+ 			   (match_operand:SI 1 "reg_or_0_operand" "rJ"))
+ 	   (match_operand:SI 2 "const_int_operand")] ;; model
+ 	 UNSPEC_SYNC_OLD_OP))
+    (clobber (match_scratch:SI 3 "=&r"))]
+   "!TARGET_64BIT"
+ {
+   return "1:\n\t"
+ 	 "ll.w\t%3,%0\n\t"
+ 	 "<atomic_optab_insn>\t%3,%z1,%3\n\t"
+ 	 "sc.w\t%3,%0\n\t"
+ 	 "beq\t$zero,%3,1b\n\t";
+ }
+   [(set (attr "length") (const_int 16))])
+ 
  (define_insn "atomic_add<mode>"
    [(set (match_operand:SHORT 0 "memory_operand" "+ZB")
  	(unspec_volatile:SHORT
***************
*** 282,288 ****
    "amadd%A2.<size>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
! (define_insn "atomic_fetch_<amop><mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZB"))
     (set (match_dup 1)
--- 317,339 ----
    "amadd%A2.<size>\t$zero,%z1,%0"
    [(set (attr "length") (const_int 4))])
  
! (define_expand "atomic_fetch_<amop><mode>"
!   [(match_operand:GPR 0 "register_operand")		     ;; old value at mem
!    (any_atomic:GPR (match_operand:GPR 1 "memory_operand")    ;; mem location
! 		   (match_operand:GPR 2 "reg_or_0_operand")) ;; value for op
!    (match_operand:SI 3 "const_int_operand")]		     ;; model
!   ""
!   {
!     if (TARGET_64BIT)
!       emit_insn (gen_la64_atomic_fetch_<amop><mode> (operands[0], operands[1],
! 						     operands[2], operands[3]));
!     else
!       emit_insn (gen_la32_atomic_fetch_<amop>si (operands[0], operands[1],
! 						     operands[2], operands[3]));
!     DONE;
!   })
! 
! (define_insn "la64_atomic_fetch_<amop><mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZB"))
     (set (match_dup 1)
***************
*** 291,300 ****
  			   (match_operand:GPR 2 "reg_or_0_operand" "rJ"))
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
!   ""
    "am<amop>%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_fetch_nand_mask_inverted<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
--- 342,371 ----
  			   (match_operand:GPR 2 "reg_or_0_operand" "rJ"))
  	   (match_operand:SI 3 "const_int_operand")] ;; model
  	 UNSPEC_SYNC_OLD_OP))]
!   "TARGET_64BIT"
    "am<amop>%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
+ (define_insn "la32_atomic_fetch_<amop>si"
+   [(set (match_operand:SI 0 "register_operand" "=&r")
+ 	(match_operand:SI 1 "memory_operand" "+ZB"))
+    (set (match_dup 1)
+ 	(unspec_volatile:SI
+ 	  [(any_atomic:SI (match_dup 1)
+ 			   (match_operand:SI 2 "reg_or_0_operand" "rJ"))
+ 	   (match_operand:SI 3 "const_int_operand")] ;; model
+ 	 UNSPEC_SYNC_OLD_OP))
+    (clobber (match_scratch:SI 4 "=&r"))]
+   "!TARGET_64BIT"
+ {
+   return "1:\n\t"
+ 	  "ll.w\t%0,%1\n\t"
+ 	  "<atomic_optab_insn>\t%4,%z2,%0\n\t"
+ 	  "sc.w\t%4,%1\n\t"
+ 	  "beq\t$zero,%4,1b\n\t";
+ }
+   [(set (attr "length") (const_int 16))])
+ 
  (define_insn "atomic_fetch_nand_mask_inverted<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(match_operand:GPR 1 "memory_operand" "+ZC"))
***************
*** 305,318 ****
  	  UNSPEC_SYNC_OLD_OP))
     (clobber (match_scratch:GPR 3 "=&r"))]
    ""
!   {
!     return "1:\\n\\t"
! 	   "ll.<d>\\t%0,%1\\n\\t"
! 	   "orn\\t%3,%2,%0\\n\\t"
! 	   "sc.<d>\\t%3,%1\\n\\t"
! 	   "beqz\\t%3,1b";
!   }
!   [(set (attr "length") (const_int 16))])
  
  (define_mode_iterator ALL_SC [GPR (TI "loongarch_16b_atomic_lock_free_p ()")])
  (define_mode_attr _scq [(SI "") (DI "") (TI "_scq")])
--- 376,399 ----
  	  UNSPEC_SYNC_OLD_OP))
     (clobber (match_scratch:GPR 3 "=&r"))]
    ""
! {
!   output_asm_insn ("1:", operands);
!   output_asm_insn ("ll.<d>\t%0,%1", operands);
!   if (TARGET_32BIT_R)
!     {
!       output_asm_insn ("nor\t%3,%0,$zero", operands);
!       output_asm_insn ("or\t%3,%2,%3", operands);
!     }
!   else
!     output_asm_insn ("orn\t%3,%2,%0", operands);
!   output_asm_insn ("sc.<d>\t%3,%1", operands);
!   output_asm_insn ("beq\t%3,$zero,1b", operands);
!   return "";
! }
!   [(set (attr "length") (if_then_else
! 			  (match_test "TARGET_32BIT_R")
! 			  (const_int 20)
! 			  (const_int 16)))])
  
  (define_mode_iterator ALL_SC [GPR (TI "loongarch_16b_atomic_lock_free_p ()")])
  (define_mode_attr _scq [(SI "") (DI "") (TI "_scq")])
***************
*** 338,344 ****
      DONE;
    })
  
! (define_insn "atomic_exchange<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(unspec_volatile:GPR
  	  [(match_operand:GPR 1 "memory_operand" "+ZB")
--- 419,441 ----
      DONE;
    })
  
! (define_expand "atomic_exchange<mode>"
!   [(match_operand:GPR 0 "register_operand")  ;; old value at mem
!    (match_operand:GPR 1 "memory_operand")    ;; mem location
!    (match_operand:GPR 2 "register_operand")  ;; value for op
!    (match_operand:SI 3 "const_int_operand")] ;; model
!   ""
!   {
!     if (TARGET_64BIT)
!       emit_insn (gen_la64_atomic_exchange<mode> (operands[0], operands[1],
! 						 operands[2], operands[3]));
!     else
!       emit_insn (gen_la32_atomic_exchangesi (operands[0], operands[1],
! 						 operands[2], operands[3]));
!     DONE;
!   })
! 
! (define_insn "la64_atomic_exchange<mode>"
    [(set (match_operand:GPR 0 "register_operand" "=&r")
  	(unspec_volatile:GPR
  	  [(match_operand:GPR 1 "memory_operand" "+ZB")
***************
*** 346,355 ****
  	  UNSPEC_SYNC_EXCHANGE))
     (set (match_dup 1)
  	(match_operand:GPR 2 "register_operand" "r"))]
!   ""
    "amswap%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
  (define_insn "atomic_exchangeti_scq"
    [(set (match_operand:TI 0 "register_operand" "=&r")
  	(unspec_volatile:TI
--- 443,471 ----
  	  UNSPEC_SYNC_EXCHANGE))
     (set (match_dup 1)
  	(match_operand:GPR 2 "register_operand" "r"))]
!   "TARGET_64BIT"
    "amswap%A3.<size>\t%0,%z2,%1"
    [(set (attr "length") (const_int 4))])
  
+ (define_insn "la32_atomic_exchangesi"
+   [(set (match_operand:SI 0 "register_operand" "=&r")
+ 	(unspec_volatile:SI
+ 	  [(match_operand:SI 1 "memory_operand" "+ZB")
+ 	   (match_operand:SI 3 "const_int_operand")] ;; model
+ 	  UNSPEC_SYNC_EXCHANGE))
+    (set (match_dup 1)
+ 	(match_operand:SI 2 "register_operand" "r"))
+    (clobber (match_scratch:SI 4 "=&r"))]
+   "!TARGET_64BIT"
+ {
+   return "1:\n\t"
+ 	 "ll.w\t%0,%1\n\t"
+ 	 "or\t%4,$zero,%2\n\t"
+ 	 "sc.w\t%4,%1\n\t"
+ 	 "beq\t$zero,%4,1b\n\t";
+ }
+   [(set (attr "length") (const_int 16))])
+ 
  (define_insn "atomic_exchangeti_scq"
    [(set (match_operand:TI 0 "register_operand" "=&r")
  	(unspec_volatile:TI
***************
*** 367,373 ****
    output_asm_insn ("ld.d\t%t0,%b1,8", operands);
    output_asm_insn ("move\t%3,%z2", operands);
    output_asm_insn ("sc.q\t%3,%t2,%1", operands);
!   output_asm_insn ("beqz\t%3,1b", operands);
  
    return "";
  }
--- 483,489 ----
    output_asm_insn ("ld.d\t%t0,%b1,8", operands);
    output_asm_insn ("move\t%3,%z2", operands);
    output_asm_insn ("sc.q\t%3,%t2,%1", operands);
!   output_asm_insn ("beq\t%3,$zero,1b", operands);
  
    return "";
  }
***************
*** 430,436 ****
  
    output_asm_insn ("or%i3\t%5,$zero,%3", operands);
    output_asm_insn ("sc.<size>\t%5,%1", operands);
!   output_asm_insn ("beqz\t%5,1b", operands);
    output_asm_insn ("%T4b\t3f", operands);
    output_asm_insn ("2:", operands);
    output_asm_insn ("%G4", operands);
--- 546,552 ----
  
    output_asm_insn ("or%i3\t%5,$zero,%3", operands);
    output_asm_insn ("sc.<size>\t%5,%1", operands);
!   output_asm_insn ("beq\t%5,$zero,1b", operands);
    output_asm_insn ("%T4b\t3f", operands);
    output_asm_insn ("2:", operands);
    output_asm_insn ("%G4", operands);
***************
*** 498,504 ****
        emit_insn (gen_rtx_SET (compare, difference));
      }
  
!   if (word_mode != <MODE>mode)
      {
        rtx reg = gen_reg_rtx (word_mode);
        emit_insn (gen_rtx_SET (reg, gen_rtx_SIGN_EXTEND (word_mode, compare)));
--- 614,620 ----
        emit_insn (gen_rtx_SET (compare, difference));
      }
  
!   if (word_mode != GET_MODE (compare))
      {
        rtx reg = gen_reg_rtx (word_mode);
        emit_insn (gen_rtx_SET (reg, gen_rtx_SIGN_EXTEND (word_mode, compare)));
***************
*** 515,521 ****
     (any_bitwise (match_operand:SHORT 1 "memory_operand"   "+ZB") ;; memory
  		(match_operand:SHORT 2 "reg_or_0_operand" "rJ")) ;; val
     (match_operand:SI 3 "const_int_operand" "")]			 ;; model
!   ""
  {
    /* We have no QI/HImode bitwise atomics, so use the address LSBs to form
       a mask, then use an aligned SImode atomic.  */
--- 631,637 ----
     (any_bitwise (match_operand:SHORT 1 "memory_operand"   "+ZB") ;; memory
  		(match_operand:SHORT 2 "reg_or_0_operand" "rJ")) ;; val
     (match_operand:SI 3 "const_int_operand" "")]			 ;; model
!   "TARGET_64BIT || TARGET_32BIT_S"
  {
    /* We have no QI/HImode bitwise atomics, so use the address LSBs to form
       a mask, then use an aligned SImode atomic.  */
***************
*** 642,667 ****
  				    operands[3], operands[4], mod_f);
      }
  
!       rtx compare = operands[1];
!       if (operands[3] != const0_rtx)
! 	{
! 	  machine_mode mode = GET_MODE (operands[3]);
! 	  rtx op1 = convert_modes (SImode, mode, operands[1], true);
! 	  rtx op3 = convert_modes (SImode, mode, operands[3], true);
! 	  rtx difference = gen_rtx_MINUS (SImode, op1, op3);
! 	  compare = gen_reg_rtx (SImode);
! 	  emit_insn (gen_rtx_SET (compare, difference));
! 	}
  
!       if (word_mode != <MODE>mode)
! 	{
! 	  rtx reg = gen_reg_rtx (word_mode);
! 	  emit_insn (gen_rtx_SET (reg, gen_rtx_SIGN_EXTEND (word_mode, compare)));
! 	  compare = reg;
! 	}
  
!       emit_insn (gen_rtx_SET (operands[0],
! 			      gen_rtx_EQ (SImode, compare, const0_rtx)));
    DONE;
  })
  
--- 758,783 ----
  				    operands[3], operands[4], mod_f);
      }
  
!   rtx compare = operands[1];
!   if (operands[3] != const0_rtx)
!     {
!       machine_mode mode = GET_MODE (operands[3]);
!       rtx op1 = convert_modes (SImode, mode, operands[1], true);
!       rtx op3 = convert_modes (SImode, mode, operands[3], true);
!       rtx difference = gen_rtx_MINUS (SImode, op1, op3);
!       compare = gen_reg_rtx (SImode);
!       emit_insn (gen_rtx_SET (compare, difference));
!     }
  
!   if (word_mode != GET_MODE (compare))
!     {
!       rtx reg = gen_reg_rtx (word_mode);
!       emit_insn (gen_rtx_SET (reg, gen_rtx_SIGN_EXTEND (word_mode, compare)));
!       compare = reg;
!     }
  
!   emit_insn (gen_rtx_SET (operands[0],
! 			  gen_rtx_EQ (SImode, compare, const0_rtx)));
    DONE;
  })
  
***************
*** 716,722 ****
    output_asm_insn ("sc.q\t%7,%t3,%1", operands);
  
    /* Check if sc.q has done the store.  */
!   output_asm_insn ("beqz\t%7,1b", operands);
  
    /* Jump over the mod_f barrier if sc.q has succeeded.  */
    output_asm_insn ("%T4b\t3f", operands);
--- 832,838 ----
    output_asm_insn ("sc.q\t%7,%t3,%1", operands);
  
    /* Check if sc.q has done the store.  */
!   output_asm_insn ("beq\t%7,$zero,1b", operands);
  
    /* Jump over the mod_f barrier if sc.q has succeeded.  */
    output_asm_insn ("%T4b\t3f", operands);
***************
*** 870,876 ****
  	 "and\\t%7,%0,%z3\\n\\t"
  	 "or%i5\\t%7,%7,%5\\n\\t"
  	 "sc.<size>\\t%7,%1\\n\\t"
! 	 "beqz\\t%7,1b\\n\\t";
  }
    [(set (attr "length") (const_int 20))])
  
--- 986,992 ----
  	 "and\\t%7,%0,%z3\\n\\t"
  	 "or%i5\\t%7,%7,%5\\n\\t"
  	 "sc.<size>\\t%7,%1\\n\\t"
! 	 "beq\\t%7,$zero,1b\\n\\t";
  }
    [(set (attr "length") (const_int 20))])
  
***************
*** 967,973 ****
      }
  
    output_asm_insn ("sc.q\t%3,%4,%1", operands);
!   output_asm_insn ("beqz\t%3,1b", operands);
  
    return "";
  }
--- 1083,1089 ----
      }
  
    output_asm_insn ("sc.q\t%3,%4,%1", operands);
!   output_asm_insn ("beq\t%3,$zero,1b", operands);
  
    return "";
  }
diff -Nrcpad gcc-16-20251207/gcc/config/loongarch/t-linux gcc-16-20251214/gcc/config/loongarch/t-linux
*** gcc-16-20251207/gcc/config/loongarch/t-linux	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/loongarch/t-linux	Sun Dec 14 22:32:06 2025
***************
*** 16,21 ****
--- 16,24 ----
  # along with GCC; see the file COPYING3.  If not see
  # <http://www.gnu.org/licenses/>.
  
+ MULTIOSDIR_ilp32d := ../lib32$(call if_multiarch,:loongarch32-linux-gnu)
+ MULTIOSDIR_ilp32f := ../lib32/f32$(call if_multiarch,:loongarch32-linux-gnuf32)
+ MULTIOSDIR_ilp32s := ../lib32/sf$(call if_multiarch,:loongarch32-linux-gnusf)
  MULTIOSDIR_lp64d := ../lib64$(call if_multiarch,:loongarch64-linux-gnu)
  MULTIOSDIR_lp64f := ../lib64/f32$(call if_multiarch,:loongarch64-linux-gnuf32)
  MULTIOSDIR_lp64s := ../lib64/sf$(call if_multiarch,:loongarch64-linux-gnusf)
*************** MULTIOSDIR_lp64s := ../lib64/sf$(call if
*** 24,29 ****
--- 27,35 ----
  ifeq ($(filter LA_DISABLE_MULTILIB,$(tm_defines)),)
  
      MULTILIB_OSDIRNAMES = .=$(MULTIOSDIR_$(mlib_default))
+     MULTILIB_OSDIRNAMES += mabi.ilp32d=$(MULTIOSDIR_ilp32d)
+     MULTILIB_OSDIRNAMES += mabi.ilp32f=$(MULTIOSDIR_ilp32f)
+     MULTILIB_OSDIRNAMES += mabi.ilp32s=$(MULTIOSDIR_ilp32s)
      MULTILIB_OSDIRNAMES += mabi.lp64d=$(MULTIOSDIR_lp64d)
      MULTILIB_OSDIRNAMES += mabi.lp64f=$(MULTIOSDIR_lp64f)
      MULTILIB_OSDIRNAMES += mabi.lp64s=$(MULTIOSDIR_lp64s)
diff -Nrcpad gcc-16-20251207/gcc/config/lynx.opt.urls gcc-16-20251214/gcc/config/lynx.opt.urls
*** gcc-16-20251207/gcc/config/lynx.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/lynx.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,5 ****
--- 1,7 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/lynx.opt and generated HTML
  
+ ; skipping UrlSuffix for 'mshared' due to finding no URLs
+ 
  mthreads
  UrlSuffix(gcc/Cygwin-and-MinGW-Options.html#index-mthreads)
  
diff -Nrcpad gcc-16-20251207/gcc/config/m32r/m32r.opt.urls gcc-16-20251214/gcc/config/m32r/m32r.opt.urls
*** gcc-16-20251207/gcc/config/m32r/m32r.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/m32r/m32r.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/M32R_002fD-Options.html#in
*** 15,21 ****
  mdebug
  UrlSuffix(gcc/M32R_002fD-Options.html#index-mdebug)
  
! ; skipping UrlSuffix for 'mflush-func=' due to finding no URLs
  
  mno-flush-func
  UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-func)
--- 15,28 ----
  mdebug
  UrlSuffix(gcc/M32R_002fD-Options.html#index-mdebug)
  
! mflush-func=
! UrlSuffix(gcc/M32R_002fD-Options.html#index-mflush-func)
! 
! mflush-trap=
! UrlSuffix(gcc/M32R_002fD-Options.html#index-mflush-trap)
! 
! mmodel=
! UrlSuffix(gcc/M32R_002fD-Options.html#index-mmodel)
  
  mno-flush-func
  UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-func)
*************** UrlSuffix(gcc/M32R_002fD-Options.html#in
*** 23,27 ****
  mno-flush-trap
  UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-trap)
  
! ; skipping UrlSuffix for 'msdata=' due to finding no URLs
  
--- 30,35 ----
  mno-flush-trap
  UrlSuffix(gcc/M32R_002fD-Options.html#index-mno-flush-trap)
  
! msdata=
! UrlSuffix(gcc/M32R_002fD-Options.html#index-msdata-2)
  
diff -Nrcpad gcc-16-20251207/gcc/config/m68k/m68k.opt gcc-16-20251214/gcc/config/m68k/m68k.opt
*** gcc-16-20251207/gcc/config/m68k/m68k.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/m68k/m68k.opt	Sun Dec 14 22:32:06 2025
*************** Use 32-bit offsets in jump tables rather
*** 148,154 ****
  
  mlra
  Target Var(m68k_lra_p) Undocumented
! Usa LRA for reload instead of the old reload framework.  This option is
  experimental, and it may be removed in future versions of the compiler.
  
  mnobitfield
--- 148,154 ----
  
  mlra
  Target Var(m68k_lra_p) Undocumented
! Use LRA for reload instead of the old reload framework.  This option is
  experimental, and it may be removed in future versions of the compiler.
  
  mnobitfield
diff -Nrcpad gcc-16-20251207/gcc/config/m68k/m68k.opt.urls gcc-16-20251214/gcc/config/m68k/m68k.opt.urls
*** gcc-16-20251207/gcc/config/m68k/m68k.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/m68k/m68k.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/M680x0-Options.html#index-
*** 72,78 ****
  mhard-float
  UrlSuffix(gcc/M680x0-Options.html#index-mhard-float-1)
  
! ; skipping UrlSuffix for 'mid-shared-library' due to finding no URLs
  
  mlong-jump-table-offsets
  UrlSuffix(gcc/M680x0-Options.html#index-mlong-jump-table-offsets)
--- 72,79 ----
  mhard-float
  UrlSuffix(gcc/M680x0-Options.html#index-mhard-float-1)
  
! mid-shared-library
! UrlSuffix(gcc/M680x0-Options.html#index-mid-shared-library-1)
  
  mlong-jump-table-offsets
  UrlSuffix(gcc/M680x0-Options.html#index-mlong-jump-table-offsets)
*************** UrlSuffix(gcc/M680x0-Options.html#index-
*** 88,96 ****
  mrtd
  UrlSuffix(gcc/M680x0-Options.html#index-mrtd)
  
! ; skipping UrlSuffix for 'msep-data' due to finding no URLs
  
! ; skipping UrlSuffix for 'mshared-library-id=' due to finding no URLs
  
  mshort
  UrlSuffix(gcc/M680x0-Options.html#index-mshort)
--- 89,99 ----
  mrtd
  UrlSuffix(gcc/M680x0-Options.html#index-mrtd)
  
! msep-data
! UrlSuffix(gcc/M680x0-Options.html#index-msep-data-1)
  
! mshared-library-id=
! UrlSuffix(gcc/M680x0-Options.html#index-mshared-library-id-1)
  
  mshort
  UrlSuffix(gcc/M680x0-Options.html#index-mshort)
*************** mstrict-align
*** 102,108 ****
  UrlSuffix(gcc/M680x0-Options.html#index-mstrict-align-2)
  
  mtune=
! UrlSuffix(gcc/M680x0-Options.html#index-mtune-9)
  
  mxgot
  UrlSuffix(gcc/M680x0-Options.html#index-mxgot)
--- 105,111 ----
  UrlSuffix(gcc/M680x0-Options.html#index-mstrict-align-2)
  
  mtune=
! UrlSuffix(gcc/M680x0-Options.html#index-mtune-8)
  
  mxgot
  UrlSuffix(gcc/M680x0-Options.html#index-mxgot)
diff -Nrcpad gcc-16-20251207/gcc/config/mcore/mcore.opt.urls gcc-16-20251214/gcc/config/mcore/mcore.opt.urls
*** gcc-16-20251207/gcc/config/mcore/mcore.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/mcore/mcore.opt.urls	Sun Dec 14 22:32:06 2025
*************** m4byte-functions
*** 10,16 ****
  UrlSuffix(gcc/MCore-Options.html#index-m4byte-functions)
  
  mbig-endian
! UrlSuffix(gcc/MCore-Options.html#index-mbig-endian-7)
  
  mcallgraph-data
  UrlSuffix(gcc/MCore-Options.html#index-mcallgraph-data)
--- 10,16 ----
  UrlSuffix(gcc/MCore-Options.html#index-m4byte-functions)
  
  mbig-endian
! UrlSuffix(gcc/MCore-Options.html#index-mbig-endian-6)
  
  mcallgraph-data
  UrlSuffix(gcc/MCore-Options.html#index-mcallgraph-data)
*************** mhardlit
*** 22,28 ****
  UrlSuffix(gcc/MCore-Options.html#index-mhardlit)
  
  mlittle-endian
! UrlSuffix(gcc/MCore-Options.html#index-mlittle-endian-7)
  
  mno-lsim
  UrlSuffix(gcc/MCore-Options.html#index-mno-lsim-1)
--- 22,28 ----
  UrlSuffix(gcc/MCore-Options.html#index-mhardlit)
  
  mlittle-endian
! UrlSuffix(gcc/MCore-Options.html#index-mlittle-endian-6)
  
  mno-lsim
  UrlSuffix(gcc/MCore-Options.html#index-mno-lsim-1)
diff -Nrcpad gcc-16-20251207/gcc/config/microblaze/microblaze.opt gcc-16-20251214/gcc/config/microblaze/microblaze.opt
*** gcc-16-20251207/gcc/config/microblaze/microblaze.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/microblaze/microblaze.opt	Sun Dec 14 22:32:06 2025
***************
*** 21,39 ****
  ; <http://www.gnu.org/licenses/>.  */
  
  Zxl-mode-bootstrap
! Driver
  
  Zxl-mode-executable
! Driver
  
  Zxl-mode-novectors
! Driver
  
  Zxl-mode-xilkernel
! Driver
  
  Zxl-mode-xmdstub
! Driver
  
  msoft-float
  Target RejectNegative Mask(SOFT_FLOAT)
--- 21,39 ----
  ; <http://www.gnu.org/licenses/>.  */
  
  Zxl-mode-bootstrap
! Driver Undocumented
  
  Zxl-mode-executable
! Driver Undocumented
  
  Zxl-mode-novectors
! Driver Undocumented
  
  Zxl-mode-xilkernel
! Driver Undocumented
  
  Zxl-mode-xmdstub
! Driver Undocumented
  
  msoft-float
  Target RejectNegative Mask(SOFT_FLOAT)
*************** Target Mask(PATTERN_COMPARE)
*** 84,90 ****
  Use pattern compare instructions.
  
  mxl-stack-check
! Target Mask(STACK_CHECK) Warn(%qs is deprecated; use -fstack-check)
  Check for stack overflow at runtime.
  
  mxl-gp-opt
--- 84,90 ----
  Use pattern compare instructions.
  
  mxl-stack-check
! Target Mask(STACK_CHECK) Warn(%qs is deprecated; use -fstack-check) Undocumented
  Check for stack overflow at runtime.
  
  mxl-gp-opt
*************** Target Mask(XLGPOPT)
*** 92,98 ****
  Use GP relative sdata/sbss sections.
  
  mno-clearbss
! Target RejectNegative Var(flag_zero_initialized_in_bss, 0) Warn(%qs is deprecated; use -fno-zero-initialized-in-bss)
  Clear the BSS to zero and place zero initialized in BSS.
  
  mxl-multiply-high
--- 92,98 ----
  Use GP relative sdata/sbss sections.
  
  mno-clearbss
! Target RejectNegative Var(flag_zero_initialized_in_bss, 0) Warn(%qs is deprecated; use -fno-zero-initialized-in-bss) Undocumented
  Clear the BSS to zero and place zero initialized in BSS.
  
  mxl-multiply-high
*************** Use hardware floating point square root
*** 109,127 ****
  
  mxl-mode-executable
  Target Mask(XL_MODE_EXECUTABLE)
! Description for mxl-mode-executable.
  
  mxl-mode-xmdstub
  Target Mask(XL_MODE_XMDSTUB)
! Description for mxl-mode-xmdstub.
  
  mxl-mode-bootstrap
  Target Mask(XL_MODE_BOOTSTRAP)
! Description for mxl-mode-bootstrap.
  
  mxl-mode-novectors
  Target Mask(XL_MODE_NOVECTORS)
! Description for mxl-mode-novectors.
  
  mxl-prefetch
  Target Mask(PREFETCH)
--- 109,127 ----
  
  mxl-mode-executable
  Target Mask(XL_MODE_EXECUTABLE)
! Build application as normal executable.
  
  mxl-mode-xmdstub
  Target Mask(XL_MODE_XMDSTUB)
! Build application for use with xmdstub debug agent.
  
  mxl-mode-bootstrap
  Target Mask(XL_MODE_BOOTSTRAP)
! Build application to be loaded using a bootloader.
  
  mxl-mode-novectors
  Target Mask(XL_MODE_NOVECTORS)
! Build application without any of the MicroBlaze vectors.
  
  mxl-prefetch
  Target Mask(PREFETCH)
*************** Target Mask(PIC_DATA_TEXT_REL)
*** 132,135 ****
  Data referenced by offset from start of text instead of GOT (with -fPIC/-fPIE).
  
  mxl-mode-xilkernel
! Target
--- 132,135 ----
  Data referenced by offset from start of text instead of GOT (with -fPIC/-fPIE).
  
  mxl-mode-xilkernel
! Target Undocumented
diff -Nrcpad gcc-16-20251207/gcc/config/microblaze/microblaze.opt.urls gcc-16-20251214/gcc/config/microblaze/microblaze.opt.urls
*** gcc-16-20251207/gcc/config/microblaze/microblaze.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/microblaze/microblaze.opt.urls	Sun Dec 14 22:32:06 2025
*************** mmemcpy
*** 16,25 ****
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mmemcpy-1)
  
  mbig-endian
! UrlSuffix(gcc/MicroBlaze-Options.html#index-mbig-endian-8)
  
  mlittle-endian
! UrlSuffix(gcc/MicroBlaze-Options.html#index-mlittle-endian-8)
  
  mxl-soft-mul
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-mul)
--- 16,25 ----
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mmemcpy-1)
  
  mbig-endian
! UrlSuffix(gcc/MicroBlaze-Options.html#index-mbig-endian-7)
  
  mlittle-endian
! UrlSuffix(gcc/MicroBlaze-Options.html#index-mlittle-endian-7)
  
  mxl-soft-mul
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-soft-mul)
*************** UrlSuffix(gcc/MicroBlaze-Options.html#in
*** 36,50 ****
  mxl-pattern-compare
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-pattern-compare)
  
- mxl-stack-check
- UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-stack-check)
- 
  mxl-gp-opt
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-gp-opt)
  
- mno-clearbss
- UrlSuffix(gcc/MicroBlaze-Options.html#index-mno-clearbss)
- 
  mxl-multiply-high
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-multiply-high)
  
--- 36,44 ----
*************** UrlSuffix(gcc/MicroBlaze-Options.html#in
*** 54,59 ****
--- 48,68 ----
  mxl-float-sqrt
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-float-sqrt)
  
+ mxl-mode-executable
+ UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-mode-executable)
+ 
+ mxl-mode-xmdstub
+ UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-mode-xmdstub)
+ 
+ mxl-mode-bootstrap
+ UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-mode-bootstrap)
+ 
+ mxl-mode-novectors
+ UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-mode-novectors)
+ 
+ mxl-prefetch
+ UrlSuffix(gcc/MicroBlaze-Options.html#index-mxl-prefetch)
+ 
  mpic-data-is-text-relative
  UrlSuffix(gcc/MicroBlaze-Options.html#index-mpic-data-is-text-relative-1)
  
diff -Nrcpad gcc-16-20251207/gcc/config/mingw/mingw32.h gcc-16-20251214/gcc/config/mingw/mingw32.h
*** gcc-16-20251207/gcc/config/mingw/mingw32.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/mingw/mingw32.h	Sun Dec 14 22:32:06 2025
*************** do {						         \
*** 315,321 ****
  #define TARGET_ASM_SELECT_SECTION mingw_pe_select_section
  
  #undef DEFAULT_TLS_SEG_REG
! #define DEFAULT_TLS_SEG_REG (TARGET_64BIT ? ADDR_SPACE_SEG_GS : ADDR_SPACE_SEG_FS)
  
  #define HAVE_ENABLE_EXECUTE_STACK
  #undef  CHECK_EXECUTE_STACK_ENABLED
--- 315,325 ----
  #define TARGET_ASM_SELECT_SECTION mingw_pe_select_section
  
  #undef DEFAULT_TLS_SEG_REG
! #define DEFAULT_TLS_SEG_REG \
!   (TARGET_64BIT ? ADDR_SPACE_SEG_GS : ADDR_SPACE_SEG_FS)
! 
! #undef DEFAULT_TLS_SEG_OFFSET
! #define DEFAULT_TLS_SEG_OFFSET (TARGET_64BIT ? 88 : 44)
  
  #define HAVE_ENABLE_EXECUTE_STACK
  #undef  CHECK_EXECUTE_STACK_ENABLED
diff -Nrcpad gcc-16-20251207/gcc/config/mingw/winnt.cc gcc-16-20251214/gcc/config/mingw/winnt.cc
*** gcc-16-20251207/gcc/config/mingw/winnt.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/mingw/winnt.cc	Sun Dec 14 22:32:06 2025
*************** mingw_pe_unique_section (tree decl, int
*** 446,453 ****
      prefix = ".text$";
    else if (decl_readonly_section (decl, reloc))
      prefix = ".rdata$";
    else if (DECL_THREAD_LOCAL_P (decl))
!     prefix = ".tls$";
    else
      prefix = ".data$";
    len = strlen (name) + strlen (prefix);
--- 446,456 ----
      prefix = ".text$";
    else if (decl_readonly_section (decl, reloc))
      prefix = ".rdata$";
+   /* Note that we need two dollar signs for TLS sections
+      because they need to be ASCII-sorted before .tls$ZZZ
+      to be properly laid out by the GNU linker.  */
    else if (DECL_THREAD_LOCAL_P (decl))
!     prefix = ".tls$$";
    else
      prefix = ".data$";
    len = strlen (name) + strlen (prefix);
*************** mingw_pe_asm_named_section (const char *
*** 522,530 ****
      *f++ = 'e';
  #endif
  
-   if (strcmp (name, ".tls$") == 0)
-     *f++ = 'd';
- 
    if ((flags & (SECTION_CODE | SECTION_WRITE)) == 0)
      /* readonly data */
      {
--- 525,530 ----
*************** mingw_pe_asm_named_section (const char *
*** 533,538 ****
--- 533,540 ----
      }
    else
      {
+       if (startswith (name, ".tls$"))
+         *f++ = 'd';
        if (flags & SECTION_CODE)
          *f++ = 'x';
        if (flags & SECTION_WRITE)
diff -Nrcpad gcc-16-20251207/gcc/config/mips/mips.opt gcc-16-20251214/gcc/config/mips/mips.opt
*** gcc-16-20251207/gcc/config/mips/mips.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/mips/mips.opt	Sun Dec 14 22:32:06 2025
*************** Target Var(TARGET_FRAME_GROWS_DOWNWARDS)
*** 478,484 ****
  Change the behaviour to grow the frame downwards.
  
  noasmopt
! Driver
  
  mload-store-pairs
  Target Var(TARGET_LOAD_STORE_PAIRS) Init(1)
--- 478,484 ----
  Change the behaviour to grow the frame downwards.
  
  noasmopt
! Driver Undocumented
  
  mload-store-pairs
  Target Var(TARGET_LOAD_STORE_PAIRS) Init(1)
diff -Nrcpad gcc-16-20251207/gcc/config/mips/mips.opt.urls gcc-16-20251214/gcc/config/mips/mips.opt.urls
*** gcc-16-20251207/gcc/config/mips/mips.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/mips/mips.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,10 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips.opt and generated HTML
  
  EB
! UrlSuffix(gcc/MIPS-Options.html#index-EB-1)
  
  EL
! UrlSuffix(gcc/MIPS-Options.html#index-EL-1)
  
  mabi=
  UrlSuffix(gcc/MIPS-Options.html#index-mabi-3)
--- 1,10 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/mips/mips.opt and generated HTML
  
  EB
! UrlSuffix(gcc/MIPS-Options.html#index-EB)
  
  EL
! UrlSuffix(gcc/MIPS-Options.html#index-EL)
  
  mabi=
  UrlSuffix(gcc/MIPS-Options.html#index-mabi-3)
*************** march=
*** 22,28 ****
  UrlSuffix(gcc/MIPS-Options.html#index-march-9)
  
  mbranch-cost=
! UrlSuffix(gcc/MIPS-Options.html#index-mbranch-cost-3)
  
  mbranch-likely
  UrlSuffix(gcc/MIPS-Options.html#index-mbranch-likely)
--- 22,28 ----
  UrlSuffix(gcc/MIPS-Options.html#index-march-9)
  
  mbranch-cost=
! UrlSuffix(gcc/MIPS-Options.html#index-mbranch-cost-4)
  
  mbranch-likely
  UrlSuffix(gcc/MIPS-Options.html#index-mbranch-likely)
*************** UrlSuffix(gcc/MIPS-Options.html#index-md
*** 56,64 ****
  
  ; skipping UrlSuffix for 'mdebug' due to finding no URLs
  
! ; skipping UrlSuffix for 'meb' due to finding no URLs
  
! ; skipping UrlSuffix for 'mel' due to finding no URLs
  
  membedded-data
  UrlSuffix(gcc/MIPS-Options.html#index-membedded-data)
--- 56,66 ----
  
  ; skipping UrlSuffix for 'mdebug' due to finding no URLs
  
! meb
! UrlSuffix(gcc/MIPS-Options.html#index-meb)
  
! mel
! UrlSuffix(gcc/MIPS-Options.html#index-mel)
  
  membedded-data
  UrlSuffix(gcc/MIPS-Options.html#index-membedded-data)
*************** UrlSuffix(gcc/MIPS-Options.html#index-mf
*** 105,110 ****
--- 107,115 ----
  mfix-vr4130
  UrlSuffix(gcc/MIPS-Options.html#index-mfix-vr4130)
  
+ mfix4300
+ UrlSuffix(gcc/MIPS-Options.html#index-mfix4300)
+ 
  mfp-exceptions
  UrlSuffix(gcc/MIPS-Options.html#index-mfp-exceptions)
  
*************** mfp64
*** 118,124 ****
  UrlSuffix(gcc/MIPS-Options.html#index-mfp64)
  
  mflush-func=
! UrlSuffix(gcc/MIPS-Options.html#index-mflush-func)
  
  mgp32
  UrlSuffix(gcc/MIPS-Options.html#index-mgp32)
--- 123,129 ----
  UrlSuffix(gcc/MIPS-Options.html#index-mfp64)
  
  mflush-func=
! UrlSuffix(gcc/MIPS-Options.html#index-mflush-func-1)
  
  mgp32
  UrlSuffix(gcc/MIPS-Options.html#index-mgp32)
*************** UrlSuffix(gcc/MIPS-Options.html#index-mm
*** 171,176 ****
--- 176,184 ----
  mmicromips
  UrlSuffix(gcc/MIPS-Options.html#index-mmicromips)
  
+ mmsa
+ UrlSuffix(gcc/MIPS-Options.html#index-mmsa)
+ 
  mmt
  UrlSuffix(gcc/MIPS-Options.html#index-mmt)
  
*************** UrlSuffix(gcc/MIPS-Options.html#index-mr
*** 201,206 ****
--- 209,217 ----
  mrelax-pic-calls
  UrlSuffix(gcc/MIPS-Options.html#index-mrelax-pic-calls)
  
+ mshared
+ UrlSuffix(gcc/MIPS-Options.html#index-mshared)
+ 
  msingle-float
  UrlSuffix(gcc/MIPS-Options.html#index-msingle-float-1)
  
*************** mmadd4
*** 229,235 ****
  UrlSuffix(gcc/MIPS-Options.html#index-mmadd4)
  
  mtune=
! UrlSuffix(gcc/MIPS-Options.html#index-mtune-10)
  
  mstrict-align
  UrlSuffix(gcc/MIPS-Options.html#index-mstrict-align-3)
--- 240,246 ----
  UrlSuffix(gcc/MIPS-Options.html#index-mmadd4)
  
  mtune=
! UrlSuffix(gcc/MIPS-Options.html#index-mtune-9)
  
  mstrict-align
  UrlSuffix(gcc/MIPS-Options.html#index-mstrict-align-3)
diff -Nrcpad gcc-16-20251207/gcc/config/mn10300/mn10300.opt.urls gcc-16-20251214/gcc/config/mn10300/mn10300.opt.urls
*** gcc-16-20251207/gcc/config/mn10300/mn10300.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/mn10300/mn10300.opt.urls	Sun Dec 14 22:32:06 2025
*************** mam34
*** 10,16 ****
  UrlSuffix(gcc/MN10300-Options.html#index-mam34)
  
  mtune=
! UrlSuffix(gcc/MN10300-Options.html#index-mtune-11)
  
  mmult-bug
  UrlSuffix(gcc/MN10300-Options.html#index-mmult-bug)
--- 10,16 ----
  UrlSuffix(gcc/MN10300-Options.html#index-mam34)
  
  mtune=
! UrlSuffix(gcc/MN10300-Options.html#index-mtune-10)
  
  mmult-bug
  UrlSuffix(gcc/MN10300-Options.html#index-mmult-bug)
diff -Nrcpad gcc-16-20251207/gcc/config/moxie/moxie.opt.urls gcc-16-20251214/gcc/config/moxie/moxie.opt.urls
*** gcc-16-20251207/gcc/config/moxie/moxie.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/moxie/moxie.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,10 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/moxie/moxie.opt and generated HTML
  
  meb
! UrlSuffix(gcc/Moxie-Options.html#index-meb)
  
  mel
! UrlSuffix(gcc/Moxie-Options.html#index-mel)
  
  mmul.x
  UrlSuffix(gcc/Moxie-Options.html#index-mmul_002ex)
--- 1,10 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/moxie/moxie.opt and generated HTML
  
  meb
! UrlSuffix(gcc/Moxie-Options.html#index-meb-1)
  
  mel
! UrlSuffix(gcc/Moxie-Options.html#index-mel-1)
  
  mmul.x
  UrlSuffix(gcc/Moxie-Options.html#index-mmul_002ex)
diff -Nrcpad gcc-16-20251207/gcc/config/msp430/msp430.opt gcc-16-20251214/gcc/config/msp430/msp430.opt
*** gcc-16-20251207/gcc/config/msp430/msp430.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/msp430/msp430.opt	Sun Dec 14 22:32:06 2025
*************** Target Var(msp430_warn_devices_csv) Init
*** 23,29 ****
  Warn if devices.csv is not found or there are problem parsing it (default: on).
  
  mcpu=
! Target Joined RejectNegative Var(target_cpu) ToLower Enum(msp430_cpu_types) Init(MSP430_CPU_MSP430X_DEFAULT)
  Specify the ISA to build for: msp430, msp430x, msp430xv2.
  
  Enum
--- 23,29 ----
  Warn if devices.csv is not found or there are problem parsing it (default: on).
  
  mcpu=
! Target Joined RejectNegative Var(target_cpu) ToLower Enum(msp430_cpu_types) Init(MSP430_CPU_MSP430X_DEFAULT) Undocumented
  Specify the ISA to build for: msp430, msp430x, msp430xv2.
  
  Enum
*************** Target Joined RejectNegative ToLower
*** 127,133 ****
  Passes on a request to the assembler to warn about various silicon errata.
  
  mdevices-csv-loc=
! Target Joined Var(msp430_devices_csv_loc) RejectNegative
  The path to devices.csv.  The GCC driver can normally locate devices.csv itself
  and pass this option to the compiler, so the user shouldn't need to pass this.
  
--- 127,133 ----
  Passes on a request to the assembler to warn about various silicon errata.
  
  mdevices-csv-loc=
! Target Joined Var(msp430_devices_csv_loc) RejectNegative Undocumented
  The path to devices.csv.  The GCC driver can normally locate devices.csv itself
  and pass this option to the compiler, so the user shouldn't need to pass this.
  
diff -Nrcpad gcc-16-20251207/gcc/config/msp430/msp430.opt.urls gcc-16-20251214/gcc/config/msp430/msp430.opt.urls
*** gcc-16-20251207/gcc/config/msp430/msp430.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/msp430/msp430.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/MSP430-Options.html#index-
*** 18,25 ****
  mwarn-devices-csv
  UrlSuffix(gcc/MSP430-Options.html#index-mwarn-devices-csv)
  
! mcpu=
! UrlSuffix(gcc/MSP430-Options.html#index-mcpu_003d-4)
  
  mlarge
  UrlSuffix(gcc/MSP430-Options.html#index-mlarge)
--- 18,24 ----
  mwarn-devices-csv
  UrlSuffix(gcc/MSP430-Options.html#index-mwarn-devices-csv)
  
! ; skipping UrlSuffix for 'mcpu=' due to finding no URLs
  
  mlarge
  UrlSuffix(gcc/MSP430-Options.html#index-mlarge)
*************** minrt
*** 34,40 ****
  UrlSuffix(gcc/MSP430-Options.html#index-minrt)
  
  mhwmult=
! UrlSuffix(gcc/MSP430-Options.html#index-mhwmult_003d)
  
  mcode-region=
  UrlSuffix(gcc/MSP430-Options.html#index-mcode-region)
--- 33,39 ----
  UrlSuffix(gcc/MSP430-Options.html#index-minrt)
  
  mhwmult=
! UrlSuffix(gcc/MSP430-Options.html#index-mhwmult)
  
  mcode-region=
  UrlSuffix(gcc/MSP430-Options.html#index-mcode-region)
*************** UrlSuffix(gcc/MSP430-Options.html#index-
*** 42,47 ****
--- 41,49 ----
  mdata-region=
  UrlSuffix(gcc/MSP430-Options.html#index-mdata-region)
  
+ muse-lower-region-prefix
+ UrlSuffix(gcc/MSP430-Options.html#index-muse-lower-region-prefix)
+ 
  msilicon-errata=
  UrlSuffix(gcc/MSP430-Options.html#index-msilicon-errata)
  
diff -Nrcpad gcc-16-20251207/gcc/config/nds32/nds32-utils.cc gcc-16-20251214/gcc/config/nds32/nds32-utils.cc
*** gcc-16-20251207/gcc/config/nds32/nds32-utils.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/nds32/nds32-utils.cc	Sun Dec 14 22:32:06 2025
***************
*** 41,47 ****
  namespace nds32 {
  
  /* Get the rtx in the PATTERN field of an insn.  If INSN is not an insn,
!    the funciton doesn't change anything and returns it directly.  */
  rtx
  extract_pattern_from_insn (rtx insn)
  {
--- 41,47 ----
  namespace nds32 {
  
  /* Get the rtx in the PATTERN field of an insn.  If INSN is not an insn,
!    the function doesn't change anything and returns it directly.  */
  rtx
  extract_pattern_from_insn (rtx insn)
  {
diff -Nrcpad gcc-16-20251207/gcc/config/nds32/nds32.opt.urls gcc-16-20251214/gcc/config/nds32/nds32.opt.urls
*** gcc-16-20251207/gcc/config/nds32/nds32.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/nds32/nds32.opt.urls	Sun Dec 14 22:32:06 2025
*************** mfull-regs
*** 13,22 ****
  UrlSuffix(gcc/NDS32-Options.html#index-mfull-regs)
  
  mbig-endian
! UrlSuffix(gcc/NDS32-Options.html#index-mbig-endian-9)
  
  mlittle-endian
! UrlSuffix(gcc/NDS32-Options.html#index-mlittle-endian-9)
  
  mcmov
  UrlSuffix(gcc/NDS32-Options.html#index-mcmov)
--- 13,22 ----
  UrlSuffix(gcc/NDS32-Options.html#index-mfull-regs)
  
  mbig-endian
! UrlSuffix(gcc/NDS32-Options.html#index-mbig-endian-8)
  
  mlittle-endian
! UrlSuffix(gcc/NDS32-Options.html#index-mlittle-endian-8)
  
  mcmov
  UrlSuffix(gcc/NDS32-Options.html#index-mcmov)
diff -Nrcpad gcc-16-20251207/gcc/config/or1k/elf.opt gcc-16-20251214/gcc/config/or1k/elf.opt
*** gcc-16-20251207/gcc/config/or1k/elf.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/or1k/elf.opt	Sun Dec 14 22:32:06 2025
*************** Target RejectNegative Joined
*** 28,33 ****
  Configure the newlib board specific runtime.  The default is or1ksim.
  
  mnewlib
! Target RejectNegative
  This option is ignored; it is provided for compatibility purposes only.  This
  used to select linker and preprocessor options for use with newlib.
--- 28,33 ----
  Configure the newlib board specific runtime.  The default is or1ksim.
  
  mnewlib
! Target RejectNegative Undocumented
  This option is ignored; it is provided for compatibility purposes only.  This
  used to select linker and preprocessor options for use with newlib.
diff -Nrcpad gcc-16-20251207/gcc/config/or1k/elf.opt.urls gcc-16-20251214/gcc/config/or1k/elf.opt.urls
*** gcc-16-20251207/gcc/config/or1k/elf.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/or1k/elf.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 3,8 ****
  mboard=
  UrlSuffix(gcc/OpenRISC-Options.html#index-mboard)
  
- mnewlib
- UrlSuffix(gcc/OpenRISC-Options.html#index-mnewlib)
- 
--- 3,5 ----
diff -Nrcpad gcc-16-20251207/gcc/config/or1k/or1k.opt gcc-16-20251214/gcc/config/or1k/or1k.opt
*** gcc-16-20251207/gcc/config/or1k/or1k.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/or1k/or1k.opt	Sun Dec 14 22:32:06 2025
*************** Enum(or1k_cmodel_type) String(large) Val
*** 85,91 ****
  mcmov
  Target RejectNegative Mask(CMOV)
  Enable generation of conditional move (l.cmov) instructions.  By default the
! equivalent will be generated using set and branch.
  
  mror
  Target RejectNegative Mask(ROR)
--- 85,91 ----
  mcmov
  Target RejectNegative Mask(CMOV)
  Enable generation of conditional move (l.cmov) instructions.  By default the
! equivalents are generated using set and branch.
  
  mror
  Target RejectNegative Mask(ROR)
*************** loads are used to perform sign extension
*** 106,116 ****
  msfimm
  Target RejectNegative Mask(SFIMM)
  Enable generation of compare and set flag with immediate (l.sf*i) instructions.
! By default extra instructions will be generated to store the immediate to a
  register first.
  
  mshftimm
  Target RejectNegative Mask(SHFTIMM)
  Enable generation of shift with immediate (l.srai, l.srli, l.slli) instructions.
! By default extra instructions will be generated to store the immediate to a
  register first.
--- 106,116 ----
  msfimm
  Target RejectNegative Mask(SFIMM)
  Enable generation of compare and set flag with immediate (l.sf*i) instructions.
! By default extra instructions are generated to store the immediate to a
  register first.
  
  mshftimm
  Target RejectNegative Mask(SHFTIMM)
  Enable generation of shift with immediate (l.srai, l.srli, l.slli) instructions.
! By default extra instructions are generated to store the immediate to a
  register first.
diff -Nrcpad gcc-16-20251207/gcc/config/pa/pa-hpux.opt.urls gcc-16-20251214/gcc/config/pa/pa-hpux.opt.urls
*** gcc-16-20251207/gcc/config/pa/pa-hpux.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/pa/pa-hpux.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 3,8 ****
--- 3,11 ----
  msio
  UrlSuffix(gcc/HPPA-Options.html#index-msio)
  
+ mwsio
+ UrlSuffix(gcc/HPPA-Options.html#index-mwsio)
+ 
  nolibdld
  UrlSuffix(gcc/HPPA-Options.html#index-nolibdld)
  
diff -Nrcpad gcc-16-20251207/gcc/config/pa/pa.opt gcc-16-20251214/gcc/config/pa/pa.opt
*** gcc-16-20251207/gcc/config/pa/pa.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/pa/pa.opt	Sun Dec 14 22:32:06 2025
*************** Target Var(TARGET_ATOMIC_LIBCALLS) Init(
*** 42,48 ****
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  
  mbig-switch
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  mcaller-copies
--- 42,48 ----
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  
  mbig-switch
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  mcaller-copies
*************** Target Mask(GAS)
*** 74,80 ****
  Assume code will be assembled by GAS.
  
  mjump-in-delay
! Target Ignore
  Does nothing.  Preserved for backward compatibility.
  
  ;; Not used by gcc
--- 74,80 ----
  Assume code will be assembled by GAS.
  
  mjump-in-delay
! Target Ignore Undocumented
  Does nothing.  Preserved for backward compatibility.
  
  ;; Not used by gcc
*************** Target Mask(LONG_CALLS)
*** 87,93 ****
  Always generate long calls.
  
  mlra
! Target Var(pa_lra_p) Init(1)
  Use LRA instead of reload (transitional).
  
  mlong-load-store
--- 87,93 ----
  Always generate long calls.
  
  mlra
! Target Var(pa_lra_p) Init(1) Undocumented
  Use LRA instead of reload (transitional).
  
  mlong-load-store
*************** Target Mask(LONG_LOAD_STORE)
*** 95,101 ****
  Emit long load/store sequences.
  
  mnosnake
! Target RejectNegative
  Generate PA1.0 code.
  
  mno-space-regs
--- 95,101 ----
  Emit long load/store sequences.
  
  mnosnake
! Target RejectNegative Undocumented
  Generate PA1.0 code.
  
  mno-space-regs
*************** Target Mask(SOFT_MULT)
*** 156,162 ****
  Use software integer multiplication.
  
  msnake
! Target RejectNegative
  Generate PA1.1 code.
  
  mspace-regs
--- 156,162 ----
  Use software integer multiplication.
  
  msnake
! Target RejectNegative Undocumented
  Generate PA1.1 code.
  
  mspace-regs
diff -Nrcpad gcc-16-20251207/gcc/config/pa/pa.opt.urls gcc-16-20251214/gcc/config/pa/pa.opt.urls
*** gcc-16-20251207/gcc/config/pa/pa.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/pa/pa.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 3,10 ****
  matomic-libcalls
  UrlSuffix(gcc/HPPA-Options.html#index-matomic-libcalls)
  
! mbig-switch
! UrlSuffix(gcc/HPPA-Options.html#index-mbig-switch)
  
  mcaller-copies
  UrlSuffix(gcc/HPPA-Options.html#index-mcaller-copies)
--- 3,9 ----
  matomic-libcalls
  UrlSuffix(gcc/HPPA-Options.html#index-matomic-libcalls)
  
! ; skipping UrlSuffix for 'mbig-switch' due to finding no URLs
  
  mcaller-copies
  UrlSuffix(gcc/HPPA-Options.html#index-mcaller-copies)
*************** UrlSuffix(gcc/HPPA-Options.html#index-mf
*** 27,35 ****
  mgas
  UrlSuffix(gcc/HPPA-Options.html#index-mgas)
  
- mjump-in-delay
- UrlSuffix(gcc/HPPA-Options.html#index-mjump-in-delay)
- 
  mlinker-opt
  UrlSuffix(gcc/HPPA-Options.html#index-mlinker-opt)
  
--- 26,31 ----
diff -Nrcpad gcc-16-20251207/gcc/config/pdp11/pdp11.opt gcc-16-20251214/gcc/config/pdp11/pdp11.opt
*** gcc-16-20251207/gcc/config/pdp11/pdp11.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/pdp11/pdp11.opt	Sun Dec 14 22:32:06 2025
*************** Target RejectNegative
*** 23,33 ****
  Generate code for an 11/10.
  
  m40
! Target Mask(40)
  Generate code for an 11/40.
  
  m45
! Target Mask(45)
  Generate code for an 11/45.
  
  mac0
--- 23,33 ----
  Generate code for an 11/10.
  
  m40
! Target Mask(40) RejectNegative
  Generate code for an 11/40.
  
  m45
! Target Mask(45) RejectNegative
  Generate code for an 11/45.
  
  mac0
diff -Nrcpad gcc-16-20251207/gcc/config/pdp11/pdp11.opt.urls gcc-16-20251214/gcc/config/pdp11/pdp11.opt.urls
*** gcc-16-20251207/gcc/config/pdp11/pdp11.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/pdp11/pdp11.opt.urls	Sun Dec 14 22:32:06 2025
*************** munix-asm
*** 37,41 ****
  UrlSuffix(gcc/PDP-11-Options.html#index-munix-asm)
  
  mlra
! UrlSuffix(gcc/PDP-11-Options.html#index-mlra-1)
  
--- 37,41 ----
  UrlSuffix(gcc/PDP-11-Options.html#index-munix-asm)
  
  mlra
! UrlSuffix(gcc/PDP-11-Options.html#index-mlra)
  
diff -Nrcpad gcc-16-20251207/gcc/config/pru/pru.opt.urls gcc-16-20251214/gcc/config/pru/pru.opt.urls
*** gcc-16-20251207/gcc/config/pru/pru.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/pru/pru.opt.urls	Sun Dec 14 22:32:06 2025
*************** mmcu=
*** 7,13 ****
  UrlSuffix(gcc/PRU-Options.html#index-mmcu-2)
  
  mno-relax
! UrlSuffix(gcc/PRU-Options.html#index-mno-relax-1)
  
  mloop
  UrlSuffix(gcc/PRU-Options.html#index-mloop)
--- 7,13 ----
  UrlSuffix(gcc/PRU-Options.html#index-mmcu-2)
  
  mno-relax
! UrlSuffix(gcc/PRU-Options.html#index-mno-relax-3)
  
  mloop
  UrlSuffix(gcc/PRU-Options.html#index-mloop)
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/autovec.md gcc-16-20251214/gcc/config/riscv/autovec.md
*** gcc-16-20251207/gcc/config/riscv/autovec.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/autovec.md	Sun Dec 14 22:32:06 2025
***************
*** 2302,2307 ****
--- 2302,2338 ----
  })
  
  ;; -------------------------------------------------------------------------
+ ;; ---- [INT] Mask reductions
+ ;; -------------------------------------------------------------------------
+ 
+ (define_expand "reduc_sbool_and_scal_<mode>"
+   [(match_operand:QI 0 "register_operand")
+    (match_operand:VB_VLS 1 "register_operand")]
+   "TARGET_VECTOR"
+ {
+   riscv_vector::expand_mask_reduction (operands, AND);
+   DONE;
+ })
+ 
+ (define_expand "reduc_sbool_ior_scal_<mode>"
+   [(match_operand:QI 0 "register_operand")
+    (match_operand:VB_VLS 1 "register_operand")]
+   "TARGET_VECTOR"
+ {
+   riscv_vector::expand_mask_reduction (operands, IOR);
+   DONE;
+ })
+ 
+ (define_expand "reduc_sbool_xor_scal_<mode>"
+   [(match_operand:QI 0 "register_operand")
+    (match_operand:VB_VLS 1 "register_operand")]
+   "TARGET_VECTOR"
+ {
+   riscv_vector::expand_mask_reduction (operands, XOR);
+   DONE;
+ })
+ 
+ ;; -------------------------------------------------------------------------
  ;; ---- [FP] Tree reductions
  ;; -------------------------------------------------------------------------
  ;; Includes:
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/predicates.md gcc-16-20251214/gcc/config/riscv/predicates.md
*** gcc-16-20251207/gcc/config/riscv/predicates.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/predicates.md	Sun Dec 14 22:32:06 2025
***************
*** 612,618 ****
    (match_code "eq,ne,le,leu,gt,gtu,lt,ltu"))
  
  (define_predicate "comparison_swappable_operator"
!   (match_code "gtu"))
  
  (define_predicate "ge_operator"
    (match_code "ge,geu"))
--- 612,618 ----
    (match_code "eq,ne,le,leu,gt,gtu,lt,ltu"))
  
  (define_predicate "comparison_swappable_operator"
!   (match_code "gtu,gt"))
  
  (define_predicate "ge_operator"
    (match_code "ge,geu"))
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/riscv-c.cc gcc-16-20251214/gcc/config/riscv/riscv-c.cc
*** gcc-16-20251207/gcc/config/riscv/riscv-c.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/riscv-c.cc	Sun Dec 14 22:32:06 2025
*************** riscv_pragma_intrinsic (cpp_reader *)
*** 213,218 ****
--- 213,261 ----
      error ("unknown %<#pragma riscv intrinsic%> option %qs", name);
  }
  
+ /* Implement TARGETM.TARGET_OPTION.PRAGMA_PARSE.  */
+ 
+ static bool
+ riscv_pragma_target_parse (tree args, tree pop_target)
+ {
+   /* If args is not NULL then process it and setup the target-specific
+      information that it specifies.  */
+   if (args)
+     {
+       if (!riscv_process_target_attr_for_pragma (args))
+ 	return false;
+ 
+       riscv_override_options_internal (&global_options);
+     }
+   /* args is NULL, restore to the state described in pop_target.  */
+   else
+     {
+       pop_target = pop_target ? pop_target : target_option_default_node;
+       cl_target_option_restore (&global_options, &global_options_set,
+ 				TREE_TARGET_OPTION (pop_target));
+     }
+ 
+   target_option_current_node
+     = build_target_option_node (&global_options, &global_options_set);
+ 
+   riscv_reset_previous_fndecl ();
+ 
+   /* For the definitions, ensure all newly defined macros are considered
+      as used for -Wunused-macros.  There is no point warning about the
+      compiler predefined macros.  */
+   cpp_options *cpp_opts = cpp_get_options (parse_in);
+   unsigned char saved_warn_unused_macros = cpp_opts->warn_unused_macros;
+   cpp_opts->warn_unused_macros = 0;
+ 
+   cpp_force_token_locations (parse_in, BUILTINS_LOCATION);
+   riscv_cpu_cpp_builtins (parse_in);
+   cpp_stop_forcing_token_locations (parse_in);
+ 
+   cpp_opts->warn_unused_macros = saved_warn_unused_macros;
+ 
+   return true;
+ }
+ 
  /* Implement TARGET_CHECK_BUILTIN_CALL.  */
  static bool
  riscv_check_builtin_call (location_t loc, vec<location_t> arg_loc, tree fndecl,
*************** riscv_register_pragmas (void)
*** 272,276 ****
--- 315,320 ----
  {
    targetm.resolve_overloaded_builtin = riscv_resolve_overloaded_builtin;
    targetm.check_builtin_call = riscv_check_builtin_call;
+   targetm.target_option.pragma_parse = riscv_pragma_target_parse;
    c_register_pragma ("riscv", "intrinsic", riscv_pragma_intrinsic);
  }
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/riscv-protos.h gcc-16-20251214/gcc/config/riscv/riscv-protos.h
*** gcc-16-20251207/gcc/config/riscv/riscv-protos.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/riscv-protos.h	Sun Dec 14 22:32:06 2025
*************** bool expand_vec_cmp_float (rtx, rtx_code
*** 664,669 ****
--- 664,670 ----
  void expand_cond_len_unop (unsigned, rtx *);
  void expand_cond_len_binop (unsigned, rtx *);
  void expand_reduction (unsigned, unsigned, unsigned, rtx *, rtx);
+ void expand_mask_reduction (rtx *, rtx_code);
  void expand_vec_ceil (rtx, rtx, machine_mode, machine_mode);
  void expand_vec_floor (rtx, rtx, machine_mode, machine_mode);
  void expand_vec_nearbyint (rtx, rtx, machine_mode, machine_mode);
*************** riscv_option_valid_attribute_p (tree, tr
*** 848,859 ****
--- 849,863 ----
  extern bool
  riscv_option_valid_version_attribute_p (tree, tree, tree, int);
  extern bool
+ riscv_process_target_attr_for_pragma (tree);
+ extern bool
  riscv_process_target_version_attr (tree, location_t *);
  extern bool
  riscv_process_target_version_str (string_slice, location_t *);
  extern void
  riscv_override_options_internal (struct gcc_options *);
  extern void riscv_option_override (void);
+ extern void riscv_reset_previous_fndecl (void);
  extern rtx riscv_prefetch_cookie (rtx, rtx);
  extern bool riscv_prefetch_offset_address_p (rtx, machine_mode);
  
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/riscv-target-attr.cc gcc-16-20251214/gcc/config/riscv/riscv-target-attr.cc
*** gcc-16-20251207/gcc/config/riscv/riscv-target-attr.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/riscv-target-attr.cc	Sun Dec 14 22:32:06 2025
*************** public:
*** 44,49 ****
--- 44,50 ----
      , m_cpu_info (nullptr)
      , m_tune (nullptr)
      , m_priority (0)
+     , m_max_vect (false)
    {
    }
  
*************** public:
*** 51,56 ****
--- 52,58 ----
    bool handle_cpu (const char *);
    bool handle_tune (const char *);
    bool handle_priority (const char *);
+   bool handle_max_vect (const char *);
  
    void update_settings (struct gcc_options *opts) const;
  private:
*************** private:
*** 66,96 ****
    const  riscv_cpu_info *m_cpu_info;
    const char *m_tune;
    int m_priority;
  };
  }
  
  /* All the information needed to handle a target attribute.
     NAME is the name of the attribute.
!    HANDLER is the function that takes the attribute string as an argument.  */
  
  struct riscv_attribute_info
  {
    const char *name;
    bool (riscv_target_attr_parser::*handler) (const char *);
  };
  
  /* The target attributes that we support.  */
  
  static const struct riscv_attribute_info riscv_target_attrs[]
!   = {{"arch", &riscv_target_attr_parser::handle_arch},
!      {"cpu", &riscv_target_attr_parser::handle_cpu},
!      {"tune", &riscv_target_attr_parser::handle_tune},
!      {NULL, NULL}};
  
  static const struct riscv_attribute_info riscv_target_version_attrs[]
!   = {{"arch", &riscv_target_attr_parser::handle_arch},
!      {"priority", &riscv_target_attr_parser::handle_priority},
!      {NULL, NULL}};
  
  bool
  riscv_target_attr_parser::parse_arch (const char *str)
--- 68,102 ----
    const  riscv_cpu_info *m_cpu_info;
    const char *m_tune;
    int m_priority;
+   bool m_max_vect;
  };
  }
  
  /* All the information needed to handle a target attribute.
     NAME is the name of the attribute.
!    HANDLER is the function that takes the attribute string as an argument.
!    REQUIRES_ARG indicates whether this attribute requires an argument value.  */
  
  struct riscv_attribute_info
  {
    const char *name;
    bool (riscv_target_attr_parser::*handler) (const char *);
+   bool requires_arg;
  };
  
  /* The target attributes that we support.  */
  
  static const struct riscv_attribute_info riscv_target_attrs[]
!   = {{"arch", &riscv_target_attr_parser::handle_arch, true},
!      {"cpu", &riscv_target_attr_parser::handle_cpu, true},
!      {"tune", &riscv_target_attr_parser::handle_tune, true},
!      {"max-vectorization", &riscv_target_attr_parser::handle_max_vect, false},
!      {NULL, NULL, false}};
  
  static const struct riscv_attribute_info riscv_target_version_attrs[]
!   = {{"arch", &riscv_target_attr_parser::handle_arch, true},
!      {"priority", &riscv_target_attr_parser::handle_priority, true},
!      {NULL, NULL, false}};
  
  bool
  riscv_target_attr_parser::parse_arch (const char *str)
*************** riscv_target_attr_parser::handle_priorit
*** 254,259 ****
--- 260,276 ----
    return true;
  }
  
+ /* Handle max-vectorization.  There are no further options, just
+    enable it.  */
+ 
+ bool
+ riscv_target_attr_parser::handle_max_vect (const char *str ATTRIBUTE_UNUSED)
+ {
+   m_max_vect = true;
+ 
+   return true;
+ }
+ 
  void
  riscv_target_attr_parser::update_settings (struct gcc_options *opts) const
  {
*************** riscv_target_attr_parser::update_setting
*** 279,284 ****
--- 296,304 ----
  
    if (m_priority)
      opts->x_riscv_fmv_priority = m_priority;
+ 
+   if (m_max_vect)
+     opts->x_riscv_max_vectorization = true;
  }
  
  /* Parse ARG_STR which contains the definition of one target attribute.
*************** riscv_process_one_target_attr (char *arg
*** 303,335 ****
    char *str_to_check = buf.get();
    strcpy (str_to_check, arg_str);
  
    char *arg = strchr (str_to_check, '=');
! 
!   if (!arg)
      {
!       if (loc)
! 	error_at (*loc, "attribute %<target(\"%s\")%> does not "
! 		  "accept an argument", str_to_check);
!       return false;
      }
  
!   arg[0] = '\0';
!   ++arg;
!   for (const auto *attr = attrs;
!        attr->name;
!        ++attr)
      {
!       /* If the names don't match up, or the user has given an argument
! 	 to an attribute that doesn't accept one, or didn't give an argument
! 	 to an attribute that expects one, fail to match.  */
!       if (strncmp (str_to_check, attr->name, strlen (attr->name)) != 0)
  	continue;
  
        return (&attr_parser->*attr->handler) (arg);
      }
  
    if (loc)
!     error_at (*loc, "Got unknown attribute %<target(\"%s\")%>", str_to_check);
    return false;
  }
  
--- 323,372 ----
    char *str_to_check = buf.get();
    strcpy (str_to_check, arg_str);
  
+   /* Split attribute name from argument (if present).  */
    char *arg = strchr (str_to_check, '=');
!   if (arg)
      {
!       *arg = '\0';
!       ++arg;
!       /* Check for empty argument after '='.  */
!       if (*arg == '\0')
! 	{
! 	  if (loc)
! 	    error_at (*loc, "attribute %<target(\"%s\")%> has empty argument",
! 		      str_to_check);
! 	  return false;
! 	}
      }
  
!   /* Find matching attribute.  */
!   for (const auto *attr = attrs; attr->name; ++attr)
      {
!       if (strcmp (str_to_check, attr->name) != 0)
  	continue;
  
+       /* Validate argument presence matches expectations.  */
+       if (attr->requires_arg && !arg)
+ 	{
+ 	  if (loc)
+ 	    error_at (*loc, "attribute %<target(\"%s\")%> expects "
+ 		      "an argument", str_to_check);
+ 	  return false;
+ 	}
+ 
+       if (!attr->requires_arg && arg)
+ 	{
+ 	  if (loc)
+ 	    error_at (*loc, "attribute %<target(\"%s\")%> does not "
+ 		      "accept an argument", str_to_check);
+ 	  return false;
+ 	}
+ 
        return (&attr_parser->*attr->handler) (arg);
      }
  
    if (loc)
!     error_at (*loc, "unknown attribute %<target(\"%s\")%>", str_to_check);
    return false;
  }
  
*************** riscv_option_valid_attribute_p (tree fnd
*** 489,494 ****
--- 526,542 ----
    return ret;
  }
  
+ /* Public wrapper for pragma processing.
+    Parse ARGS (a TREE_LIST of target attributes) and update global_options.
+    This is used by #pragma GCC target.  */
+ 
+ bool
+ riscv_process_target_attr_for_pragma (tree args)
+ {
+   location_t loc = UNKNOWN_LOCATION;
+   return riscv_process_target_attr (args, &loc, riscv_target_attrs);
+ }
+ 
  /* Parse the tree in ARGS that contains the target_version attribute
     information and update the global target options space.  If LOC is nonnull,
     report diagnostics against *LOC, otherwise remain silent.  */
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/riscv-v.cc gcc-16-20251214/gcc/config/riscv/riscv-v.cc
*** gcc-16-20251207/gcc/config/riscv/riscv-v.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/riscv-v.cc	Sun Dec 14 22:32:06 2025
*************** expand_reduction (unsigned unspec, unsig
*** 4885,4890 ****
--- 4885,4938 ----
    emit_insn (gen_pred_extract_first (m1_mode, scalar_dest, m1_tmp2));
  }
  
+ /* Expand mask reductions.  OPS are {dest, src} where DEST's mode
+    is QImode and SRC's mode is a mask mode.
+    CODE is one of AND, IOR, XOR.  */
+ 
+ void
+ expand_mask_reduction (rtx *ops, rtx_code code)
+ {
+   machine_mode mode = GET_MODE (ops[1]);
+   rtx dest = ops[0];
+   gcc_assert (GET_MODE (dest) == QImode);
+ 
+   rtx tmp = gen_reg_rtx (Xmode);
+   rtx cpop_ops[] = {tmp, ops[1]};
+   emit_vlmax_insn (code_for_pred_popcount (mode, Xmode), CPOP_OP, cpop_ops);
+ 
+   bool eq_zero = false;
+ 
+   /* AND reduction is popcount (mask) == len,
+      IOR reduction is popcount (mask) != 0,
+      XOR reduction is popcount (mask) & 1 != 0.  */
+   if (code == AND)
+     {
+       rtx len = gen_int_mode (GET_MODE_NUNITS (mode), HImode);
+       tmp = expand_binop (Xmode, sub_optab, tmp, len, NULL, true,
+ 			  OPTAB_DIRECT);
+       eq_zero = true;
+     }
+   else if (code == IOR)
+     ;
+   else if (code == XOR)
+     tmp = expand_binop (Xmode, and_optab, tmp, GEN_INT (1), NULL, true,
+ 			OPTAB_DIRECT);
+   else
+     gcc_unreachable ();
+ 
+   rtx els = gen_label_rtx ();
+   rtx end = gen_label_rtx ();
+ 
+   riscv_expand_conditional_branch (els, eq_zero ? EQ : NE, tmp, const0_rtx);
+   emit_move_insn (dest, const0_rtx);
+   emit_jump_insn (gen_jump (end));
+   emit_barrier ();
+ 
+   emit_label (els);
+   emit_move_insn (dest, const1_rtx);
+   emit_label (end);
+ }
+ 
  /* Prepare ops for ternary operations.
     It can be called before or after RA.  */
  void
*************** get_swapped_cmp_rtx_code (rtx_code code)
*** 5869,5874 ****
--- 5917,5924 ----
      {
      case GTU:
        return LTU;
+     case GT:
+       return LT;
      default:
        gcc_unreachable ();
      }
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/riscv.cc gcc-16-20251214/gcc/config/riscv/riscv.cc
*** gcc-16-20251207/gcc/config/riscv/riscv.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/riscv.cc	Sun Dec 14 22:32:06 2025
*************** riscv_override_options_internal (struct
*** 12225,12230 ****
--- 12225,12236 ----
    /* Convert -march and -mrvv-vector-bits to a chunks count.  */
    riscv_vector_chunks = riscv_convert_vector_chunks (opts);
  
+   /* Set scalar costing to a high value such that we always pick
+      vectorization.  Increase scalar costing by 100x.  */
+   if (opts->x_riscv_max_vectorization)
+     SET_OPTION_IF_UNSET (&global_options, &global_options_set,
+ 			 param_vect_scalar_cost_multiplier, 10000);
+ 
    if (opts->x_flag_cf_protection != CF_NONE)
      {
        if ((opts->x_flag_cf_protection & CF_RETURN) == CF_RETURN
*************** riscv_option_restore (struct gcc_options
*** 12462,12467 ****
--- 12468,12506 ----
  
  static GTY (()) tree riscv_previous_fndecl;
  
+ /* Reset the previous function declaration.  */
+ 
+ void
+ riscv_reset_previous_fndecl (void)
+ {
+   riscv_previous_fndecl = NULL;
+ }
+ 
+ /* Implement TARGET_OPTION_SAVE.  */
+ 
+ static void
+ riscv_option_save (struct cl_target_option *ptr,
+ 		   struct gcc_options *opts,
+ 		   struct gcc_options * /* opts_set */)
+ {
+   ptr->x_riscv_arch_string = opts->x_riscv_arch_string;
+   ptr->x_riscv_tune_string = opts->x_riscv_tune_string;
+   ptr->x_riscv_cpu_string = opts->x_riscv_cpu_string;
+ }
+ 
+ /* Implement TARGET_OPTION_PRINT.  */
+ 
+ static void
+ riscv_option_print (FILE *file, int indent, struct cl_target_option *ptr)
+ {
+   fprintf (file, "%*sarch = %s\n", indent, "",
+ 	   ptr->x_riscv_arch_string ? ptr->x_riscv_arch_string : "default");
+   fprintf (file, "%*stune = %s\n", indent, "",
+ 	   ptr->x_riscv_tune_string ? ptr->x_riscv_tune_string : "default");
+   if (ptr->x_riscv_cpu_string)
+     fprintf (file, "%*scpu = %s\n", indent, "", ptr->x_riscv_cpu_string);
+ }
+ 
  /* Implement TARGET_CONDITIONAL_REGISTER_USAGE.  */
  
  static void
*************** riscv_get_interrupt_type (tree decl)
*** 12798,12804 ****
  /* Implement `TARGET_SET_CURRENT_FUNCTION'.  Unpack the codegen decisions
     like tuning and ISA features from the DECL_FUNCTION_SPECIFIC_TARGET
     of the function, if such exists.  This function may be called multiple
!    times on a single function so use aarch64_previous_fndecl to avoid
     setting up identical state.  */
  
  /* Sanity checking for above function attributes.  */
--- 12837,12843 ----
  /* Implement `TARGET_SET_CURRENT_FUNCTION'.  Unpack the codegen decisions
     like tuning and ISA features from the DECL_FUNCTION_SPECIFIC_TARGET
     of the function, if such exists.  This function may be called multiple
!    times on a single function so use riscv_previous_fndecl to avoid
     setting up identical state.  */
  
  /* Sanity checking for above function attributes.  */
*************** riscv_prefetch_offset_address_p (rtx x,
*** 16309,16317 ****
--- 16348,16362 ----
  #undef TARGET_OPTION_OVERRIDE
  #define TARGET_OPTION_OVERRIDE riscv_option_override
  
+ #undef TARGET_OPTION_SAVE
+ #define TARGET_OPTION_SAVE riscv_option_save
+ 
  #undef TARGET_OPTION_RESTORE
  #define TARGET_OPTION_RESTORE riscv_option_restore
  
+ #undef TARGET_OPTION_PRINT
+ #define TARGET_OPTION_PRINT riscv_option_print
+ 
  #undef TARGET_OPTION_VALID_ATTRIBUTE_P
  #define TARGET_OPTION_VALID_ATTRIBUTE_P riscv_option_valid_attribute_p
  
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/riscv.opt gcc-16-20251214/gcc/config/riscv/riscv.opt
*** gcc-16-20251207/gcc/config/riscv/riscv.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/riscv.opt	Sun Dec 14 22:32:06 2025
*************** Target Undocumented RejectNegative Joine
*** 341,346 ****
--- 341,350 ----
  Target Undocumented Uinteger Var(riscv_two_source_permutes) Init(0)
  -param=riscv-two-source-permutes Enable permutes with two source vectors.
  
+ mmax-vectorization
+ Target Var(riscv_max_vectorization) Save
+ Override the scalar cost model such that vectorization is always profitable.
+ 
  Enum
  Name(stringop_strategy) Type(enum stringop_strategy_enum)
  Valid arguments to -mstringop-strategy=:
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/riscv.opt.urls gcc-16-20251214/gcc/config/riscv/riscv.opt.urls
*** gcc-16-20251207/gcc/config/riscv/riscv.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/riscv.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,13 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/riscv/riscv.opt and generated HTML
  
  mbig-endian
! UrlSuffix(gcc/RISC-V-Options.html#index-mbig-endian-10)
  
  mlittle-endian
! UrlSuffix(gcc/RISC-V-Options.html#index-mlittle-endian-10)
  
  mbranch-cost=
! UrlSuffix(gcc/RISC-V-Options.html#index-mbranch-cost-4)
  
  ; skipping UrlSuffix for 'mplt' due to finding no URLs
  
--- 1,13 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/riscv/riscv.opt and generated HTML
  
  mbig-endian
! UrlSuffix(gcc/RISC-V-Options.html#index-mbig-endian-9)
  
  mlittle-endian
! UrlSuffix(gcc/RISC-V-Options.html#index-mlittle-endian-9)
  
  mbranch-cost=
! UrlSuffix(gcc/RISC-V-Options.html#index-mbranch-cost-5)
  
  ; skipping UrlSuffix for 'mplt' due to finding no URLs
  
*************** mdiv
*** 24,33 ****
  UrlSuffix(gcc/RISC-V-Options.html#index-mdiv-3)
  
  march=
! UrlSuffix(gcc/RISC-V-Options.html#index-march-13)
  
  mtune=
! UrlSuffix(gcc/RISC-V-Options.html#index-mtune-12)
  
  mcpu=
  UrlSuffix(gcc/RISC-V-Options.html#index-mcpu-8)
--- 24,33 ----
  UrlSuffix(gcc/RISC-V-Options.html#index-mdiv-3)
  
  march=
! UrlSuffix(gcc/RISC-V-Options.html#index-march-12)
  
  mtune=
! UrlSuffix(gcc/RISC-V-Options.html#index-mtune-11)
  
  mcpu=
  UrlSuffix(gcc/RISC-V-Options.html#index-mcpu-8)
*************** UrlSuffix(gcc/RISC-V-Options.html#index-
*** 96,101 ****
--- 96,103 ----
  minline-strlen
  UrlSuffix(gcc/RISC-V-Options.html#index-minline-strlen)
  
+ ; skipping UrlSuffix for 'mmax-vectorization' due to finding no URLs
+ 
  ; skipping UrlSuffix for 'mtls-dialect=' due to finding no URLs
  
  mfence-tso
diff -Nrcpad gcc-16-20251207/gcc/config/riscv/vector.md gcc-16-20251214/gcc/config/riscv/vector.md
*** gcc-16-20251207/gcc/config/riscv/vector.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/riscv/vector.md	Sun Dec 14 22:32:06 2025
***************
*** 4199,4204 ****
--- 4199,4205 ----
    "TARGET_VECTOR"
    "vw<plus_minus:insn><any_extend:u>.wx\t%0,%3,%z4%p1"
    [(set_attr "type" "vi<widen_binop_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<V_DOUBLE_TRUNC>")])
  
  (define_insn "@pred_single_widen_add<any_extend:su><mode>_extended_scalar"
***************
*** 4465,4470 ****
--- 4466,4472 ----
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "@pred_<optab><mode>_scalar"
***************
*** 4486,4491 ****
--- 4488,4494 ----
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_expand "@pred_<optab><mode>_scalar"
***************
*** 4540,4545 ****
--- 4543,4549 ----
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "*pred_<optab><mode>_extended_scalar"
***************
*** 4562,4567 ****
--- 4566,4572 ----
    "TARGET_VECTOR && !TARGET_64BIT"
    "v<insn>.vx\t%0,%3,%4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_expand "@pred_<optab><mode>_scalar"
***************
*** 4616,4621 ****
--- 4621,4627 ----
    "TARGET_VECTOR"
    "v<insn>.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "*pred_<optab><mode>_extended_scalar"
***************
*** 4638,4643 ****
--- 4644,4650 ----
    "TARGET_VECTOR && !TARGET_64BIT"
    "v<insn>.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "<int_binop_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "@pred_<sat_op><mode>"
***************
*** 4683,4688 ****
--- 4690,4696 ----
    "TARGET_VECTOR"
    "v<sat_op>.vx\t%0,%3,%z4%p1"
    [(set_attr "type" "<sat_insn_type>")
+    (set_attr "mode_idx" "3")
     (set_attr "mode" "<MODE>")])
  
  (define_insn "@pred_<sat_op><mode>_scalar"
diff -Nrcpad gcc-16-20251207/gcc/config/rs6000/predicates.md gcc-16-20251214/gcc/config/rs6000/predicates.md
*** gcc-16-20251207/gcc/config/rs6000/predicates.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/rs6000/predicates.md	Sun Dec 14 22:32:06 2025
***************
*** 2166,2168 ****
--- 2166,2173 ----
    (and (match_code "subreg")
         (match_test "subreg_lowpart_offset (mode, GET_MODE (SUBREG_REG (op)))
  		    == SUBREG_BYTE (op)")))
+ 
+ ; Else operand for LEN_LOAD.
+ (define_predicate "lxvl_else_operand"
+   (and (match_code "const_vector")
+        (match_test "op == CONST0_RTX (GET_MODE (op))")))
diff -Nrcpad gcc-16-20251207/gcc/config/rs6000/rs6000.opt.urls gcc-16-20251214/gcc/config/rs6000/rs6000.opt.urls
*** gcc-16-20251207/gcc/config/rs6000/rs6000.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/rs6000/rs6000.opt.urls	Sun Dec 14 22:32:06 2025
*************** mcpu=
*** 137,143 ****
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcpu-10)
  
  mtune=
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtune-13)
  
  mtraceback=
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtraceback)
--- 137,143 ----
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mcpu-10)
  
  mtune=
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtune-12)
  
  mtraceback=
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mtraceback)
diff -Nrcpad gcc-16-20251207/gcc/config/rs6000/sysv4.opt.urls gcc-16-20251214/gcc/config/rs6000/sysv4.opt.urls
*** gcc-16-20251207/gcc/config/rs6000/sysv4.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/rs6000/sysv4.opt.urls	Sun Dec 14 22:32:06 2025
***************
*** 1,7 ****
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/sysv4.opt and generated HTML
  
  msdata=
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
  
  mreadonly-in-sdata
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mreadonly-in-sdata)
--- 1,7 ----
  ; Autogenerated by regenerate-opt-urls.py from gcc/config/rs6000/sysv4.opt and generated HTML
  
  msdata=
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-3)
  
  mreadonly-in-sdata
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mreadonly-in-sdata)
*************** mrelocatable-lib
*** 21,33 ****
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable-lib)
  
  mlittle-endian
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle-endian-11)
  
  mlittle
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle)
  
  mbig-endian
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig-endian-11)
  
  mbig
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig)
--- 21,33 ----
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mrelocatable-lib)
  
  mlittle-endian
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle-endian-10)
  
  mlittle
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mlittle)
  
  mbig-endian
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig-endian-10)
  
  mbig
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mbig)
*************** mregnames
*** 48,54 ****
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mregnames)
  
  msdata
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-2)
  
  msim
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msim-7)
--- 48,54 ----
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-mregnames)
  
  msdata
! UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msdata-3)
  
  msim
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msim-7)
*************** UrlSuffix(gcc/RS_002f6000-and-PowerPC-Op
*** 71,78 ****
  m32
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-m32)
  
- ; skipping UrlSuffix for 'mnewlib' due to finding no URLs
- 
  msecure-plt
  UrlSuffix(gcc/RS_002f6000-and-PowerPC-Options.html#index-msecure-plt)
  
--- 71,76 ----
diff -Nrcpad gcc-16-20251207/gcc/config/rs6000/vsx.md gcc-16-20251214/gcc/config/rs6000/vsx.md
*** gcc-16-20251207/gcc/config/rs6000/vsx.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/rs6000/vsx.md	Sun Dec 14 22:32:06 2025
***************
*** 5798,5810 ****
  (define_expand "len_load_v16qi"
    [(match_operand:V16QI 0 "vlogical_operand")
     (match_operand:V16QI 1 "memory_operand")
!    (match_operand:QI 2 "gpc_reg_operand")
!    (match_operand:QI 3 "zero_constant")]
    "TARGET_P9_VECTOR && TARGET_64BIT"
  {
    rtx mem = XEXP (operands[1], 0);
    mem = force_reg (DImode, mem);
!   rtx len = gen_lowpart (DImode, operands[2]);
    emit_insn (gen_lxvl (operands[0], mem, len));
    DONE;
  })
--- 5798,5811 ----
  (define_expand "len_load_v16qi"
    [(match_operand:V16QI 0 "vlogical_operand")
     (match_operand:V16QI 1 "memory_operand")
!    (match_operand:V16QI 2 "lxvl_else_operand")
!    (match_operand:QI 3 "gpc_reg_operand")
!    (match_operand:QI 4 "zero_constant")]
    "TARGET_P9_VECTOR && TARGET_64BIT"
  {
    rtx mem = XEXP (operands[1], 0);
    mem = force_reg (DImode, mem);
!   rtx len = gen_lowpart (DImode, operands[3]);
    emit_insn (gen_lxvl (operands[0], mem, len));
    DONE;
  })
diff -Nrcpad gcc-16-20251207/gcc/config/s390/predicates.md gcc-16-20251214/gcc/config/s390/predicates.md
*** gcc-16-20251207/gcc/config/s390/predicates.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/s390/predicates.md	Sun Dec 14 22:32:06 2025
***************
*** 614,616 ****
--- 614,621 ----
  (define_predicate "vll_bias_operand"
    (and (match_code "const_int")
         (match_test "op == CONSTM1_RTX (QImode)")))
+ 
+ ; Else operand for LEN_LOAD.
+ (define_predicate "vll_else_operand"
+   (and (match_code "const_vector")
+        (match_test "op == CONST0_RTX (GET_MODE (op))")))
diff -Nrcpad gcc-16-20251207/gcc/config/s390/s390-c.cc gcc-16-20251214/gcc/config/s390/s390-c.cc
*** gcc-16-20251207/gcc/config/s390/s390-c.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/s390/s390-c.cc	Sun Dec 14 22:32:06 2025
*************** s390_adjust_builtin_arglist (unsigned in
*** 736,741 ****
--- 736,744 ----
  	      {
  		tree arg = (**arglist)[src_arg_index];
  
+ 		if (c_dialect_cxx () && TREE_CODE (arg) == NON_LVALUE_EXPR)
+ 		  arg = TREE_OPERAND (arg, 0);
+ 
  		if (TREE_CODE (arg) != INTEGER_CST)
  		  {
  		    error ("constant value required for builtin %qF argument %d",
*************** s390_adjust_builtin_arglist (unsigned in
*** 758,765 ****
  			   src_arg_index + 1);
  		    return;
  		  }
! 		folded_args->quick_push (build_int_cst (integer_type_node,
! 							code));
  		src_arg_index++;
  		arg_assigned_p = true;
  	      }
--- 761,771 ----
  			   src_arg_index + 1);
  		    return;
  		  }
! 
! 		arg = build_int_cst (integer_type_node, code);
! 		if (c_dialect_cxx ())
! 		  arg = build1 (NON_LVALUE_EXPR, integer_type_node, arg);
! 		folded_args->quick_push (arg);
  		src_arg_index++;
  		arg_assigned_p = true;
  	      }
*************** s390_resolve_overloaded_builtin (locatio
*** 986,991 ****
--- 992,1010 ----
      if ((*arglist)[i] == error_mark_node)
        return error_mark_node;
  
+   /* A difference in front ends is that in contrast to C the C++ FE does no
+      array-to-pointer conversion prior calling resolve_overloaded_builtin().
+      However, we depend on this for finding the proper overloaded builtin or in
+      case of direct expansion.  Therefore, do the conversion now.  */
+   if (c_dialect_cxx ())
+     for (i = 0; i < in_args_num; ++i)
+       {
+ 	tree t = (*arglist)[i];
+ 	if (TREE_CODE (t) == VIEW_CONVERT_EXPR
+ 	    && TREE_CODE (TREE_TYPE (t)) == ARRAY_TYPE)
+ 	  (*arglist)[i] = default_conversion (t);
+       }
+ 
    /* Overloaded builtins without any variants are directly expanded here.  */
    if (desc_start_for_overloaded_builtin[ob_fcode] ==
        S390_OVERLOADED_BUILTIN_VAR_MAX)
diff -Nrcpad gcc-16-20251207/gcc/config/s390/s390.cc gcc-16-20251214/gcc/config/s390/s390.cc
*** gcc-16-20251207/gcc/config/s390/s390.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/s390/s390.cc	Sun Dec 14 22:32:06 2025
*************** s390_expand_builtin (tree exp, rtx targe
*** 917,922 ****
--- 917,925 ----
  	  error ("Builtin %qF requires z17 or higher", fndecl);
  	  return const0_rtx;
  	}
+ 
+       if (bflags & B_DEP)
+ 	warning (0, "builtin %qF is deprecated", fndecl);
      }
    if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET
        && fcode < S390_ALL_BUILTIN_MAX)
diff -Nrcpad gcc-16-20251207/gcc/config/s390/s390.opt.urls gcc-16-20251214/gcc/config/s390/s390.opt.urls
*** gcc-16-20251207/gcc/config/s390/s390.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/s390/s390.opt.urls	Sun Dec 14 22:32:06 2025
*************** m64
*** 7,13 ****
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m64-2)
  
  march=
! UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-march-14)
  
  mbackchain
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mbackchain)
--- 7,13 ----
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-m64-2)
  
  march=
! UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-march-13)
  
  mbackchain
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mbackchain)
*************** UrlSuffix(gcc/S_002f390-and-zSeries-Opti
*** 63,69 ****
  ; skipping UrlSuffix for 'mno-stack-size' due to finding no URLs
  
  mtune=
! UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtune-14)
  
  mmvcle
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mmvcle)
--- 63,69 ----
  ; skipping UrlSuffix for 'mno-stack-size' due to finding no URLs
  
  mtune=
! UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mtune-13)
  
  mmvcle
  UrlSuffix(gcc/S_002f390-and-zSeries-Options.html#index-mmvcle)
diff -Nrcpad gcc-16-20251207/gcc/config/s390/vector.md gcc-16-20251214/gcc/config/s390/vector.md
*** gcc-16-20251207/gcc/config/s390/vector.md	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/s390/vector.md	Sun Dec 14 22:32:06 2025
***************
*** 3557,3571 ****
  (define_expand "len_load_v16qi"
    [(match_operand:V16QI 0 "register_operand")
     (match_operand:V16QI 1 "memory_operand")
!    (match_operand:QI 2 "register_operand")
!    (match_operand:QI 3 "vll_bias_operand")
    ]
    "TARGET_VX && TARGET_64BIT"
  {
    rtx mem = adjust_address (operands[1], BLKmode, 0);
  
    rtx len = gen_reg_rtx (SImode);
!   emit_move_insn (len, gen_rtx_ZERO_EXTEND (SImode, operands[2]));
    emit_insn (gen_vllv16qi (operands[0], len, mem));
    DONE;
  })
--- 3557,3572 ----
  (define_expand "len_load_v16qi"
    [(match_operand:V16QI 0 "register_operand")
     (match_operand:V16QI 1 "memory_operand")
!    (match_operand:V16QI 2 "vll_else_operand")
!    (match_operand:QI 3 "register_operand")
!    (match_operand:QI 4 "vll_bias_operand")
    ]
    "TARGET_VX && TARGET_64BIT"
  {
    rtx mem = adjust_address (operands[1], BLKmode, 0);
  
    rtx len = gen_reg_rtx (SImode);
!   emit_move_insn (len, gen_rtx_ZERO_EXTEND (SImode, operands[3]));
    emit_insn (gen_vllv16qi (operands[0], len, mem));
    DONE;
  })
diff -Nrcpad gcc-16-20251207/gcc/config/sh/sh.opt.urls gcc-16-20251214/gcc/config/sh/sh.opt.urls
*** gcc-16-20251207/gcc/config/sh/sh.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/sh/sh.opt.urls	Sun Dec 14 22:32:06 2025
*************** UrlSuffix(gcc/SH-Options.html#index-mren
*** 156,163 ****
  mtas
  UrlSuffix(gcc/SH-Options.html#index-mtas)
  
- ; skipping UrlSuffix for 'multcost=' due to finding no URLs
- 
  musermode
  UrlSuffix(gcc/SH-Options.html#index-musermode)
  
--- 156,161 ----
diff -Nrcpad gcc-16-20251207/gcc/config/sol2.h gcc-16-20251214/gcc/config/sol2.h
*** gcc-16-20251207/gcc/config/sol2.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/sol2.h	Sun Dec 14 22:32:06 2025
*************** along with GCC; see the file COPYING3.
*** 41,46 ****
--- 41,52 ----
  #undef WINT_TYPE_SIZE
  #define WINT_TYPE_SIZE 32
  
+ /* Same for pid_t.  See SCD 2.4.2, p. 6P-12, Figure 6-59 (64-bit).  There's
+    no corresponding 32-bit definition, but this is what Solaris 8
+    <sys/types.h> uses.  */
+ 
+ #define PID_TYPE (TARGET_64BIT ? "int" : "long int")
+ 
  #define SIG_ATOMIC_TYPE "int"
  
  /* ??? This definition of int8_t follows the system header but does
diff -Nrcpad gcc-16-20251207/gcc/config/sparc/sparc.opt.urls gcc-16-20251214/gcc/config/sparc/sparc.opt.urls
*** gcc-16-20251207/gcc/config/sparc/sparc.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/sparc/sparc.opt.urls	Sun Dec 14 22:32:06 2025
*************** mcpu=
*** 81,87 ****
  UrlSuffix(gcc/SPARC-Options.html#index-mcpu-12)
  
  mtune=
! UrlSuffix(gcc/SPARC-Options.html#index-mtune-15)
  
  mcmodel=
  UrlSuffix(gcc/SPARC-Options.html#index-mcmodel_003d-6)
--- 81,87 ----
  UrlSuffix(gcc/SPARC-Options.html#index-mcpu-12)
  
  mtune=
! UrlSuffix(gcc/SPARC-Options.html#index-mtune-14)
  
  mcmodel=
  UrlSuffix(gcc/SPARC-Options.html#index-mcmodel_003d-6)
diff -Nrcpad gcc-16-20251207/gcc/config/v850/v850.opt.urls gcc-16-20251214/gcc/config/v850/v850.opt.urls
*** gcc-16-20251207/gcc/config/v850/v850.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/v850/v850.opt.urls	Sun Dec 14 22:32:06 2025
*************** mapp-regs
*** 4,10 ****
  UrlSuffix(gcc/V850-Options.html#index-mapp-regs-1)
  
  mbig-switch
! UrlSuffix(gcc/V850-Options.html#index-mbig-switch-1)
  
  ; skipping UrlSuffix for 'mdebug' due to finding no URLs
  
--- 4,10 ----
  UrlSuffix(gcc/V850-Options.html#index-mapp-regs-1)
  
  mbig-switch
! UrlSuffix(gcc/V850-Options.html#index-mbig-switch)
  
  ; skipping UrlSuffix for 'mdebug' due to finding no URLs
  
diff -Nrcpad gcc-16-20251207/gcc/config/vax/vax.opt.urls gcc-16-20251214/gcc/config/vax/vax.opt.urls
*** gcc-16-20251207/gcc/config/vax/vax.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/vax/vax.opt.urls	Sun Dec 14 22:32:06 2025
*************** munix
*** 19,23 ****
  UrlSuffix(gcc/VAX-Options.html#index-munix)
  
  mlra
! UrlSuffix(gcc/VAX-Options.html#index-mlra-2)
  
--- 19,23 ----
  UrlSuffix(gcc/VAX-Options.html#index-munix)
  
  mlra
! UrlSuffix(gcc/VAX-Options.html#index-mlra-1)
  
diff -Nrcpad gcc-16-20251207/gcc/config/visium/visium.opt.urls gcc-16-20251214/gcc/config/visium/visium.opt.urls
*** gcc-16-20251207/gcc/config/visium/visium.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config/visium/visium.opt.urls	Sun Dec 14 22:32:06 2025
*************** mcpu=
*** 19,25 ****
  UrlSuffix(gcc/Visium-Options.html#index-mcpu-13)
  
  mtune=
! UrlSuffix(gcc/Visium-Options.html#index-mtune-16)
  
  msv-mode
  UrlSuffix(gcc/Visium-Options.html#index-msv-mode)
--- 19,25 ----
  UrlSuffix(gcc/Visium-Options.html#index-mcpu-13)
  
  mtune=
! UrlSuffix(gcc/Visium-Options.html#index-mtune-15)
  
  msv-mode
  UrlSuffix(gcc/Visium-Options.html#index-msv-mode)
diff -Nrcpad gcc-16-20251207/gcc/config.gcc gcc-16-20251214/gcc/config.gcc
*** gcc-16-20251207/gcc/config.gcc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/config.gcc	Sun Dec 14 22:32:06 2025
*************** case "${target}" in
*** 5141,5146 ****
--- 5141,5150 ----
  
  		# Infer ABI from the triplet.
  		case ${target} in
+ 		loongarch32-*f64) abi_base="ilp32d"; abi_ext="base" ;;
+ 		loongarch32-*f32) abi_base="ilp32f"; abi_ext="base" ;;
+ 		loongarch32-*sf)  abi_base="ilp32s"; abi_ext="base" ;;
+ 		loongarch32-*)    abi_base="ilp32d"; abi_ext="base" ;;
  		loongarch64-*f64) abi_base="lp64d"; abi_ext="base" ;;
  		loongarch64-*f32) abi_base="lp64f"; abi_ext="base" ;;
  		loongarch64-*sf)  abi_base="lp64s"; abi_ext="base" ;;
*************** case "${target}" in
*** 5153,5158 ****
--- 5157,5165 ----
  
  		# Get the canonical triplet (multiarch specifier).
  		case ${abi_base},${abi_ext} in
+ 		ilp32d,base) triplet_abi="";;
+ 		ilp32f,base) triplet_abi="f32";;
+ 		ilp32s,base) triplet_abi="sf";;
  		lp64d,base) triplet_abi="";;
  		lp64f,base) triplet_abi="f32";;
  		lp64s,base) triplet_abi="sf";;
*************** case "${target}" in
*** 5167,5178 ****
  			  exit 1
  			  ;;
  		esac
! 		la_canonical_triplet="loongarch64-${triplet_os}${triplet_abi}"
  
  
  		# Perform initial sanity checks on --with-* options.
  		case ${with_arch} in
! 		"" | la64v1.[01] | abi-default | loongarch64 | la[46]64) ;; # OK, append here.
  		native)
  			if test x${host} != x${target}; then
  				echo "--with-arch=native is illegal for cross-compiler." 1>&2
--- 5174,5194 ----
  			  exit 1
  			  ;;
  		esac
! 
! 		case ${target} in
! 		loongarch32-*)    la_canonical_triplet="loongarch32-${triplet_os}${triplet_abi}" ;;
! 		loongarch64-*)    la_canonical_triplet="loongarch64-${triplet_os}${triplet_abi}" ;;
! 		*)
! 			echo "Unsupported target ${target}." 1>&2
! 			exit 1
! 			;;
! 		esac
  
  
  		# Perform initial sanity checks on --with-* options.
  		case ${with_arch} in
! 		"" | la64v1.[01] | abi-default | loongarch64 | la[46]64 | la32v1.0 | la32rv1.0)
! 			;; # OK, append here.
  		native)
  			if test x${host} != x${target}; then
  				echo "--with-arch=native is illegal for cross-compiler." 1>&2
*************** case "${target}" in
*** 5233,5238 ****
--- 5249,5261 ----
  			# default architecture for lp64[fs] ABI
  			arch_default="abi-default"
  			;;
+ 		ilp32[dfs]/base)
+ 			# architectures that support ilp32* ABI
+ 			arch_pattern="native|abi-default|la32v1.0|la32rv1.0"
+ 
+ 			# default architecture for ilp32* ABI
+ 			arch_default="abi-default"
+ 			;;
  		*)
  			echo "Unsupported ABI type ${abi_base}/${abi_ext}." 1>&2
  			exit 1
*************** case "${target}" in
*** 5241,5254 ****
  
  		# Infer ISA-related default options from the ABI: pass 2
  		case ${abi_base}/${abi_ext} in
! 		lp64d/base)
  			fpu_pattern="64"
  			;;
! 		lp64f/base)
  			fpu_pattern="32|64"
  			fpu_default="32"
  			;;
! 		lp64s/base)
  			fpu_pattern="none|32|64"
  			fpu_default="none"
  			;;
--- 5264,5277 ----
  
  		# Infer ISA-related default options from the ABI: pass 2
  		case ${abi_base}/${abi_ext} in
! 		ilp32d/base | lp64d/base)
  			fpu_pattern="64"
  			;;
! 		ilp32f/base | lp64f/base)
  			fpu_pattern="32|64"
  			fpu_default="32"
  			;;
! 		ilp32s/base | lp64s/base)
  			fpu_pattern="none|32|64"
  			fpu_default="none"
  			;;
*************** case "${target}" in
*** 5302,5308 ****
  
  
  		# Check default with_tune configuration using with_arch.
! 		tune_pattern="native|generic|loongarch64|la[46]64"
  
  		case ${with_tune} in
  		"") ;; # OK
--- 5325,5338 ----
  
  
  		# Check default with_tune configuration using with_arch.
! 		case ${with_arch} in
! 		la32v1.0 | la32rv1.0)
! 			tune_pattern="loongarch32"
! 			;;
! 		loongarch64)
! 			tune_pattern="native|generic|loongarch64|la[46]64"
! 			;;
! 		esac
  
  		case ${with_tune} in
  		"") ;; # OK
*************** case "${target}" in
*** 5352,5358 ****
  					# Fixed: use the default gcc configuration for all multilib
  					# builds by default.
  					with_multilib_default="" ;;
! 				arch,native|arch,la64v1.[01]|arch,loongarch64|arch,la[46]64) # OK, append here.
  					with_multilib_default="/march=${component}" ;;
  				arch,*)
  					with_multilib_default="/march=abi-default"
--- 5382,5388 ----
  					# Fixed: use the default gcc configuration for all multilib
  					# builds by default.
  					with_multilib_default="" ;;
! 				arch,native|arch,la64v1.[01]|arch,loongarch64|arch,la[46]64|arch,la32v1.0|arch,la32rv1.0) # OK, append here.
  					with_multilib_default="/march=${component}" ;;
  				arch,*)
  					with_multilib_default="/march=abi-default"
*************** case "${target}" in
*** 5416,5422 ****
  				if test x${parse_state} = x"abi-base"; then
  					# Base ABI type
  					case ${component} in
! 					lp64d | lp64f | lp64s) elem_tmp="ABI_BASE_$(echo ${component} | tr a-z A-Z),";;
  					*)
  						echo "Unknown base ABI \"${component}\" in --with-multilib-list." 1>&2
  						exit 1
--- 5446,5452 ----
  				if test x${parse_state} = x"abi-base"; then
  					# Base ABI type
  					case ${component} in
! 					ilp32d | ilp32f | ilp32s |lp64d | lp64f | lp64s) elem_tmp="ABI_BASE_$(echo ${component} | tr a-z A-Z),";;
  					*)
  						echo "Unknown base ABI \"${component}\" in --with-multilib-list." 1>&2
  						exit 1
*************** case "${target}" in
*** 5452,5458 ****
  				if test x${parse_state} = x"arch"; then
  					# -march option
  					case ${component} in
! 					native | abi-default | la64v1.[01] | loongarch64 | la[46]64) # OK, append here.
  						# Append -march spec for each multilib variant.
  						loongarch_multilib_list_make="${loongarch_multilib_list_make}/march=${component}"
  						parse_state="opts"
--- 5482,5488 ----
  				if test x${parse_state} = x"arch"; then
  					# -march option
  					case ${component} in
! 					native | abi-default | la64v1.[01] | loongarch64 | la[46]64 | la32v1.0 | la32rv1.0) # OK, append here.
  						# Append -march spec for each multilib variant.
  						loongarch_multilib_list_make="${loongarch_multilib_list_make}/march=${component}"
  						parse_state="opts"
diff -Nrcpad gcc-16-20251207/gcc/configure gcc-16-20251214/gcc/configure
*** gcc-16-20251207/gcc/configure	Sun Dec  7 22:32:20 2025
--- gcc-16-20251214/gcc/configure	Sun Dec 14 22:32:20 2025
*************** LIBOBJS
*** 635,641 ****
  CET_HOST_FLAGS
  LD_PICFLAG
  PICFLAG
- enable_default_pie
  libgccjit_version
  enable_host_bind_now
  LIBGDIAGNOSTICS
--- 635,640 ----
*************** else
*** 21877,21883 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21880 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21876,21882 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21879 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** else
*** 21983,21989 ****
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21986 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
--- 21982,21988 ----
    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
    lt_status=$lt_dlunknown
    cat > conftest.$ac_ext <<_LT_EOF
! #line 21985 "configure"
  #include "confdefs.h"
  
  #if HAVE_DLFCN_H
*************** $as_echo "#define ENABLE_DEFAULT_PIE 1"
*** 34939,34945 ****
  
  fi
  
- 
  # Check if -fno-PIE works.
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fno-PIE option" >&5
  $as_echo_n "checking for -fno-PIE option... " >&6; }
--- 34938,34943 ----
diff -Nrcpad gcc-16-20251207/gcc/configure.ac gcc-16-20251214/gcc/configure.ac
*** gcc-16-20251207/gcc/configure.ac	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/configure.ac	Sun Dec 14 22:32:07 2025
*************** if test x$enable_default_pie = xyes ; th
*** 7765,7771 ****
    AC_DEFINE(ENABLE_DEFAULT_PIE, 1,
        [Define if your target supports default PIE and it is enabled.])
  fi
- AC_SUBST([enable_default_pie])
  
  # Check if -fno-PIE works.
  AC_CACHE_CHECK([for -fno-PIE option],
--- 7765,7770 ----
diff -Nrcpad gcc-16-20251207/gcc/cp/ChangeLog gcc-16-20251214/gcc/cp/ChangeLog
*** gcc-16-20251207/gcc/cp/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cp/ChangeLog	Sun Dec 14 22:32:07 2025
***************
*** 1,3 ****
--- 1,117 ----
+ 2025-12-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* parser.cc (cp_parser_omp_clause_reduction): Provide fixit hints
+ 	for -Wdeprecated-openmp diagnostics.
+ 	(cp_parser_omp_clause_linear): Likewise.
+ 	(cp_parser_omp_clause_depend): Likewise.
+ 	(cp_parser_omp_clause_map): Likewise.  Reset num_commas after the
+ 	diagnostics.
+ 	(cp_parser_omp_clause_proc_bind): Provide fixit hints for
+ 	-Wdeprecated-openmp diagnostics.
+ 	(cp_parser_omp_all_clauses): Move -Wdeprecated-openmp diagnostics
+ 	for to vs. enter here, add fixit hints for it.
+ 	(cp_parser_omp_master):Add MASTER_LOC argument.  Provide fixit hints
+ 	for -Wdeprecated-openmp diagnostics.
+ 	(cp_parser_omp_parallel): Adjust cp_parser_omp_master caller.
+ 	(cp_parser_omp_declare_target): Don't emit -Wdeprecated-openmp
+ 	warning for to vs. enter here.
+ 	(cp_parser_omp_metadirective): Provide fixit hints for
+ 	-Wdeprecated-openmp diagnostics.
+ 	(cp_parser_omp_construct): Adjust cp_parser_omp_master caller.
+ 
+ 2025-12-12  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	* method.cc (constructible_expr): Emit diagnostics for abstract
+ 	types.
+ 	* typeck2.cc (abstract_virtuals_error): Use more accurate
+ 	wording for default case, and remove extranneous whitespace
+ 	in favour of a nesting level.
+ 
+ 2025-12-12  Chung-Lin Tang  <cltang@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 	    Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* parser.cc (cp_parser_omp_clause_uses_allocators): New function.
+ 	(cp_parser_omp_clause_name, cp_parser_omp_all_clauses,
+ 	OMP_TARGET_CLAUSE_MASK): Handle uses_allocators.
+ 	* semantics.cc (finish_omp_clauses): Likewise.
+ 	* pt.cc (tsubst_omp_clauses): Likewise.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/123098
+ 	* parser.cc (cp_parser_omp_clause_reduction): Only emit
+ 	-Wdeprecated-openmp warning for CPP_MINUS if is_omp.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* parser.cc (cp_parser_omp_clause_reduction,
+ 	cp_parser_omp_clause_linear, cp_parser_omp_clause_depend,
+ 	cp_parser_omp_clause_map, cp_parser_omp_clause_proc_bind,
+ 	cp_parser_omp_master, cp_parser_omp_declare_target,
+ 	cp_parser_omp_metadirective): Formatting fixes.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* parser.cc (cp_parser_omp_clause_reduction): Deprecate '-'
+ 	operator.
+ 	(cp_parser_omp_clause_linear): Deprecate modifiers with parens.
+ 	(cp_parser_omp_clause_depend): Deprecate sink and source.
+ 	(cp_parser_omp_clause_map): Map clause modifiers
+ 	comma-separated.
+ 	(cp_parser_omp_declare_target): Deprecate synonymous omp declare
+ 	target for omp begin declare target. Deprecate to clause.
+ 	(cp_parser_omp_metadirective): Deprecate default clause on
+ 	metadirectives.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* parser.cc (cp_parser_postfix_expression): Whitespace.
+ 	(cp_parser_builtin_c23_va_start): Ditto.
+ 	(cp_parser_omp_clause_proc_bind): Deprecate master affinity.
+ 	(cp_parser_omp_master): Deprecate master construct.
+ 
+ 2025-12-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* module.cc (maybe_translate_include): Suggest <bits/stdc++.h>
+ 	as an alternate for importable standard library headers.
+ 	(importable_headers, is_importable_header): New.
+ 
+ 2025-12-09  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Revert:
+ 	2025-12-09  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122819
+ 	* decl.cc (start_preparsed_function): Use
+ 	DECL_TEMPLOID_INSTANTIATION instead of
+ 	DECL_TEMPLATE_INSTANTIATION to check vague linkage.
+ 	* decl2.cc (vague_linkage_p): Likewise.
+ 	(c_parse_final_cleanups): Simplify condition.
+ 	* semantics.cc (expand_or_defer_fn_1): Also check for temploid
+ 	friend functions.
+ 
+ 2025-12-09  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122819
+ 	* decl.cc (start_preparsed_function): Use
+ 	DECL_TEMPLOID_INSTANTIATION instead of
+ 	DECL_TEMPLATE_INSTANTIATION to check vague linkage.
+ 	* decl2.cc (vague_linkage_p): Likewise.
+ 	(c_parse_final_cleanups): Simplify condition.
+ 	* semantics.cc (expand_or_defer_fn_1): Also check for temploid
+ 	friend functions.
+ 
+ 2025-12-08  Egas Ribeiro  <egas.g.ribeiro@tecnico.ulisboa.pt>
+ 
+ 	* pt.cc (tsubst_expr): Add TARGET_EXPR case with explanatory
+ 	comment and gcc_unreachable.
+ 
+ 2025-12-08  Egas Ribeiro  <egas.g.ribeiro@tecnico.ulisboa.pt>
+ 
+ 	PR c++/119343
+ 	* pt.cc (resolve_nondeduced_context): Remove mark_used call.
+ 
  2025-12-06  Jakub Jelinek  <jakub@redhat.com>
  
  	* decl2.cc (is_late_template_attribute): Call lookup_attribute_spec
diff -Nrcpad gcc-16-20251207/gcc/cp/method.cc gcc-16-20251214/gcc/cp/method.cc
*** gcc-16-20251207/gcc/cp/method.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cp/method.cc	Sun Dec 14 22:32:07 2025
*************** constructible_expr (tree to, tree from,
*** 2274,2280 ****
    const int len = TREE_VEC_LENGTH (from);
    if (CLASS_TYPE_P (to))
      {
!       if (ABSTRACT_CLASS_TYPE_P (to))
  	return error_mark_node;
        tree ctype = to;
        vec<tree, va_gc> *args = NULL;
--- 2274,2280 ----
    const int len = TREE_VEC_LENGTH (from);
    if (CLASS_TYPE_P (to))
      {
!       if (abstract_virtuals_error (NULL_TREE, to, complain))
  	return error_mark_node;
        tree ctype = to;
        vec<tree, va_gc> *args = NULL;
diff -Nrcpad gcc-16-20251207/gcc/cp/module.cc gcc-16-20251214/gcc/cp/module.cc
*** gcc-16-20251207/gcc/cp/module.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cp/module.cc	Sun Dec 14 22:32:07 2025
*************** void module_state::set_filename (const C
*** 22541,22551 ****
      }
  }
  
  /* Figure out whether to treat HEADER as an include or an import.  */
  
  static char *
  maybe_translate_include (cpp_reader *reader, line_maps *lmaps, location_t loc,
! 			 const char *path)
  {
    if (!modules_p ())
      {
--- 22541,22606 ----
      }
  }
  
+ /* The list of importable headers from C++ Table 24.  */
+ 
+ static const char *
+ importable_headers[] =
+   {
+     "algorithm", "any", "array", "atomic",
+     "barrier", "bit", "bitset",
+     "charconv", "chrono", "compare", "complex", "concepts",
+     "condition_variable", "contracts", "coroutine",
+     "debugging", "deque",
+     "exception", "execution", "expected",
+     "filesystem", "flat_map", "flat_set", "format", "forward_list",
+     "fstream", "functional", "future",
+     "generator",
+     "hazard_pointer", "hive",
+     "initializer_list", "inplace_vector", "iomanip", "ios", "iosfwd",
+     "iostream", "istream", "iterator",
+     "latch", "limits", "linalg", "list", "locale",
+     "map", "mdspan", "memory", "memory_resource", "meta", "mutex",
+     "new", "numbers", "numeric",
+     "optional", "ostream",
+     "print",
+     "queue",
+     "random", "ranges", "ratio", "rcu", "regex",
+     "scoped_allocator", "semaphore", "set", "shared_mutex", "simd",
+     "source_location", "span", "spanstream", "sstream", "stack", "stacktrace",
+     "stdexcept", "stdfloat", "stop_token", "streambuf", "string",
+     "string_view", "syncstream", "system_error",
+     "text_encoding", "thread", "tuple", "type_traits", "typeindex", "typeinfo",
+     "unordered_map", "unordered_set",
+     "utility",
+     "valarray", "variant", "vector", "version"
+   };
+ 
+ /* True iff <name> is listed as an importable standard header.  */
+ 
+ static bool
+ is_importable_header (const char *name)
+ {
+   unsigned lo = 0;
+   unsigned hi = ARRAY_SIZE (importable_headers);
+   while (hi > lo)
+     {
+       unsigned mid = (lo + hi)/2;
+       int cmp = strcmp (name, importable_headers[mid]);
+       if (cmp > 0)
+ 	lo = mid + 1;
+       else if (cmp < 0)
+ 	hi = mid;
+       else
+ 	return true;
+     }
+   return false;
+ }
+ 
  /* Figure out whether to treat HEADER as an include or an import.  */
  
  static char *
  maybe_translate_include (cpp_reader *reader, line_maps *lmaps, location_t loc,
! 			 _cpp_file *file, bool angle, const char **alternate)
  {
    if (!modules_p ())
      {
*************** maybe_translate_include (cpp_reader *rea
*** 22554,22559 ****
--- 22609,22616 ----
        return nullptr;
      }
  
+   const char *path = _cpp_get_file_path (file);
+ 
    dump.push (NULL);
  
    dump () && dump ("Checking include translation '%s'", path);
*************** maybe_translate_include (cpp_reader *rea
*** 22599,22604 ****
--- 22656,22683 ----
        if (!strcmp ((*note_includes)[ix], path))
  	note = true;
  
+   /* Maybe try importing a different header instead.  */
+   if (alternate && translate == xlate_kind::unknown)
+     {
+       const char *fname = _cpp_get_file_name (file);
+       /* Redirect importable <name> to <bits/stdc++.h>.  */
+       /* ??? Generalize to use a .json.  */
+       expanded_location eloc = expand_location (loc);
+       if (angle && is_importable_header (fname)
+ 	  /* Exclude <version> which often goes with import std.  */
+ 	  && strcmp (fname, "version") != 0
+ 	  /* Don't redirect #includes between headers under the same include
+ 	     path directory (i.e. between library headers); if the import
+ 	     brings in the current file we then get redefinition errors.  */
+ 	  && !strstr (eloc.file, _cpp_get_file_dir (file)->name)
+ 	  /* ??? These are needed when running a toolchain from the build
+ 	     directory, because libsupc++ headers aren't linked into
+ 	     libstdc++-v3/include with the other headers.  */
+ 	  && !strstr (eloc.file, "libstdc++-v3/include")
+ 	  && !strstr (eloc.file, "libsupc++"))
+ 	*alternate = "bits/stdc++.h";
+     }
+ 
    if (note)
      inform (loc, translate == xlate_kind::import
  	    ? G_("include %qs translated to import")
diff -Nrcpad gcc-16-20251207/gcc/cp/parser.cc gcc-16-20251214/gcc/cp/parser.cc
*** gcc-16-20251207/gcc/cp/parser.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cp/parser.cc	Sun Dec 14 22:32:07 2025
*************** cp_parser_postfix_expression (cp_parser
*** 8198,8204 ****
  		      error_at (loc, "call to %<__builtin_operator_new%> "
  				     "does not select replaceable global "
  				     "allocation function");
! 		    else 
  		      error_at (loc, "call to %<__builtin_operator_delete%> "
  				     "does not select replaceable global "
  				     "deallocation function");
--- 8198,8204 ----
  		      error_at (loc, "call to %<__builtin_operator_new%> "
  				     "does not select replaceable global "
  				     "allocation function");
! 		    else
  		      error_at (loc, "call to %<__builtin_operator_delete%> "
  				     "does not select replaceable global "
  				     "deallocation function");
*************** cp_parser_builtin_c23_va_start (cp_parse
*** 11694,11700 ****
    if (TREE_CODE (ret) == CALL_EXPR)
      SET_EXPR_LOCATION (ret, combined_loc);
    return cp_expr (ret, combined_loc);
! }	  
  
  /* Parse __builtin_offsetof.
  
--- 11694,11700 ----
    if (TREE_CODE (ret) == CALL_EXPR)
      SET_EXPR_LOCATION (ret, combined_loc);
    return cp_expr (ret, combined_loc);
! }
  
  /* Parse __builtin_offsetof.
  
*************** cp_parser_omp_clause_name (cp_parser *pa
*** 40221,40226 ****
--- 40221,40228 ----
  	    result = PRAGMA_OMP_CLAUSE_USE_DEVICE_ADDR;
  	  else if (!strcmp ("use_device_ptr", p))
  	    result = PRAGMA_OMP_CLAUSE_USE_DEVICE_PTR;
+ 	  else if (!strcmp ("uses_allocators", p))
+ 	    result = PRAGMA_OMP_CLAUSE_USES_ALLOCATORS;
  	  break;
  	case 'v':
  	  if (!strcmp ("vector", p))
*************** cp_parser_omp_clause_reduction (cp_parse
*** 42164,42170 ****
      {
      case CPP_PLUS: code = PLUS_EXPR; break;
      case CPP_MULT: code = MULT_EXPR; break;
!     case CPP_MINUS: code = MINUS_EXPR; break;
      case CPP_AND: code = BIT_AND_EXPR; break;
      case CPP_XOR: code = BIT_XOR_EXPR; break;
      case CPP_OR: code = BIT_IOR_EXPR; break;
--- 42166,42183 ----
      {
      case CPP_PLUS: code = PLUS_EXPR; break;
      case CPP_MULT: code = MULT_EXPR; break;
!     case CPP_MINUS:
!       if (is_omp)
! 	{
! 	  location_t loc = cp_lexer_peek_token (parser->lexer)->location;
! 	  gcc_rich_location richloc (loc);
! 	  richloc.add_fixit_replace ("+");
! 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
! 		      "%<-%> operator for reductions deprecated in "
! 		      "OpenMP 5.2");
! 	}
!       code = MINUS_EXPR;
!       break;
      case CPP_AND: code = BIT_AND_EXPR; break;
      case CPP_XOR: code = BIT_XOR_EXPR; break;
      case CPP_OR: code = BIT_IOR_EXPR; break;
*************** cp_parser_omp_clause_allocate (cp_parser
*** 42773,42778 ****
--- 42786,42984 ----
    return nlist;
  }
  
+ /* OpenMP 5.0:
+    uses_allocators ( allocator-list )
+ 
+    allocator-list:
+    allocator
+    allocator , allocator-list
+    allocator ( traits-array )
+    allocator ( traits-array ) , allocator-list
+ 
+    OpenMP 5.2:
+ 
+    uses_allocators ( modifier : allocator-list )
+    uses_allocators ( modifier , modifier : allocator-list )
+ 
+    modifier:
+    traits ( traits-array )
+    memspace ( mem-space-handle )  */
+ 
+ static tree
+ cp_parser_omp_clause_uses_allocators (cp_parser *parser, tree list)
+ {
+   location_t clause_loc
+     = cp_lexer_peek_token (parser->lexer)->location;
+   tree nl = list;
+   matching_parens parens;
+   if (!parens.require_open (parser))
+     return list;
+ 
+   bool has_modifiers = false;
+   bool seen_allocators = false;
+   tree memspace_expr = NULL_TREE;
+   tree traits_var = NULL_TREE;
+ 
+   cp_parser_parse_tentatively (parser);
+   bool saved_colon_corrects_to_scope_p = parser->colon_corrects_to_scope_p;
+   parser->colon_corrects_to_scope_p = false;
+ 
+   cp_token *dup_mod_tok = NULL;
+   for (int mod = 0; mod <= 2; mod++)
+     if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
+ 	&& cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_PAREN))
+       {
+ 	cp_token *mod_tok = cp_lexer_peek_token (parser->lexer);
+ 	tree id = mod_tok->u.value;
+ 	const char *p = IDENTIFIER_POINTER (id);
+ 	if (strcmp (p, "traits") != 0 && strcmp (p, "memspace") != 0)
+ 	  break;
+ 	cp_lexer_consume_token (parser->lexer);
+ 	matching_parens parens2;
+ 	if (!parens2.require_open (parser))
+ 	  break;
+ 	tree t = cp_parser_assignment_expression (parser);
+ 	if (strcmp (p, "traits") == 0)
+ 	  {
+ 	    if (traits_var != NULL_TREE)
+ 	      dup_mod_tok = mod_tok;
+ 	    else
+ 	      traits_var = t;
+ 	  }
+ 	else
+ 	  {
+ 	    if (memspace_expr != NULL_TREE)
+ 	      dup_mod_tok = mod_tok;
+ 	    else
+ 	      memspace_expr = t;
+ 	  }
+ 	if (!parens2.require_close (parser))
+ 	  break;
+ 	if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
+ 	  {
+ 	    has_modifiers = true;
+ 	    cp_lexer_consume_token (parser->lexer);
+ 	    break;
+ 	  }
+ 	if (/*mod != 0 || */ cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
+ 	  break;
+ 	cp_lexer_consume_token (parser->lexer);
+       }
+     else
+       break;
+ 
+   if (!has_modifiers)
+     {
+       cp_parser_abort_tentative_parse (parser);
+       traits_var = NULL_TREE;
+       memspace_expr = NULL_TREE;
+     }
+   else
+     {
+       if (dup_mod_tok)
+ 	{
+ 	  error_at (dup_mod_tok->location, "duplicate %qs modifier",
+ 		    IDENTIFIER_POINTER (dup_mod_tok->u.value));
+ 	  cp_parser_parse_definitely (parser);
+ 	  goto end;
+ 	}
+       cp_parser_parse_definitely (parser);
+     }
+   parser->colon_corrects_to_scope_p = saved_colon_corrects_to_scope_p;
+ 
+   while (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
+     {
+       cp_token *tok = cp_lexer_peek_token (parser->lexer);
+       tree t;
+       t = cp_parser_lookup_name_simple (parser,
+ 					tok->u.value,
+ 					tok->location);
+       if (t == error_mark_node)
+ 	cp_parser_name_lookup_error (parser, tok->u.value, t, NLE_NULL,
+ 				     tok->location);
+       cp_lexer_consume_token (parser->lexer);
+ 
+       /* Legacy traits syntax.  */
+       tree legacy_traits = NULL_TREE;
+       if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)
+ 	  && cp_lexer_nth_token_is (parser->lexer, 2, CPP_NAME)
+ 	  && cp_lexer_nth_token_is (parser->lexer, 3, CPP_CLOSE_PAREN))
+ 	{
+ 	  matching_parens parens2;
+ 	  parens2.require_open (parser);
+ 	  cp_token *arg_tok = cp_lexer_peek_token (parser->lexer);
+ 
+ 	  tree arg = cp_parser_lookup_name_simple (parser, arg_tok->u.value,
+ 						   arg_tok->location);
+ 	  if (arg == error_mark_node)
+ 	    cp_parser_name_lookup_error (parser, arg_tok->u.value, arg,
+ 					 NLE_NULL, arg_tok->location);
+ 	  cp_lexer_consume_token (parser->lexer);
+ 	  location_t close_loc = cp_lexer_peek_token (parser->lexer)->location;
+ 	  parens2.require_close (parser);
+ 
+ 	  if (has_modifiers)
+ 	    {
+ 	      error_at (make_location (tok->location, tok->location, close_loc),
+ 			"legacy %<%E(%E)%> traits syntax not allowed in "
+ 			"%<uses_allocators%> clause when using modifiers",
+ 			tok->u.value, arg_tok->u.value);
+ 	      goto end;
+ 	    }
+ 	  legacy_traits = arg;
+ 	  if (legacy_traits == error_mark_node)
+ 	    goto end;
+ 	  gcc_rich_location richloc (make_location (tok->location,
+ 						    tok->location, close_loc));
+ 	  if (nl == list)
+ 	    {
+ 	      /* Fixit only works well if it is the first item.  */
+ 	      richloc.add_fixit_replace (tok->location, "traits");
+ 	      richloc.add_fixit_insert_after (close_loc, ": ");
+ 	      richloc.add_fixit_insert_after (close_loc,
+ 					      IDENTIFIER_POINTER (tok->u.value));
+ 	    }
+ 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		      "the specification of arguments to %<uses_allocators%> "
+ 		      "where each item is of the form %<allocator(traits)%> is "
+ 		      "deprecated since OpenMP 5.2");
+ 	}
+ 
+       if (seen_allocators && has_modifiers)
+ 	{
+ 	  error_at (cp_lexer_peek_token (parser->lexer)->location,
+ 		    "%<uses_allocators%> clause only accepts a single "
+ 		    "allocator when using modifiers");
+ 	  goto end;
+ 	}
+       seen_allocators = true;
+ 
+       tree c = build_omp_clause (clause_loc,
+ 				 OMP_CLAUSE_USES_ALLOCATORS);
+       OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c) = t;
+       OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c) = memspace_expr;
+       OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c) = (legacy_traits
+ 					       ? legacy_traits : traits_var);
+       OMP_CLAUSE_CHAIN (c) = nl;
+       nl = c;
+ 
+       if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
+ 	cp_lexer_consume_token (parser->lexer);
+       else
+ 	break;
+     }
+ 
+   if (!parens.require_close (parser))
+     goto end;
+   return nl;
+  end:
+   cp_parser_skip_to_closing_parenthesis (parser,
+ 					 /*recovering=*/true,
+ 					 /*or_comma=*/false,
+ 					 /*consume_paren=*/true);
+   return nl;
+ }
+ 
  /* OpenMP 2.5:
     lastprivate ( variable-list )
  
*************** cp_parser_omp_clause_linear (cp_parser *
*** 42840,42845 ****
--- 43046,43054 ----
    bool colon;
    enum omp_clause_linear_kind kind = OMP_CLAUSE_LINEAR_DEFAULT;
    bool old_linear_modifier = false;
+   location_t mod_loc = UNKNOWN_LOCATION, after_colon_loc = UNKNOWN_LOCATION;
+   location_t rm1_loc = UNKNOWN_LOCATION, rm2_loc = UNKNOWN_LOCATION;
+   location_t close_loc = UNKNOWN_LOCATION;
  
    matching_parens parens;
    if (!parens.require_open (parser))
*************** cp_parser_omp_clause_linear (cp_parser *
*** 42858,42863 ****
--- 43067,43076 ----
  	kind = OMP_CLAUSE_LINEAR_UVAL;
        if (cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_PAREN))
  	{
+ 	  mod_loc = cp_lexer_peek_token (parser->lexer)->location;
+ 	  rm1_loc = make_location (mod_loc, mod_loc,
+ 				   cp_lexer_peek_nth_token (parser->lexer,
+ 							    2)->location);
  	  cp_lexer_consume_token (parser->lexer);
  	  old_linear_modifier = true;
  	}
*************** cp_parser_omp_clause_linear (cp_parser *
*** 42870,42877 ****
--- 43083,43102 ----
  					    &colon);
    else
      {
+       size_t end = cp_parser_skip_balanced_tokens (parser, 1);
+       cp_token *next = UNKNOWN_LOCATION;
+       if (end > 1
+ 	  && cp_lexer_nth_token_is (parser->lexer, end - 1, CPP_CLOSE_PAREN))
+ 	{
+ 	  rm2_loc = cp_lexer_peek_nth_token (parser->lexer, end - 1)->location;
+ 	  next = cp_lexer_peek_nth_token (parser->lexer, end);
+ 	}
        nlist = cp_parser_omp_var_list (parser, OMP_CLAUSE_LINEAR, list);
+       if (next && cp_lexer_peek_token (parser->lexer) != next)
+ 	rm2_loc = UNKNOWN_LOCATION;
        colon = cp_lexer_next_token_is (parser->lexer, CPP_COLON);
+       if (!colon && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
+ 	close_loc = cp_lexer_peek_token (parser->lexer)->location;
        if (colon)
  	cp_parser_require (parser, CPP_COLON, RT_COLON);
        else if (!parens.require_close (parser))
*************** cp_parser_omp_clause_linear (cp_parser *
*** 42987,42992 ****
--- 43212,43218 ----
  	       && cp_lexer_nth_token_is (parser->lexer, 2, CPP_CLOSE_PAREN))
  	{
  	  cp_token *token = cp_lexer_peek_token (parser->lexer);
+ 	  after_colon_loc = token->location;
  	  cp_parser_parse_tentatively (parser);
  	  step = cp_parser_id_expression (parser, /*template_p=*/false,
  					  /*check_dependency_p=*/true,
*************** cp_parser_omp_clause_linear (cp_parser *
*** 43004,43010 ****
  	    step = NULL_TREE;
  	}
        if (!step)
! 	step = cp_parser_assignment_expression (parser);
  
        if (!parens.require_close (parser))
  	cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
--- 43230,43242 ----
  	    step = NULL_TREE;
  	}
        if (!step)
! 	{
! 	  after_colon_loc = cp_lexer_peek_token (parser->lexer)->location;
! 	  step = cp_parser_assignment_expression (parser);
! 	}
! 
!       if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
! 	close_loc = cp_lexer_peek_token (parser->lexer)->location;
  
        if (!parens.require_close (parser))
  	cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
*************** cp_parser_omp_clause_linear (cp_parser *
*** 43022,43027 ****
--- 43254,43295 ----
        OMP_CLAUSE_LINEAR_OLD_LINEAR_MODIFIER (c) = old_linear_modifier;
      }
  
+   if (old_linear_modifier)
+     {
+       gcc_rich_location richloc (mod_loc);
+       if (rm2_loc != UNKNOWN_LOCATION && close_loc != UNKNOWN_LOCATION)
+ 	{
+ 	  richloc.add_fixit_remove (rm1_loc);
+ 	  if (after_colon_loc != UNKNOWN_LOCATION)
+ 	    {
+ 	      richloc.add_fixit_remove (rm2_loc);
+ 	      if (kind == OMP_CLAUSE_LINEAR_REF)
+ 		richloc.add_fixit_insert_before (after_colon_loc,
+ 						 "ref, step (");
+ 	      else if (kind == OMP_CLAUSE_LINEAR_VAL)
+ 		richloc.add_fixit_insert_before (after_colon_loc,
+ 						 "val, step (");
+ 	      else if (kind == OMP_CLAUSE_LINEAR_UVAL)
+ 		richloc.add_fixit_insert_before (after_colon_loc,
+ 						 "uval, step (");
+ 	      else
+ 		gcc_unreachable ();
+ 	      richloc.add_fixit_insert_before (close_loc, ")");
+ 	    }
+ 	  else if (kind == OMP_CLAUSE_LINEAR_REF)
+ 	    richloc.add_fixit_replace (rm2_loc, " : ref");
+ 	  else if (kind == OMP_CLAUSE_LINEAR_VAL)
+ 	    richloc.add_fixit_replace (rm2_loc, " : val");
+ 	  else if (kind == OMP_CLAUSE_LINEAR_UVAL)
+ 	    richloc.add_fixit_replace (rm2_loc, " : uval");
+ 	  else
+ 	    gcc_unreachable ();
+ 	}
+       warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		  "specifying the list items as arguments to the "
+ 		  "modifiers is deprecated since OpenMP 5.2");
+     }
+ 
    return nlist;
  }
  
*************** cp_parser_omp_clause_depend (cp_parser *
*** 43469,43477 ****
        else if (strcmp ("depobj", p) == 0)
  	kind = OMP_CLAUSE_DEPEND_DEPOBJ;
        else if (strcmp ("sink", p) == 0)
! 	dkind = OMP_CLAUSE_DOACROSS_SINK;
        else if (strcmp ("source", p) == 0)
! 	dkind = OMP_CLAUSE_DOACROSS_SOURCE;
        else
  	goto invalid_kind;
        break;
--- 43737,43759 ----
        else if (strcmp ("depobj", p) == 0)
  	kind = OMP_CLAUSE_DEPEND_DEPOBJ;
        else if (strcmp ("sink", p) == 0)
! 	{
! 	  gcc_rich_location richloc (loc);
! 	  richloc.add_fixit_replace ("doacross");
! 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
! 		      "%<sink%> modifier with %<depend%> clause deprecated "
! 		      "since OpenMP 5.2, use with %<doacross%>");
! 	  dkind = OMP_CLAUSE_DOACROSS_SINK;
! 	}
        else if (strcmp ("source", p) == 0)
! 	{
! 	  gcc_rich_location richloc (loc);
! 	  richloc.add_fixit_replace ("doacross");
! 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
! 		      "%<source%> modifier with %<depend%> clause deprecated "
! 		      "since OpenMP 5.2, use with %<doacross%>");
! 	  dkind = OMP_CLAUSE_DOACROSS_SOURCE;
! 	}
        else
  	goto invalid_kind;
        break;
*************** cp_parser_omp_clause_dyn_groupprivate (c
*** 43852,43857 ****
--- 44134,44140 ----
  static tree
  cp_parser_omp_clause_map (cp_parser *parser, tree list, bool declare_mapper_p)
  {
+   location_t clause_loc = cp_lexer_peek_token (parser->lexer)->location;
    tree nlist, c;
    enum gomp_map_kind kind = declare_mapper_p ? GOMP_MAP_UNSET : GOMP_MAP_TOFROM;
  
*************** cp_parser_omp_clause_map (cp_parser *par
*** 43899,43904 ****
--- 44182,44189 ----
    bool close_modifier = false;
    bool present_modifier = false;
    bool mapper_modifier = false;
+   int num_commas = 0;
+   int num_identifiers = 0;
    tree mapper_name = NULL_TREE;
    tree iterators = NULL_TREE;
    for (int pos = 1; pos < map_kind_pos; ++pos)
*************** cp_parser_omp_clause_map (cp_parser *par
*** 43906,43911 ****
--- 44191,44199 ----
        cp_token *tok = cp_lexer_peek_token (parser->lexer);
        if (tok->type == CPP_COMMA)
  	{
+ 	  ++num_commas;
+ 	  if (num_commas > num_identifiers)
+ 	    cp_parser_error (parser, "illegal comma");
  	  cp_lexer_consume_token (parser->lexer);
  	  continue;
  	}
*************** cp_parser_omp_clause_map (cp_parser *par
*** 44049,44054 ****
--- 44337,44352 ----
  						 /*consume_paren=*/true);
  	  return list;
  	}
+       ++num_identifiers;
+       if (num_identifiers - 1 > num_commas)
+ 	{
+ 	  gcc_rich_location richloc (clause_loc);
+ 	  richloc.add_fixit_insert_before (tok->location, ",");
+ 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		      "%<map%> clause modifiers without comma separation is "
+ 		      "deprecated since OpenMP 5.2");
+ 	}
+       num_commas = num_identifiers - 1;
      }
  
    if (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
*************** cp_parser_omp_clause_proc_bind (cp_parse
*** 44290,44296 ****
        if (strcmp ("primary", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_PRIMARY;
        else if (strcmp ("master", p) == 0)
! 	kind = OMP_CLAUSE_PROC_BIND_MASTER;
        else if (strcmp ("close", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_CLOSE;
        else if (strcmp ("spread", p) == 0)
--- 44588,44603 ----
        if (strcmp ("primary", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_PRIMARY;
        else if (strcmp ("master", p) == 0)
! 	{
! 	  gcc_rich_location richloc (location);
! 	  location_t master_loc
! 	    = cp_lexer_peek_token (parser->lexer)->location;
! 	  richloc.add_fixit_replace (master_loc, "primary");
! 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
! 		      "%<master%> affinity deprecated since OpenMP 5.1, "
! 		      "use %<primary%>");
! 	  kind = OMP_CLAUSE_PROC_BIND_MASTER;
! 	}
        else if (strcmp ("close", p) == 0)
  	kind = OMP_CLAUSE_PROC_BIND_CLOSE;
        else if (strcmp ("spread", p) == 0)
*************** cp_parser_omp_all_clauses (cp_parser *pa
*** 45372,45377 ****
--- 45679,45689 ----
  	case PRAGMA_OMP_CLAUSE_TO:
  	  if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_LINK)) != 0)
  	    {
+ 	      gcc_rich_location richloc (token->location);
+ 	      richloc.add_fixit_replace ("enter");
+ 	      warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 			  "%<to%> clause with %<declare target%> deprecated "
+ 			  "since OpenMP 5.2, use %<enter%>");
  	      tree nl = cp_parser_omp_var_list (parser, OMP_CLAUSE_ENTER,
  						clauses);
  	      for (tree c = nl; c != clauses; c = OMP_CLAUSE_CHAIN (c))
*************** cp_parser_omp_all_clauses (cp_parser *pa
*** 45411,45416 ****
--- 45723,45732 ----
  	  clauses = cp_parser_omp_clause_allocate (parser, clauses);
  	  c_name = "allocate";
  	  break;
+ 	case PRAGMA_OMP_CLAUSE_USES_ALLOCATORS:
+ 	  clauses = cp_parser_omp_clause_uses_allocators (parser, clauses);
+ 	  c_name = "uses_allocators";
+ 	  break;
  	case PRAGMA_OMP_CLAUSE_LINEAR:
  	  {
  	    bool declare_simd = false;
*************** static tree cp_parser_omp_taskloop (cp_p
*** 49001,49011 ****
  static tree
  cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok,
  		      char *p_name, omp_clause_mask mask, tree *cclauses,
! 		      bool *if_p)
  {
    tree clauses, sb, ret;
    unsigned int save;
    location_t loc = cp_lexer_peek_token (parser->lexer)->location;
  
    strcat (p_name, " master");
  
--- 49317,49333 ----
  static tree
  cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok,
  		      char *p_name, omp_clause_mask mask, tree *cclauses,
! 		      bool *if_p, location_t master_loc)
  {
    tree clauses, sb, ret;
    unsigned int save;
    location_t loc = cp_lexer_peek_token (parser->lexer)->location;
+   gcc_rich_location richloc (master_loc ? master_loc : loc);
+   if (master_loc != UNKNOWN_LOCATION)
+     richloc.add_fixit_replace (master_loc, "masked");
+   warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 	      "%<master%> construct deprecated since OpenMP 5.1, use "
+ 	      "%<masked%>");
  
    strcat (p_name, " master");
  
*************** cp_parser_omp_parallel (cp_parser *parse
*** 49377,49382 ****
--- 49699,49705 ----
      {
        tree id = cp_lexer_peek_token (parser->lexer)->u.value;
        const char *p = IDENTIFIER_POINTER (id);
+       location_t ploc = cp_lexer_peek_token (parser->lexer)->location;
        if (cclauses == NULL && strcmp (p, "masked") == 0)
  	{
  	  tree cclauses_buf[C_OMP_CLAUSE_SPLIT_COUNT];
*************** cp_parser_omp_parallel (cp_parser *parse
*** 49415,49425 ****
  	  cp_lexer_consume_token (parser->lexer);
  	  if (!flag_openmp)  /* flag_openmp_simd  */
  	    return cp_parser_omp_master (parser, pragma_tok, p_name, mask,
! 					 cclauses, if_p);
  	  block = begin_omp_parallel ();
  	  save = cp_parser_begin_omp_structured_block (parser);
  	  tree ret = cp_parser_omp_master (parser, pragma_tok, p_name, mask,
! 					   cclauses, if_p);
  	  cp_parser_end_omp_structured_block (parser, save);
  	  stmt = finish_omp_parallel (cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
  				      block);
--- 49738,49748 ----
  	  cp_lexer_consume_token (parser->lexer);
  	  if (!flag_openmp)  /* flag_openmp_simd  */
  	    return cp_parser_omp_master (parser, pragma_tok, p_name, mask,
! 					 cclauses, if_p, ploc);
  	  block = begin_omp_parallel ();
  	  save = cp_parser_begin_omp_structured_block (parser);
  	  tree ret = cp_parser_omp_master (parser, pragma_tok, p_name, mask,
! 					   cclauses, if_p, ploc);
  	  cp_parser_end_omp_structured_block (parser, save);
  	  stmt = finish_omp_parallel (cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
  				      block);
*************** cp_parser_omp_target_update (cp_parser *
*** 50335,50341 ****
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_MAP)		\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NOWAIT)	\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_PRIVATE)	\
! 	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_THREAD_LIMIT))
  
  static bool
  cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok,
--- 50658,50665 ----
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_MAP)		\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NOWAIT)	\
  	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_PRIVATE)	\
! 	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_THREAD_LIMIT)	\
! 	| (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_USES_ALLOCATORS))
  
  static bool
  cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok,
*************** cp_parser_omp_declare_target (cp_parser
*** 52741,52746 ****
--- 53065,53075 ----
      }
    else
      {
+       warning_at (cp_lexer_peek_token (parser->lexer)->location,
+ 		  OPT_Wdeprecated_openmp,
+ 		  "use of %<omp declare target%> as a synonym for "
+ 		  "%<omp begin declare target%> has been deprecated since "
+ 		  "OpenMP 5.2");
        cp_omp_declare_target_attr a
  	= { parser->lexer->in_omp_attribute_pragma, -1, false };
        vec_safe_push (scope_chain->omp_declare_target_attribute, a);
*************** cp_parser_omp_metadirective (cp_parser *
*** 53169,53174 ****
--- 53498,53511 ----
        location_t match_loc = cp_lexer_peek_token (parser->lexer)->location;
        const char *p
  	= IDENTIFIER_POINTER (cp_lexer_peek_token (parser->lexer)->u.value);
+       if (strcmp (p, "default") == 0)
+ 	{
+ 	  gcc_rich_location richloc (match_loc);
+ 	  richloc.add_fixit_replace ("otherwise");
+ 	  warning_at (&richloc, OPT_Wdeprecated_openmp,
+ 		      "%<default%> clause on metadirectives deprecated since "
+ 		      "OpenMP 5.2, use %<otherwise%>");
+ 	}
        cp_lexer_consume_token (parser->lexer);
        bool default_p
  	= strcmp (p, "default") == 0 || strcmp (p, "otherwise") == 0;
*************** cp_parser_omp_construct (cp_parser *pars
*** 54957,54963 ****
      case PRAGMA_OMP_MASTER:
        strcpy (p_name, "#pragma omp");
        stmt = cp_parser_omp_master (parser, pragma_tok, p_name, mask, NULL,
! 				   if_p);
        break;
      case PRAGMA_OMP_PARALLEL:
        strcpy (p_name, "#pragma omp");
--- 55294,55300 ----
      case PRAGMA_OMP_MASTER:
        strcpy (p_name, "#pragma omp");
        stmt = cp_parser_omp_master (parser, pragma_tok, p_name, mask, NULL,
! 				   if_p, UNKNOWN_LOCATION);
        break;
      case PRAGMA_OMP_PARALLEL:
        strcpy (p_name, "#pragma omp");
diff -Nrcpad gcc-16-20251207/gcc/cp/pt.cc gcc-16-20251214/gcc/cp/pt.cc
*** gcc-16-20251207/gcc/cp/pt.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cp/pt.cc	Sun Dec 14 22:32:07 2025
*************** tsubst_omp_clauses (tree clauses, enum c
*** 18296,18301 ****
--- 18296,18309 ----
  	      = tsubst_stmt (OMP_CLAUSE_LINEAR_STEP (oc), args,
  			     complain, in_decl);
  	  break;
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
+ 	  OMP_CLAUSE_OPERAND (nc, 0)
+ 	    = tsubst_stmt (OMP_CLAUSE_OPERAND (oc, 0), args, complain, in_decl);
+ 	  OMP_CLAUSE_OPERAND (nc, 1)
+ 	    = tsubst_stmt (OMP_CLAUSE_OPERAND (oc, 1), args, complain, in_decl);
+ 	  OMP_CLAUSE_OPERAND (nc, 2)
+ 	    = tsubst_stmt (OMP_CLAUSE_OPERAND (oc, 2), args, complain, in_decl);
+ 	  break;
  	case OMP_CLAUSE_INIT:
  	  if (ort == C_ORT_OMP_INTEROP
  	      && OMP_CLAUSE_INIT_PREFER_TYPE (nc)
*************** tsubst_expr (tree t, tree args, tsubst_f
*** 22562,22567 ****
--- 22570,22580 ----
  	 in response to the saved STMT_IS_FULL_EXPR_P setting.  */
        gcc_unreachable ();
  
+     case TARGET_EXPR:
+       /* TARGET_EXPR represents temporary objects and should not appear in
+ 	 templated trees.  */
+       gcc_unreachable ();
+ 
      case OFFSET_REF:
        {
  	/* We should only get here for an OFFSET_REF like A::m; a .* in a
*************** resolve_nondeduced_context (tree orig_ex
*** 24816,24823 ****
  	}
        if (good == 1)
  	{
- 	  if (!mark_used (goodfn, complain) && !(complain & tf_error))
- 	    return error_mark_node;
  	  expr = goodfn;
  	  if (baselink)
  	    expr = build_baselink (BASELINK_BINFO (baselink),
--- 24829,24834 ----
diff -Nrcpad gcc-16-20251207/gcc/cp/semantics.cc gcc-16-20251214/gcc/cp/semantics.cc
*** gcc-16-20251207/gcc/cp/semantics.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cp/semantics.cc	Sun Dec 14 22:32:07 2025
*************** finish_omp_clauses (tree clauses, enum c
*** 8888,8893 ****
--- 8888,9049 ----
  	      break;
  	    }
  	  gcc_unreachable ();
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
+ 	  t = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c);
+ 	  t = convert_from_reference (t);
+ 	  if (t == error_mark_node)
+ 	    {
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  if (DECL_P (t)
+ 	      && (bitmap_bit_p (&generic_head, DECL_UID (t))
+ 		  || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
+ 		  || bitmap_bit_p (&map_firstprivate_head, DECL_UID (t))))
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c),
+ 			"%qE appears more than once in data clauses", t);
+ 	      remove = true;
+ 	    }
+ 	  else if (DECL_P (t))
+ 	    bitmap_set_bit (&generic_head, DECL_UID (t));
+ 	  if (type_dependent_expression_p (t))
+ 	    break;
+ 	  if (TREE_CODE (t) == FIELD_DECL)
+ 	    {
+ 	      sorry_at (OMP_CLAUSE_LOCATION (c), "class member %qE not yet "
+ 			"supported in %<uses_allocators%> clause", t);
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  if (TREE_CODE (TREE_TYPE (t)) != ENUMERAL_TYPE
+ 	      || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (TREE_TYPE (t))),
+ 			 "omp_allocator_handle_t") != 0)
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c),
+ 			"allocator %qE must be of %<omp_allocator_handle_t%> "
+ 			"type", t);
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  tree init;
+ 	  if (TREE_CODE (t) == CONST_DECL)
+ 	    init = DECL_INITIAL(t);
+ 	  else
+ 	    init = t;
+ 	  if (!DECL_P (t)
+ 	      && (init == NULL_TREE
+ 		  || TREE_CODE (init) != INTEGER_CST
+ 		  || ((wi::to_widest (init) < 0
+ 		       || wi::to_widest (init) > GOMP_OMP_PREDEF_ALLOC_MAX)
+ 		      && (wi::to_widest (init) < GOMP_OMPX_PREDEF_ALLOC_MIN
+ 			  || (wi::to_widest (init)
+ 			      > GOMP_OMPX_PREDEF_ALLOC_MAX)))))
+ 	    {
+ 	      remove = true;
+ 	      error_at (OMP_CLAUSE_LOCATION (c),
+ 			"allocator %qE must be either a variable or a "
+ 			"predefined allocator", t);
+ 	      break;
+ 	    }
+ 	  else if (TREE_CODE (t) == CONST_DECL)
+ 	    {
+ 	      /* omp_null_allocator is ignored and for predefined allocators,
+ 		 not special handling is required; thus, remove them removed. */
+ 	      remove = true;
+ 
+ 	      if (OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c)
+ 		  || OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c))
+ 		{
+ 		  error_at (OMP_CLAUSE_LOCATION (c),
+ 			    "modifiers cannot be used with predefined "
+ 			    "allocators");
+ 		  break;
+ 		}
+ 	    }
+ 	  t = OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c);
+ 	  if (t == error_mark_node)
+ 	    {
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  if (t != NULL_TREE
+ 	      && !type_dependent_expression_p (t)
+ 	      && ((TREE_CODE (t) != CONST_DECL && TREE_CODE (t) != INTEGER_CST)
+ 		  || TREE_CODE (TREE_TYPE (t)) != ENUMERAL_TYPE
+ 		  || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (TREE_TYPE (t))),
+ 			     "omp_memspace_handle_t") != 0))
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c), "memspace modifier %qE must be"
+ 			" constant enum of %<omp_memspace_handle_t%> type", t);
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  t = OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c);
+ 	  if (t == error_mark_node)
+ 	    {
+ 	      remove = true;
+ 	      break;
+ 	    }
+ 	  if (type_dependent_expression_p (t))
+ 	    break;
+ 	  if (t != NULL_TREE
+ 	      && t != error_mark_node
+ 	      && !type_dependent_expression_p (t)
+ 	      && (!DECL_P (t)
+ 		  ||  DECL_EXTERNAL (t)
+ 		  || TREE_CODE (t) == PARM_DECL))
+ 	    {
+ 	      error_at (OMP_CLAUSE_LOCATION (c), "traits array %qE must be "
+ 			"defined in same scope as the construct on which the "
+ 			"clause appears", t);
+ 	      remove = true;
+ 	    }
+ 	  if (t != NULL_TREE)
+ 	    {
+ 	      bool type_err = false;
+ 
+ 	      if (TREE_CODE (TREE_TYPE (t)) != ARRAY_TYPE
+ 		  || DECL_SIZE (t) == NULL_TREE
+ 		  || !COMPLETE_TYPE_P (TREE_TYPE (t)))
+ 		type_err = true;
+ 	      else
+ 		{
+ 		  tree elem_t = TREE_TYPE (TREE_TYPE (t));
+ 		  if (TREE_CODE (elem_t) != RECORD_TYPE
+ 		      || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (elem_t)),
+ 				 "omp_alloctrait_t") != 0
+ 		      || !TYPE_READONLY (elem_t))
+ 		    type_err = true;
+ 		}
+ 	      if (type_err)
+ 		{
+ 		  error_at (OMP_CLAUSE_LOCATION (c), "traits array %qE must "
+ 			    "be of %<const omp_alloctrait_t []%> type", t);
+ 		  remove = true;
+ 		}
+ 	      else if (TREE_CODE (array_type_nelts_top (TREE_TYPE (t)))
+ 		       != INTEGER_CST)
+ 		{
+ 		  error_at (OMP_CLAUSE_LOCATION (c), "variable length traits "
+ 			    "arrays are not supported");
+ 		  remove = true;
+ 		}
+ 	      else
+ 		{
+ 		  tree cst_val = decl_constant_value (t);
+ 		  if (cst_val == t)
+ 		    {
+ 		      error_at (OMP_CLAUSE_LOCATION (c), "traits array must be "
+ 				"initialized with constants");
+ 		      remove = true;
+ 		    }
+ 		}
+ 	    }
+ 	  if (remove)
+ 	    break;
+ 	  pc = &OMP_CLAUSE_CHAIN (c);
+ 	  continue;
  	case OMP_CLAUSE_DEPEND:
  	  depend_clause = c;
  	  /* FALLTHRU */
diff -Nrcpad gcc-16-20251207/gcc/cp/typeck2.cc gcc-16-20251214/gcc/cp/typeck2.cc
*** gcc-16-20251207/gcc/cp/typeck2.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/cp/typeck2.cc	Sun Dec 14 22:32:07 2025
*************** abstract_virtuals_error (tree decl, tree
*** 228,234 ****
  	     "class type %qT", type);
        break;
      default:
!       error ("cannot allocate an object of abstract type %qT", type);
      }
  
    /* Only go through this once.  */
--- 228,234 ----
  	     "class type %qT", type);
        break;
      default:
!       error ("cannot construct an object of abstract type %qT", type);
      }
  
    /* Only go through this once.  */
*************** abstract_virtuals_error (tree decl, tree
*** 238,250 ****
        tree fn;
  
        inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
! 	      "  because the following virtual functions are pure within %qT:",
  	      type);
  
        FOR_EACH_VEC_ELT (*pure, ix, fn)
  	if (! DECL_CLONED_FUNCTION_P (fn)
  	    || DECL_COMPLETE_DESTRUCTOR_P (fn))
! 	  inform (DECL_SOURCE_LOCATION (fn), "    %#qD", fn);
  
        /* Now truncate the vector.  This leaves it non-null, so we know
  	 there are pure virtuals, but empty so we don't list them out
--- 238,251 ----
        tree fn;
  
        inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
! 	      "because the following virtual functions are pure within %qT:",
  	      type);
  
+       auto_diagnostic_nesting_level adnl;
        FOR_EACH_VEC_ELT (*pure, ix, fn)
  	if (! DECL_CLONED_FUNCTION_P (fn)
  	    || DECL_COMPLETE_DESTRUCTOR_P (fn))
! 	  inform (DECL_SOURCE_LOCATION (fn), "%#qD", fn);
  
        /* Now truncate the vector.  This leaves it non-null, so we know
  	 there are pure virtuals, but empty so we don't list them out
diff -Nrcpad gcc-16-20251207/gcc/digraph.h gcc-16-20251214/gcc/digraph.h
*** gcc-16-20251207/gcc/digraph.h	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/digraph.h	Sun Dec 14 22:32:07 2025
*************** class dnode
*** 48,55 ****
--- 48,83 ----
    virtual ~dnode () {}
    virtual void dump_dot (graphviz_out *gv, const dump_args_t &args) const = 0;
  
+   void add_in_edge (edge_t *e)
+   {
+     m_preds.safe_push (e);
+   }
+   void remove_in_edge (edge_t *e)
+   {
+     m_preds.unordered_remove (find_edge_idx (m_preds, e));
+   }
+   void add_out_edge (edge_t *e)
+   {
+     m_succs.safe_push (e);
+   }
+   void remove_out_edge (edge_t *e)
+   {
+     m_succs.unordered_remove (find_edge_idx (m_succs, e));
+   }
+ 
+ public:
    auto_vec<edge_t *> m_preds;
    auto_vec<edge_t *> m_succs;
+ 
+ private:
+   static unsigned
+   find_edge_idx (auto_vec<edge_t *> &edges, edge_t *e)
+   {
+     for (unsigned i = 0; i < edges.length (); ++i)
+       if (edges[i] == e)
+ 	return i;
+     gcc_unreachable ();
+   }
  };
  
  /* Abstract base class for an edge in a directed graph.  */
*************** class dedge
*** 59,64 ****
--- 87,93 ----
  {
   public:
    typedef typename GraphTraits::node_t node_t;
+   typedef typename GraphTraits::edge_t edge_t;
    typedef typename GraphTraits::dump_args_t dump_args_t;
  
    dedge (node_t *src, node_t *dest)
*************** class dedge
*** 68,75 ****
  
    virtual void dump_dot (graphviz_out *gv, const dump_args_t &args) const = 0;
  
!   node_t *const m_src;
!   node_t *const m_dest;
  };
  
  /* Abstract base class for a directed graph.
--- 97,115 ----
  
    virtual void dump_dot (graphviz_out *gv, const dump_args_t &args) const = 0;
  
!   void set_dest (node_t *new_dest)
!   {
!     node_t *old_dest = m_dest;
!     if (new_dest != old_dest)
!       {
! 	old_dest->remove_in_edge (static_cast<edge_t *> (this));
! 	m_dest = new_dest;
! 	new_dest->add_in_edge (static_cast<edge_t *> (this));
!       }
!   }
! 
!   node_t *m_src;
!   node_t *m_dest;
  };
  
  /* Abstract base class for a directed graph.
*************** class digraph
*** 101,106 ****
--- 141,152 ----
    void add_node (node_t *node);
    void add_edge (edge_t *edge);
  
+   virtual void
+   add_any_extra_stmts (graphviz_out &) const
+   {
+     // no-op hook
+   }
+ 
    auto_delete_vec<node_t> m_nodes;
    auto_delete_vec<edge_t> m_edges;
  };
*************** digraph<GraphTraits>::dump_dot_to_pp (pr
*** 182,187 ****
--- 228,235 ----
    FOR_EACH_VEC_ELT (m_edges, i, e)
      e->dump_dot (&gv, args);
  
+   add_any_extra_stmts (gv);
+ 
    /* Terminate "digraph" */
    gv.outdent ();
    pp_string (pp, "}");
diff -Nrcpad gcc-16-20251207/gcc/doc/analyzer.texi gcc-16-20251214/gcc/doc/analyzer.texi
*** gcc-16-20251207/gcc/doc/analyzer.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/doc/analyzer.texi	Sun Dec 14 22:32:07 2025
*************** If the analyzer ICEs before this is writ
*** 38,54 ****
  to bail out after analyzing the first basic block.
  @end quotation
  
! First, we build a @code{supergraph} which combines the callgraph and all
! of the CFGs into a single directed graph, with both interprocedural and
! intraprocedural edges.  The nodes and edges in the supergraph are called
! ``supernodes'' and ``superedges'', and often referred to in code as
! @code{snodes} and @code{sedges}.  Basic blocks in the CFGs are split at
! interprocedural calls, so there can be more than one supernode per
! basic block.  Most statements will be in just one supernode, but a call
! statement can appear in two supernodes: at the end of one for the call,
! and again at the start of another for the return.
  
! The supergraph can be seen using @option{-fdump-analyzer-supergraph}.
  
  We then build an @code{analysis_plan} which walks the callgraph to
  determine which calls might be suitable for being summarized (rather
--- 38,112 ----
  to bail out after analyzing the first basic block.
  @end quotation
  
! First, we build a directed graph to represent the user's code.
! For historical reasons we call this the @code{supergraph}, although
! this is now a misnomer as we no longer add callgraph edges to this graph.
! The nodes and edges in the supergraph are called ``supernodes'' and
! ``superedges'', and often referred to in code as @code{snodes} and
! @code{sedges}.
  
! We make a node in the supergraph before every gimple statement, with
! edges representing the transitions between statements within a basic block,
! along with additional nodes and edges at CFG edges.
! 
! The nodes in the supergraph represent locations in the user's code,
! and discrete points between operations.  The edges represent transitions
! between these locations.  Each edge in the supergraph can have an optional
! @code{operation} associated with it, representing a single state transition
! that occurs along the edge, such as
! 
! @itemize @bullet
! 
! @item
! individual non-control-flow gimple statements (such as an assignment)
! 
! @item
! control flow statements on a CFG edge that impose a condition for the
! transition to be possible (e.g. a branch of a conditional or a
! @code{switch} case)
! 
! @item
! the collection of phi nodes at the entry to a basic block, with an
! associated CFG edge (so that these all take effect simultaneously)
! 
! @item
! etc
! @end itemize
! 
! There can be multiple nodes and edges in the supergraph corresponding to
! a single CFG edge so that e.g. we can handle filtering states on a condition
! separately from handling the effect of the phi nodes if the condition
! was satisfied.
! 
! The analyzer in GCC 10 - GCC 15 attempted to have a single supernode per
! basic block for the sake of efficiency, but given that state transitions
! can happen mid-block, this became unmaintainable, hence we now have
! fine-grained nodes with one node/edge per gimple statement.
! 
! Having built the supergraph from the CFGs of all of the functions in
! the user's code, we manipulate it:
! 
! @itemize @bullet
! @item
! We fixup locations to try to ensure that every supernode has a reasonable
! @code{location_t} value referring to the location in the user's source.
! This is necessary, since in the gimple IR seen by the analyzer, many gimple
! statements have no location associated with them.
! 
! @item
! We simplify the supergraph to remove redundant nodes and edges, such as
! those that are simply no-ops that add no useful location information.
! This can eliminate about 5-10% of the nodes.
! 
! @item
! We sort and renumber the nodes into an order that we hope will lead to
! efficient state merging when exploring the graph (see below).
! @end itemize
! 
! The supergraph can be seen at each stage using
! @option{-fdump-analyzer-supergraph}, which creates a series of
! @file{SRC.supergraph.N.KIND.dot} GraphViz files files showing the state
! of the supergraph after each of the above.
  
  We then build an @code{analysis_plan} which walks the callgraph to
  determine which calls might be suitable for being summarized (rather
*************** Nodes in the exploded graph correspond t
*** 62,72 ****
  we're not using the algorithm described in that paper, just the
  ``exploded graph'' terminology.
  
! We reuse nodes for <point, state> pairs we've already seen, and avoid
  tracking state too closely, so that (hopefully) we rapidly converge
  on a final exploded graph, and terminate the analysis.  We also bail
! out if the number of exploded <end-of-basic-block, state> nodes gets
! larger than a particular multiple of the total number of basic blocks
  (to ensure termination in the face of pathological state-explosion
  cases, or bugs).  We also stop exploring a point once we hit a limit
  of states for that point.
--- 120,130 ----
  we're not using the algorithm described in that paper, just the
  ``exploded graph'' terminology.
  
! We reuse nodes for <point,@w{ }state> pairs we've already seen, and avoid
  tracking state too closely, so that (hopefully) we rapidly converge
  on a final exploded graph, and terminate the analysis.  We also bail
! out if the number of exploded <point,@w{ }state> nodes gets
! larger than a particular multiple of the total number of supernodes,
  (to ensure termination in the face of pathological state-explosion
  cases, or bugs).  We also stop exploring a point once we hit a limit
  of states for that point.
*************** instance.  For example, if we're finding
*** 82,99 ****
  then we can detect a double-free of "ptr".  We can then emit a path
  to reach the problem by finding the simplest route through the graph.
  
! Program points in the analysis are much more fine-grained than in the
! CFG and supergraph, with points (and thus potentially exploded nodes)
! for various events, including before individual statements.
! By default the exploded graph merges multiple consecutive statements
! in a supernode into one exploded edge to minimize the size of the
! exploded graph.  This can be suppressed via
! @option{-fanalyzer-fine-grained}.
! The fine-grained approach seems to make things simpler and more debuggable
! that other approaches I tried, in that each point is responsible for one
! thing.
! 
! Program points in the analysis also have a "call string" identifying the
  stack of callsites below them, so that paths in the exploded graph
  correspond to interprocedurally valid paths: we always return to the
  correct call site, propagating state information accordingly.
--- 140,147 ----
  then we can detect a double-free of "ptr".  We can then emit a path
  to reach the problem by finding the simplest route through the graph.
  
! Program points in the analysis are a combination of a supernode
! together with a "call string" identifying the
  stack of callsites below them, so that paths in the exploded graph
  correspond to interprocedurally valid paths: we always return to the
  correct call site, propagating state information accordingly.
*************** are referred to throughout dumps in the
*** 113,119 ****
  exploded nodes in the form @samp{EN: @var{index}} (e.g. @samp{SN: 2} and
  @samp{EN:29}).
  
! The supergraph can be seen using @option{-fdump-analyzer-supergraph-graph}.
  
  The exploded graph can be seen using @option{-fdump-analyzer-exploded-graph}
  and other dump options.  Exploded nodes are color-coded in the .dot output
--- 161,167 ----
  exploded nodes in the form @samp{EN: @var{index}} (e.g. @samp{SN: 2} and
  @samp{EN:29}).
  
! The supergraph can be seen using @option{-fdump-analyzer-supergraph}.
  
  The exploded graph can be seen using @option{-fdump-analyzer-exploded-graph}
  and other dump options.  Exploded nodes are color-coded in the .dot output
*************** together:
*** 571,577 ****
    OTHER_GCC_ARGS \
    -wrapper gdb,--args \
    -fdump-analyzer-stderr \
-   -fanalyzer-fine-grained \
    -fdump-ipa-analyzer=stderr
  @end smallexample
  
--- 619,624 ----
*************** so that the logging interface is enabled
*** 598,609 ****
  gives valuable context into what's happening when stepping through the
  analyzer
  
- @item @code{-fanalyzer-fine-grained}
- which splits the effect of every statement into its own
- exploded_node, rather than the default (which tries to combine
- successive stmts to reduce the size of the exploded_graph).  This makes
- it easier to see exactly where a particular change happens.
- 
  @item @code{-fdump-ipa-analyzer=stderr}
  which dumps the GIMPLE IR seen by the analyzer pass to stderr
  
--- 645,650 ----
*************** which dumps the GIMPLE IR seen by the an
*** 612,621 ****
  Other useful options:
  
  @itemize @bullet
! @item @code{-fdump-analyzer-exploded-graph}
! which dumps a @file{SRC.eg.dot} GraphViz file that I can look at (with
  python-xdot)
  
  @item @code{-fdump-analyzer-exploded-nodes-2}
  which dumps a @file{SRC.eg.txt} file containing the full @code{exploded_graph}.
  
--- 653,665 ----
  Other useful options:
  
  @itemize @bullet
! @item @code{-fdump-analyzer-supergraph}
! which dumps @file{SRC.supergraph.N.KIND.dot} GraphViz files that I can look at (with
  python-xdot)
  
+ @item @code{-fdump-analyzer-exploded-graph}
+ which dumps a @file{SRC.eg.dot} GraphViz file
+ 
  @item @code{-fdump-analyzer-exploded-nodes-2}
  which dumps a @file{SRC.eg.txt} file containing the full @code{exploded_graph}.
  
*************** optimizer touching it).
*** 826,832 ****
  @subsection Other Debugging Techniques
  
  To compare two different exploded graphs, try
! @code{-fdump-analyzer-exploded-nodes-2 -fdump-noaddr -fanalyzer-fine-grained}.
  This will dump a @file{SRC.eg.txt} file containing the full
  @code{exploded_graph}. I use @code{diff -u50 -p} to compare two different
  such files (e.g. before and after a patch) to find the first place where the
--- 870,876 ----
  @subsection Other Debugging Techniques
  
  To compare two different exploded graphs, try
! @code{-fdump-analyzer-exploded-nodes-2 -fdump-noaddr}.
  This will dump a @file{SRC.eg.txt} file containing the full
  @code{exploded_graph}. I use @code{diff -u50 -p} to compare two different
  such files (e.g. before and after a patch) to find the first place where the
diff -Nrcpad gcc-16-20251207/gcc/doc/extend.texi gcc-16-20251214/gcc/doc/extend.texi
*** gcc-16-20251207/gcc/doc/extend.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/doc/extend.texi	Sun Dec 14 22:32:07 2025
*************** interrupt handler when this attribute is
*** 4824,4829 ****
--- 4824,4841 ----
  Use this attribute on the H8/300, H8/300H, and H8S to indicate that
  all registers except the stack pointer should be saved in the prologue
  regardless of whether they are used or not.
+ 
+ @cindex @code{monitor} function attribute, H8/300
+ @item monitor
+ Use this attribute to indicate a monitor function.  It tells GCC
+ to generate entry and exit sequences that disable interrupts during
+ execution of the function.
+ 
+ @cindex @code{OS_Task} function attribute, H8/300
+ @item OS_Task
+ Use this attribute to disable the normal register and stack save and
+ restore sequences on function entry and exit.  The function epilogue
+ generated by GCC includes only a return instruction.
  @end table
  
  @node IA-64 Function Attributes
*************** Specifies the core for which to tune the
*** 6007,6012 ****
--- 6019,6034 ----
  whose architectural features to use.  The behavior and valid arguments are the
  same as for the @option{-mcpu=} command-line option.
  
+ @cindex @code{max-vectorization} function attribute, RISC-V
+ @item max-vectorization
+ @itemx no-max-vectorization
+ @code{max-vectorization} tells GCC's vectorizer to treat all vector
+ loops as being more profitable than the original scalar loops when
+ optimizing the current function.  @code{no-max-vectorization} disables
+ this behavior.
+ This corresponds to the behavior of the command-line options
+ @option{-mmax-vectorization} and @option{-mno-max-vectorization}.
+ 
  @end table
  
  The above target attributes can be specified as follows:
*************** for more information about the @code{tar
*** 10722,10728 ****
  syntax.
  
  The @code{#pragma GCC target} pragma is presently implemented for
! x86, ARM, AArch64, PowerPC, and S/390 targets only.
  
  @cindex pragma GCC optimize
  @item #pragma GCC optimize (@var{string}, @dots{})
--- 10744,10750 ----
  syntax.
  
  The @code{#pragma GCC target} pragma is presently implemented for
! x86, ARM, AArch64, PowerPC, RISC-V, and S/390 targets only.
  
  @cindex pragma GCC optimize
  @item #pragma GCC optimize (@var{string}, @dots{})
*************** architectures, including Unix and Micros
*** 11103,11111 ****
  It consists of a set of compiler directives, library routines,
  and environment variables that influence run-time behavior.
  
! GCC implements all of the @uref{https://www.openmp.org/specifications/,
! OpenMP Application Program Interface v4.5}, and many features from later
! versions of the OpenMP specification.
  @xref{OpenMP Implementation Status,,,libgomp,
  GNU Offloading and Multi Processing Runtime Library},
  for more details about currently supported OpenMP features.
--- 11125,11133 ----
  It consists of a set of compiler directives, library routines,
  and environment variables that influence run-time behavior.
  
! GCC implements most of the @uref{https://www.openmp.org/specifications/,
! OpenMP Application Program Interface v5.2}, with some omissions and
! additional features from later versions.
  @xref{OpenMP Implementation Status,,,libgomp,
  GNU Offloading and Multi Processing Runtime Library},
  for more details about currently supported OpenMP features.
diff -Nrcpad gcc-16-20251207/gcc/doc/invoke.texi gcc-16-20251214/gcc/doc/invoke.texi
*** gcc-16-20251207/gcc/doc/invoke.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/doc/invoke.texi	Sun Dec 14 22:32:07 2025
*************** Objective-C and Objective-C++ Dialects}.
*** 392,397 ****
--- 392,398 ----
  -Wdangling-else  -Wdangling-pointer  -Wdangling-pointer=@var{n}
  -Wdate-time
  -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init
+ -Wno-deprecated-openmp
  -Wdisabled-optimization
  -Wno-discarded-array-qualifiers  -Wno-discarded-qualifiers
  -Wno-div-by-zero  -Wdouble-promotion
*************** Objective-C and Objective-C++ Dialects}.
*** 484,490 ****
  -fanalyzer-call-summaries
  -fanalyzer-checker=@var{name}
  -fno-analyzer-feasibility
- -fanalyzer-fine-grained
  -fanalyzer-show-events-in-system-headers
  -fno-analyzer-state-merge
  -fno-analyzer-state-purge
--- 485,490 ----
*************** Objective-C and Objective-C++ Dialects}.
*** 926,945 ****
  @gccoptlist{-mbarrel-shifter  -mjli-always
  -mcpu=@var{cpu}  -mA6  -mARC600  -mA7  -mARC700
  -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
! -mea  -mno-mpy  -mmul32x16  -mmul64  -matomic
  -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
! -mcrc  -mdsp-packa  -mdvbf  -mlock  -mmac-d16  -mmac-24  -mrtsc  -mswape
! -mtelephony  -mxy  -misize  -mannotate-align  -marclinux  -marclinux_prof
  -mlong-calls  -mmedium-calls  -msdata  -mirq-ctrl-saved
  -mrgf-banked-regs  -mlpc-width=@var{width}  -G @var{num}
  -mvolatile-cache  -mtp-regno=@var{regno}
! -malign-call  -mauto-modify-reg  -mbbit-peephole  -mno-brcc
! -mcase-vector-pcrel  -mcompact-casesi  -mno-cond-exec  -mearly-cbranchsi
! -mexpand-adddi  -mindexed-loads  -mlra  -mlra-priority-none
  -mlra-priority-compact -mlra-priority-noncompact  -mmillicode
! -mmixed-code  -mq-class  -mRcq  -mRcw  -msize-level=@var{level}
  -mtune=@var{cpu}  -mmultcost=@var{num}  -mcode-density-frame
! -munalign-prob-threshold=@var{probability}  -mmpy-option=@var{multo}
  -mdiv-rem  -mcode-density  -mll64  -mfpu=@var{fpu}  -mrf16  -mbranch-index}
  
  @emph{ARM Options} (@ref{ARM Options})
--- 926,945 ----
  @gccoptlist{-mbarrel-shifter  -mjli-always
  -mcpu=@var{cpu}  -mA6  -mARC600  -mA7  -mARC700
  -mdpfp  -mdpfp-compact  -mdpfp-fast  -mno-dpfp-lrsr
! -mea  -mmul32x16  -mmul64  -matomic
  -mnorm  -mspfp  -mspfp-compact  -mspfp-fast  -msimd  -msoft-float  -mswap
! -mlock  -mswape
! -mxy  -misize  -marclinux  -marclinux_prof
  -mlong-calls  -mmedium-calls  -msdata  -mirq-ctrl-saved
  -mrgf-banked-regs  -mlpc-width=@var{width}  -G @var{num}
  -mvolatile-cache  -mtp-regno=@var{regno}
! -mauto-modify-reg  -mno-brcc
! -mcase-vector-pcrel  -mno-cond-exec  -mearly-cbranchsi
! -mindexed-loads  -mlra-priority-none
  -mlra-priority-compact -mlra-priority-noncompact  -mmillicode
! -msize-level=@var{level}
  -mtune=@var{cpu}  -mmultcost=@var{num}  -mcode-density-frame
! -mmpy-option=@var{multo}
  -mdiv-rem  -mcode-density  -mll64  -mfpu=@var{fpu}  -mrf16  -mbranch-index}
  
  @emph{ARM Options} (@ref{ARM Options})
*************** Objective-C and Objective-C++ Dialects}.
*** 1108,1135 ****
  -tno-android-cc  -tno-android-ld}
  
  @emph{H8/300 Options} (@ref{H8/300 Options})
! @gccoptlist{-mrelax  -mh  -ms  -mn  -mexr  -mno-exr  -mint32  -malign-300}
  
  @emph{HPPA Options} (@ref{HPPA Options})
  @gccoptlist{-march=@var{architecture-type}
! -matomic-libcalls  -mbig-switch
  -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
  -mordered  -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
  -mfixed-range=@var{register-range}
! -mcoherent-ldcw -mjump-in-delay  -mlinker-opt  -mlong-calls
! -mlong-load-store  -mno-atomic-libcalls  -mno-disable-fpregs
! -mno-disable-indexing  -mno-fast-indirect-calls  -mno-gas
! -mno-jump-in-delay  -mno-long-load-store
! -mno-portable-runtime  -mno-soft-float
  -mno-space-regs  -msoft-float  -mpa-risc-1-0
  -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
! -mschedule=@var{cpu-type}  -mspace-regs  -msoft-mult  -msio  -mwsio
  -munix=@var{unix-std}  -nolibdld  -static  -threads}
  
  @emph{IA-64 Options} (@ref{IA-64 Options})
  @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
! -mvolatile-asm-stop  -mregister-names  -msdata  -mno-sdata
! -mconstant-gp  -mauto-pic  -mfused-madd
  -minline-float-divide-min-latency
  -minline-float-divide-max-throughput
  -mno-inline-float-divide
--- 1108,1133 ----
  -tno-android-cc  -tno-android-ld}
  
  @emph{H8/300 Options} (@ref{H8/300 Options})
! @gccoptlist{-mrelax  -mh  -ms  -mn  -msx  -ms2600
! -mquickcall  -mslowbyte  -mexr  -mint32  -malign-300}
  
  @emph{HPPA Options} (@ref{HPPA Options})
  @gccoptlist{-march=@var{architecture-type}
! -mno-atomic-libcalls
  -mcaller-copies  -mdisable-fpregs  -mdisable-indexing
  -mordered  -mfast-indirect-calls  -mgas  -mgnu-ld   -mhp-ld
  -mfixed-range=@var{register-range}
! -mcoherent-ldcw  -mlinker-opt  -mlong-calls
! -mlong-load-store
  -mno-space-regs  -msoft-float  -mpa-risc-1-0
  -mpa-risc-1-1  -mpa-risc-2-0  -mportable-runtime
! -mschedule=@var{cpu-type}  -msoft-mult  -msio  -mwsio
  -munix=@var{unix-std}  -nolibdld  -static  -threads}
  
  @emph{IA-64 Options} (@ref{IA-64 Options})
  @gccoptlist{-mbig-endian  -mlittle-endian  -mgnu-as  -mgnu-ld  -mno-pic
! -mvolatile-asm-stop  -mregister-names  -msdata
! -mconstant-gp  -mauto-pic
  -minline-float-divide-min-latency
  -minline-float-divide-max-throughput
  -mno-inline-float-divide
*************** Objective-C and Objective-C++ Dialects}.
*** 1144,1150 ****
  -msched-br-data-spec  -msched-ar-data-spec  -msched-control-spec
  -msched-br-in-data-spec  -msched-ar-in-data-spec  -msched-in-control-spec
  -msched-spec-ldc  -msched-spec-control-ldc
- -msched-prefer-non-data-spec-insns  -msched-prefer-non-control-spec-insns
  -msched-stop-bits-after-every-cycle  -msched-count-spec-in-critical-path
  -msel-sched-dont-check-control-spec  -msched-fp-mem-deps-zero-cost
  -msched-max-memory-insns-hard-limit  -msched-max-memory-insns=@var{max-insns}}
--- 1142,1147 ----
*************** Objective-C and Objective-C++ Dialects}.
*** 1154,1175 ****
  -msign-extend-enabled  -muser-enabled}
  
  @emph{LoongArch Options} (@ref{LoongArch Options})
! @gccoptlist{-march=@var{arch-type}  -mtune=@var{tune-type} -mabi=@var{base-abi-type}
! -mfpu=@var{fpu-type} -msimd=@var{simd-type}
! -msoft-float -msingle-float -mdouble-float -mlsx -mno-lsx -mlasx -mno-lasx
! -mbranch-cost=@var{n} -maddr-reg-reg-cost=@var{n}  -mcheck-zero-division
! -mno-check-zero-division -mbreak-code=@var{code}
! -mcond-move-int  -mno-cond-move-int
! -mcond-move-float  -mno-cond-move-float
! -memcpy  -mno-memcpy -mstrict-align -mno-strict-align -G @var{num}
  -mmax-inline-memcpy-size=@var{n}
! -mexplicit-relocs=@var{style} -mexplicit-relocs -mno-explicit-relocs
! -mdirect-extern-access -mno-direct-extern-access
! -mcmodel=@var{code-model} -mrelax -mpass-mrelax-to-as
! -mrecip  -mrecip=@var{opt} -mfrecipe -mno-frecipe -mdiv32 -mno-div32
! -mlam-bh -mno-lam-bh -mlamcas -mno-lamcas -mld-seq-sa -mno-ld-seq-sa
! -mscq -mno-scq -mtls-dialect=@var{opt}
! -mannotate-tablejump -mno-annotate-tablejump}
  
  @emph{M32C Options} (@ref{M32C Options})
  @gccoptlist{-mcpu=@var{cpu}  -msim  -memregs=@var{number}}
--- 1151,1171 ----
  -msign-extend-enabled  -muser-enabled}
  
  @emph{LoongArch Options} (@ref{LoongArch Options})
! @gccoptlist{-march=@var{arch-type}  -mtune=@var{tune-type}  -mabi=@var{base-abi-type}
! -mfpu=@var{fpu-type}  -msimd=@var{simd-type}
! -msoft-float  -msingle-float  -mdouble-float  -mlsx  -mlasx
! -mbranch-cost=@var{n}  -maddr-reg-reg-cost=@var{n}  -mcheck-zero-division
! -mbreak-code=@var{code}
! -mcond-move-int  -mcond-move-float
! -memcpy  -mstrict-align  -G @var{num}
  -mmax-inline-memcpy-size=@var{n}
! -mexplicit-relocs=@var{style}  -mexplicit-relocs  -mno-explicit-relocs
! -mdirect-extern-access
! -mcmodel=@var{code-model}  -mrelax  -mpass-mrelax-to-as
! -mrecip  -mrecip=@var{opt}  -mfrecipe  -mdiv32
! -mlam-bh  -mlamcas  -mld-seq-sa
! -mscq  -mtls-dialect=@var{opt}
! -mannotate-tablejump}
  
  @emph{M32C Options} (@ref{M32C Options})
  @gccoptlist{-mcpu=@var{cpu}  -msim  -memregs=@var{number}}
*************** Objective-C and Objective-C++ Dialects}.
*** 1177,1183 ****
  @emph{M32R/D Options} (@ref{M32R/D Options})
  @gccoptlist{-m32r2  -m32rx  -m32r
  -mdebug
! -malign-loops  -mno-align-loops
  -missue-rate=@var{number}
  -mbranch-cost=@var{number}
  -mmodel=@var{code-size-model-type}
--- 1173,1179 ----
  @emph{M32R/D Options} (@ref{M32R/D Options})
  @gccoptlist{-m32r2  -m32rx  -m32r
  -mdebug
! -malign-loops
  -missue-rate=@var{number}
  -mbranch-cost=@var{number}
  -mmodel=@var{code-size-model-type}
*************** Objective-C and Objective-C++ Dialects}.
*** 1190,1309 ****
  @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
  -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
  -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
! -mcfv4e  -mbitfield  -mno-bitfield  -mc68000  -mc68020
! -mnobitfield  -mrtd  -mno-rtd  -mdiv  -mno-div  -mshort
! -mno-short  -mhard-float  -m68881  -msoft-float  -mpcrel
! -malign-int  -mstrict-align  -msep-data  -mno-sep-data
! -mshared-library-id=n  -mid-shared-library  -mno-id-shared-library
! -mxgot  -mno-xgot  -mlong-jump-table-offsets}
  
  @emph{MCore Options} (@ref{MCore Options})
! @gccoptlist{-mhardlit  -mno-hardlit  -mdiv  -mno-div  -mrelax-immediates
! -mno-relax-immediates  -mwide-bitfields  -mno-wide-bitfields
! -m4byte-functions  -mno-4byte-functions  -mcallgraph-data
! -mno-callgraph-data  -mslow-bytes  -mno-slow-bytes  -mno-lsim
  -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
  
  @emph{MicroBlaze Options} (@ref{MicroBlaze Options})
  @gccoptlist{-msoft-float  -mhard-float  -msmall-divides  -mcpu=@var{cpu}
  -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
! -mxl-pattern-compare  -mxl-stack-check  -mxl-gp-opt  -mno-clearbss
  -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
  -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-@var{app-model}
! -mpic-data-is-text-relative}
  
  @emph{MIPS Options} (@ref{MIPS Options})
! @gccoptlist{-EL  -EB  -march=@var{arch}  -mtune=@var{arch}
  -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
  -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
! -mips16  -mno-mips16  -mflip-mips16
! -minterlink-compressed  -mno-interlink-compressed
! -minterlink-mips16  -mno-interlink-mips16
! -mabi=@var{abi}  -mabicalls  -mno-abicalls
! -mshared  -mno-shared  -mplt  -mno-plt  -mxgot  -mno-xgot
  -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
! -mno-float  -msingle-float  -mdouble-float
! -modd-spreg  -mno-odd-spreg
  -mabs=@var{mode}  -mnan=@var{encoding}
! -mdsp  -mno-dsp  -mdspr2  -mno-dspr2
! -mmcu  -mmno-mcu
! -meva  -mno-eva
! -mvirt  -mno-virt
! -mxpa  -mno-xpa
! -mcrc  -mno-crc
! -mginv  -mno-ginv
! -mmicromips  -mno-micromips
! -mmsa  -mno-msa
! -mloongson-mmi  -mno-loongson-mmi
! -mloongson-ext  -mno-loongson-ext
! -mloongson-ext2  -mno-loongson-ext2
  -mfpu=@var{fpu-type}
! -msmartmips  -mno-smartmips
! -mpaired-single  -mno-paired-single  -mdmx  -mno-mdmx
! -mips3d  -mno-mips3d  -mmt  -mno-mt  -mllsc  -mno-llsc
! -mlong64  -mlong32  -msym32  -mno-sym32
! -G@var{num}  -mlocal-sdata  -mno-local-sdata
! -mextern-sdata  -mno-extern-sdata  -mgpopt  -mno-gopt
! -membedded-data  -mno-embedded-data
! -muninit-const-in-rodata  -mno-uninit-const-in-rodata
  -mcode-readable=@var{setting}
! -msplit-addresses  -mno-split-addresses
! -mexplicit-relocs  -mno-explicit-relocs
! -mexplicit-relocs=@var{release}
! -mcheck-zero-division  -mno-check-zero-division
! -mdivide-traps  -mdivide-breaks
! -mload-store-pairs  -mno-load-store-pairs
! -mstrict-align  -mno-strict-align
! -mno-unaligned-access  -munaligned-access
! -mmemcpy  -mno-memcpy  -mlong-calls  -mno-long-calls
! -mmad  -mno-mad  -mimadd  -mno-imadd  -mfused-madd  -mno-fused-madd  -nocpp
! -mfix-24k  -mno-fix-24k
! -mfix-r4000  -mno-fix-r4000  -mfix-r4400  -mno-fix-r4400
! -mfix-r5900  -mno-fix-r5900
! -mfix-r10000  -mno-fix-r10000  -mfix-rm7000  -mno-fix-rm7000
! -mfix-vr4120  -mno-fix-vr4120
! -mfix-vr4130  -mno-fix-vr4130  -mfix-sb1  -mno-fix-sb1
  -mflush-func=@var{func}  -mno-flush-func
! -mbranch-cost=@var{num}  -mbranch-likely  -mno-branch-likely
  -mcompact-branches=@var{policy}
! -mfp-exceptions  -mno-fp-exceptions
! -mvr4130-align  -mno-vr4130-align  -msynci  -mno-synci
! -mlxc1-sxc1  -mno-lxc1-sxc1  -mmadd4  -mno-madd4
! -mrelax-pic-calls  -mno-relax-pic-calls  -mmcount-ra-address
! -mframe-header-opt  -mno-frame-header-opt}
  
  @emph{MMIX Options} (@ref{MMIX Options})
! @gccoptlist{-mlibfuncs  -mno-libfuncs  -mepsilon  -mno-epsilon  -mabi=gnu
! -mabi=mmixware  -mzero-extend  -mknuthdiv  -mtoplevel-symbols
! -melf  -mbranch-predict  -mno-branch-predict  -mbase-addresses
! -mno-base-addresses  -msingle-exit  -mno-single-exit}
  
  @emph{MN10300 Options} (@ref{MN10300 Options})
  @gccoptlist{-mmult-bug  -mno-mult-bug
! -mno-am33  -mam33  -mam33-2  -mam34
  -mtune=@var{cpu-type}
! -mreturn-pointer-on-d0
! -mno-crt0  -mrelax  -mliw  -msetlb}
  
  @emph{Moxie Options} (@ref{Moxie Options})
  @gccoptlist{-meb  -mel  -mmul.x  -mno-crt0}
  
  @emph{MSP430 Options} (@ref{MSP430 Options})
! @gccoptlist{-msim  -masm-hex  -mmcu=  -mcpu=  -mlarge  -msmall  -mrelax
! -mwarn-mcu
! -mcode-region=  -mdata-region=
! -msilicon-errata=  -msilicon-errata-warn=
! -mhwmult=  -minrt  -mtiny-printf  -mmax-inline-shift=}
  
  @emph{NDS32 Options} (@ref{NDS32 Options})
  @gccoptlist{-mbig-endian  -mlittle-endian
  -mreduced-regs  -mfull-regs
! -mcmov  -mno-cmov
! -mext-perf  -mno-ext-perf
! -mext-perf2  -mno-ext-perf2
! -mext-string  -mno-ext-string
! -mv3push  -mno-v3push
! -m16bit  -mno-16bit
  -misr-vector-size=@var{num}
  -mcache-block-size=@var{num}
  -march=@var{arch}
--- 1186,1278 ----
  @gccoptlist{-march=@var{arch}  -mcpu=@var{cpu}  -mtune=@var{tune}
  -m68000  -m68020  -m68020-40  -m68020-60  -m68030  -m68040
  -m68060  -mcpu32  -m5200  -m5206e  -m528x  -m5307  -m5407
! -mcfv4e  -mbitfield  -mc68000  -mc68020
! -mrtd  -mdiv  -mshort
! -mhard-float  -m68881  -msoft-float  -mpcrel
! -malign-int  -mstrict-align  -msep-data
! -mshared-library-id=@var{n}  -mid-shared-library
! -mxgot  -mlong-jump-table-offsets}
  
  @emph{MCore Options} (@ref{MCore Options})
! @gccoptlist{-mhardlit  -mdiv  -mrelax-immediates
! -mwide-bitfields
! -m4byte-functions  -mcallgraph-data
! -mslow-bytes  -mno-lsim
  -mlittle-endian  -mbig-endian  -m210  -m340  -mstack-increment}
  
  @emph{MicroBlaze Options} (@ref{MicroBlaze Options})
  @gccoptlist{-msoft-float  -mhard-float  -msmall-divides  -mcpu=@var{cpu}
  -mmemcpy  -mxl-soft-mul  -mxl-soft-div  -mxl-barrel-shift
! -mxl-pattern-compare  -mxl-gp-opt
  -mxl-multiply-high  -mxl-float-convert  -mxl-float-sqrt
  -mbig-endian  -mlittle-endian  -mxl-reorder  -mxl-mode-@var{app-model}
! -mxl-prefetch  -mpic-data-is-text-relative}
  
  @emph{MIPS Options} (@ref{MIPS Options})
! @gccoptlist{-EL  -EB  -mel  -meb  -march=@var{arch}  -mtune=@var{arch}
  -mips1  -mips2  -mips3  -mips4  -mips32  -mips32r2  -mips32r3  -mips32r5
  -mips32r6  -mips64  -mips64r2  -mips64r3  -mips64r5  -mips64r6
! -mips16  -mmips16e2  -mflip-mips16
! -minterlink-compressed  -minterlink-mips16
! -mabi=@var{abi}  -mabicalls  -mshared  -mplt  -mxgot
  -mgp32  -mgp64  -mfp32  -mfpxx  -mfp64  -mhard-float  -msoft-float
! -mno-float  -msingle-float  -mdouble-float  -modd-spreg
  -mabs=@var{mode}  -mnan=@var{encoding}
! -mdsp  -mdspr2  -mmcu  -meva  -mvirt  -mxpa  -mcrc  -mginv
! -mmicromips  -mmsa
! -mloongson-mmi  -mloongson-ext  -mloongson-ext2
  -mfpu=@var{fpu-type}
! -msmartmips  -mpaired-single  -mdmx  -mips3d  -mmt  -mllsc
! -mlong64  -mlong32  -msym32
! -G@var{num}  -mno-local-sdata  -mno-extern-sdata  -mno-gopt
! -membedded-data  -muninit-const-in-rodata
  -mcode-readable=@var{setting}
! -msplit-addresses  -mexplicit-relocs  -mexplicit-relocs=@var{release}
! -mno-check-zero-division  -mdivide-traps  -mdivide-breaks
! -mno-load-store-pairs
! -mstrict-align  -mno-unaligned-access
! -mmemcpy  -mlong-calls
! -mmad  -mimadd  -mno-fused-madd  -nocpp
! -mfix-24k  -mfix-r4000  -mfix-r4400  -mfix-r5900
! -mfix-r10000  -mfix-rm7000  -mfix-vr4120  -mfix-vr4130  -mfix-sb1
! -mfix4300  -mr10k-cache-barrier=@var{setting}
  -mflush-func=@var{func}  -mno-flush-func
! -mbranch-cost=@var{num}  -mbranch-likely
  -mcompact-branches=@var{policy}
! -mno-fp-exceptions  -mvr4130-align  -msynci  -mno-lxc1-sxc1  -mno-madd4
! -mno-relax-pic-calls  -mmcount-ra-address
! -mframe-header-opt}
  
  @emph{MMIX Options} (@ref{MMIX Options})
! @gccoptlist{-mlibfuncs  -mepsilon  -mabi=gnu  -mabi=mmixware
! -mzero-extend  -mknuthdiv  -mtoplevel-symbols
! -melf  -mbranch-predict  -mbase-addresses
! -msingle-exit}
  
  @emph{MN10300 Options} (@ref{MN10300 Options})
  @gccoptlist{-mmult-bug  -mno-mult-bug
! -mam33  -mam33-2  -mam34
  -mtune=@var{cpu-type}
! -mno-return-pointer-on-d0
! -mno-crt0  -mrelax  -mno-liw  -mno-setlb}
  
  @emph{Moxie Options} (@ref{Moxie Options})
  @gccoptlist{-meb  -mel  -mmul.x  -mno-crt0}
  
  @emph{MSP430 Options} (@ref{MSP430 Options})
! @gccoptlist{-msim  -masm-hex  -mmcu=@var{name}  -mlarge  -msmall  -mrelax
! -mwarn-mcu  -mwarn-devices-csv
! -mcode-region=@var{where}  -mdata-region=@var{where}
! -muse-lower-region-prefix
! -msilicon-errata=@var{name}@r{[},@var{name}@dots{}@r{]}
! -msilicon-errata-warn=@var{name}@r{[},@var{name}@dots{}@r{]}
! -mhwmult=@var{type}  -minrt  -mtiny-printf  -mmax-inline-shift=@var{n}}
  
  @emph{NDS32 Options} (@ref{NDS32 Options})
  @gccoptlist{-mbig-endian  -mlittle-endian
  -mreduced-regs  -mfull-regs
! -mcmov  -mext-perf  -mext-perf2
! -mext-string  -mv3push  -m16bit
  -misr-vector-size=@var{num}
  -mcache-block-size=@var{num}
  -march=@var{arch}
*************** Objective-C and Objective-C++ Dialects}.
*** 1311,1328 ****
  -mctor-dtor  -mrelax}
  
  @emph{Nvidia PTX Options} (@ref{Nvidia PTX Options})
! @gccoptlist{-m64  -mmainkernel  -moptimize}
  
  @emph{OpenRISC Options} (@ref{OpenRISC Options})
! @gccoptlist{-mboard=@var{name}  -mnewlib  -mhard-mul  -mhard-div
  -msoft-mul  -msoft-div
  -msoft-float  -mhard-float  -mdouble-float -munordered-float
  -mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm
  -mcmodel=@var{code-model}}
  
  @emph{PDP-11 Options} (@ref{PDP-11 Options})
! @gccoptlist{-mfpu  -msoft-float  -mac0  -mno-ac0  -m40  -m45  -m10
! -mint32  -mno-int16  -mint16  -mno-int32
  -msplit  -munix-asm  -mdec-asm  -mgnu-asm  -mlra}
  
  @emph{PowerPC Options}
--- 1280,1299 ----
  -mctor-dtor  -mrelax}
  
  @emph{Nvidia PTX Options} (@ref{Nvidia PTX Options})
! @gccoptlist{-m64  -march=@var{arch}  -misa=@var{arch}  -march-map=@var{arch}
! -mptx=@var{version}
! -mmainkernel  -moptimize  -msoft-stack  -muniform-simt  -mgomp}
  
  @emph{OpenRISC Options} (@ref{OpenRISC Options})
! @gccoptlist{-mboard=@var{name}  -mhard-mul  -mhard-div
  -msoft-mul  -msoft-div
  -msoft-float  -mhard-float  -mdouble-float -munordered-float
  -mcmov  -mror  -mrori  -msext  -msfimm  -mshftimm
  -mcmodel=@var{code-model}}
  
  @emph{PDP-11 Options} (@ref{PDP-11 Options})
! @gccoptlist{-mfpu  -msoft-float  -mac0  -m40  -m45  -m10
! -mint32  -mint16
  -msplit  -munix-asm  -mdec-asm  -mgnu-asm  -mlra}
  
  @emph{PowerPC Options}
*************** See RS/6000 and PowerPC Options.
*** 1330,1336 ****
  
  @emph{PRU Options} (@ref{PRU Options})
  @gccoptlist{-mmcu=@var{mcu}  -minrt  -mno-relax  -mloop
! -mmul -mfillzero -mabi=@var{variant}}
  
  @emph{RISC-V Options} (@ref{RISC-V Options})
  @gccoptlist{-mbranch-cost=@var{N-instruction}
--- 1301,1307 ----
  
  @emph{PRU Options} (@ref{PRU Options})
  @gccoptlist{-mmcu=@var{mcu}  -minrt  -mno-relax  -mloop
! -mmul  -mfillzero  -mabi=@var{variant}}
  
  @emph{RISC-V Options} (@ref{RISC-V Options})
  @gccoptlist{-mbranch-cost=@var{N-instruction}
*************** variables (@pxref{Variable Attributes}),
*** 10998,11003 ****
--- 10969,10979 ----
  Attributes}) marked as deprecated by using the @code{deprecated}
  attribute.
  
+ @opindex Wno-deprecated-openmp
+ @opindex Wdeprecated-openmp
+ @item -Wno-deprecated-openmp
+ Do not warn about deprecated OpenMP code.
+ 
  @opindex Wno-overflow
  @opindex Woverflow
  @item -Wno-overflow
*************** debugging issues in this code.
*** 12461,12474 ****
  @opindex fanalyzer-fine-grained
  @opindex fno-analyzer-fine-grained
  @item -fanalyzer-fine-grained
! This option is intended for analyzer developers.
! 
! Internally the analyzer builds an ``exploded graph'' that combines
! control flow graphs with data flow information.
! 
! By default, an edge in this graph can contain the effects of a run
! of multiple statements within a basic block.  With
! @option{-fanalyzer-fine-grained}, each statement gets its own edge.
  
  @opindex fanalyzer-show-duplicate-count
  @opindex fno-analyzer-show-duplicate-count
--- 12437,12443 ----
  @opindex fanalyzer-fine-grained
  @opindex fno-analyzer-fine-grained
  @item -fanalyzer-fine-grained
! Does nothing.  Preserved for backward compatibility.
  
  @opindex fanalyzer-show-duplicate-count
  @opindex fno-analyzer-show-duplicate-count
*************** events fully located within a system hea
*** 12486,12491 ****
--- 12455,12470 ----
  With @option{-fanalyzer-show-events-in-system-headers} such
  events are no longer suppressed.
  
+ @opindex fanalyzer-simplify-supergraph
+ @opindex fno-analyzer-simplify-supergraph
+ @item -fno-analyzer-simplify-supergraph
+ This option is intended for analyzer developers.
+ 
+ By default, the analyzer performs various simplifications to the
+ program supergraph before analyzing it.  With
+ @option{-fno-analyzer-simplify-supergraph} this simplification can be
+ suppressed, for debugging issues with it.
+ 
  @opindex fanalyzer-state-merge
  @opindex fno-analyzer-state-merge
  @item -fno-analyzer-state-merge
*************** The graph is written to @file{@var{file}
*** 12679,12689 ****
  @opindex fdump-analyzer-supergraph
  @item -fdump-analyzer-supergraph
  Dump representations of the ``supergraph'' suitable for viewing with
! GraphViz to @file{@var{file}.supergraph.dot} and to
! @file{@var{file}.supergraph-eg.dot}.  These show all of the
! control flow graphs in the program, with interprocedural edges for
! calls and returns.  The second dump contains annotations showing nodes
! in the ``exploded graph'' and diagnostics associated with them.
  
  @opindex fdump-analyzer-untracked
  @item -fdump-analyzer-untracked
--- 12658,12667 ----
  @opindex fdump-analyzer-supergraph
  @item -fdump-analyzer-supergraph
  Dump representations of the ``supergraph'' suitable for viewing with
! GraphViz to @file{@var{file}.supergraph.@var{index}.@var{kind}.dot}.
! These show all of the control flow graphs in the program, at various stages
! of the analysis.  The precise set of dumps and what they show is subject
! to change.
  
  @opindex fdump-analyzer-untracked
  @item -fdump-analyzer-untracked
*************** performance of the code.  Permissible va
*** 22761,22767 ****
  @samp{cortex-a520}, @samp{cortex-a520ae}, @samp{cortex-a710}, @samp{cortex-a715},
  @samp{cortex-a720}, @samp{cortex-a720ae}, @samp{ampere1}, @samp{ampere1a},
  @samp{ampere1b}, @samp{ampere1c}, @samp{cobalt-100}, @samp{apple-m1},
! @samp{apple-m2}, @samp{apple-m3}, @samp{apple-m4} and @samp{native}.
  
  The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
--- 22739,22746 ----
  @samp{cortex-a520}, @samp{cortex-a520ae}, @samp{cortex-a710}, @samp{cortex-a715},
  @samp{cortex-a720}, @samp{cortex-a720ae}, @samp{ampere1}, @samp{ampere1a},
  @samp{ampere1b}, @samp{ampere1c}, @samp{cobalt-100}, @samp{apple-m1},
! @samp{apple-m2}, @samp{apple-m3}, @samp{apple-m4}, @samp{c1-nano},
! @samp{c1-pro}, @samp{c1-premium} @samp{c1-ultra} and @samp{native}.
  
  The values @samp{cortex-a57.cortex-a53}, @samp{cortex-a72.cortex-a53},
  @samp{cortex-a73.cortex-a35}, @samp{cortex-a73.cortex-a53},
*************** is being compiled:
*** 23490,23500 ****
--- 23469,23481 ----
  @table @gcctabopt
  
  @opindex mbarrel-shifter
+ @opindex mno-barrel-shifter
  @item -mbarrel-shifter
  Generate instructions supported by barrel shifter.  This is the default
  unless @option{-mcpu=ARC601} or @samp{-mcpu=ARCEM} is in effect.
  
  @opindex mjli-always
+ @opindex mno-mjli-always
  @item -mjli-always
  Force to call a function using jli_s instruction.  This option is
  valid only for ARCv2 architecture.
*************** set.
*** 23599,23659 ****
  @end table
  
  @opindex mdpfp
  @opindex mdpfp-compact
  @item -mdpfp
  @itemx -mdpfp-compact
  Generate double-precision FPX instructions, tuned for the compact
  implementation.
  
  @opindex mdpfp-fast
  @item -mdpfp-fast
  Generate double-precision FPX instructions, tuned for the fast
  implementation.
  
  @opindex mno-dpfp-lrsr
  @item -mno-dpfp-lrsr
! Disable @code{lr} and @code{sr} instructions from using FPX extension
! aux registers.
  
  @opindex mea
  @item -mea
  Generate extended arithmetic instructions.  Currently only
  @code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
  supported.  Only valid for @option{-mcpu=ARC700}.
  
- @opindex mno-mpy
- @opindex mmpy
- @item -mno-mpy
- Do not generate @code{mpy}-family instructions for ARC700.  This option is
- deprecated.
- 
  @opindex mmul32x16
  @item -mmul32x16
  Generate 32x16-bit multiply and multiply-accumulate instructions.
  
  @opindex mmul64
  @item -mmul64
  Generate @code{mul64} and @code{mulu64} instructions.
  Only valid for @option{-mcpu=ARC600}.
  
  @opindex mnorm
  @item -mnorm
  Generate @code{norm} instructions.  This is the default if @option{-mcpu=ARC700}
  is in effect.
  
  @opindex mspfp
  @opindex mspfp-compact
  @item -mspfp
  @itemx -mspfp-compact
  Generate single-precision FPX instructions, tuned for the compact
  implementation.
  
  @opindex mspfp-fast
  @item -mspfp-fast
  Generate single-precision FPX instructions, tuned for the fast
  implementation.
  
  @opindex msimd
  @item -msimd
  Enable generation of ARC SIMD instructions via target-specific
  builtins.  Only valid for @option{-mcpu=ARC700}.
--- 23580,23647 ----
  @end table
  
  @opindex mdpfp
+ @opindex mno-dpfp
  @opindex mdpfp-compact
+ @opindex mno-dpfp-compact
  @item -mdpfp
  @itemx -mdpfp-compact
  Generate double-precision FPX instructions, tuned for the compact
  implementation.
  
  @opindex mdpfp-fast
+ @opindex mno-dpfp-fast
  @item -mdpfp-fast
  Generate double-precision FPX instructions, tuned for the fast
  implementation.
  
  @opindex mno-dpfp-lrsr
+ @opindex mdpfp-lrsr
  @item -mno-dpfp-lrsr
! @itemx -mdpfp-lrsr
! Control whether @code{lr} and @code{sr} instructions use FPX extension
! aux registers.  This is enabled by default.
  
  @opindex mea
+ @opindex mno-ea
  @item -mea
  Generate extended arithmetic instructions.  Currently only
  @code{divaw}, @code{adds}, @code{subs}, and @code{sat16} are
  supported.  Only valid for @option{-mcpu=ARC700}.
  
  @opindex mmul32x16
+ @opindex mno-mul32x16
  @item -mmul32x16
  Generate 32x16-bit multiply and multiply-accumulate instructions.
  
  @opindex mmul64
+ @opindex mno-mul64
  @item -mmul64
  Generate @code{mul64} and @code{mulu64} instructions.
  Only valid for @option{-mcpu=ARC600}.
  
  @opindex mnorm
+ @opindex mno-norm
  @item -mnorm
  Generate @code{norm} instructions.  This is the default if @option{-mcpu=ARC700}
  is in effect.
  
  @opindex mspfp
+ @opindex mno-spfp
  @opindex mspfp-compact
+ @opindex mno-spfp-compact
  @item -mspfp
  @itemx -mspfp-compact
  Generate single-precision FPX instructions, tuned for the compact
  implementation.
  
  @opindex mspfp-fast
+ @opindex mno-spfp-fast
  @item -mspfp-fast
  Generate single-precision FPX instructions, tuned for the fast
  implementation.
  
  @opindex msimd
+ @opindex mno-simd
  @item -msimd
  Enable generation of ARC SIMD instructions via target-specific
  builtins.  Only valid for @option{-mcpu=ARC700}.
*************** can overridden by FPX options; @option{-
*** 23667,23691 ****
--- 23655,23685 ----
  @option{-mdpfp-compact}, or @option{-mdpfp-fast} for double precision.
  
  @opindex mswap
+ @opindex mno-swap
  @item -mswap
  Generate @code{swap} instructions.
  
  @opindex matomic
+ @opindex mno-atomic
  @item -matomic
  This enables use of the locked load/store conditional extension to implement
  atomic memory built-in functions.  Not available for ARC 6xx or ARC
  EM cores.
  
  @opindex mdiv-rem
+ @opindex mno-div-rem
  @item -mdiv-rem
  Enable @code{div} and @code{rem} instructions for ARCv2 cores.
  
  @opindex mcode-density
+ @opindex mno-code-density
  @item -mcode-density
+ @itemx -mno-code-density
  Enable code density instructions for ARC EM.
  This option is on by default for ARC HS.
  
  @opindex mll64
+ @opindex mno-ll64
  @item -mll64
  Enable double load/store operations for ARC HS cores.
  
*************** loop mechanism for various needs.  This
*** 23856,23867 ****
--- 23850,23863 ----
  @code{__ARC_LPC_WIDTH__} with the value of @var{width}.
  
  @opindex mrf16
+ @opindex mno-rf16
  @item -mrf16
  This option instructs the compiler to generate code for a 16-entry
  register file.  This option defines the @code{__ARC_RF16__}
  preprocessor macro.
  
  @opindex mbranch-index
+ @opindex mno-branch-index
  @item -mbranch-index
  Enable use of @code{bi} or @code{bih} instructions to implement jump
  tables.
*************** define preprocessor macro symbols.
*** 23874,23929 ****
  @c Flags used by the assembler, but for which we define preprocessor
  @c macro symbols as well.
  @table @gcctabopt
- @opindex mdsp-packa
- @item -mdsp-packa
- Passed down to the assembler to enable the DSP Pack A extensions.
- Also sets the preprocessor symbol @code{__Xdsp_packa}.  This option is
- deprecated.
- 
- @opindex mdvbf
- @item -mdvbf
- Passed down to the assembler to enable the dual Viterbi butterfly
- extension.  Also sets the preprocessor symbol @code{__Xdvbf}.  This
- option is deprecated.
  
  @c ARC700 4.10 extension instruction
  @opindex mlock
  @item -mlock
  Passed down to the assembler to enable the locked load/store
  conditional extension.  Also sets the preprocessor symbol
  @code{__Xlock}.
  
- @opindex mmac-d16
- @item -mmac-d16
- Passed down to the assembler.  Also sets the preprocessor symbol
- @code{__Xxmac_d16}.  This option is deprecated.
- 
- @opindex mmac-24
- @item -mmac-24
- Passed down to the assembler.  Also sets the preprocessor symbol
- @code{__Xxmac_24}.  This option is deprecated.
- 
- @c ARC700 4.10 extension instruction
- @opindex mrtsc
- @item -mrtsc
- Passed down to the assembler to enable the 64-bit time-stamp counter
- extension instruction.  Also sets the preprocessor symbol
- @code{__Xrtsc}.  This option is deprecated.
- 
  @c ARC700 4.10 extension instruction
  @opindex mswape
  @item -mswape
  Passed down to the assembler to enable the swap byte ordering
  extension instruction.  Also sets the preprocessor symbol
  @code{__Xswape}.
  
- @opindex mtelephony
- @item -mtelephony
- Passed down to the assembler to enable dual- and single-operand
- instructions for telephony.  Also sets the preprocessor symbol
- @code{__Xtelephony}.  This option is deprecated.
- 
  @opindex mxy
  @item -mxy
  Passed down to the assembler to enable the XY memory extension.  Also
  sets the preprocessor symbol @code{__Xxy}.
--- 23870,23894 ----
  @c Flags used by the assembler, but for which we define preprocessor
  @c macro symbols as well.
  @table @gcctabopt
  
  @c ARC700 4.10 extension instruction
  @opindex mlock
+ @opindex mno-lock
  @item -mlock
  Passed down to the assembler to enable the locked load/store
  conditional extension.  Also sets the preprocessor symbol
  @code{__Xlock}.
  
  @c ARC700 4.10 extension instruction
  @opindex mswape
+ @opindex mno-swape
  @item -mswape
  Passed down to the assembler to enable the swap byte ordering
  extension instruction.  Also sets the preprocessor symbol
  @code{__Xswape}.
  
  @opindex mxy
+ @opindex mno-xy
  @item -mxy
  Passed down to the assembler to enable the XY memory extension.  Also
  sets the preprocessor symbol @code{__Xxy}.
*************** The following options control how the as
*** 23935,23947 ****
  @c Assembly annotation options
  @table @gcctabopt
  @opindex misize
  @item -misize
  Annotate assembler instructions with estimated addresses.
  
- @opindex mannotate-align
- @item -mannotate-align
- Does nothing.  Preserved for backward compatibility.
- 
  @end table
  
  The following options are passed through to the linker:
--- 23900,23909 ----
  @c Assembly annotation options
  @table @gcctabopt
  @opindex misize
+ @opindex mno-isize
  @item -misize
  Annotate assembler instructions with estimated addresses.
  
  @end table
  
  The following options are passed through to the linker:
*************** The following options are passed through
*** 23949,23962 ****
--- 23911,23928 ----
  @c options passed through to the linker
  @table @gcctabopt
  @opindex marclinux
+ @opindex mno-arclinux
  @item -marclinux
+ @itemx -mno-arclinux
  Passed through to the linker, to specify use of the @code{arclinux} emulation.
  This option is enabled by default in tool chains built for
  @w{@code{arc-linux-uclibc}} and @w{@code{arceb-linux-uclibc}} targets
  when profiling is not requested.
  
  @opindex marclinux_prof
+ @opindex mno-arclinux_prof
  @item -marclinux_prof
+ @itemx -mno-arclinux_prof
  Passed through to the linker, to specify use of the
  @code{arclinux_prof} emulation.  This option is enabled by default in
  tool chains built for @w{@code{arc-linux-uclibc}} and
*************** The following options control the semant
*** 23969,23980 ****
--- 23935,23949 ----
  @c semantically relevant code generation options
  @table @gcctabopt
  @opindex mlong-calls
+ @opindex mno-long-calls
  @item -mlong-calls
  Generate calls as register indirect calls, thus providing access
  to the full 32-bit address range.
  
  @opindex mmedium-calls
+ @opindex mno-medium-calls
  @item -mmedium-calls
+ @itemx -mno-medium-calls
  Don't use less than 25-bit addressing range for calls, which is the
  offset available for an unconditional branch-and-link
  instruction.  Conditional execution of function calls is suppressed, to
*************** built for @w{@code{arc-linux-uclibc}} an
*** 23997,24045 ****
  targets.
  
  @opindex mvolatile-cache
  @item -mvolatile-cache
! Use ordinarily cached memory accesses for volatile references.  This is the
! default.
  
! @opindex mno-volatile-cache
! @opindex mvolatile-cache
! @item -mno-volatile-cache
! Enable cache bypass for volatile references.
  
  @end table
  
  The following options fine tune code generation:
  @c code generation tuning options
  @table @gcctabopt
- @opindex malign-call
- @item -malign-call
- Does nothing.  Preserved for backward compatibility.
- 
  @opindex mauto-modify-reg
  @item -mauto-modify-reg
  Enable the use of pre/post modify with register displacement.
  
- @opindex mbbit-peephole
- @item -mbbit-peephole
- Does nothing.  Preserved for backward compatibility.
- 
  @opindex mno-brcc
  @item -mno-brcc
! This option disables a target-specific pass in @file{arc_reorg} to
! generate compare-and-branch (@code{br@var{cc}}) instructions.
  It has no effect on
  generation of these instructions driven by the combiner pass.
  
  @opindex mcase-vector-pcrel
  @item -mcase-vector-pcrel
  Use PC-relative switch case tables to enable case table shortening.
  This is the default for @option{-Os}.
  
- @opindex mcompact-casesi
- @item -mcompact-casesi
- Enable compact @code{casesi} pattern.  This is the default for @option{-Os},
- and only available for ARCv1 cores.  This option is deprecated.
- 
  @opindex mno-cond-exec
  @item -mno-cond-exec
  Disable the ARCompact-specific pass to generate conditional
--- 23966,24007 ----
  targets.
  
  @opindex mvolatile-cache
+ @opindex mno-volatile-cache
  @item -mvolatile-cache
! @itemx -mno-volatile-cache
  
! Control how volatile references are accessed.
! The default is @option{-mvolatile-cache}, which uses ordinary
! cached memory accesses for volatile references.
! Use @option{-mno-volatile-cache} to
! enable cache bypass for volatile references.
  
  @end table
  
  The following options fine tune code generation:
  @c code generation tuning options
  @table @gcctabopt
  @opindex mauto-modify-reg
+ @opindex mno-auto-modify-reg
  @item -mauto-modify-reg
  Enable the use of pre/post modify with register displacement.
  
  @opindex mno-brcc
+ @opindex mbrcc
  @item -mno-brcc
! @itemx -mbrcc
! This option controls a target-specific pass in @file{arc_reorg} to
! generate compare-and-branch (@code{br@var{cc}}) instructions, which
! is enabled by default.
  It has no effect on
  generation of these instructions driven by the combiner pass.
  
  @opindex mcase-vector-pcrel
+ @opindex mno-case-vector-pcrel
  @item -mcase-vector-pcrel
  Use PC-relative switch case tables to enable case table shortening.
  This is the default for @option{-Os}.
  
  @opindex mno-cond-exec
  @item -mno-cond-exec
  Disable the ARCompact-specific pass to generate conditional
*************** offset range because they are conditiona
*** 24058,24081 ****
  @option{-mmedium-calls} instead.
  
  @opindex mearly-cbranchsi
  @item -mearly-cbranchsi
  Enable pre-reload use of the @code{cbranchsi} pattern.
  
- @opindex mexpand-adddi
- @item -mexpand-adddi
- Expand @code{adddi3} and @code{subdi3} at RTL generation time into
- @code{add.f}, @code{adc} etc.  This option is deprecated.
- 
  @opindex mindexed-loads
  @item -mindexed-loads
  Enable the use of indexed loads.  This can be problematic because some
  optimizers then assume that indexed stores exist, which is not
  the case.
  
- @opindex mlra
- @item -mlra
- Does nothing.  Preserved for backward compatibility.
- 
  @opindex mlra-priority-none
  @item -mlra-priority-none
  Don't indicate any priority for target registers.
--- 24020,24036 ----
  @option{-mmedium-calls} instead.
  
  @opindex mearly-cbranchsi
+ @opindex mno-early-cbranchsi
  @item -mearly-cbranchsi
  Enable pre-reload use of the @code{cbranchsi} pattern.
  
  @opindex mindexed-loads
+ @opindex mno-indexed-loads
  @item -mindexed-loads
  Enable the use of indexed loads.  This can be problematic because some
  optimizers then assume that indexed stores exist, which is not
  the case.
  
  @opindex mlra-priority-none
  @item -mlra-priority-none
  Don't indicate any priority for target registers.
*************** Indicate target register priority for r0
*** 24089,24094 ****
--- 24044,24050 ----
  Reduce target register priority for r0..r3 / r12..r15.
  
  @opindex mmillicode
+ @opindex mno-millicode
  @item -mmillicode
  When optimizing for size (using @option{-Os}), prologues and epilogues
  that have to save or restore a large number of registers are often
*************** nonstandard way, this option is provided
*** 24099,24126 ****
  call generation.
  
  @opindex mcode-density-frame
  @item -mcode-density-frame
  This option enable the compiler to emit @code{enter} and @code{leave}
  instructions.  These instructions are only valid for CPUs with
  code-density feature.
  
- @opindex mmixed-code
- @item -mmixed-code
- Does nothing.  Preserved for backward compatibility.
- 
- @opindex mq-class
- @item -mq-class
- Ths option is deprecated.  Enable @samp{q} instruction alternatives.
- This is the default for @option{-Os}.
- 
- @opindex mRcq
- @item -mRcq
- Does nothing.  Preserved for backward compatibility.
- 
- @opindex mRcw
- @item -mRcw
- Does nothing.  Preserved for backward compatibility.
- 
  @opindex msize-level
  @item -msize-level=@var{level}
  Fine-tune size optimization with regards to instruction lengths and alignment.
--- 24055,24066 ----
  call generation.
  
  @opindex mcode-density-frame
+ @opindex mno-code-density-frame
  @item -mcode-density-frame
  This option enable the compiler to emit @code{enter} and @code{leave}
  instructions.  These instructions are only valid for CPUs with
  code-density feature.
  
  @opindex msize-level
  @item -msize-level=@var{level}
  Fine-tune size optimization with regards to instruction lengths and alignment.
*************** Tune for ARC4x release 3.10a.
*** 24183,24268 ****
  Cost to assume for a multiply instruction, with @samp{4} being equal to a
  normal instruction.
  
- @opindex munalign-prob-threshold
- @item -munalign-prob-threshold=@var{probability}
- Does nothing.  Preserved for backward compatibility.
- 
- @end table
- 
- The following options are maintained for backward compatibility, but
- are now deprecated and will be removed in a future release:
- 
- @c Deprecated options
- @table @gcctabopt
- 
- @opindex margonaut
- @item -margonaut
- Obsolete FPX.
- 
- @opindex mbig-endian
- @opindex EB
- @item -mbig-endian
- @itemx -EB
- Compile code for big-endian targets.  Use of these options is now
- deprecated.  Big-endian code is supported by configuring GCC to build
- @w{@code{arceb-elf32}} and @w{@code{arceb-linux-uclibc}} targets,
- for which big endian is the default.
- 
- @opindex mlittle-endian
- @opindex EL
- @item -mlittle-endian
- @itemx -EL
- Compile code for little-endian targets.  Use of these options is now
- deprecated.  Little-endian code is supported by configuring GCC to build
- @w{@code{arc-elf32}} and @w{@code{arc-linux-uclibc}} targets,
- for which little endian is the default.
- 
- @opindex mbarrel_shifter
- @item -mbarrel_shifter
- Replaced by @option{-mbarrel-shifter}.
- 
- @opindex mdpfp_compact
- @item -mdpfp_compact
- Replaced by @option{-mdpfp-compact}.
- 
- @opindex mdpfp_fast
- @item -mdpfp_fast
- Replaced by @option{-mdpfp-fast}.
- 
- @opindex mdsp_packa
- @item -mdsp_packa
- Replaced by @option{-mdsp-packa}.
- 
- @opindex mEA
- @item -mEA
- Replaced by @option{-mea}.
- 
- @opindex mmac_24
- @item -mmac_24
- Replaced by @option{-mmac-24}.
- 
- @opindex mmac_d16
- @item -mmac_d16
- Replaced by @option{-mmac-d16}.
- 
- @opindex mspfp_compact
- @item -mspfp_compact
- Replaced by @option{-mspfp-compact}.
- 
- @opindex mspfp_fast
- @item -mspfp_fast
- Replaced by @option{-mspfp-fast}.
- 
- @opindex mtune
- @item -mtune=@var{cpu}
- Values @samp{arc600}, @samp{arc601}, @samp{arc700} and
- @samp{arc700-xmac} for @var{cpu} are replaced by @samp{ARC600},
- @samp{ARC601}, @samp{ARC700} and @samp{ARC700-xmac} respectively.
- 
- @opindex multcost
- @item -multcost=@var{num}
- Replaced by @option{-mmultcost}.
- 
  @end table
  
  @node ARM Options
--- 24123,24128 ----
*************** linker option @option{-relax}.  @xref{H8
*** 28120,28153 ****
  ld, Using ld}, for a fuller description.
  
  @opindex mh
  @item -mh
  Generate code for the H8/300H@.
  
  @opindex ms
  @item -ms
  Generate code for the H8S@.
  
  @opindex mn
  @item -mn
  Generate code for the H8S and H8/300H in the normal mode.  This switch
! must be used either with @option{-mh} or @option{-ms}.
  
  @opindex ms2600
  @item -ms2600
  Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
  
! @opindex mexr
! @item -mexr
! Extended registers are stored on stack before execution of function
! with monitor attribute. Default option is @option{-mexr}.
! This option is valid only for H8S targets.
  
- @opindex mno-exr
  @opindex mexr
! @item -mno-exr
! Extended registers are not stored on stack before execution of function
! with monitor attribute. Default option is @option{-mno-exr}.
! This option is valid only for H8S targets.
  
  @opindex mint32
  @item -mint32
--- 27980,28026 ----
  ld, Using ld}, for a fuller description.
  
  @opindex mh
+ @opindex mno-h
  @item -mh
  Generate code for the H8/300H@.
  
  @opindex ms
+ @opindex mno-s
  @item -ms
  Generate code for the H8S@.
  
  @opindex mn
+ @opindex mno-n
  @item -mn
  Generate code for the H8S and H8/300H in the normal mode.  This switch
! must be used with either @option{-mh} or @option{-ms}.
! 
! @opindex msx
! @opindex mno-sx
! @item -msx
! Generate H8SX code.
  
  @opindex ms2600
+ @opindex mno-s2600
  @item -ms2600
  Generate code for the H8S/2600.  This switch must be used with @option{-ms}.
  
! @opindex mquickcall
! @opindex mno-quickcall
! @item -mquickcall
! Use registers for argument passing.
! 
! @opindex mslowbyte
! @item -mslowbyte
! Consider access to byte-sized memory slow.
  
  @opindex mexr
! @opindex mno-exr
! @item -mexr
! @itemx -mno-exr
! Store extended registers on the stack before execution of functions
! with the @code{monitor} attribute (@pxref{H8/300 Function Attributes}).
! The default is @option{-mexr}.  This option is valid only for H8S targets.
  
  @opindex mint32
  @item -mint32
*************** other way around.
*** 28185,28195 ****
  @item -mpa-risc-1-0
  @itemx -mpa-risc-1-1
  @itemx -mpa-risc-2-0
! Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0} respectively.
  
  @opindex matomic-libcalls
  @opindex mno-atomic-libcalls
  @item -matomic-libcalls
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  This option is enabled by default.  It only affects the generation of
  atomic libcalls by the HPPA backend.
--- 28058,28070 ----
  @item -mpa-risc-1-0
  @itemx -mpa-risc-1-1
  @itemx -mpa-risc-2-0
! Synonyms for @option{-march=1.0}, @option{-march=1.1}, and @option{-march=2.0},
! respectively.
  
  @opindex matomic-libcalls
  @opindex mno-atomic-libcalls
  @item -matomic-libcalls
+ @itemx -mno-atomic-libcalls
  Generate libcalls for atomic loads and stores when sync libcalls are disabled.
  This option is enabled by default.  It only affects the generation of
  atomic libcalls by the HPPA backend.
*************** This option generates @code{__atomic_exc
*** 28210,28220 ****
  It also provides special handling for atomic DImode accesses on 32-bit
  targets.
  
- @opindex mbig-switch
- @item -mbig-switch
- Does nothing.  Preserved for backward compatibility.
- 
  @opindex mcaller-copies
  @item -mcaller-copies
  The caller copies function arguments passed by hidden reference.  This
  option should be used with care as it is not compatible with the default
--- 28085,28092 ----
  It also provides special handling for atomic DImode accesses on 32-bit
  targets.
  
  @opindex mcaller-copies
+ @opindex mno-caller-copies
  @item -mcaller-copies
  The caller copies function arguments passed by hidden reference.  This
  option should be used with care as it is not compatible with the default
*************** passed by hidden reference and the optio
*** 28223,28241 ****
  with OpenMP.
  
  @opindex mcoherent-ldcw
  @item -mcoherent-ldcw
  Use ldcw/ldcd coherent cache-control hint.
  
  @opindex mdisable-fpregs
  @item -mdisable-fpregs
! Disable floating-point registers.  Equivalent to @code{-msoft-float}.
  
  @opindex mdisable-indexing
  @item -mdisable-indexing
  Prevent the compiler from using indexing address modes.  This avoids some
  rather obscure problems when compiling MIG generated code under MACH@.
  
  @opindex mfast-indirect-calls
  @item -mfast-indirect-calls
  Generate code that assumes calls never cross space boundaries.  This
  allows GCC to emit code that performs faster indirect calls.
--- 28095,28117 ----
  with OpenMP.
  
  @opindex mcoherent-ldcw
+ @opindex mno-coherent-ldcw
  @item -mcoherent-ldcw
  Use ldcw/ldcd coherent cache-control hint.
  
  @opindex mdisable-fpregs
+ @opindex -mno-disable-fpregs
  @item -mdisable-fpregs
! Disable floating-point registers.  Equivalent to @option{-msoft-float}.
  
  @opindex mdisable-indexing
+ @opindex mno-disable-indexing
  @item -mdisable-indexing
  Prevent the compiler from using indexing address modes.  This avoids some
  rather obscure problems when compiling MIG generated code under MACH@.
  
  @opindex mfast-indirect-calls
+ @opindex mno-fast-indirect-calls
  @item -mfast-indirect-calls
  Generate code that assumes calls never cross space boundaries.  This
  allows GCC to emit code that performs faster indirect calls.
*************** two registers separated by a dash.  Mult
*** 28252,28257 ****
--- 28128,28134 ----
  specified separated by a comma.
  
  @opindex mgas
+ @opindex -mno-gas
  @item -mgas
  Enable the use of assembler directives only GAS understands.
  
*************** long calls only when the distance from t
*** 28298,28304 ****
  of the function or translation unit, as the case may be, exceeds a
  predefined limit set by the branch type being used.  The limits for
  normal calls are 7,600,000 and 240,000 bytes, respectively for the
! PA 2.0 and PA 1.X architectures.  Sibcalls are always limited at
  240,000 bytes.
  
  Distances are measured from the beginning of functions when using the
--- 28175,28181 ----
  of the function or translation unit, as the case may be, exceeds a
  predefined limit set by the branch type being used.  The limits for
  normal calls are 7,600,000 and 240,000 bytes, respectively for the
! PA 2.0 and PA 1.X architectures.  Sibling calls are always limited at
  240,000 bytes.
  
  Distances are measured from the beginning of functions when using the
*************** particularly when partial linking is use
*** 28312,28332 ****
  
  The types of long calls used depends on the capabilities of the
  assembler and linker, and the type of code being generated.  The
! impact on systems that support long absolute calls, and long pic
! symbol-difference or pc-relative calls should be relatively small.
! However, an indirect call is used on 32-bit ELF systems in pic code
  and it is quite long.
  
  @opindex mlong-load-store
  @item -mlong-load-store
  Generate 3-instruction load and store sequences as sometimes required by
  the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
  the HP compilers.
  
- @opindex mjump-in-delay
- @item -mjump-in-delay
- This option is ignored and provided for compatibility purposes only.
- 
  @opindex mno-space-regs
  @opindex mspace-regs
  @item -mno-space-regs
--- 28189,28206 ----
  
  The types of long calls used depends on the capabilities of the
  assembler and linker, and the type of code being generated.  The
! impact on systems that support long absolute calls, and long PIC
! symbol-difference or PC-relative calls should be relatively small.
! However, an indirect call is used on 32-bit ELF systems in PIC code
  and it is quite long.
  
  @opindex mlong-load-store
+ @opindex mno-long-load-store
  @item -mlong-load-store
  Generate 3-instruction load and store sequences as sometimes required by
  the HP-UX 10 linker.  This is equivalent to the @samp{+k} option to
  the HP compilers.
  
  @opindex mno-space-regs
  @opindex mspace-regs
  @item -mno-space-regs
*************** GCC to generate faster indirect calls an
*** 28336,28345 ****
--- 28210,28221 ----
  Such code is suitable for level 0 PA systems and kernels.
  
  @opindex mordered
+ @opindex mno-ordered
  @item -mordered
  Assume memory references are ordered and barriers are not needed.
  
  @opindex mportable-runtime
+ @opindex mno-portable-runtime
  @item -mportable-runtime
  Use the portable calling conventions proposed by HP for ELF systems.
  
*************** proper scheduling option for your machin
*** 28353,28365 ****
  @samp{8000}.
  
  @opindex msio
  @item -msio
! Generate the predefine, @code{_SIO}, for server IO@.  The default is
  @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
  @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
  options are available under HP-UX and HI-UX@.
  
  @opindex msoft-float
  @item -msoft-float
  Generate output containing library calls for floating point.
  @strong{Warning:} the requisite libraries are not available for all HPPA
--- 28229,28245 ----
  @samp{8000}.
  
  @opindex msio
+ @opindex mwsio
  @item -msio
! @itemx -mwsio
! The @option{-msio} generates the predefine, @code{_SIO}, for server IO@.
! The default is
  @option{-mwsio}.  This generates the predefines, @code{__hp9000s700},
  @code{__hp9000s700__} and @code{_WSIO}, for workstation IO@.  These
  options are available under HP-UX and HI-UX@.
  
  @opindex msoft-float
+ @opindex mno-soft-float
  @item -msoft-float
  Generate output containing library calls for floating point.
  @strong{Warning:} the requisite libraries are not available for all HPPA
*************** library that comes with GCC, with @optio
*** 28375,28380 ****
--- 28255,28261 ----
  this to work.
  
  @opindex msoft-mult
+ @opindex mno-soft-mult
  @item -msoft-mult
  Use software integer multiplication.
  
*************** as appropriate.  Most GNU software doesn
*** 28408,28425 ****
  
  @opindex nolibdld
  @item -nolibdld
! Suppress the generation of link options to search libdld.sl when the
  @option{-static} option is specified on HP-UX 10 and later.
  
  @opindex static
  @item -static
! The HP-UX implementation of setlocale in libc has a dependency on
! libdld.sl.  There isn't an archive version of libdld.sl.  Thus,
  when the @option{-static} option is specified, special link options
  are needed to resolve this dependency.
  
  On HP-UX 10 and later, the GCC driver adds the necessary options to
! link with libdld.sl when the @option{-static} option is specified.
  This causes the resulting binary to be dynamic.  On the 64-bit port,
  the linkers generate dynamic binaries by default in any case.  The
  @option{-nolibdld} option can be used to prevent the GCC driver from
--- 28289,28306 ----
  
  @opindex nolibdld
  @item -nolibdld
! Suppress the generation of link options to search @file{libdld.sl} when the
  @option{-static} option is specified on HP-UX 10 and later.
  
  @opindex static
  @item -static
! The HP-UX C library implementation of @code{setlocale} has a dependency on
! @file{libdld.sl}.  There isn't an archive version of @file{libdld.sl}.  Thus,
  when the @option{-static} option is specified, special link options
  are needed to resolve this dependency.
  
  On HP-UX 10 and later, the GCC driver adds the necessary options to
! link with @file{libdld.sl} when the @option{-static} option is specified.
  This causes the resulting binary to be dynamic.  On the 64-bit port,
  the linkers generate dynamic binaries by default in any case.  The
  @option{-nolibdld} option can be used to prevent the GCC driver from
*************** using the maximum throughput algorithm.
*** 28543,28555 ****
  @item -mno-inline-sqrt
  Do not generate inline code for @code{sqrt}.
  
- @opindex mfused-madd
- @opindex mno-fused-madd
- @item -mfused-madd
- @itemx -mno-fused-madd
- Do (don't) generate code that uses the fused multiply/add or multiply/subtract
- instructions.  The default is to use these instructions.
- 
  @opindex mno-dwarf2-asm
  @opindex mdwarf2-asm
  @item -mno-dwarf2-asm
--- 28424,28429 ----
*************** are dependent on the control speculative
*** 28648,28671 ****
  This is effective only with @option{-msched-control-spec} enabled.
  The default setting is enabled.
  
- @opindex mno-sched-prefer-non-data-spec-insns
- @opindex msched-prefer-non-data-spec-insns
- @item -mno-sched-prefer-non-data-spec-insns
- @itemx -msched-prefer-non-data-spec-insns
- If enabled, data-speculative instructions are chosen for schedule
- only if there are no other choices at the moment.  This makes
- the use of the data speculation much more conservative.
- The default setting is disabled.
- 
- @opindex mno-sched-prefer-non-control-spec-insns
- @opindex msched-prefer-non-control-spec-insns
- @item -mno-sched-prefer-non-control-spec-insns
- @itemx -msched-prefer-non-control-spec-insns
- If enabled, control-speculative instructions are chosen for schedule
- only if there are no other choices at the moment.  This makes
- the use of the control speculation much more conservative.
- The default setting is disabled.
- 
  @opindex mno-sched-count-spec-in-critical-path
  @opindex msched-count-spec-in-critical-path
  @item -mno-sched-count-spec-in-critical-path
--- 28522,28527 ----
*************** speculation a bit more conservative.
*** 28676,28701 ****
  The default setting is disabled.
  
  @opindex msched-spec-ldc
  @item -msched-spec-ldc
  Use a simple data speculation check.  This option is on by default.
  
! @opindex msched-spec-ldc
  @item -msched-control-spec-ldc
  Use a simple check for control speculation.  This option is on by default.
  
  @opindex msched-stop-bits-after-every-cycle
  @item -msched-stop-bits-after-every-cycle
  Place a stop bit after every cycle when scheduling.  This option is on
  by default.
  
  @opindex msched-fp-mem-deps-zero-cost
  @item -msched-fp-mem-deps-zero-cost
  Assume that floating-point stores and loads are not likely to cause a conflict
  when placed into the same instruction group.  This option is disabled by
  default.
  
  @opindex msel-sched-dont-check-control-spec
  @item -msel-sched-dont-check-control-spec
  Generate checks for control speculation in selective scheduling.
  This flag is disabled by default.
  
--- 28532,28567 ----
  The default setting is disabled.
  
  @opindex msched-spec-ldc
+ @opindex mno-sched-spec-ldc
  @item -msched-spec-ldc
+ @itemx -mno-sched-spec-ldc
  Use a simple data speculation check.  This option is on by default.
  
! @opindex msched-spec-control-ldc
! @opindex mno-sched-spec-control-ldc
  @item -msched-control-spec-ldc
+ @itemx -mno-sched-control-spec-ldc
  Use a simple check for control speculation.  This option is on by default.
  
  @opindex msched-stop-bits-after-every-cycle
+ @opindex mno-sched-stop-bits-after-every-cycle
  @item -msched-stop-bits-after-every-cycle
+ @itemx -mno-sched-stop-bits-after-every-cycle
  Place a stop bit after every cycle when scheduling.  This option is on
  by default.
  
  @opindex msched-fp-mem-deps-zero-cost
+ @opindex mno-sched-fp-mem-deps-zero-cost
  @item -msched-fp-mem-deps-zero-cost
+ @itemx -mno-sched-fp-mem-deps-zero-cost
  Assume that floating-point stores and loads are not likely to cause a conflict
  when placed into the same instruction group.  This option is disabled by
  default.
  
  @opindex msel-sched-dont-check-control-spec
+ @opindex mno-sel-sched-dont-check-control-spec
  @item -msel-sched-dont-check-control-spec
+ @itemx -mno-sel-sched-dont-check-control-spec
  Generate checks for control speculation in selective scheduling.
  This flag is disabled by default.
  
*************** instruction group. Frequently useful to
*** 28707,28713 ****
--- 28573,28581 ----
  The default value is 1.
  
  @opindex msched-max-memory-insns-hard-limit
+ @opindex mno-sched-max-memory-insns-hard-limit
  @item -msched-max-memory-insns-hard-limit
+ @itemx -mno-sched-max-memory-insns-hard-limit
  Makes the limit specified by @option{msched-max-memory-insns} a hard limit,
  disallowing more than that number in an instruction group.
  Otherwise, the limit is ``soft'', meaning that non-memory operations
*************** These @option{-m} options are defined fo
*** 28724,28745 ****
  
  @table @gcctabopt
  @opindex mbarrel-shift-enabled
  @item -mbarrel-shift-enabled
  Enable barrel-shift instructions.
  
  @opindex mdivide-enabled
  @item -mdivide-enabled
  Enable divide and modulus instructions.
  
! @opindex multiply-enabled
  @item -mmultiply-enabled
  Enable multiply instructions.
  
  @opindex msign-extend-enabled
  @item -msign-extend-enabled
  Enable sign extend instructions.
  
  @opindex muser-enabled
  @item -muser-enabled
  Enable user-defined instructions.
  
--- 28592,28618 ----
  
  @table @gcctabopt
  @opindex mbarrel-shift-enabled
+ @opindex mno-barrel-shift-enabled
  @item -mbarrel-shift-enabled
  Enable barrel-shift instructions.
  
  @opindex mdivide-enabled
+ @opindex mno-divide-enabled
  @item -mdivide-enabled
  Enable divide and modulus instructions.
  
! @opindex mmultiply-enabled
! @opindex mno-multiply-enabled
  @item -mmultiply-enabled
  Enable multiply instructions.
  
  @opindex msign-extend-enabled
+ @opindex mno-sign-extend-enabled
  @item -msign-extend-enabled
  Enable sign extend instructions.
  
  @opindex muser-enabled
+ @opindex mno-user-enabled
  @item -muser-enabled
  Enable user-defined instructions.
  
*************** and all LoongArch v1.1 instructions.
*** 28774,28779 ****
--- 28647,28656 ----
  LoongArch64 ISA version 1.0.
  @item la64v1.1
  LoongArch64 ISA version 1.1.
+ @item la32v1.0
+ LoongArch32 ISA version 1.0.
+ @item la32rv1.0
+ LoongArch32 Reduced ISA version 1.0.
  @end table
  
  More information about LoongArch ISA versions can be found at
*************** Generic LoongArch 64-bit processor.
*** 28796,28801 ****
--- 28673,28680 ----
  LoongArch LA464 core.
  @item la664
  LoongArch LA664 core.
+ @item loongarch32
+ Generic LoongArch 32-bit processor.
  @end table
  
  
*************** No LoongArch SIMD instruction may be gen
*** 28850,28856 ****
  
  @opindex msoft-float
  @item -msoft-float
! Force @option{-mfpu=none} and prevents the use of floating-point
  registers for parameter passing.  This option may change the target
  ABI.
  
--- 28729,28735 ----
  
  @opindex msoft-float
  @item -msoft-float
! Force @option{-mfpu=none} and prevent the use of floating-point
  registers for parameter passing.  This option may change the target
  ABI.
  
*************** Force @option{-mfpu=64} and allow the us
*** 28866,28883 ****
  registers for parameter passing.  This option may change the target
  ABI.
  
! @opindex ml[a]sx
  @item -mlasx
  @itemx -mno-lasx
  @item -mlsx
  @itemx -mno-lsx
  Incrementally adjust the scope of the SIMD extensions (none / LSX / LASX)
  that can be used by the compiler for code generation.  Enabling LASX with
! @option{mlasx} automatically enables LSX, and diabling LSX with @option{mno-lsx}
  automatically disables LASX.  These driver-only options act upon the final
! @option{msimd} configuration state and make incremental changes in the order
  they appear on the GCC driver's command line, deriving the final / canonicalized
! @option{msimd} option that is passed to the compiler proper.
  
  @opindex mbranch-cost
  @item -mbranch-cost=@var{n}
--- 28745,28766 ----
  registers for parameter passing.  This option may change the target
  ABI.
  
! @opindex mlasx
! @opindex mno-lasx
! @opindex mlsx
! @opindex mno-lsx
  @item -mlasx
  @itemx -mno-lasx
  @item -mlsx
  @itemx -mno-lsx
  Incrementally adjust the scope of the SIMD extensions (none / LSX / LASX)
  that can be used by the compiler for code generation.  Enabling LASX with
! @option{-mlasx} automatically enables LSX,
! and disabling LSX with @option{-mno-lsx}
  automatically disables LASX.  These driver-only options act upon the final
! @option{-msimd} configuration state and make incremental changes in the order
  they appear on the GCC driver's command line, deriving the final / canonicalized
! @option{-msimd} option that is passed to the compiler proper.
  
  @opindex mbranch-cost
  @item -mbranch-cost=@var{n}
*************** Set the cost of branches to roughly @var
*** 28888,28893 ****
--- 28771,28777 ----
  Set the cost of ADDRESS_REG_REG to the value calculated by @var{n}.
  
  @opindex mcheck-zero-division
+ @opindex mno-check-zero-division
  @item -mcheck-zero-division
  @itemx -mno-check-zero-divison
  Trap (do not trap) on integer division by zero.  The default is
*************** or greater than 32767.  The default is -
*** 28906,28923 ****
--- 28790,28810 ----
  @code{amswap.w} instruction.
  
  @opindex mcond-move-int
+ @opindex mno-cond-move-int
  @item -mcond-move-int
  @itemx -mno-cond-move-int
  Conditional moves for integral data in general-purpose registers
  are enabled (disabled).  The default is @option{-mcond-move-int}.
  
  @opindex mcond-move-float
+ @opindex mno-cond-move-float
  @item -mcond-move-float
  @itemx -mno-cond-move-float
  Conditional moves for floating-point registers are enabled (disabled).
  The default is @option{-mcond-move-float}.
  
  @opindex mmemcpy
+ @opindex mno-memcpy
  @item -mmemcpy
  @itemx -mno-memcpy
  Force (do not force) the use of @code{memcpy} for non-trivial block moves.
*************** behavior if explicitly specified, regard
*** 28928,28933 ****
--- 28815,28821 ----
  the command line.
  
  @opindex mstrict-align
+ @opindex mno-strict-align
  @item -mstrict-align
  @itemx -mno-strict-align
  Avoid or allow generating memory accesses that may not be aligned on a natural
*************** The @option{-mcmodel=extreme} option is
*** 28968,28982 ****
  and/or @option{-mexplicit-relocs=none}.
  @end table
  
  @item -mexplicit-relocs=@var{style}
  Set when to use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit instruction scheduling but allow linker relaxation.
! with @option{-mexplicit-relocs=none} the assembler macros are always used,
! with @option{-mexplicit-relocs=always} the assembler relocation operators
! are always used, with @option{-mexplicit-relocs=auto} the compiler will
! use the relocation operators where the linker relaxation is impossible to
! improve the code quality, and macros elsewhere.  The default
  value for the option is determined with the assembler capability detected
  during GCC build-time and the setting of @option{-mrelax}:
  @option{-mexplicit-relocs=none} if the assembler does not support
--- 28856,28876 ----
  and/or @option{-mexplicit-relocs=none}.
  @end table
  
+ @opindex mexplicit-relocs
+ @opindex mno-explicit-relocs
  @item -mexplicit-relocs=@var{style}
+ @itemx -mexplicit-relocs
+ @itemx -mno-explicit-relocs
  Set when to use assembler relocation operators when dealing with symbolic
  addresses.  The alternative is to use assembler macros instead, which may
  limit instruction scheduling but allow linker relaxation.
! With @option{-mexplicit-relocs=none}, the assembler macros are always used;
! with @option{-mexplicit-relocs=always}, the assembler relocation operators
! are always used; and with @option{-mexplicit-relocs=auto} the compiler uses
! the relocation operators where linker relaxation is impossible to
! improve the code quality, and macros elsewhere.
! 
! The default
  value for the option is determined with the assembler capability detected
  during GCC build-time and the setting of @option{-mrelax}:
  @option{-mexplicit-relocs=none} if the assembler does not support
*************** operators but @option{-mrelax} is not en
*** 28986,29007 ****
  @option{-mexplicit-relocs=auto} if the assembler supports relocation
  operators and @option{-mrelax} is enabled.
  
! @opindex mexplicit-relocs
! @item -mexplicit-relocs
! An alias of @option{-mexplicit-relocs=always} for backward compatibility.
! 
! @opindex mno-explicit-relocs
! @item -mno-explicit-relocs
! An alias of @option{-mexplicit-relocs=none} for backward compatibility.
  
  @opindex mdirect-extern-access
  @item -mdirect-extern-access
  @itemx -mno-direct-extern-access
! Do not use or use GOT to access external symbols.  The default is
! @option{-mno-direct-extern-access}: GOT is used for external symbols with
  default visibility, but not used for other external symbols.
  
! With @option{-mdirect-extern-access}, GOT is not used and all external
  symbols are PC-relatively addressed.  It is @strong{only} suitable for
  environments where no dynamic link is performed, like firmwares, OS
  kernels, executables linked with @option{-static} or @option{-static-pie}.
--- 28880,28897 ----
  @option{-mexplicit-relocs=auto} if the assembler supports relocation
  operators and @option{-mrelax} is enabled.
  
! For backward compatibility, @option{-mexplicit-relocs} is equivalent to
! @option{-mexplicit-relocs=always}, while @option{-mno-explicit-relocs} is
! equivalent to @option{-mexplicit-relocs=none}.
  
  @opindex mdirect-extern-access
  @item -mdirect-extern-access
  @itemx -mno-direct-extern-access
! Control use of the GOT to access external symbols.  The default is
! @option{-mno-direct-extern-access}: the GOT is used for external symbols with
  default visibility, but not used for other external symbols.
  
! With @option{-mdirect-extern-access}, the GOT is not used and all external
  symbols are PC-relatively addressed.  It is @strong{only} suitable for
  environments where no dynamic link is performed, like firmwares, OS
  kernels, executables linked with @option{-static} or @option{-static-pie}.
*************** These instructions are generated only wh
*** 29044,29050 ****
  is enabled together with @option{-ffinite-math-only} and
  @option{-fno-trapping-math}.
  This option is off by default. Before you can use this option, you must sure the
! target CPU supports frecipe and frsqrte instructions.
  Note that while the throughput of the sequence is higher than the throughput of
  the non-reciprocal instruction, the precision of the sequence can be decreased
  by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
--- 28934,28940 ----
  is enabled together with @option{-ffinite-math-only} and
  @option{-fno-trapping-math}.
  This option is off by default. Before you can use this option, you must sure the
! target CPU supports the @code{frecipe} and @code{frsqrte} instructions.
  Note that while the throughput of the sequence is higher than the throughput of
  the non-reciprocal instruction, the precision of the sequence can be decreased
  by up to 2 ulp (i.e. the inverse of 1.0 equals 0.99999994).
*************** all of the reciprocal approximations, ex
*** 29092,29122 ****
  @item -mfrecipe
  @itemx -mno-frecipe
  Use (do not use) @code{frecipe.@{s/d@}} and @code{frsqrte.@{s/d@}}
! instructions.  When build with @option{-march=la664}, it is enabled by default.
! The default is @option{-mno-frecipe}.
  
  @opindex mdiv32
  @opindex mno-div32
  @item -mdiv32
  @itemx -mno-div32
  Use (do not use) @code{div.w[u]} and @code{mod.w[u]} instructions with input
! not sign-extended.  When build with @option{-march=la664}, it is enabled by
! default.  The default is @option{-mno-div32}.
  
  @opindex mlam-bh
  @opindex mno-lam-bh
  @item -mlam-bh
  @itemx -mno-lam-bh
! Use (do not use) @code{am@{swap/add@}[_db].@{b/h@}} instructions.  When build
! with @option{-march=la664}, it is enabled by default.  The default is
! @option{-mno-lam-bh}.
  
  @opindex mlamcas
  @opindex mno-lamcas
  @item -mlamcas
  @itemx -mno-lamcas
! Use (do not use) @code{amcas[_db].@{b/h/w/d@}} instructions.  When build with
! @option{-march=la664}, it is enabled by default.  The default is
  @option{-mno-lamcas}.
  
  @opindex mld-seq-sa
--- 28982,29014 ----
  @item -mfrecipe
  @itemx -mno-frecipe
  Use (do not use) @code{frecipe.@{s/d@}} and @code{frsqrte.@{s/d@}}
! instructions.  When compiling with @option{-march=la664},
! it is enabled by default.  Otherwise the default is @option{-mno-frecipe}.
  
  @opindex mdiv32
  @opindex mno-div32
  @item -mdiv32
  @itemx -mno-div32
  Use (do not use) @code{div.w[u]} and @code{mod.w[u]} instructions with input
! not sign-extended.  When compiling with @option{-march=la664}, it is enabled by
! default.  Otherwise the default is @option{-mno-div32}.
  
  @opindex mlam-bh
  @opindex mno-lam-bh
  @item -mlam-bh
  @itemx -mno-lam-bh
! Use (do not use) @code{am@{swap/add@}[_db].@{b/h@}} instructions.
! When compiling
! with @option{-march=la664}, it is enabled by default.  Otherwise
! the default is @option{-mno-lam-bh}.
  
  @opindex mlamcas
  @opindex mno-lamcas
  @item -mlamcas
  @itemx -mno-lamcas
! Use (do not use) @code{amcas[_db].@{b/h/w/d@}} instructions.
! When compiling with
! @option{-march=la664}, it is enabled by default.  Otherwise the default is
  @option{-mno-lamcas}.
  
  @opindex mld-seq-sa
*************** Use (do not use) @code{amcas[_db].@{b/h/
*** 29124,29130 ****
  @item -mld-seq-sa
  @itemx -mno-ld-seq-sa
  Whether a same-address load-load barrier (@code{dbar 0x700}) is needed.  When
! build with @option{-march=la664}, it is enabled by default.  The default is
  @option{-mno-ld-seq-sa}, the load-load barrier is needed.
  
  @opindex mscq
--- 29016,29023 ----
  @item -mld-seq-sa
  @itemx -mno-ld-seq-sa
  Whether a same-address load-load barrier (@code{dbar 0x700}) is needed.  When
! compiling with @option{-march=la664}, it is enabled by default.
! Otherwise the default is
  @option{-mno-ld-seq-sa}, the load-load barrier is needed.
  
  @opindex mscq
*************** The default is @option{-mscq} if the mac
*** 29137,29144 ****
  
  @opindex mtls-dialect
  @item -mtls-dialect=@var{opt}
! This option controls which tls dialect may be used for general dynamic and
! local dynamic TLS models.
  
  @table @samp
  @item trad
--- 29030,29037 ----
  
  @opindex mtls-dialect
  @item -mtls-dialect=@var{opt}
! This option controls which TLS dialect may be used for general dynamic and
! local dynamic TLS models.  The @var{opt} argument can be one of:
  
  @table @samp
  @item trad
*************** Create an annotation section @code{.disc
*** 29156,29168 ****
  correlate the @code{jirl} instruction and the jump table when a jump
  table is used to optimize the @code{switch} statement.  Some external
  tools, for example @file{objtool} of the Linux kernel building system,
! need the annotation to analysis the control flow.  The default is
  @option{-mno-annotate-tablejump}.
  
  @item --param loongarch-vect-unroll-limit=@var{n}
! The vectorizer will use available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter set's the upper bound of how much the vectorizer will unroll the main
  loop.  The default value is six.
  
  @end table
--- 29049,29061 ----
  correlate the @code{jirl} instruction and the jump table when a jump
  table is used to optimize the @code{switch} statement.  Some external
  tools, for example @file{objtool} of the Linux kernel building system,
! need the annotation to analyze the control flow.  The default is
  @option{-mno-annotate-tablejump}.
  
  @item --param loongarch-vect-unroll-limit=@var{n}
! The vectorizer uses available tuning information to determine whether it
  would be beneficial to unroll the main vectorized loop and by how much.  This
! parameter sets the upper bound of how much the vectorizer unrolls the main
  loop.  The default value is six.
  
  @end table
*************** Select the CPU for which code is generat
*** 29181,29186 ****
--- 29074,29080 ----
  the M32C/80 series.
  
  @opindex msim
+ @opindex mno-sim
  @item -msim
  Specifies that the program will be run on the simulator.  This causes
  an alternate runtime library to be linked in which supports, for
*************** Generate code for the M32R/X@.
*** 29219,29224 ****
--- 29113,29119 ----
  @item -m32r
  Generate code for the M32R@.  This is the default.
  
+ @opindex mmodel
  @opindex mmodel=small
  @item -mmodel=small
  Assume all objects live in the lower 16MB of memory (so that their addresses
*************** assume subroutines may not be reachable
*** 29243,29248 ****
--- 29138,29144 ----
  (the compiler generates the much slower @code{seth/add3/jl}
  instruction sequence).
  
+ @opindex msdata
  @opindex msdata=none
  @item -msdata=none
  Disable use of the small data area.  Variables are put into
*************** Makes the M32R-specific code in the comp
*** 29284,29307 ****
  that might help in debugging programs.
  
  @opindex malign-loops
- @item -malign-loops
- Align all loops to a 32-byte boundary.
- 
  @opindex mno-align-loops
! @item -mno-align-loops
! Do not enforce a 32-byte alignment for loops.  This is the default.
  
! @opindex missue-rate=@var{number}
  @item -missue-rate=@var{number}
  Issue @var{number} instructions per cycle.  @var{number} can only be 1
  or 2.
  
! @opindex mbranch-cost=@var{number}
  @item -mbranch-cost=@var{number}
  @var{number} can only be 1 or 2.  If it is 1 then branches are
  preferred over conditional code, if it is 2, then the opposite applies.
  
! @opindex mflush-trap=@var{number}
  @item -mflush-trap=@var{number}
  Specifies the trap number to use to flush the cache.  The default is
  12.  Valid numbers are between 0 and 15 inclusive.
--- 29180,29201 ----
  that might help in debugging programs.
  
  @opindex malign-loops
  @opindex mno-align-loops
! @item -malign-loops
! @itemx -mno-align-loops
! Align all loops to a 32-byte boundary.  This option is disabled by default.
  
! @opindex missue-rate
  @item -missue-rate=@var{number}
  Issue @var{number} instructions per cycle.  @var{number} can only be 1
  or 2.
  
! @opindex mbranch-cost
  @item -mbranch-cost=@var{number}
  @var{number} can only be 1 or 2.  If it is 1 then branches are
  preferred over conditional code, if it is 2, then the opposite applies.
  
! @opindex mflush-trap
  @item -mflush-trap=@var{number}
  Specifies the trap number to use to flush the cache.  The default is
  12.  Valid numbers are between 0 and 15 inclusive.
*************** Specifies the trap number to use to flus
*** 29310,29316 ****
  @item -mno-flush-trap
  Specifies that the cache cannot be flushed by using a trap.
  
! @opindex mflush-func=@var{name}
  @item -mflush-func=@var{name}
  Specifies the name of the operating system function to call to flush
  the cache.  The default is @samp{_flush_cache}, but a function call
--- 29204,29210 ----
  @item -mno-flush-trap
  Specifies that the cache cannot be flushed by using a trap.
  
! @opindex mflush-func
  @item -mflush-func=@var{name}
  Specifies the name of the operating system function to call to flush
  the cache.  The default is @samp{_flush_cache}, but a function call
*************** example, the default is ``off'' for @opt
*** 29566,29596 ****
  GCC defines the macro @code{__mcfhwdiv__} when this option is enabled.
  
  @opindex mshort
  @item -mshort
  Consider type @code{int} to be 16 bits wide, like @code{short int}.
  Additionally, parameters passed on the stack are also aligned to a
  16-bit boundary even on targets whose API mandates promotion to 32-bit.
! 
! @opindex mno-short
! @item -mno-short
! Do not consider type @code{int} to be 16 bits wide.  This is the default.
! 
! @opindex mnobitfield
! @opindex mno-bitfield
! @item -mnobitfield
! @itemx -mno-bitfield
! Do not use the bit-field instructions.  The @option{-m68000}, @option{-mcpu32}
! and @option{-m5200} options imply @w{@option{-mnobitfield}}.
  
  @opindex mbitfield
  @item -mbitfield
! Do use the bit-field instructions.  The @option{-m68020} option implies
! @option{-mbitfield}.  This is the default if you use a configuration
! designed for a 68020.
  
  @opindex mrtd
  @item -mrtd
! Use a different function-calling convention, in which functions
  that take a fixed number of arguments return with the @code{rtd}
  instruction, which pops their arguments while returning.  This
  saves one instruction in the caller since there is no need to pop
--- 29460,29489 ----
  GCC defines the macro @code{__mcfhwdiv__} when this option is enabled.
  
  @opindex mshort
+ @opindex mno-short
  @item -mshort
+ @itemx -mno-short
  Consider type @code{int} to be 16 bits wide, like @code{short int}.
  Additionally, parameters passed on the stack are also aligned to a
  16-bit boundary even on targets whose API mandates promotion to 32-bit.
! This option is disabled by default.
  
  @opindex mbitfield
+ @opindex mno-bitfield
+ @opindex mnobitfield
  @item -mbitfield
! @itemx -mno-bitfield
! @itemx -mnobitfield
! Control use of the bit-field instructions.
! The @option{-m68000}, @option{-mcpu32}
! and @option{-m5200} options imply @w{@option{-mnobitfield}};
! the @option{-m68020} option implies @option{-mbitfield}.
  
  @opindex mrtd
+ @opindex mno-rtd
  @item -mrtd
! @itemx -mno-rtd
! Control use of a different function-calling convention, in which functions
  that take a fixed number of arguments return with the @code{rtd}
  instruction, which pops their arguments while returning.  This
  saves one instruction in the caller since there is no need to pop
*************** not presently supported with @option{-mp
*** 29642,29667 ****
  Do not (do) assume that unaligned memory references are handled by
  the system.
  
  @item -msep-data
! Generate code that allows the data segment to be located in a different
  area of memory from the text segment.  This allows for execute-in-place in
  an environment without virtual memory management.  This option implies
  @option{-fPIC}.
  
! @item -mno-sep-data
! Generate code that assumes that the data segment follows the text segment.
! This is the default.
  
  @item -mid-shared-library
! Generate code that supports shared libraries via the library ID method.
  This allows for execute-in-place and shared libraries in an environment
  without virtual memory management.  This option implies @option{-fPIC}.
  
! @item -mno-id-shared-library
! Generate code that doesn't assume ID-based shared libraries are being used.
! This is the default.
  
! @item -mshared-library-id=n
  Specifies the identification number of the ID-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
--- 29535,29566 ----
  Do not (do) assume that unaligned memory references are handled by
  the system.
  
+ @opindex msep-data
+ @opindex mno-sep-data
  @item -msep-data
! @itemx -mno-sep-data
! With @option{-msep-data},
! generate code that allows the data segment to be located in a different
  area of memory from the text segment.  This allows for execute-in-place in
  an environment without virtual memory management.  This option implies
  @option{-fPIC}.
  
! This option is disabled by default; GCC
! generates code that assumes that the data segment follows the text segment.
  
+ @opindex mid-shared-library
+ @opindex mno-id-shared-libary
  @item -mid-shared-library
! @itemx -mno-id-shared-library
! If enabled, generate code that supports shared libraries via the
! library ID method.
  This allows for execute-in-place and shared libraries in an environment
  without virtual memory management.  This option implies @option{-fPIC}.
  
! This option is disabled by default.
  
! @opindex mshared-library-id
! @item -mshared-library-id=@var{n}
  Specifies the identification number of the ID-based shared library being
  compiled.  Specifying a value of 0 generates more compact code; specifying
  other values forces the allocation of that number to the current
*************** Prefer word access when reading byte qua
*** 29762,29775 ****
  @opindex mbig-endian
  @item -mlittle-endian
  @itemx -mbig-endian
! Generate code for a little-endian target.
  
  @opindex m210
- @opindex m340
  @item -m210
- @itemx -m340
  Generate code for the 210 processor.
  
  @opindex mno-lsim
  @item -mno-lsim
  Assume that runtime support has been provided and so omit the
--- 29661,29678 ----
  @opindex mbig-endian
  @item -mlittle-endian
  @itemx -mbig-endian
! Generate code for a little- or big-endian target, respectively.  The
! default is big-endian.  Little-endian code is supported only
! with @option{-m340}.
  
  @opindex m210
  @item -m210
  Generate code for the 210 processor.
  
+ @opindex m340
+ @item -m340
+ Generate code for the 340 processor.
+ 
  @opindex mno-lsim
  @item -mno-lsim
  Assume that runtime support has been provided and so omit the
*************** Use software emulation for floating poin
*** 29800,29812 ****
  Use hardware floating-point instructions.
  
  @opindex mmemcpy
  @item -mmemcpy
  Do not optimize block moves, use @code{memcpy}.
  
- @opindex mno-clearbss
- @item -mno-clearbss
- This option is deprecated.  Use @option{-fno-zero-initialized-in-bss} instead.
- 
  @opindex mcpu=
  @item -mcpu=@var{cpu-type}
  Use features of, and schedule code for, the given CPU.
--- 29703,29712 ----
  Use hardware floating-point instructions.
  
  @opindex mmemcpy
+ @opindex mno-memcpy
  @item -mmemcpy
  Do not optimize block moves, use @code{memcpy}.
  
  @opindex mcpu=
  @item -mcpu=@var{cpu-type}
  Use features of, and schedule code for, the given CPU.
*************** where @var{X} is a major version, @var{Y
*** 29816,29857 ****
  @samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v6.00.a}.
  
  @opindex mxl-soft-mul
  @item -mxl-soft-mul
! Use software multiply emulation (default).
  
  @opindex mxl-soft-div
  @item -mxl-soft-div
! Use software emulation for divides (default).
  
  @opindex mxl-barrel-shift
  @item -mxl-barrel-shift
  Use the hardware barrel shifter.
  
  @opindex mxl-pattern-compare
  @item -mxl-pattern-compare
  Use pattern compare instructions.
  
  @opindex msmall-divides
  @item -msmall-divides
  Use table lookup optimization for small signed integer divisions.
  
- @opindex mxl-stack-check
- @item -mxl-stack-check
- This option is deprecated.  Use @option{-fstack-check} instead.
- 
  @opindex mxl-gp-opt
  @item -mxl-gp-opt
  Use GP-relative @code{.sdata}/@code{.sbss} sections.
  
  @opindex mxl-multiply-high
  @item -mxl-multiply-high
  Use multiply high instructions for high part of 32x32 multiply.
  
  @opindex mxl-float-convert
  @item -mxl-float-convert
  Use hardware floating-point conversion instructions.
  
  @opindex mxl-float-sqrt
  @item -mxl-float-sqrt
  Use hardware floating-point square root instruction.
  
--- 29716,29764 ----
  @samp{v4.00.b}, @samp{v5.00.a}, @samp{v5.00.b}, @samp{v6.00.a}.
  
  @opindex mxl-soft-mul
+ @opindex mno-xl-soft-mul
  @item -mxl-soft-mul
! @itemx -mno-xl-soft-mul
! Use software multiply emulation.  This is enabled by default.
  
  @opindex mxl-soft-div
+ @opindex mno-xl-soft-div
  @item -mxl-soft-div
! @itemx -mno-xl-soft-div
! Use software emulation for divides.  This is enabled by default.
  
  @opindex mxl-barrel-shift
+ @opindex mno-xl-barrel-shift
  @item -mxl-barrel-shift
  Use the hardware barrel shifter.
  
  @opindex mxl-pattern-compare
+ @opindex mno-xl-pattern-compare
  @item -mxl-pattern-compare
  Use pattern compare instructions.
  
  @opindex msmall-divides
+ @opindex mno-small-divides
  @item -msmall-divides
  Use table lookup optimization for small signed integer divisions.
  
  @opindex mxl-gp-opt
+ @opindex mno-xl-gp-opt
  @item -mxl-gp-opt
  Use GP-relative @code{.sdata}/@code{.sbss} sections.
  
  @opindex mxl-multiply-high
+ @opindex mno-xl-multiply-high
  @item -mxl-multiply-high
  Use multiply high instructions for high part of 32x32 multiply.
  
  @opindex mxl-float-convert
+ @opindex mno-xl-float-convert
  @item -mxl-float-convert
  Use hardware floating-point conversion instructions.
  
  @opindex mxl-float-sqrt
+ @opindex mno-xl-float-sqrt
  @item -mxl-float-sqrt
  Use hardware floating-point square root instruction.
  
*************** Generate code for a little-endian target
*** 29867,29872 ****
--- 29774,29787 ----
  @item -mxl-reorder
  Use reorder instructions (swap and byte reversed load/store).
  
+ @opindex mxl-mode-executable
+ @opindex mno-xl-mode-executable
+ @opindex mxl-mode-xmdstub
+ @opindex mno-xl-mode-xmdstub
+ @opindex mxl-mode-bootstrap
+ @opindex mno-xl-mode-bootstrap
+ @opindex mxl-mode-novectors
+ @opindex mno-xl-mode-novectors
  @item -mxl-mode-@var{app-model}
  Select application model @var{app-model}.  Valid models are
  @table @samp
*************** MicroBlaze vectors. This option may be u
*** 29890,29899 ****
  within a monitoring application. This model uses @file{crt3.o} as a startup file.
  @end table
  
! Option @option{-xl-mode-@var{app-model}} is a deprecated alias for
! @option{-mxl-mode-@var{app-model}}.
  
  @opindex mpic-data-is-text-relative
  @item -mpic-data-is-text-relative
  Assume that the displacement between the text and data segments is fixed
  at static link time.  This allows data to be referenced by offset from start of
--- 29805,29817 ----
  within a monitoring application. This model uses @file{crt3.o} as a startup file.
  @end table
  
! @opindex mxl-prefetch
! @opindex mno-xl-prefetch
! @item -mxl-prefetch
! Enable insertion of prefetch (@code{wic}) instructions at call sites.
  
  @opindex mpic-data-is-text-relative
+ @opindex mno-pic-data-is-text-relative
  @item -mpic-data-is-text-relative
  Assume that the displacement between the text and data segments is fixed
  at static link time.  This allows data to be referenced by offset from start of
*************** text address instead of GOT since PC-rel
*** 29908,29918 ****
--- 29826,29841 ----
  @table @gcctabopt
  
  @opindex EB
+ @opindex meb
+ @opindex mno-el
  @item -EB
+ @itemx -meb
  Generate big-endian code.
  
  @opindex EL
+ @opindex mel
  @item -EL
+ @itemx -mel
  Generate little-endian code.  This is the default for @samp{mips*el-*-*}
  configurations.
  
*************** Use (do not use) the MIPS16e2 ASE.  This
*** 30080,30086 ****
--- 30003,30011 ----
  of the @option{-mips16} option such that it targets the MIPS16e2 ASE@.
  
  @opindex mflip-mips16
+ @opindex mno-flip-mips16
  @item -mflip-mips16
+ @itemx -mflip-mips16
  Generate MIPS16 code on alternating functions.  This option is provided
  for regression testing of mixed MIPS16/non-MIPS16 code generation, and is
  not intended for ordinary use in compiling user code.
*************** Generate (do not generate) code that is
*** 30154,30159 ****
--- 30079,30086 ----
  dynamic objects.  @option{-mabicalls} is the default for SVR4-based
  systems.
  
+ @opindex mshared
+ @opindex mno-shared
  @item -mshared
  @itemx -mno-shared
  Generate (do not generate) code that is fully position-independent,
*************** Use (do not use) the MIPS Cyclic Redunda
*** 30434,30439 ****
--- 30361,30372 ----
  @itemx -mno-ginv
  Use (do not use) the MIPS Global INValidate (GINV) instructions.
  
+ @opindex mmsa
+ @opindex mno-msa
+ @item -mmsa
+ @itemx -mno-msa
+ Use (do not use) the MIPS MSA extension instructions.
+ 
  @opindex mloongson-mmi
  @opindex mno-loongson-mmi
  @item -mloongson-mmi
*************** to support bonding.
*** 30649,30658 ****
  @itemx -munaligned-access
  @itemx -mno-unaligned-access
  Disable (enable) direct unaligned access for MIPS Release 6.
! MIPSr6 requires load/store unaligned-access support, by hardware or
! trap&emulate.  So @option{-mstrict-align} may be needed by kernel.  The
  options @option{-munaligned-access} and @option{-mno-unaligned-access}
! are obsoleted, and only for backward-compatible.
  
  @opindex mmemcpy
  @opindex mno-memcpy
--- 30582,30592 ----
  @itemx -munaligned-access
  @itemx -mno-unaligned-access
  Disable (enable) direct unaligned access for MIPS Release 6.
! MIPSr6 requires load/store unaligned-access support, either by hardware or
! by trapping and emulation.  In the latter case @option{-mstrict-align}
! may be needed by the operating system kernel.  The
  options @option{-munaligned-access} and @option{-mno-unaligned-access}
! are obsolete, and only provided for backward compatibility.
  
  @opindex mmemcpy
  @opindex mno-memcpy
*************** branch-likely instructions.  @option{-mf
*** 30761,30766 ****
--- 30695,30701 ----
  otherwise.
  
  @opindex mfix-r5900
+ @opindex mno-fix-r5900
  @item -mfix-r5900
  @itemx -mno-fix-r5900
  Do not attempt to schedule the preceding instruction into the delay slot
*************** execute only once or twice, due to a har
*** 30771,30782 ****
--- 30706,30719 ----
  workaround is implemented by the assembler rather than by GCC@.
  
  @opindex mfix-rm7000
+ @opindex mno-fix-rm7000
  @item -mfix-rm7000
  @itemx -mno-fix-rm7000
  Work around the RM7000 @code{dmult}/@code{dmultu} errata.  The
  workarounds are implemented by the assembler rather than by GCC@.
  
  @opindex mfix-vr4120
+ @opindex mno-fix-vr4120
  @item -mfix-vr4120
  @itemx -mno-fix-vr4120
  Work around certain VR4120 errata:
*************** Other VR4120 errata require a NOP to be
*** 30795,30801 ****
--- 30732,30740 ----
  instructions.  These errata are handled by the assembler, not by GCC itself.
  
  @opindex mfix-vr4130
+ @opindex mno-fix-vr4130
  @item -mfix-vr4130
+ @itemx -mno-fix-vr4130
  Work around the VR4130 @code{mflo}/@code{mfhi} errata.  The
  workarounds are implemented by the assembler rather than by GCC,
  although GCC avoids using @code{mflo} and @code{mfhi} if the
*************** VR4130 @code{macc}, @code{macchi}, @code
*** 30803,30814 ****
--- 30742,30761 ----
  instructions are available instead.
  
  @opindex mfix-sb1
+ @opindex mno-fix-sb1
  @item -mfix-sb1
  @itemx -mno-fix-sb1
  Work around certain SB-1 CPU core errata.
  (This flag currently works around the SB-1 revision 2
  ``F1'' and ``F2'' floating-point errata.)
  
+ @opindex mfix4300
+ @opindex mno-fix4300
+ @item -mfix4300
+ @itemx -mno-fix4300
+ Work around a bug in early VR4300 silicon that causes multiplies with
+ certain operands to corrupt immediately following multiplies.
+ 
  @opindex mr10k-cache-barrier
  @item -mr10k-cache-barrier=@var{setting}
  Specify whether GCC should insert cache barriers to avoid the
*************** and MIPS64 architectures specifically de
*** 30913,30939 ****
  @item -mcompact-branches=never
  @itemx -mcompact-branches=optimal
  @itemx -mcompact-branches=always
! These options control which form of branches will be generated.  The
  default is @option{-mcompact-branches=optimal}.
  
  The @option{-mcompact-branches=never} option ensures that compact branch
! instructions will never be generated.
  
  The @option{-mcompact-branches=always} option ensures that a compact
! branch instruction will be generated if available for MIPS Release 6 onwards.
  If a compact branch instruction is not available (or pre-R6),
! a delay slot form of the branch will be used instead.
  
! If it is used for MIPS16/microMIPS targets, it will be just ignored now.
  The behavior for MIPS16/microMIPS may change in future,
  since they do have some compact branch instructions.
  
! The @option{-mcompact-branches=optimal} option will cause a delay slot
  branch to be used if one is available in the current ISA and the delay
  slot is successfully filled.  If the delay slot is not filled, a compact
! branch will be chosen if one is available.
  
  @opindex mfp-exceptions
  @item -mfp-exceptions
  @itemx -mno-fp-exceptions
  Specifies whether FP exceptions are enabled.  This affects how
--- 30860,30887 ----
  @item -mcompact-branches=never
  @itemx -mcompact-branches=optimal
  @itemx -mcompact-branches=always
! These options control which form of branches are generated.  The
  default is @option{-mcompact-branches=optimal}.
  
  The @option{-mcompact-branches=never} option ensures that compact branch
! instructions are never generated.
  
  The @option{-mcompact-branches=always} option ensures that a compact
! branch instruction is generated if available for MIPS Release 6 onwards.
  If a compact branch instruction is not available (or pre-R6),
! a delay slot form of the branch is used instead.
  
! If it is used for MIPS16/microMIPS targets, it is just ignored now.
  The behavior for MIPS16/microMIPS may change in future,
  since they do have some compact branch instructions.
  
! The @option{-mcompact-branches=optimal} option causes a delay slot
  branch to be used if one is available in the current ISA and the delay
  slot is successfully filled.  If the delay slot is not filled, a compact
! branch is chosen if one is available.
  
  @opindex mfp-exceptions
+ @opindex mno-fp-exceptions
  @item -mfp-exceptions
  @itemx -mno-fp-exceptions
  Specifies whether FP exceptions are enabled.  This affects how
*************** It normally makes code faster, but at th
*** 30958,30963 ****
--- 30906,30912 ----
  It is enabled by default at optimization level @option{-O3}.
  
  @opindex msynci
+ @opindex mno-synci
  @item -msynci
  @itemx -mno-synci
  Enable (disable) generation of @code{synci} instructions on
*************** does not invalidate the instruction cach
*** 30974,30979 ****
--- 30923,30929 ----
  to undefined behavior.
  
  @opindex mrelax-pic-calls
+ @opindex mno-relax-pic-calls
  @item -mrelax-pic-calls
  @itemx -mno-relax-pic-calls
  Try to turn PIC calls that are normally dispatched via register
*************** if @var{ra-address} is nonnull.
*** 31008,31030 ****
  The default is @option{-mno-mcount-ra-address}.
  
  @opindex mframe-header-opt
  @item -mframe-header-opt
  @itemx -mno-frame-header-opt
  Enable (disable) frame header optimization in the o32 ABI.  When using the
! o32 ABI, calling functions will allocate 16 bytes on the stack for the called
  function to write out register arguments.  When enabled, this optimization
! will suppress the allocation of the frame header if it can be determined that
  it is unused.
  
  This optimization is off by default at all optimization levels.
  
  @opindex mlxc1-sxc1
  @item -mlxc1-sxc1
  @itemx -mno-lxc1-sxc1
  When applicable, enable (disable) the generation of @code{lwxc1},
  @code{swxc1}, @code{ldxc1}, @code{sdxc1} instructions.  Enabled by default.
  
  @opindex mmadd4
  @item -mmadd4
  @itemx -mno-madd4
  When applicable, enable (disable) the generation of 4-operand @code{madd.s},
--- 30958,30983 ----
  The default is @option{-mno-mcount-ra-address}.
  
  @opindex mframe-header-opt
+ @opindex mno-frame-header-opt
  @item -mframe-header-opt
  @itemx -mno-frame-header-opt
  Enable (disable) frame header optimization in the o32 ABI.  When using the
! o32 ABI, calling functions allocates 16 bytes on the stack for the called
  function to write out register arguments.  When enabled, this optimization
! suppresses the allocation of the frame header if it can be determined that
  it is unused.
  
  This optimization is off by default at all optimization levels.
  
  @opindex mlxc1-sxc1
+ @opindex mno-lxc1-sxc1
  @item -mlxc1-sxc1
  @itemx -mno-lxc1-sxc1
  When applicable, enable (disable) the generation of @code{lwxc1},
  @code{swxc1}, @code{ldxc1}, @code{sdxc1} instructions.  Enabled by default.
  
  @opindex mmadd4
+ @opindex mno-madd4
  @item -mmadd4
  @itemx -mno-madd4
  When applicable, enable (disable) the generation of 4-operand @code{madd.s},
*************** These @option{-m} options are defined fo
*** 31126,31156 ****
  
  @table @gcctabopt
  @opindex mmult-bug
- @item -mmult-bug
- Generate code to avoid bugs in the multiply instructions for the MN10300
- processors.  This is the default.
- 
  @opindex mno-mult-bug
! @item -mno-mult-bug
! Do not generate code to avoid bugs in the multiply instructions for the
! MN10300 processors.
  
  @opindex mam33
  @item -mam33
  Generate code using features specific to the AM33 processor.
! 
! @opindex mno-am33
! @item -mno-am33
! Do not generate code using features specific to the AM33 processor.  This
! is the default.
  
  @opindex mam33-2
  @item -mam33-2
  Generate code using features specific to the AM33/2.0 processor.
  
  @opindex mam34
  @item -mam34
  Generate code using features specific to the AM34 processor.
  
  @opindex mtune
  @item -mtune=@var{cpu-type}
--- 31079,31110 ----
  
  @table @gcctabopt
  @opindex mmult-bug
  @opindex mno-mult-bug
! @item -mmult-bug
! @itemx -mno-mult-bug
! When enabled, generate code to avoid bugs in the multiply instructions
! for the MN10300 processors.  This is the default.
  
  @opindex mam33
+ @opindex mno-am33
  @item -mam33
+ @itemx -mno-am33
  Generate code using features specific to the AM33 processor.
! The default is @option{-mno-am33}.
  
  @opindex mam33-2
+ @opindex mno-am33-2
  @item -mam33-2
+ @itemx -mno-am33-2
  Generate code using features specific to the AM33/2.0 processor.
+ The default is @option{-mno-am33-2}.
  
  @opindex mam34
+ @opindex mno-am34
  @item -mam34
+ @itemx -mno-am34
  Generate code using features specific to the AM34 processor.
+ The default is @option{-mno-am34}.
  
  @opindex mtune
  @item -mtune=@var{cpu-type}
*************** type.  The CPU type must be one of @samp
*** 31160,31166 ****
--- 31114,31122 ----
  @samp{am33-2} or @samp{am34}.
  
  @opindex mreturn-pointer-on-d0
+ @opindex mno-return-pointer-on-d0
  @item -mreturn-pointer-on-d0
+ @itemx -mno-return-pointer-on-d0
  When generating a function that returns a pointer, return the pointer
  in both @code{a0} and @code{d0}.  Otherwise, the pointer is returned
  only in @code{a0}, and attempts to call such functions without a prototype
*************** has an effect when used on the command l
*** 31180,31207 ****
  This option makes symbolic debugging impossible.
  
  @opindex mliw
  @item -mliw
  Allow the compiler to generate @emph{Long Instruction Word}
! instructions if the target is the @samp{AM33} or later.  This is the
! default.  This option defines the preprocessor macro @code{__LIW__}.
! 
! @opindex mno-liw
! @item -mno-liw
! Do not allow the compiler to generate @emph{Long Instruction Word}
! instructions.  This option defines the preprocessor macro
! @code{__NO_LIW__}.
  
  @opindex msetlb
  @item -msetlb
  Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
! instructions if the target is the @samp{AM33} or later.  This is the
! default.  This option defines the preprocessor macro @code{__SETLB__}.
! 
! @opindex mno-setlb
! @item -mno-setlb
! Do not allow the compiler to generate @emph{SETLB} or @emph{Lcc}
! instructions.  This option defines the preprocessor macro
! @code{__NO_SETLB__}.
  
  @end table
  
--- 31136,31159 ----
  This option makes symbolic debugging impossible.
  
  @opindex mliw
+ @opindex mno-liw
  @item -mliw
+ @itemx -mno-liw
  Allow the compiler to generate @emph{Long Instruction Word}
! instructions if the target is the @samp{AM33} or later.  This option is
! enabled by default.
! @option{-mliw} defines the preprocessor macro @code{__LIW__};
! @option{-mno-liw} defines the preprocessor macro @code{__NO_LIW__}.
  
  @opindex msetlb
+ @opindex mno-setlb
  @item -msetlb
+ @itemx -mno-setlb
  Allow the compiler to generate the @emph{SETLB} and @emph{Lcc}
! instructions if the target is the @samp{AM33} or later.  This option is
! enabled by default.
! @option{-msetlb} defines the preprocessor macro @code{__SETLB__};
! @option{-mno-setlb} defines the preprocessor macro @code{__NO_SETLB__}.
  
  @end table
  
*************** configurations.
*** 31221,31228 ****
  Generate little-endian code.
  
  @opindex mmul.x
  @item -mmul.x
! Generate mul.x and umul.x instructions.  This is the default for
  @samp{moxiebox-*-*} configurations.
  
  @opindex mno-crt0
--- 31173,31182 ----
  Generate little-endian code.
  
  @opindex mmul.x
+ @opindex mno-mul.x
  @item -mmul.x
! @itemx -mno-mul.x
! Generate mul.x and umul.x instructions.  This option is enabled by default for
  @samp{moxiebox-*-*} configurations.
  
  @opindex mno-crt0
*************** These options are defined for the MSP430
*** 31240,31252 ****
  @table @gcctabopt
  
  @opindex masm-hex
  @item -masm-hex
  Force assembly output to always use hex constants.  Normally such
  constants are signed decimals, but this option is available for
  testsuite and/or aesthetic purposes.
  
  @opindex mmcu=
! @item -mmcu=
  Select the MCU to target.  This is used to create a C preprocessor
  symbol based upon the MCU name, converted to upper case and pre- and
  post-fixed with @samp{__}.  This in turn is used by the
--- 31194,31207 ----
  @table @gcctabopt
  
  @opindex masm-hex
+ @opindex mno-asm-hex
  @item -masm-hex
  Force assembly output to always use hex constants.  Normally such
  constants are signed decimals, but this option is available for
  testsuite and/or aesthetic purposes.
  
  @opindex mmcu=
! @item -mmcu=@var{name}
  Select the MCU to target.  This is used to create a C preprocessor
  symbol based upon the MCU name, converted to upper case and pre- and
  post-fixed with @samp{__}.  This in turn is used by the
*************** command line defines the C preprocessor
*** 31266,31302 ****
  cause the linker to search for a script called @file{xxx.ld}.
  
  The ISA and hardware multiply supported for the different MCUs is hard-coded
! into GCC.  However, an external @samp{devices.csv} file can be used to
  extend device support beyond those that have been hard-coded.
  
! GCC searches for the @samp{devices.csv} file using the following methods in the
  given precedence order, where the first method takes precedence over the
  second which takes precedence over the third.
  
  @table @asis
! @item Include path specified with @code{-I} and @code{-L}
! @samp{devices.csv} is searched for in each of the directories specified by
  include paths and linker library search paths.
! @item Path specified by the environment variable @samp{MSP430_GCC_INCLUDE_DIR}
  Define the value of the global environment variable
! @samp{MSP430_GCC_INCLUDE_DIR}
! to the full path to the directory containing devices.csv, and GCC will search
! this directory for devices.csv.  If devices.csv is found, this directory is
  also registered as an include path and linker library path.  Header files
  and linker scripts in this directory can therefore be used without manually
! specifying @code{-I} and @code{-L} on the command line.
! @item The @samp{msp430-elf@{,bare@}/include/devices} directory
! Finally, GCC examines @samp{msp430-elf@{,bare@}/include/devices} from the
  toolchain root directory.  This directory does not exist in a default
! installation, but if the user has created it and copied @samp{devices.csv}
  there, then the MCU data is read.  As above, this directory is
  also registered as an include path and linker library path.
  
  @end table
! If none of the above search methods find @samp{devices.csv}, then the
  hard-coded MCU data is used.
  
- 
  @opindex mwarn-mcu
  @opindex mno-warn-mcu
  @item -mwarn-mcu
--- 31221,31258 ----
  cause the linker to search for a script called @file{xxx.ld}.
  
  The ISA and hardware multiply supported for the different MCUs is hard-coded
! into GCC.  However, an external @file{devices.csv} file can be used to
  extend device support beyond those that have been hard-coded.
  
! GCC searches for the @file{devices.csv} file using the following methods in the
  given precedence order, where the first method takes precedence over the
  second which takes precedence over the third.
  
  @table @asis
! @item Include path specified with @option{-I} and @option{-L}
! @file{devices.csv} is searched for in each of the directories specified by
  include paths and linker library search paths.
! @item Path specified by the environment variable @env{MSP430_GCC_INCLUDE_DIR}
  Define the value of the global environment variable
! @env{MSP430_GCC_INCLUDE_DIR}
! to the full path to the directory containing @file{devices.csv},
! and GCC will search
! this directory for @file{devices.csv}.
! If @file{devices.csv} is found, this directory is
  also registered as an include path and linker library path.  Header files
  and linker scripts in this directory can therefore be used without manually
! specifying @option{-I} and @option{-L} on the command line.
! @item The @file{msp430-elf@{,bare@}/include/devices} directory
! Finally, GCC examines @file{msp430-elf@{,bare@}/include/devices} from the
  toolchain root directory.  This directory does not exist in a default
! installation, but if you have created it and copied @file{devices.csv}
  there, then the MCU data is read.  As above, this directory is
  also registered as an include path and linker library path.
  
  @end table
! If none of the above search methods find @file{devices.csv}, then the
  hard-coded MCU data is used.
  
  @opindex mwarn-mcu
  @opindex mno-warn-mcu
  @item -mwarn-mcu
*************** MCU name specified by the @option{-mmcu}
*** 31307,31319 ****
  @option{-mhwmult} option.  It also toggles warnings about unrecognized
  MCU names.  This option is on by default.
  
- @opindex mcpu=
- @item -mcpu=
- Specifies the ISA to use.  Accepted values are @samp{msp430},
- @samp{msp430x} and @samp{msp430xv2}.  This option is deprecated.  The
- @option{-mmcu=} option should be used to select the ISA.
- 
  @opindex msim
  @item -msim
  Link to the simulator runtime libraries and linker script.  Overrides
  any scripts that would be selected by the @option{-mmcu=} option.
--- 31263,31270 ----
  @option{-mhwmult} option.  It also toggles warnings about unrecognized
  MCU names.  This option is on by default.
  
  @opindex msim
+ @opindex -mno-sim
  @item -msim
  Link to the simulator runtime libraries and linker script.  Overrides
  any scripts that would be selected by the @option{-mmcu=} option.
*************** Use large-model addressing (20-bit point
*** 31327,31348 ****
  Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).
  
  @opindex mrelax
  @item -mrelax
  This option is passed to the assembler and linker, and allows the
  linker to perform certain optimizations that cannot be done until
  the final link.
  
! @opindex mhwmult=
! @item mhwmult=
  Describes the type of hardware multiply supported by the target.
! Accepted values are @samp{none} for no hardware multiply, @samp{16bit}
  for the original 16-bit-only multiply supported by early MCUs.
  @samp{32bit} for the 16/32-bit multiply supported by later MCUs and
  @samp{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
  A value of @samp{auto} can also be given.  This tells GCC to deduce
  the hardware multiply support based upon the MCU name provided by the
  @option{-mmcu} option.  If no @option{-mmcu} option is specified or if
! the MCU name is not recognized then no hardware multiply support is
  assumed.  @code{auto} is the default setting.
  
  Hardware multiplies are normally performed by calling a library
--- 31278,31301 ----
  Use small-model addressing (16-bit pointers, 16-bit @code{size_t}).
  
  @opindex mrelax
+ @opindex mno-relax
  @item -mrelax
  This option is passed to the assembler and linker, and allows the
  linker to perform certain optimizations that cannot be done until
  the final link.
  
! @opindex mhwmult
! @item mhwmult=@var{type}
  Describes the type of hardware multiply supported by the target.
! Accepted values for @var{type} are @samp{none} for no hardware multiply,
! @samp{16bit}
  for the original 16-bit-only multiply supported by early MCUs.
  @samp{32bit} for the 16/32-bit multiply supported by later MCUs and
  @samp{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
  A value of @samp{auto} can also be given.  This tells GCC to deduce
  the hardware multiply support based upon the MCU name provided by the
  @option{-mmcu} option.  If no @option{-mmcu} option is specified or if
! the MCU name is not recognized, then no hardware multiply support is
  assumed.  @code{auto} is the default setting.
  
  Hardware multiplies are normally performed by calling a library
*************** them safe to use inside interrupt handle
*** 31356,31382 ****
  
  @opindex minrt
  @item -minrt
! Enable the use of a minimum runtime environment - no static
  initializers or constructors.  This is intended for memory-constrained
  devices.  The compiler includes special symbols in some objects
  that tell the linker and runtime which code fragments are required.
  
  @opindex mtiny-printf
  @item -mtiny-printf
  Enable reduced code size @code{printf} and @code{puts} library functions.
  The @samp{tiny} implementations of these functions are not reentrant, so
  must be used with caution in multi-threaded applications.
  
! Support for streams has been removed and the string to be printed will
! always be sent to stdout via the @code{write} syscall.  The string is not
  buffered before it is sent to write.
  
  This option requires Newlib Nano IO, so GCC must be configured with
  @samp{--enable-newlib-nano-formatted-io}.
  
  @opindex mmax-inline-shift=
! @item -mmax-inline-shift=
! This option takes an integer between 0 and 64 inclusive, and sets
  the maximum number of inline shift instructions which should be emitted to
  perform a shift operation by a constant amount.  When this value needs to be
  exceeded, an mspabi helper function is used instead.  The default value is 4.
--- 31309,31336 ----
  
  @opindex minrt
  @item -minrt
! Enable the use of a minimum runtime environment without support for static
  initializers or constructors.  This is intended for memory-constrained
  devices.  The compiler includes special symbols in some objects
  that tell the linker and runtime which code fragments are required.
  
  @opindex mtiny-printf
+ @opindex mno-tiny-printf
  @item -mtiny-printf
  Enable reduced code size @code{printf} and @code{puts} library functions.
  The @samp{tiny} implementations of these functions are not reentrant, so
  must be used with caution in multi-threaded applications.
  
! Support for streams has been removed and the string to be printed are
! always sent to stdout via the @code{write} syscall.  The string is not
  buffered before it is sent to write.
  
  This option requires Newlib Nano IO, so GCC must be configured with
  @samp{--enable-newlib-nano-formatted-io}.
  
  @opindex mmax-inline-shift=
! @item -mmax-inline-shift=@var{n}
! This option takes an integer @var{n} between 0 and 64 inclusive, and sets
  the maximum number of inline shift instructions which should be emitted to
  perform a shift operation by a constant amount.  When this value needs to be
  exceeded, an mspabi helper function is used instead.  The default value is 4.
*************** this option is divided by 2 and the resu
*** 31389,31420 ****
  
  @opindex mcode-region
  @opindex mdata-region
! @item -mcode-region=
! @itemx -mdata-region=
  These options tell the compiler where to place functions and data that
  do not have one of the @code{lower}, @code{upper}, @code{either} or
! @code{section} attributes.  Possible values are @code{lower},
! @code{upper}, @code{either} or @code{any}.  The first three behave
! like the corresponding attribute.  The fourth possible value -
! @code{any} - is the default.  It leaves placement entirely up to the
  linker script and how it assigns the standard sections
  (@code{.text}, @code{.data}, etc) to the memory regions.
  
  @opindex msilicon-errata
! @item -msilicon-errata=
  This option passes on a request to assembler to enable the fixes for
! the named silicon errata.
  
  @opindex msilicon-errata-warn
! @item -msilicon-errata-warn=
  This option passes on a request to the assembler to enable warning
! messages when a silicon errata might need to be applied.
  
  @opindex mwarn-devices-csv
  @opindex mno-warn-devices-csv
  @item -mwarn-devices-csv
  @itemx -mno-warn-devices-csv
! Warn if @samp{devices.csv} is not found or there are problem parsing it
  (default: on).
  
  @end table
--- 31343,31382 ----
  
  @opindex mcode-region
  @opindex mdata-region
! @item -mcode-region=@var{where}
! @itemx -mdata-region=@var{where}
  These options tell the compiler where to place functions and data that
  do not have one of the @code{lower}, @code{upper}, @code{either} or
! @code{section} attributes.  Possible values for @var{where} are @samp{lower},
! @samp{upper}, @samp{either} or @samp{any}.  The first three behave
! like the corresponding attribute.  The fourth possible value,
! @samp{any}, is the default.  It leaves placement entirely up to the
  linker script and how it assigns the standard sections
  (@code{.text}, @code{.data}, etc) to the memory regions.
  
+ @opindex muse-lower-region-prefix
+ @opindex mno-use-lower-region-prefix
+ @item -muse-lower-region-prefix
+ Add the @samp{.lower} prefix to section names when compiling with
+ @option{-mcode-region=lower} or @option{-mdata-region=lower}.  Disabled
+ by default.
+ 
  @opindex msilicon-errata
! @item -msilicon-errata=@var{name}@r{[},@var{name}@dots{}@r{]}
  This option passes on a request to assembler to enable the fixes for
! the named silicon errata.  Refer to the assembler documentation for details.
  
  @opindex msilicon-errata-warn
! @item -msilicon-errata-warn=@var{name}@r{[},@var{name}@dots{}@r{]}
  This option passes on a request to the assembler to enable warning
! messages when a named silicon errata might need to be applied.  Refer to the
! assembler documentation for details.
  
  @opindex mwarn-devices-csv
  @opindex mno-warn-devices-csv
  @item -mwarn-devices-csv
  @itemx -mno-warn-devices-csv
! Warn if @file{devices.csv} is not found or there are problems parsing it
  (default: on).
  
  @end table
*************** Use reduced-set registers for register a
*** 31444,31495 ****
  Use full-set registers for register allocation.
  
  @opindex mcmov
- @item -mcmov
- Generate conditional move instructions.
- 
  @opindex mno-cmov
! @item -mno-cmov
! Do not generate conditional move instructions.
  
  @opindex mext-perf
- @item -mext-perf
- Generate performance extension instructions.
- 
  @opindex mno-ext-perf
! @item -mno-ext-perf
! Do not generate performance extension instructions.
  
  @opindex mext-perf2
- @item -mext-perf2
- Generate performance extension 2 instructions.
- 
  @opindex mno-ext-perf2
! @item -mno-ext-perf2
! Do not generate performance extension 2 instructions.
  
  @opindex mext-string
- @item -mext-string
- Generate string extension instructions.
- 
  @opindex mno-ext-string
! @item -mno-ext-string
! Do not generate string extension instructions.
  
  @opindex mv3push
- @item -mv3push
- Generate v3 push25/pop25 instructions.
- 
  @opindex mno-v3push
! @item -mno-v3push
! Do not generate v3 push25/pop25 instructions.
  
  @opindex m16-bit
- @item -m16-bit
- Generate 16-bit instructions.
- 
  @opindex mno-16-bit
! @item -mno-16-bit
! Do not generate 16-bit instructions.
  
  @opindex misr-vector-size
  @item -misr-vector-size=@var{num}
--- 31406,31445 ----
  Use full-set registers for register allocation.
  
  @opindex mcmov
  @opindex mno-cmov
! @item -mcmov
! @itemx -mno-cmov
! Enable/disable generation of conditional move instructions.
  
  @opindex mext-perf
  @opindex mno-ext-perf
! @item -mext-perf
! @itemx -mno-ext-perf
! Enable/disable generation of performance extension instructions.
  
  @opindex mext-perf2
  @opindex mno-ext-perf2
! @item -mext-perf2
! @itemx -mno-ext-perf2
! Enable/disable generation of performance extension 2 instructions.
  
  @opindex mext-string
  @opindex mno-ext-string
! @item -mext-string
! @itemx -mno-ext-string
! Enable/disable generation of string extension instructions.
  
  @opindex mv3push
  @opindex mno-v3push
! @item -mv3push
! @itemx -mno-v3push
! Enable/disable generation of v3 push25/pop25 instructions.
  
  @opindex m16-bit
  @opindex mno-16-bit
! @item -m16-bit
! @itemx -mno-16-bit
! Enable/disable generation of 16-bit instructions.
  
  @opindex misr-vector-size
  @item -misr-vector-size=@var{num}
*************** All the text and data segments can be wi
*** 31520,31531 ****
  @end table
  
  @opindex mctor-dtor
  @item -mctor-dtor
! Enable constructor/destructor feature.
  
  @opindex mrelax
  @item -mrelax
! Guide linker to relax instructions.
  
  @end table
  
--- 31470,31485 ----
  @end table
  
  @opindex mctor-dtor
+ @opindex mno-ctor-dtor
  @item -mctor-dtor
! @itemx -mno-ctor-dtor
! Enable/disable constructor/destructor feature.
  
  @opindex mrelax
+ @opindex mno-relax
  @item -mrelax
! @itemx -mno-relax
! Enable/disable linker option to relax instructions.
  
  @end table
  
*************** This option sets the value of the prepro
*** 31563,31569 ****
  @item -misa=@var{architecture-string}
  Alias of @option{-march=}.
  
! @opindex march
  @item -march-map=@var{architecture-string}
  Select the closest available @option{-march=} value that is not more
  capable.  For instance, for @option{-march-map=sm_50} select
--- 31517,31523 ----
  @item -misa=@var{architecture-string}
  Alias of @option{-march=}.
  
! @opindex march-map
  @item -march-map=@var{architecture-string}
  Select the closest available @option{-march=} value that is not more
  capable.  For instance, for @option{-march-map=sm_50} select
*************** Link in code for a __main kernel.  This
*** 31594,31602 ****
  offloading execution.
  
  @opindex moptimize
  @item -moptimize
! Apply partitioned execution optimizations.  This is the default when any
! level of optimization is selected.
  
  @opindex msoft-stack
  @opindex mno-soft-stack
--- 31548,31558 ----
  offloading execution.
  
  @opindex moptimize
+ @opindex mno-optimize
  @item -moptimize
! @itemx -mno-optimize
! Enable/disable partitioned execution optimizations.  This option is enabled by
! default when any level of optimization is selected.
  
  @opindex msoft-stack
  @opindex mno-soft-stack
*************** of testing the compiler; to generate cod
*** 31622,31632 ****
  using OpenMP offloading, use option @option{-mgomp}.
  
  @opindex muniform-simt
  @item -muniform-simt
! Switch to code generation variant that allows to execute all threads in each
  warp, while maintaining memory state and side effects as if only one thread
  in each warp was active outside of OpenMP SIMD regions.  All atomic operations
! and calls to runtime (malloc, free, vprintf) are conditionally executed (iff
  current lane index equals the master lane index), and the register being
  assigned is copied via a shuffle instruction from the master lane.  Outside of
  SIMD regions lane 0 is the master; inside, each thread sees itself as the
--- 31578,31592 ----
  using OpenMP offloading, use option @option{-mgomp}.
  
  @opindex muniform-simt
+ @opindex mno-uniform-simt
  @item -muniform-simt
! @itemx -mno-uniform-simt
! Enable/disable code generation variant that allows execution of
! all threads in each
  warp, while maintaining memory state and side effects as if only one thread
  in each warp was active outside of OpenMP SIMD regions.  All atomic operations
! and calls to runtime (@code{malloc}, @code{free}, @code{vprintf})
! are conditionally executed (iff
  current lane index equals the master lane index), and the register being
  assigned is copied via a shuffle instruction from the master lane.  Outside of
  SIMD regions lane 0 is the master; inside, each thread sees itself as the
*************** regions).  Each thread can bitwise-and t
*** 31636,31644 ****
  with current lane index to compute the master lane index.
  
  @opindex mgomp
  @item -mgomp
! Generate code for use in OpenMP offloading: enables @option{-msoft-stack} and
! @option{-muniform-simt} options, and selects corresponding multilib variant.
  
  @end table
  
--- 31596,31607 ----
  with current lane index to compute the master lane index.
  
  @opindex mgomp
+ @opindex mno-gomp
  @item -mgomp
! @itemx -mno-gomp
! Enable/disable generation of code for use in OpenMP offloading.
! @option{-mgomp} enables @option{-msoft-stack} and
! @option{-muniform-simt} options, and selects a corresponding multilib variant.
  
  @end table
  
*************** These options are defined for OpenRISC:
*** 31652,31665 ****
  
  @opindex mboard
  @item -mboard=@var{name}
! Configure a board specific runtime.  This will be passed to the linker for
  newlib board library linking.  The default is @code{or1ksim}.
  
- @opindex mnewlib
- @item -mnewlib
- This option is ignored; it is for compatibility purposes only.  This used to
- select linker and preprocessor options for use with newlib.
- 
  @opindex msoft-div
  @opindex mhard-div
  @item -msoft-div
--- 31615,31623 ----
  
  @opindex mboard
  @item -mboard=@var{name}
! Configure a board specific runtime.  This is passed to the linker for
  newlib board library linking.  The default is @code{or1ksim}.
  
  @opindex msoft-div
  @opindex mhard-div
  @item -msoft-div
*************** Select software or hardware for floating
*** 31682,31687 ****
--- 31640,31646 ----
  The default is software.
  
  @opindex mdouble-float
+ @opindex mno-double-float
  @item -mdouble-float
  When @option{-mhard-float} is selected, enables generation of double-precision
  floating point instructions.  By default functions from @file{libgcc} are used
*************** compare and set flag operations.
*** 31697,31703 ****
  @opindex mcmov
  @item -mcmov
  Enable generation of conditional move (@code{l.cmov}) instructions.  By
! default the equivalent will be generated using set and branch.
  
  @opindex mror
  @item -mror
--- 31656,31662 ----
  @opindex mcmov
  @item -mcmov
  Enable generation of conditional move (@code{l.cmov}) instructions.  By
! default the equivalents are generated using set and branch.
  
  @opindex mror
  @item -mror
*************** memory loads are used to perform sign ex
*** 31718,31730 ****
  @opindex msfimm
  @item -msfimm
  Enable generation of compare and set flag with immediate (@code{l.sf*i})
! instructions.  By default extra instructions will be generated to store the
  immediate to a register first.
  
  @opindex mshftimm
  @item -mshftimm
  Enable generation of shift with immediate (@code{l.srai}, @code{l.srli},
! @code{l.slli}) instructions.  By default extra instructions will be generated
  to store the immediate to a register first.
  
  @opindex mcmodel=
--- 31677,31689 ----
  @opindex msfimm
  @item -msfimm
  Enable generation of compare and set flag with immediate (@code{l.sf*i})
! instructions.  By default extra instructions are generated to store the
  immediate to a register first.
  
  @opindex mshftimm
  @item -mshftimm
  Enable generation of shift with immediate (@code{l.srai}, @code{l.srli},
! @code{l.slli}) instructions.  By default extra instructions are generated
  to store the immediate to a register first.
  
  @opindex mcmodel=
*************** These options are defined for the PDP-11
*** 31751,31773 ****
  @opindex mfpu
  @item -mfpu
  Use hardware FPP floating point.  This is the default.  (FIS floating
! point on the PDP-11/40 is not supported.)  Implies -m45.
  
  @opindex msoft-float
  @item -msoft-float
  Do not use hardware floating point.
  
  @opindex mac0
- @item -mac0
- Return floating-point results in ac0 (fr0 in Unix assembler syntax).
- 
  @opindex mno-ac0
! @item -mno-ac0
! Return floating-point results in memory.  This is the default.
  
  @opindex m40
  @item -m40
! Generate code for a PDP-11/40.  Implies -msoft-float -mno-split.
  
  @opindex m45
  @item -m45
--- 31710,31733 ----
  @opindex mfpu
  @item -mfpu
  Use hardware FPP floating point.  This is the default.  (FIS floating
! point on the PDP-11/40 is not supported.)  Implies @option{-m45}.
  
  @opindex msoft-float
  @item -msoft-float
  Do not use hardware floating point.
  
  @opindex mac0
  @opindex mno-ac0
! @item -mac0
! @itemx -mno-ac0
! With @option{-mac0}, return floating-point results in ac0
! (fr0 in Unix assembler syntax).  The default, @option{-mno-ac0}, is
! to return floating-point results in memory.
  
  @opindex m40
  @item -m40
! Generate code for a PDP-11/40.
! Implies @option{-msoft-float} @option{-mno-split}.
  
  @opindex m45
  @item -m45
*************** Generate code for a PDP-11/45.  This is
*** 31775,31781 ****
  
  @opindex m10
  @item -m10
! Generate code for a PDP-11/10.  Implies -msoft-float -mno-split.
  
  @opindex mint16
  @opindex mno-int32
--- 31735,31742 ----
  
  @opindex m10
  @item -m10
! Generate code for a PDP-11/10.
! Implies @option{-msoft-float} @option{-mno-split}.
  
  @opindex mint16
  @opindex mno-int32
*************** Use 16-bit @code{int}.  This is the defa
*** 31790,31797 ****
  Use 32-bit @code{int}.
  
  @opindex msplit
  @item -msplit
! Target has split instruction and data space.  Implies -m45.
  
  @opindex munix-asm
  @item -munix-asm
--- 31751,31759 ----
  Use 32-bit @code{int}.
  
  @opindex msplit
+ @opindex mno-split
  @item -msplit
! Target has split instruction and data space.  Implies @option{-m45}.
  
  @opindex munix-asm
  @item -munix-asm
*************** Use DEC assembler syntax.
*** 31806,31811 ****
--- 31768,31774 ----
  Use GNU assembler syntax.  This is the default.
  
  @opindex mlra
+ @opindex mno-lra
  @item -mlra
  Use the new LRA register allocator.  By default, the old ``reload''
  allocator is used.
*************** are removed.
*** 31833,31848 ****
  This option disables support for static initializers and constructors.
  Beware that the compiler could still generate code with static initializers
  and constructors.  It is up to the programmer to ensure that the source
! program will not use those features.
  
! The minimal startup code would not pass @code{argc} and @code{argv} arguments
  to @code{main}, so the latter must be declared as @code{int main (void)}.
  This is already the norm for most firmware projects.
  
  @opindex mmcu
  @item -mmcu=@var{mcu}
! Specify the PRU hardware variant to use.  A correspondingly named
! spec file would be loaded, passing the memory region sizes to
  the linker and defining hardware-specific C macros.
  
  Newlib provides only the @code{sim} spec, intended for running
--- 31796,31811 ----
  This option disables support for static initializers and constructors.
  Beware that the compiler could still generate code with static initializers
  and constructors.  It is up to the programmer to ensure that the source
! program does not use those features.
  
! The minimal startup code does not pass @code{argc} and @code{argv} arguments
  to @code{main}, so the latter must be declared as @code{int main (void)}.
  This is already the norm for most firmware projects.
  
  @opindex mmcu
  @item -mmcu=@var{mcu}
! Specify the PRU hardware variant to use.  A correspondingly-named
! spec file is loaded, passing the memory region sizes to
  the linker and defining hardware-specific C macros.
  
  Newlib provides only the @code{sim} spec, intended for running
*************** Make GCC pass the @option{--no-relax} co
*** 31856,31876 ****
  instead of the @option{--relax} option.
  
  @opindex mloop
  @item -mloop
  Allow (or do not allow) GCC to use the LOOP instruction.
  
  @opindex mmul
  @item -mmul
  Allow (or do not allow) GCC to use the PRU multiplier unit.
  
  @opindex mfillzero
  @item -mfillzero
  Allow (or do not allow) GCC to use the FILL and ZERO instructions.
  
  @opindex mabi
  @item -mabi=@var{variant}
  Specify the ABI variant to output code for.  @option{-mabi=ti} selects the
! unmodified TI ABI while @option{-mabi=gnu} selects a GNU variant that copes
  more naturally with certain GCC assumptions.  These are the differences:
  
  @table @samp
--- 31819,31845 ----
  instead of the @option{--relax} option.
  
  @opindex mloop
+ @opindex mno-loop
  @item -mloop
+ @itemx -mno-loop
  Allow (or do not allow) GCC to use the LOOP instruction.
  
  @opindex mmul
+ @opindex mno-mul
  @item -mmul
+ @itemx -mno-mul
  Allow (or do not allow) GCC to use the PRU multiplier unit.
  
  @opindex mfillzero
+ @opindex mno-fillzero
  @item -mfillzero
+ @itemx -mno-fillzero
  Allow (or do not allow) GCC to use the FILL and ZERO instructions.
  
  @opindex mabi
  @item -mabi=@var{variant}
  Specify the ABI variant to output code for.  @option{-mabi=ti} selects the
! unmodified TI ABI, while @option{-mabi=gnu} selects a GNU variant that copes
  more naturally with certain GCC assumptions.  These are the differences:
  
  @table @samp
*************** GNU always passes and expects a valid re
*** 31886,31892 ****
  
  @item Size Of Struct Containing Bit-fields
  TI ABI mandates that struct size is determined by the bit-field type, if it
! contains any.  Whereas GNU allocates the smallest amount of bytes which would
  fit the bit-field.
  
  For example, TI ABI reserves 4 bytes for this struct, whereas GNU reserves
--- 31855,31862 ----
  
  @item Size Of Struct Containing Bit-fields
  TI ABI mandates that struct size is determined by the bit-field type, if it
! contains any.  On the other hand,
! GNU allocates the smallest amount of bytes which would
  fit the bit-field.
  
  For example, TI ABI reserves 4 bytes for this struct, whereas GNU reserves
*************** TI ABI mandates that volatile bit-fields
*** 31901,31907 ****
  In contrast, GNU ABI uses the smallest integer type fitting the bit-field.
  
  For example, TI ABI requires a single load of 4 bytes for the
! following bit-field.  Whereas GNU generates a load of 1 byte:
  
  @smallexample
  struct S @{ volatile int i:1; @};
--- 31871,31877 ----
  In contrast, GNU ABI uses the smallest integer type fitting the bit-field.
  
  For example, TI ABI requires a single load of 4 bytes for the
! following bit-field.  GNU generates a load of 1 byte:
  
  @smallexample
  struct S @{ volatile int i:1; @};
*************** Do not or do generate unaligned vector m
*** 32162,32167 ****
--- 32132,32143 ----
  to off unless the processor we are optimizing for explicitly supports
  element-misaligned vector memory access.
  
+ @item -mmax-vectorization
+ @itemx -mno-max-vectorization
+ Enable or disable an override to vectorizer cost model making vectorization
+ always appear profitable.  Unlike @option{-fno-vect-cost-model} or
+ @option{-fvect-cost-model=unlimited} this option does not turn off cost
+ comparison between different vector modes.
  
  @opindex mcmodel=
  @opindex mcmodel=medlow
*************** reverse is not implemented---textually r
*** 38773,38785 ****
  been defined in an imported header-unit.  A redefinition error is
  emitted.
  
- @item Standard Library Header Units
- The Standard Library is not provided as importable header units.  If
- you want to import such units, you must explicitly build them first.
- If you do not do this with care, you may have multiple declarations,
- which the module machinery must merge---compiler resource usage can be
- affected by how you partition header files into header units.
- 
  @end table
  
  Modular compilation is @emph{not} enabled with just the
--- 38749,38754 ----
*************** and any standard library #includes in my
*** 38842,38847 ****
--- 38811,38824 ----
  because the import brought in the whole library.  This can be a simple
  way to use modules to speed up compilation without any code changes.
  
+ But for the standard library in particular this is unnecessary: if a
+ header unit has been built for the libstdc++ @samp{bits/stdc++.h}
+ header, the compiler will translate an @samp{#include} of any
+ importable standard library header into an import of that header unit,
+ speeding up compilation without needing to specify @samp{-include}.
+ Note that the @samp{bits/stdc++.h} header unit is also built by the
+ @option{--compile-std-module} option.
+ 
  The @option{-fmodule-only} option disables generation of the
  associated object file for compiling a module interface.  Only the CMI
  is generated.  This option is implied when using the
diff -Nrcpad gcc-16-20251207/gcc/doc/md.texi gcc-16-20251214/gcc/doc/md.texi
*** gcc-16-20251207/gcc/doc/md.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/doc/md.texi	Sun Dec 14 22:32:07 2025
*************** This pattern is not allowed to @code{FAI
*** 5408,5425 ****
  
  @cindex @code{len_load_@var{m}} instruction pattern
  @item @samp{len_load_@var{m}}
! Load (operand 2 + operand 3) elements from memory operand 1
! into vector register operand 0, setting the other elements of
! operand 0 to undefined values.  Operands 0 and 1 have mode @var{m},
! which must be a vector mode.  Operand 2 has whichever integer mode the
! target prefers.  Operand 3 conceptually has mode @code{QI}.
  
! Operand 2 can be a variable or a constant amount.  Operand 3 specifies a
  constant bias: it is either a constant 0 or a constant -1.  The predicate on
! operand 3 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 2 + operand 3) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes rather than
--- 5408,5427 ----
  
  @cindex @code{len_load_@var{m}} instruction pattern
  @item @samp{len_load_@var{m}}
! Load (operand 3 + operand 4) elements from memory operand 1
! into vector register operand 0.  Operands 0 and 1 have mode @var{m},
! which must be a vector mode.  Operand 3 has whichever integer mode the
! target prefers.  Operand 2 (the “else value”) is of mode @var{m} and
! specifies which value is loaded for the remaining elements.  The predicate
! of operand 2 must only accept the else values that the target actually
! supports.  Operand 4 conceptually has mode @code{QI}.
  
! Operand 3 can be a variable or a constant amount.  Operand 4 specifies a
  constant bias: it is either a constant 0 or a constant -1.  The predicate on
! operand 4 must only accept the bias values that the target actually supports.
  GCC handles a bias of 0 more efficiently than a bias of -1.
  
! If (operand 3 + operand 4) exceeds the number of elements in mode
  @var{m}, the behavior is undefined.
  
  If the target prefers the length to be measured in bytes rather than
diff -Nrcpad gcc-16-20251207/gcc/doc/tm.texi gcc-16-20251214/gcc/doc/tm.texi
*** gcc-16-20251207/gcc/doc/tm.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/doc/tm.texi	Sun Dec 14 22:32:07 2025
*************** int}.
*** 1825,1830 ****
--- 1825,1831 ----
  @defmacx UINT_FAST64_TYPE
  @defmacx INTPTR_TYPE
  @defmacx UINTPTR_TYPE
+ @defmacx PID_TYPE
  C expressions for the standard types @code{sig_atomic_t},
  @code{int8_t}, @code{int16_t}, @code{int32_t}, @code{int64_t},
  @code{uint8_t}, @code{uint16_t}, @code{uint32_t}, @code{uint64_t},
*************** C expressions for the standard types @co
*** 1833,1840 ****
  @code{uint_least32_t}, @code{uint_least64_t}, @code{int_fast8_t},
  @code{int_fast16_t}, @code{int_fast32_t}, @code{int_fast64_t},
  @code{uint_fast8_t}, @code{uint_fast16_t}, @code{uint_fast32_t},
! @code{uint_fast64_t}, @code{intptr_t}, and @code{uintptr_t}.  See
! @code{SIZE_TYPE} above for more information.
  
  If any of these macros evaluates to a null pointer, the corresponding
  type is not supported; if GCC is configured to provide
--- 1834,1841 ----
  @code{uint_least32_t}, @code{uint_least64_t}, @code{int_fast8_t},
  @code{int_fast16_t}, @code{int_fast32_t}, @code{int_fast64_t},
  @code{uint_fast8_t}, @code{uint_fast16_t}, @code{uint_fast32_t},
! @code{uint_fast64_t}, @code{intptr_t}, and @code{uintptr_t} and the
! built-in type @code{pid_t}.  See @code{SIZE_TYPE} above for more information.
  
  If any of these macros evaluates to a null pointer, the corresponding
  type is not supported; if GCC is configured to provide
diff -Nrcpad gcc-16-20251207/gcc/doc/tm.texi.in gcc-16-20251214/gcc/doc/tm.texi.in
*** gcc-16-20251207/gcc/doc/tm.texi.in	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/doc/tm.texi.in	Sun Dec 14 22:32:07 2025
*************** int}.
*** 1553,1558 ****
--- 1553,1559 ----
  @defmacx UINT_FAST64_TYPE
  @defmacx INTPTR_TYPE
  @defmacx UINTPTR_TYPE
+ @defmacx PID_TYPE
  C expressions for the standard types @code{sig_atomic_t},
  @code{int8_t}, @code{int16_t}, @code{int32_t}, @code{int64_t},
  @code{uint8_t}, @code{uint16_t}, @code{uint32_t}, @code{uint64_t},
*************** C expressions for the standard types @co
*** 1561,1568 ****
  @code{uint_least32_t}, @code{uint_least64_t}, @code{int_fast8_t},
  @code{int_fast16_t}, @code{int_fast32_t}, @code{int_fast64_t},
  @code{uint_fast8_t}, @code{uint_fast16_t}, @code{uint_fast32_t},
! @code{uint_fast64_t}, @code{intptr_t}, and @code{uintptr_t}.  See
! @code{SIZE_TYPE} above for more information.
  
  If any of these macros evaluates to a null pointer, the corresponding
  type is not supported; if GCC is configured to provide
--- 1562,1569 ----
  @code{uint_least32_t}, @code{uint_least64_t}, @code{int_fast8_t},
  @code{int_fast16_t}, @code{int_fast32_t}, @code{int_fast64_t},
  @code{uint_fast8_t}, @code{uint_fast16_t}, @code{uint_fast32_t},
! @code{uint_fast64_t}, @code{intptr_t}, and @code{uintptr_t} and the
! built-in type @code{pid_t}.  See @code{SIZE_TYPE} above for more information.
  
  If any of these macros evaluates to a null pointer, the corresponding
  type is not supported; if GCC is configured to provide
diff -Nrcpad gcc-16-20251207/gcc/except.cc gcc-16-20251214/gcc/except.cc
*** gcc-16-20251207/gcc/except.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/except.cc	Sun Dec 14 22:32:07 2025
*************** maybe_add_nop_after_section_switch (void
*** 2566,2572 ****
  		}
  
  	      /* We visit only labels from cold section.  We should never hit
! 		 begining of the insn stream here.  */
  	      insn = PREV_INSN (insn);
  	    }
  	}
--- 2566,2572 ----
  		}
  
  	      /* We visit only labels from cold section.  We should never hit
! 		 beginning of the insn stream here.  */
  	      insn = PREV_INSN (insn);
  	    }
  	}
diff -Nrcpad gcc-16-20251207/gcc/fortran/ChangeLog gcc-16-20251214/gcc/fortran/ChangeLog
*** gcc-16-20251207/gcc/fortran/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/ChangeLog	Sun Dec 14 22:32:07 2025
***************
*** 1,3 ****
--- 1,117 ----
+ 2025-12-12  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* openmp.cc (gfc_match_omp_clause_uses_allocators): Mention
+ 	new syntax in deprecation warning.
+ 
+ 2025-12-12  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* intrinsic.texi (OpenMP Modules OMP_LIB and OMP_LIB_KINDS): Link
+ 	also to OpenMP 6.0, move 'partially supported' to the end of the
+ 	list of OpenMP versions. Mark 'omp_lock_hint_...' and
+ 	'omp_atv_sequential' constants as deprecated.
+ 
+ 2025-12-12  Chung-Lin Tang  <cltang@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 	    Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* openmp.cc (resolve_omp_clauses): Handle omp_null_allocator.
+ 	* trans-openmp.cc (gfc_trans_omp_clauses): Mention it in a comment.
+ 
+ 2025-12-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/107406
+ 	* parse.cc (check_component): Adjust the error check to
+ 	require a codimension if the allocatable type has
+ 	a non-coarray LOCK_TYPE component.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/123098
+ 	* openmp.cc (gfc_match_omp_clause_reduction): Only emit
+ 	-Wdeprecated-openmp warning for '-' if !openacc.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* openmp.cc (gfc_match_omp_clause_reduction,
+ 	gfc_match_omp_clause_uses_allocators, gfc_match_omp_clauses,
+ 	match_omp_metadirective, gfc_match_omp_parallel_master,
+ 	gfc_match_omp_parallel_master_taskloop,
+ 	gfc_match_omp_parallel_master_taskloop_simd,
+ 	gfc_match_omp_master, gfc_match_omp_master_taskloop,
+ 	gfc_match_omp_master_taskloop_simd, resolve_omp_clauses): Formatting
+ 	fixes.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* trans-expr.cc (gfc_conv_procedure_call): Fix comment typo, passe
+ 	-> pass.
+ 
+ 2025-12-11  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/107142
+ 	* match.cc (gfc_match_type_spec): Change original declaration
+ 	to static match_type_spec and call from gfc_match_type_spec,
+ 	where the gfc_current_ns is stashed and restored after call.
+ 	(gfc_match_type_is): Before emitting the syntax error message
+ 	check if there are any pending error messages and use them
+ 	instead.
+ 
+ 2025-12-11  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/110012
+ 	* decl.cc (gfc_get_pdt_instance): Continue to loop through the
+ 	type parameters components if param_list is null and the
+ 	parameter is not KIND with a default initializer.
+ 	* resolve.cc (resolve_fl_derived): If the data component is a
+ 	PDT template, find the instance and build the class.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* gfortran.texi: Bump version and clarify implementation status.
+ 	* intrinsic.texi: Bump version and note deprecation of
+ 	'omp_proc_bind_master'.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* openmp.cc (gfc_match_omp_clause_reduction): Deprecate '-'
+ 	operator for reductions.
+ 	(gfc_match_omp_clause_uses_allocators): Deprecate
+ 	allocator(traits) pattern for 'uses_allocators'.
+ 	(gfc_match_omp_clauses): Deprecate 'sink' and 'source' for
+ 	'depend' clause. Deprecate list items as arguments with 'linear'
+ 	clause. Deprecate non-comma-separated modifiers for the map
+ 	clause. Deprecate 'to' clause with declare target.
+ 	(gfc_match_omp_declare_target): Whitespace.
+ 	(match_omp_metadirective): Deprecate 'default' clause on
+ 	metadirectives.
+ 	(resolve_omp_clauses): Deprecate executable allocate directives.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* cpp.cc (cpp_define_builtins): Bump _OPENMP version.
+ 	* invoke.texi: Update docs for '-Wdeprecated-openmp'.
+ 	* lang.opt (Wdeprecated-openmp): Add warning.
+ 	* lang.opt.urls: Regenerated.
+ 	* openmp.cc (gfc_match_omp_clauses): Deprecate master affinity
+ 	policy.
+ 	(gfc_match_omp_parallel_master): Deprecate master construct.
+ 	(gfc_match_omp_parallel_master_taskloop): Ditto.
+ 	(gfc_match_omp_parallel_master_taskloop_simd): Ditto.
+ 	(gfc_match_omp_master): Ditto.
+ 	(gfc_match_omp_master_taskloop): Ditto.
+ 	(gfc_match_omp_master_taskloop_simd): Ditto.
+ 	(resolve_omp_clauses): Warn for deprecated use of
+ 	{use,is}_device_ptr.
+ 
+ 2025-12-08  Harald Anlauf  <anlauf@gmx.de>
+ 	    Steven G. Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/123025
+ 	* decl.cc (match_char_length): Add a check for the
+ 	obsolete '*' style of character declarations in the
+ 	alternate branch of checking so we dont miss two
+ 	use cases:
+ 
  2025-12-06  Paul Thomas  <pault@gcc.gnu.org>
  
  	PR fortran/122693
diff -Nrcpad gcc-16-20251207/gcc/fortran/cpp.cc gcc-16-20251214/gcc/fortran/cpp.cc
*** gcc-16-20251207/gcc/fortran/cpp.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/cpp.cc	Sun Dec 14 22:32:07 2025
*************** cpp_define_builtins (cpp_reader *pfile)
*** 175,181 ****
      cpp_define (pfile, "_OPENACC=201711");
  
    if (flag_openmp)
!     cpp_define (pfile, "_OPENMP=201511");
  
    /* The defines below are necessary for the TARGET_* macros.
  
--- 175,181 ----
      cpp_define (pfile, "_OPENACC=201711");
  
    if (flag_openmp)
!     cpp_define (pfile, "_OPENMP=202111");
  
    /* The defines below are necessary for the TARGET_* macros.
  
diff -Nrcpad gcc-16-20251207/gcc/fortran/decl.cc gcc-16-20251214/gcc/fortran/decl.cc
*** gcc-16-20251207/gcc/fortran/decl.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/decl.cc	Sun Dec 14 22:32:07 2025
*************** match_char_length (gfc_expr **expr, bool
*** 1217,1222 ****
--- 1217,1226 ----
        goto syntax;
      }
  
+   if (obsolescent_check
+       && !gfc_notify_std (GFC_STD_F95_OBS, "Old-style character length at %C"))
+     return MATCH_ERROR;
+ 
    return MATCH_YES;
  
  syntax:
*************** gfc_get_pdt_instance (gfc_actual_arglist
*** 4023,4028 ****
--- 4027,4037 ----
        if (!pdt->attr.use_assoc && !c1)
  	goto error_return;
  
+       /* Resolution PDT class components of derived types are handled here.
+ 	 They can arrive without a parameter list and no KIND parameters.  */
+       if (!param_list && (!c1->attr.pdt_kind && !c1->initializer))
+ 	continue;
+ 
        kind_expr = NULL;
        if (!name_seen)
  	{
diff -Nrcpad gcc-16-20251207/gcc/fortran/gfortran.texi gcc-16-20251214/gcc/fortran/gfortran.texi
*** gcc-16-20251207/gcc/fortran/gfortran.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/gfortran.texi	Sun Dec 14 22:32:07 2025
*************** architectures, including Unix and Micros
*** 1825,1833 ****
  It consists of a set of compiler directives, library routines,
  and environment variables that influence run-time behavior.
  
! GNU Fortran implements all of the @uref{https://openmp.org/specifications/,
! OpenMP Application Program Interface v4.5}, and many features from later
! versions of the OpenMP specification.
  @xref{OpenMP Implementation Status,,,libgomp,
  GNU Offloading and Multi Processing Runtime Library},
  for more details about currently supported OpenMP features.
--- 1825,1833 ----
  It consists of a set of compiler directives, library routines,
  and environment variables that influence run-time behavior.
  
! GNU Fortran implements most of the @uref{https://openmp.org/specifications/,
! OpenMP Application Program Interface v5.2}, with some omissions and
! additional features from later versions.
  @xref{OpenMP Implementation Status,,,libgomp,
  GNU Offloading and Multi Processing Runtime Library},
  for more details about currently supported OpenMP features.
diff -Nrcpad gcc-16-20251207/gcc/fortran/intrinsic.texi gcc-16-20251214/gcc/fortran/intrinsic.texi
*** gcc-16-20251207/gcc/fortran/intrinsic.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/intrinsic.texi	Sun Dec 14 22:32:07 2025
*************** with the following options: @code{-fno-u
*** 16193,16201 ****
  @table @asis
  @item @emph{Standard}:
  OpenMP Application Program Interface v4.5,
! OpenMP Application Program Interface v5.0 (partially supported),
! OpenMP Application Program Interface v5.1 (partially supported) and
! OpenMP Application Program Interface v5.2 (partially supported).
  @end table
  
  The OpenMP Fortran runtime library routines are provided both in
--- 16193,16202 ----
  @table @asis
  @item @emph{Standard}:
  OpenMP Application Program Interface v4.5,
! OpenMP Application Program Interface v5.0,
! OpenMP Application Program Interface v5.1,
! OpenMP Application Program Interface v5.2, and
! OpenMP Application Program Interface v6.0 (partially supported).
  @end table
  
  The OpenMP Fortran runtime library routines are provided both in
*************** OpenMP Application Program Interface v5.
*** 16216,16221 ****
--- 16217,16224 ----
  OpenMP Application Program Interface v5.1} and
  @uref{https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf,
  OpenMP Application Program Interface v5.2}.
+ @uref{https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-6-0.pdf,
+ OpenMP Application Program Interface v6.0}.
  
  @code{OMP_LIB_KINDS} provides the following scalar default-integer
  named constants:
*************** named constants:
*** 16238,16244 ****
  @code{OMP_LIB} provides the scalar default-integer
  named constant @code{openmp_version} with a value of the form
  @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
! of the OpenMP version; for OpenMP v4.5 the value is @code{201511}.
  
  The following derived type:
  
--- 16241,16247 ----
  @code{OMP_LIB} provides the scalar default-integer
  named constant @code{openmp_version} with a value of the form
  @var{yyyymm}, where @code{yyyy} is the year and @var{mm} the month
! of the OpenMP version; for OpenMP v5.2 the value is @code{202111}.
  
  The following derived type:
  
*************** kind @code{omp_proc_bind_kind}:
*** 16271,16277 ****
  @item @code{omp_proc_bind_false}
  @item @code{omp_proc_bind_true}
  @item @code{omp_proc_bind_primary}
! @item @code{omp_proc_bind_master}
  @item @code{omp_proc_bind_close}
  @item @code{omp_proc_bind_spread}
  @end table
--- 16274,16280 ----
  @item @code{omp_proc_bind_false}
  @item @code{omp_proc_bind_true}
  @item @code{omp_proc_bind_primary}
! @item @code{omp_proc_bind_master} (deprecated)
  @item @code{omp_proc_bind_close}
  @item @code{omp_proc_bind_spread}
  @end table
*************** The following scalar integer named const
*** 16280,16290 ****
  kind @code{omp_lock_hint_kind}:
  
  @table @asis
! @item @code{omp_lock_hint_none}
! @item @code{omp_lock_hint_uncontended}
! @item @code{omp_lock_hint_contended}
! @item @code{omp_lock_hint_nonspeculative}
! @item @code{omp_lock_hint_speculative}
  @item @code{omp_sync_hint_none}
  @item @code{omp_sync_hint_uncontended}
  @item @code{omp_sync_hint_contended}
--- 16283,16293 ----
  kind @code{omp_lock_hint_kind}:
  
  @table @asis
! @item @code{omp_lock_hint_none} (deprecated)
! @item @code{omp_lock_hint_uncontended} (deprecated)
! @item @code{omp_lock_hint_contended} (deprecated)
! @item @code{omp_lock_hint_nonspeculative} (deprecated)
! @item @code{omp_lock_hint_speculative} (deprecated)
  @item @code{omp_sync_hint_none}
  @item @code{omp_sync_hint_uncontended}
  @item @code{omp_sync_hint_contended}
*************** The following scalar integer named const
*** 16325,16331 ****
  @item @code{omp_atv_contended}
  @item @code{omp_atv_uncontended}
  @item @code{omp_atv_serialized}
! @item @code{omp_atv_sequential}
  @item @code{omp_atv_private}
  @item @code{omp_atv_all}
  @item @code{omp_atv_thread}
--- 16328,16334 ----
  @item @code{omp_atv_contended}
  @item @code{omp_atv_uncontended}
  @item @code{omp_atv_serialized}
! @item @code{omp_atv_sequential} (deprecated)
  @item @code{omp_atv_private}
  @item @code{omp_atv_all}
  @item @code{omp_atv_thread}
diff -Nrcpad gcc-16-20251207/gcc/fortran/invoke.texi gcc-16-20251214/gcc/fortran/invoke.texi
*** gcc-16-20251207/gcc/fortran/invoke.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/invoke.texi	Sun Dec 14 22:32:07 2025
*************** by type.  Explanations are in the follow
*** 149,157 ****
  and warnings}.
  @gccoptlist{-Waliasing -Wall -Wampersand -Warray-bounds
  -Wc-binding-type -Wcharacter-truncation -Wconversion
! -Wdo-subscript -Wfunction-elimination -Wimplicit-interface
! -Wimplicit-procedure -Wintrinsic-shadow -Wuse-without-only
! -Wintrinsics-std -Wline-truncation -Wno-align-commons
  -Wno-overwrite-recursive -Wno-tabs -Wreal-q-constant -Wsurprising
  -Wunderflow -Wunused-parameter -Wrealloc-lhs -Wrealloc-lhs-all
  -Wfrontend-loop-interchange -Wtarget-lifetime -fmax-errors=@var{n}
--- 149,157 ----
  and warnings}.
  @gccoptlist{-Waliasing -Wall -Wampersand -Warray-bounds
  -Wc-binding-type -Wcharacter-truncation -Wconversion
! -Wno-deprecated-openmp -Wdo-subscript -Wfunction-elimination
! -Wimplicit-interface -Wimplicit-procedure -Wintrinsic-shadow
! -Wuse-without-only -Wintrinsics-std -Wline-truncation -Wno-align-commons
  -Wno-overwrite-recursive -Wno-tabs -Wreal-q-constant -Wsurprising
  -Wunderflow -Wunused-parameter -Wrealloc-lhs -Wrealloc-lhs-all
  -Wfrontend-loop-interchange -Wtarget-lifetime -fmax-errors=@var{n}
*************** the expression after conversion. Implied
*** 1069,1074 ****
--- 1069,1079 ----
  Warn about implicit conversions between different types and kinds. This
  option does @emph{not} imply @option{-Wconversion}.
  
+ @opindex Wdeprecated-openmp
+ @cindex warnings
+ @item -Wdeprecated-openmp
+ Warn for usage of deprecated OpenMP code.
+ 
  @opindex Wexternal-argument-mismatch
  @cindex warnings, argument mismatch
  @cindex argment mismatch, warnings
diff -Nrcpad gcc-16-20251207/gcc/fortran/lang.opt gcc-16-20251214/gcc/fortran/lang.opt
*** gcc-16-20251207/gcc/fortran/lang.opt	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/lang.opt	Sun Dec 14 22:32:07 2025
*************** Wconversion-extra
*** 237,242 ****
--- 237,246 ----
  Fortran Var(warn_conversion_extra) Warning
  Warn about most implicit conversions.
  
+ Wdeprecated-openmp
+ Fortran Var(warn_deprecated_openmp) Warning Init(1)
+ ; Documented in C
+ 
  Wdo-subscript
  Fortran Var(warn_do_subscript) Warning LangEnabledBy(Fortran,Wextra)
  Warn about possibly incorrect subscripts in do loops.
diff -Nrcpad gcc-16-20251207/gcc/fortran/lang.opt.urls gcc-16-20251214/gcc/fortran/lang.opt.urls
*** gcc-16-20251207/gcc/fortran/lang.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/lang.opt.urls	Sun Dec 14 22:32:07 2025
*************** UrlSuffix(gcc/Warning-Options.html#index
*** 91,96 ****
--- 91,99 ----
  Wconversion-extra
  LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wconversion-extra)
  
+ Wdeprecated-openmp
+ UrlSuffix(gcc/Warning-Options.html#index-Wdeprecated-openmp) LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wdeprecated-openmp)
+ 
  Wdo-subscript
  LangUrlSuffix_Fortran(gfortran/Error-and-Warning-Options.html#index-Wdo-subscript)
  
diff -Nrcpad gcc-16-20251207/gcc/fortran/match.cc gcc-16-20251214/gcc/fortran/match.cc
*** gcc-16-20251207/gcc/fortran/match.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/match.cc	Sun Dec 14 22:32:07 2025
*************** match_derived_type_spec (gfc_typespec *t
*** 2305,2312 ****
     the implicit_flag is not needed, so it was removed. Derived types are
     identified by their name alone.  */
  
! match
! gfc_match_type_spec (gfc_typespec *ts)
  {
    match m;
    locus old_locus;
--- 2305,2312 ----
     the implicit_flag is not needed, so it was removed. Derived types are
     identified by their name alone.  */
  
! static match
! match_type_spec (gfc_typespec *ts)
  {
    match m;
    locus old_locus;
*************** kind_selector:
*** 2516,2521 ****
--- 2516,2532 ----
  }
  
  
+ match
+ gfc_match_type_spec (gfc_typespec *ts)
+ {
+   match m;
+   gfc_namespace *old_ns = gfc_current_ns;
+   m = match_type_spec (ts);
+   gfc_current_ns = old_ns;
+   return m;
+ }
+ 
+ 
  /******************** FORALL subroutines ********************/
  
  /* Free a list of FORALL iterators.  */
*************** gfc_match_type_is (void)
*** 7941,7947 ****
    return MATCH_YES;
  
  syntax:
!   gfc_error ("Syntax error in TYPE IS specification at %C");
  
  cleanup:
    if (c != NULL)
--- 7952,7960 ----
    return MATCH_YES;
  
  syntax:
! 
!   if (!gfc_error_check ())
!     gfc_error ("Syntax error in TYPE IS specification at %C");
  
  cleanup:
    if (c != NULL)
diff -Nrcpad gcc-16-20251207/gcc/fortran/openmp.cc gcc-16-20251214/gcc/fortran/openmp.cc
*** gcc-16-20251207/gcc/fortran/openmp.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/openmp.cc	Sun Dec 14 22:32:07 2025
*************** gfc_match_omp_clause_reduction (char pc,
*** 1494,1500 ****
    else if (gfc_match_char ('*') == MATCH_YES)
      rop = OMP_REDUCTION_TIMES;
    else if (gfc_match_char ('-') == MATCH_YES)
!     rop = OMP_REDUCTION_MINUS;
    else if (gfc_match (".and.") == MATCH_YES)
      rop = OMP_REDUCTION_AND;
    else if (gfc_match (".or.") == MATCH_YES)
--- 1494,1506 ----
    else if (gfc_match_char ('*') == MATCH_YES)
      rop = OMP_REDUCTION_TIMES;
    else if (gfc_match_char ('-') == MATCH_YES)
!     {
!       if (!openacc)
! 	gfc_warning (OPT_Wdeprecated_openmp,
! 		     "%<-%> operator at %C for reductions deprecated in "
! 		     "OpenMP 5.2");
!       rop = OMP_REDUCTION_MINUS;
!     }
    else if (gfc_match (".and.") == MATCH_YES)
      rop = OMP_REDUCTION_AND;
    else if (gfc_match (".or.") == MATCH_YES)
*************** gfc_match_omp_clause_uses_allocators (gf
*** 1852,1858 ****
        if (gfc_match ("%S ", &p->sym) != MATCH_YES)
  	goto error;
        if (!has_modifiers)
! 	gfc_match ("( %S ) ", &p->u2.traits_sym);
        else if (gfc_peek_ascii_char () == '(')
  	{
  	  gfc_error ("Unexpected %<(%> at %C");
--- 1858,1873 ----
        if (gfc_match ("%S ", &p->sym) != MATCH_YES)
  	goto error;
        if (!has_modifiers)
! 	{
! 	  if (gfc_match ("( %S ) ", &p->u2.traits_sym) == MATCH_YES)
! 	    gfc_warning (OPT_Wdeprecated_openmp,
! 			 "The specification of arguments to "
! 			 "%<uses_allocators%> at %L where each item is of "
! 			 "the form %<allocator(traits)%> is deprecated since "
! 			 "OpenMP 5.2; instead use %<uses_allocators(traits(%s"
! 			 "): %s)%>", &p->where, p->u2.traits_sym->name,
! 			 p->sym->name);
! 	}
        else if (gfc_peek_ascii_char () == '(')
  	{
  	  gfc_error ("Unexpected %<(%> at %C");
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 2907,2912 ****
--- 2922,2932 ----
  				 "at %C");
  		      goto error;
  		    }
+ 		  if (is_depend)
+ 		    gfc_warning (OPT_Wdeprecated_openmp,
+ 				 "%<source%> modifier with %<depend%> clause "
+ 				 "at %L deprecated since OpenMP 5.2, use with "
+ 				 "%<doacross%>", &old_loc);
  		  c->doacross_source = true;
  		  c->depend_source = is_depend;
  		  continue;
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 2930,2935 ****
--- 2950,2960 ----
  				 "at %C");
  		      goto error;
  		    }
+ 		  if (is_depend)
+ 		    gfc_warning (OPT_Wdeprecated_openmp,
+ 				 "%<sink%> modifier with %<depend%> clause at "
+ 				 "%L deprecated since OpenMP 5.2, use with "
+ 				 "%<doacross%>", &old_loc);
  		  m = gfc_match_omp_doacross_sink (&c->lists[OMP_LIST_DEPEND],
  						   is_depend);
  		  if (m == MATCH_YES)
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 3405,3410 ****
--- 3430,3436 ----
  	      bool old_linear_modifier = false;
  	      gfc_omp_linear_op linear_op = OMP_LINEAR_DEFAULT;
  	      gfc_expr *step = NULL;
+ 	      locus saved_loc = gfc_current_locus;
  
  	      if (gfc_match_omp_variable_list (" ref (",
  					       &c->lists[OMP_LIST_LINEAR],
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 3440,3445 ****
--- 3466,3476 ----
  		  gfc_current_locus = old_loc;
  		  break;
  		}
+ 	      if (old_linear_modifier)
+ 		gfc_warning (OPT_Wdeprecated_openmp,
+ 			     "Specification of the list items as arguments to "
+ 			     "the modifiers at %L is deprecated since "
+ 			     "OpenMP 5.2", &saved_loc);
  	      if (linear_op != OMP_LINEAR_DEFAULT)
  		{
  		  if (gfc_match (" :") == MATCH_YES)
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 3624,3630 ****
  		    }
  		  else
  		    break;
! 		  gfc_match (", ");
  		}
  
  	      gfc_omp_map_op map_op = OMP_MAP_TOFROM;
--- 3655,3666 ----
  		    }
  		  else
  		    break;
! 		  if (gfc_match (", ") != MATCH_YES)
! 		    gfc_warning (OPT_Wdeprecated_openmp,
! 				 "The specification of modifiers without "
! 				 "comma separators for the %<map%> clause "
! 				 "at %C has been deprecated since "
! 				 "OpenMP 5.2");
  		}
  
  	      gfc_omp_map_op map_op = OMP_MAP_TOFROM;
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 4019,4025 ****
  	      if (gfc_match ("primary )") == MATCH_YES)
  		c->proc_bind = OMP_PROC_BIND_PRIMARY;
  	      else if (gfc_match ("master )") == MATCH_YES)
! 		c->proc_bind = OMP_PROC_BIND_MASTER;
  	      else if (gfc_match ("spread )") == MATCH_YES)
  		c->proc_bind = OMP_PROC_BIND_SPREAD;
  	      else if (gfc_match ("close )") == MATCH_YES)
--- 4055,4066 ----
  	      if (gfc_match ("primary )") == MATCH_YES)
  		c->proc_bind = OMP_PROC_BIND_PRIMARY;
  	      else if (gfc_match ("master )") == MATCH_YES)
! 		{
! 		  gfc_warning (OPT_Wdeprecated_openmp,
! 			       "%<master%> affinity policy at %C deprecated "
! 			       "since OpenMP 5.1, use %<primary%>");
! 		  c->proc_bind = OMP_PROC_BIND_MASTER;
! 		}
  	      else if (gfc_match ("spread )") == MATCH_YES)
  		c->proc_bind = OMP_PROC_BIND_SPREAD;
  	      else if (gfc_match ("close )") == MATCH_YES)
*************** gfc_match_omp_clauses (gfc_omp_clauses *
*** 4282,4288 ****
  	      if (m == MATCH_ERROR)
  		goto error;
  	      if (m == MATCH_YES)
! 		continue;
  	    }
  	  else if ((mask & OMP_CLAUSE_TO)
  		   && gfc_match_motion_var_list ("to (", &c->lists[OMP_LIST_TO],
--- 4323,4335 ----
  	      if (m == MATCH_ERROR)
  		goto error;
  	      if (m == MATCH_YES)
! 		{
! 		  gfc_warning (OPT_Wdeprecated_openmp,
! 			       "%<to%> clause with %<declare target%> at %L "
! 			       "deprecated since OpenMP 5.2, use %<enter%>",
! 			       &old_loc);
! 		  continue;
! 		}
  	    }
  	  else if ((mask & OMP_CLAUSE_TO)
  		   && gfc_match_motion_var_list ("to (", &c->lists[OMP_LIST_TO],
*************** match_omp_metadirective (bool begin_p)
*** 7051,7067 ****
  
        locus variant_locus = gfc_current_locus;
  
!       if (gfc_match (" default ( ") == MATCH_YES)
! 	default_p = true;
!       else if (gfc_match (" otherwise ( ") == MATCH_YES)
  	default_p = true;
!       else if (gfc_match (" when ( ") != MATCH_YES)
  	{
  	  gfc_error ("expected %<when%>, %<otherwise%>, or %<default%> at %C");
  	  gfc_current_locus = old_loc;
  	  return MATCH_ERROR;
  	}
- 
        if (default_p && default_seen)
  	{
  	  gfc_error ("too many %<otherwise%> or %<default%> clauses "
--- 7098,7118 ----
  
        locus variant_locus = gfc_current_locus;
  
!       if (gfc_match ("default ( ") == MATCH_YES)
! 	{
! 	  default_p = true;
! 	  gfc_warning (OPT_Wdeprecated_openmp,
! 		       "%<default%> clause with metadirective at %L "
! 		       "deprecated since OpenMP 5.2", &variant_locus);
! 	}
!       else if (gfc_match ("otherwise ( ") == MATCH_YES)
  	default_p = true;
!       else if (gfc_match ("when ( ") != MATCH_YES)
  	{
  	  gfc_error ("expected %<when%>, %<otherwise%>, or %<default%> at %C");
  	  gfc_current_locus = old_loc;
  	  return MATCH_ERROR;
  	}
        if (default_p && default_seen)
  	{
  	  gfc_error ("too many %<otherwise%> or %<default%> clauses "
*************** gfc_match_omp_parallel_masked_taskloop_s
*** 7425,7436 ****
--- 7476,7493 ----
  match
  gfc_match_omp_parallel_master (void)
  {
+   gfc_warning (OPT_Wdeprecated_openmp,
+ 	       "%<master%> construct at %C deprecated since OpenMP 5.1, use "
+ 	       "%<masked%>");
    return match_omp (EXEC_OMP_PARALLEL_MASTER, OMP_PARALLEL_CLAUSES);
  }
  
  match
  gfc_match_omp_parallel_master_taskloop (void)
  {
+   gfc_warning (OPT_Wdeprecated_openmp,
+ 	       "%<master%> construct at %C deprecated since OpenMP 5.1, "
+ 	       "use %<masked%>");
    return match_omp (EXEC_OMP_PARALLEL_MASTER_TASKLOOP,
  		    (OMP_PARALLEL_CLAUSES | OMP_TASKLOOP_CLAUSES)
  		    & ~(omp_mask (OMP_CLAUSE_IN_REDUCTION)));
*************** gfc_match_omp_parallel_master_taskloop (
*** 7439,7444 ****
--- 7496,7504 ----
  match
  gfc_match_omp_parallel_master_taskloop_simd (void)
  {
+   gfc_warning (OPT_Wdeprecated_openmp,
+ 	       "%<master%> construct at %C deprecated since OpenMP 5.1, "
+ 	       "use %<masked%>");
    return match_omp (EXEC_OMP_PARALLEL_MASTER_TASKLOOP_SIMD,
  		    (OMP_PARALLEL_CLAUSES | OMP_TASKLOOP_CLAUSES
  		     | OMP_SIMD_CLAUSES)
*************** gfc_match_omp_masked_taskloop_simd (void
*** 8022,8027 ****
--- 8082,8090 ----
  match
  gfc_match_omp_master (void)
  {
+   gfc_warning (OPT_Wdeprecated_openmp,
+ 	       "%<master%> construct at %C deprecated since OpenMP 5.1, "
+ 	       "use %<masked%>");
    if (gfc_match_omp_eos () != MATCH_YES)
      {
        gfc_error ("Unexpected junk after $OMP MASTER statement at %C");
*************** gfc_match_omp_master (void)
*** 8035,8046 ****
--- 8098,8115 ----
  match
  gfc_match_omp_master_taskloop (void)
  {
+   gfc_warning (OPT_Wdeprecated_openmp,
+ 	       "%<master%> construct at %C deprecated since OpenMP 5.1, "
+ 	       "use %<masked%>");
    return match_omp (EXEC_OMP_MASTER_TASKLOOP, OMP_TASKLOOP_CLAUSES);
  }
  
  match
  gfc_match_omp_master_taskloop_simd (void)
  {
+   gfc_warning (OPT_Wdeprecated_openmp,
+ 	       "%<master%> construct at %C deprecated since OpenMP 5.1, use "
+ 	       "%<masked%>");
    return match_omp (EXEC_OMP_MASTER_TASKLOOP_SIMD,
  		    OMP_TASKLOOP_CLAUSES | OMP_SIMD_CLAUSES);
  }
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9397,9402 ****
--- 9466,9477 ----
  	  && code->block->next
  	  && code->block->next->op == EXEC_ALLOCATE)
  	{
+ 	  if (code->op == EXEC_OMP_ALLOCATE)
+ 	    gfc_warning (OPT_Wdeprecated_openmp,
+ 			 "The use of one or more %<allocate%> directives with "
+ 			 "an associated %<allocate%> statement at %L is "
+ 			 "deprecated since OpenMP 5.2, use an %<allocators%> "
+ 			 "directive", &code->loc);
  	  gfc_alloc *a;
  	  gfc_omp_namelist *n_null = NULL;
  	  bool missing_allocator = false;
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9419,9425 ****
  			   n->sym->name, &n->where);
  	      for (a = code->block->next->ext.alloc.list; a; a = a->next)
  		if (a->expr->expr_type == EXPR_VARIABLE
! 		    && a->expr->symtree->n.sym == n->sym)
  		  {
  		    gfc_ref *ref;
  		    for (ref = a->expr->ref; ref; ref = ref->next)
--- 9494,9500 ----
  			   n->sym->name, &n->where);
  	      for (a = code->block->next->ext.alloc.list; a; a = a->next)
  		if (a->expr->expr_type == EXPR_VARIABLE
! 		  && a->expr->symtree->n.sym == n->sym)
  		  {
  		    gfc_ref *ref;
  		    for (ref = a->expr->ref; ref; ref = ref->next)
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9991,9996 ****
--- 10066,10074 ----
  		  {
  		    /* For TARGET, non-C_PTR are deprecated and handled as
  		       has_device_addr.  */
+ 		    gfc_warning (OPT_Wdeprecated_openmp,
+ 				 "Non-C_PTR type argument at %L is deprecated, "
+ 				 "use HAS_DEVICE_ADDR", &n->where);
  		    gfc_omp_namelist *n2 = n;
  		    n = n->next;
  		    if (last)
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 10017,10022 ****
--- 10095,10103 ----
  		if (n->sym->ts.type != BT_DERIVED
  		    || !n->sym->ts.u.derived->ts.is_iso_c)
  		  {
+ 		    gfc_warning (OPT_Wdeprecated_openmp,
+ 				 "Non-C_PTR type argument at %L is "
+ 				 "deprecated, use USE_DEVICE_ADDR", &n->where);
  		    n = n->next;
  		    if (last)
  		      last->next = n;
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 10054,10059 ****
--- 10135,10141 ----
  			       "%<omp_allocator_handle_kind%>", n->sym->name,
  			       &n->where);
  		  else if (n->sym->attr.flavor != FL_VARIABLE
+ 			   && strcmp (n->sym->name, "omp_null_allocator") != 0
  			   && ((!startswith (n->sym->name, "omp_")
  				&& !startswith (n->sym->name, "ompx_"))
  			       || !endswith (n->sym->name, "_mem_alloc")))
diff -Nrcpad gcc-16-20251207/gcc/fortran/parse.cc gcc-16-20251214/gcc/fortran/parse.cc
*** gcc-16-20251207/gcc/fortran/parse.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/parse.cc	Sun Dec 14 22:32:07 2025
*************** check_component (gfc_symbol *sym, gfc_co
*** 3691,3701 ****
                 "of type LOCK_TYPE, which must have a codimension or be a "
                 "subcomponent of a coarray", c->name, &c->loc);
  
!   if (lock_type && allocatable && !coarray)
!     gfc_error ("Allocatable component %s at %L of type LOCK_TYPE must have "
!                "a codimension", c->name, &c->loc);
!   else if (lock_type && allocatable && c->ts.type == BT_DERIVED
!            && c->ts.u.derived->attr.lock_comp)
      gfc_error ("Allocatable component %s at %L must have a codimension as "
                 "it has a noncoarray subcomponent of type LOCK_TYPE",
                 c->name, &c->loc);
--- 3691,3698 ----
                 "of type LOCK_TYPE, which must have a codimension or be a "
                 "subcomponent of a coarray", c->name, &c->loc);
  
!   if (lock_type && allocatable && !coarray && c->ts.type == BT_DERIVED
!       && c->ts.u.derived->attr.lock_comp)
      gfc_error ("Allocatable component %s at %L must have a codimension as "
                 "it has a noncoarray subcomponent of type LOCK_TYPE",
                 c->name, &c->loc);
diff -Nrcpad gcc-16-20251207/gcc/fortran/resolve.cc gcc-16-20251214/gcc/fortran/resolve.cc
*** gcc-16-20251207/gcc/fortran/resolve.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/resolve.cc	Sun Dec 14 22:32:07 2025
*************** resolve_fl_derived (gfc_symbol *sym)
*** 17628,17633 ****
--- 17628,17649 ----
        gfc_component *data = gfc_find_component (sym, "_data", true, true, NULL);
        gfc_component *vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
  
+       if (data->ts.u.derived->attr.pdt_template)
+ 	{
+ 	  match m;
+ 	  m = gfc_get_pdt_instance (sym->param_list, &data->ts.u.derived,
+ 				    &data->param_list);
+ 	  if (m != MATCH_YES
+ 	      || !gfc_build_class_symbol (&sym->ts, &sym->attr, &sym->as))
+ 	    {
+ 	      gfc_error ("Failed to build PDT class component at %L",
+ 			 &sym->declared_at);
+ 	      return false;
+ 	    }
+ 	  data = gfc_find_component (sym, "_data", true, true, NULL);
+ 	  vptr = gfc_find_component (sym, "_vptr", true, true, NULL);
+ 	}
+ 
        /* Nothing more to do for unlimited polymorphic entities.  */
        if (data->ts.u.derived->attr.unlimited_polymorphic)
  	{
*************** resolve_fl_derived (gfc_symbol *sym)
*** 17639,17645 ****
  	  gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
  	  gcc_assert (vtab);
  	  vptr->ts.u.derived = vtab->ts.u.derived;
! 	  if (!resolve_fl_derived0 (vptr->ts.u.derived))
  	    return false;
  	}
      }
--- 17655,17661 ----
  	  gfc_symbol *vtab = gfc_find_derived_vtab (data->ts.u.derived);
  	  gcc_assert (vtab);
  	  vptr->ts.u.derived = vtab->ts.u.derived;
! 	  if (vptr->ts.u.derived && !resolve_fl_derived0 (vptr->ts.u.derived))
  	    return false;
  	}
      }
diff -Nrcpad gcc-16-20251207/gcc/fortran/trans-expr.cc gcc-16-20251214/gcc/fortran/trans-expr.cc
*** gcc-16-20251207/gcc/fortran/trans-expr.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/trans-expr.cc	Sun Dec 14 22:32:07 2025
*************** gfc_conv_procedure_call (gfc_se * se, gf
*** 8347,8353 ****
  	}
  
        /* Character strings are passed as two parameters, a length and a
! 	 pointer - except for Bind(c) and c_ptrs which only passe the pointer.
  	 An unlimited polymorphic formal argument likewise does not
  	 need the length.  */
        if (parmse.string_length != NULL_TREE
--- 8347,8353 ----
  	}
  
        /* Character strings are passed as two parameters, a length and a
! 	 pointer - except for Bind(c) and c_ptrs which only pass the pointer.
  	 An unlimited polymorphic formal argument likewise does not
  	 need the length.  */
        if (parmse.string_length != NULL_TREE
diff -Nrcpad gcc-16-20251207/gcc/fortran/trans-openmp.cc gcc-16-20251214/gcc/fortran/trans-openmp.cc
*** gcc-16-20251207/gcc/fortran/trans-openmp.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/fortran/trans-openmp.cc	Sun Dec 14 22:32:07 2025
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 5093,5099 ****
  	    }
  	  break;
  	case OMP_LIST_USES_ALLOCATORS:
! 	  /* Ignore pre-defined allocators as no special treatment is needed. */
  	  for (; n != NULL; n = n->next)
  	    if (n->sym->attr.flavor == FL_VARIABLE)
  	      break;
--- 5093,5100 ----
  	    }
  	  break;
  	case OMP_LIST_USES_ALLOCATORS:
! 	  /* Ignore omp_null_allocator and pre-defined allocators as no
! 	     special treatment is needed. */
  	  for (; n != NULL; n = n->next)
  	    if (n->sym->attr.flavor == FL_VARIABLE)
  	      break;
diff -Nrcpad gcc-16-20251207/gcc/gcc.cc gcc-16-20251214/gcc/gcc.cc
*** gcc-16-20251207/gcc/gcc.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/gcc.cc	Sun Dec 14 22:32:07 2025
*************** out:
*** 7887,7893 ****
  }
  
  /* This routine reads lines from IN file, adds C++ style comments
!    at the begining of each line and writes result into OUT.  */
  
  static void
  insert_comments (const char *file_in, const char *file_out)
--- 7887,7893 ----
  }
  
  /* This routine reads lines from IN file, adds C++ style comments
!    at the beginning of each line and writes result into OUT.  */
  
  static void
  insert_comments (const char *file_in, const char *file_out)
diff -Nrcpad gcc-16-20251207/gcc/gdbhooks.py gcc-16-20251214/gcc/gdbhooks.py
*** gcc-16-20251207/gcc/gdbhooks.py	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/gdbhooks.py	Sun Dec 14 22:32:07 2025
*************** class AnaSupernodePrinter:
*** 399,405 ****
      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
  
--- 399,405 ----
      def to_string (self):
          result = '<ana::supernode 0x%x' % intptr(self.gdbval)
          if intptr(self.gdbval):
!             result += ' (SN %i)' % intptr(self.gdbval['m_id'])
          result += '>'
          return result
  
diff -Nrcpad gcc-16-20251207/gcc/gimple-fold.cc gcc-16-20251214/gcc/gimple-fold.cc
*** gcc-16-20251207/gcc/gimple-fold.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/gimple-fold.cc	Sun Dec 14 22:32:07 2025
*************** arith_overflowed_p (enum tree_code code,
*** 5757,5806 ****
    return wi::min_precision (wres, sign) > TYPE_PRECISION (type);
  }
  
! /* If IFN_{MASK,LEN,MASK_LEN}_LOAD/STORE call CALL is unconditional,
!    return a MEM_REF for the memory it references, otherwise return null.
!    VECTYPE is the type of the memory vector.  MASK_P indicates it's for
!    MASK if true, otherwise it's for LEN.  */
  
! static tree
! gimple_fold_partial_load_store_mem_ref (gcall *call, tree vectype, bool mask_p)
  {
!   tree ptr = gimple_call_arg (call, 0);
!   tree alias_align = gimple_call_arg (call, 1);
!   if (!tree_fits_uhwi_p (alias_align))
!     return NULL_TREE;
  
!   if (mask_p)
      {
!       tree mask = gimple_call_arg (call, 2);
!       if (!integer_all_onesp (mask))
! 	return NULL_TREE;
      }
!   else
      {
!       internal_fn ifn = gimple_call_internal_fn (call);
!       int len_index = internal_fn_len_index (ifn);
!       tree basic_len = gimple_call_arg (call, len_index);
!       if (!poly_int_tree_p (basic_len))
! 	return NULL_TREE;
!       tree bias = gimple_call_arg (call, len_index + 1);
!       gcc_assert (TREE_CODE (bias) == INTEGER_CST);
!       /* For LEN_LOAD/LEN_STORE/MASK_LEN_LOAD/MASK_LEN_STORE,
! 	 we don't fold when (bias + len) != VF.  */
!       if (maybe_ne (wi::to_poly_widest (basic_len) + wi::to_widest (bias),
! 		    GET_MODE_NUNITS (TYPE_MODE (vectype))))
! 	return NULL_TREE;
  
!       /* For MASK_LEN_{LOAD,STORE}, we should also check whether
! 	  the mask is all ones mask.  */
!       if (ifn == IFN_MASK_LEN_LOAD || ifn == IFN_MASK_LEN_STORE)
  	{
! 	  tree mask = gimple_call_arg (call, internal_fn_mask_index (ifn));
! 	  if (!integer_all_onesp (mask))
! 	    return NULL_TREE;
  	}
      }
  
    unsigned HOST_WIDE_INT align = tree_to_uhwi (alias_align);
    if (TYPE_ALIGN (vectype) != align)
      vectype = build_aligned_type (vectype, align);
--- 5757,5868 ----
    return wi::min_precision (wres, sign) > TYPE_PRECISION (type);
  }
  
! /* Mask state for partial load/store operations (mask and length).  */
! enum mask_load_store_state {
!   MASK_ALL_INACTIVE,  /* All lanes/elements are inactive (can be elided).  */
!   MASK_ALL_ACTIVE,    /* All lanes/elements are active (unconditional).  */
!   MASK_UNKNOWN
! };
  
! /* Check the mask/length state of IFN_{MASK,LEN,MASK_LEN}_LOAD/STORE call CALL.
!    Returns whether all elements are active, all inactive, or mixed.
!    VECTYPE is the vector type of the operation.  */
! 
! static enum mask_load_store_state
! partial_load_store_mask_state (gcall *call, tree vectype)
  {
!   internal_fn ifn = gimple_call_internal_fn (call);
!   int mask_index = internal_fn_mask_index (ifn);
!   int len_index = internal_fn_len_index (ifn);
  
!   /* Extract length and mask arguments up front.  */
!   tree len = len_index != -1 ? gimple_call_arg (call, len_index) : NULL_TREE;
!   tree bias = len ? gimple_call_arg (call, len_index + 1) : NULL_TREE;
!   tree mask = mask_index != -1 ? gimple_call_arg (call, mask_index) : NULL_TREE;
! 
!   poly_int64 nelts = GET_MODE_NUNITS (TYPE_MODE (vectype));
! 
!   poly_widest_int wlen = -1;
!   bool full_length_p = !len;  /* No length means full length.  */
! 
!   /* Compute effective length.  */
!   if (len && poly_int_tree_p (len))
      {
!       gcc_assert (TREE_CODE (bias) == INTEGER_CST);
!       wlen = wi::to_poly_widest (len) + wi::to_widest (bias);
! 
!       if (known_eq (wlen, 0))
! 	return MASK_ALL_INACTIVE;
! 
!       if (known_eq (wlen, nelts))
! 	full_length_p = true;
!       else
! 	full_length_p = false;
      }
! 
!   /* Check mask for early return cases.  */
!   if (mask)
      {
!       if (integer_zerop (mask))
! 	return MASK_ALL_INACTIVE;
  
!       if (full_length_p && integer_all_onesp (mask))
! 	return MASK_ALL_ACTIVE;
!     }
!   else if (full_length_p)
!     /* No mask and full length means all active.  */
!     return MASK_ALL_ACTIVE;
! 
!   /* For VLA vectors, we can't do much more.  */
!   if (!nelts.is_constant ())
!     return MASK_UNKNOWN;
! 
!   /* Same for VLS vectors with non-constant mask.  */
!   if (mask && TREE_CODE (mask) != VECTOR_CST)
!     return MASK_UNKNOWN;
! 
!   /* Check VLS vector elements.  */
!   gcc_assert (wlen.is_constant ());
! 
!   HOST_WIDE_INT active_len = wlen.to_constant ().to_shwi ();
!   if (active_len == -1)
!     active_len = nelts.to_constant ();
! 
!   /* Check if all elements in the active range match the mask.  */
!   for (HOST_WIDE_INT i = 0; i < active_len; i++)
!     {
!       bool elt_active = !mask || !integer_zerop (vector_cst_elt (mask, i));
!       if (!elt_active)
  	{
! 	  /* Found an inactive element.  Check if all are inactive.  */
! 	  for (HOST_WIDE_INT j = 0; j < active_len; j++)
! 	    if (!mask || !integer_zerop (vector_cst_elt (mask, j)))
! 	      return MASK_UNKNOWN;  /* Mixed state.  */
! 	  return MASK_ALL_INACTIVE;
  	}
      }
  
+   /* All elements in active range are active.  */
+   return full_length_p ? MASK_ALL_ACTIVE : MASK_UNKNOWN;
+ }
+ 
+ 
+ /* If IFN_{MASK,LEN,MASK_LEN}_LOAD/STORE call CALL is unconditional
+    (all lanes active), return a MEM_REF for the memory it references.
+    Otherwise return NULL_TREE.  VECTYPE is the type of the memory vector.  */
+ 
+ static tree
+ gimple_fold_partial_load_store_mem_ref (gcall *call, tree vectype)
+ {
+   /* Only fold if all lanes are active (unconditional).  */
+   if (partial_load_store_mask_state (call, vectype) != MASK_ALL_ACTIVE)
+     return NULL_TREE;
+ 
+   tree ptr = gimple_call_arg (call, 0);
+   tree alias_align = gimple_call_arg (call, 1);
+   if (!tree_fits_uhwi_p (alias_align))
+     return NULL_TREE;
+ 
    unsigned HOST_WIDE_INT align = tree_to_uhwi (alias_align);
    if (TYPE_ALIGN (vectype) != align)
      vectype = build_aligned_type (vectype, align);
*************** gimple_fold_partial_load_store_mem_ref (
*** 5808,5848 ****
    return fold_build2 (MEM_REF, vectype, ptr, offset);
  }
  
! /* Try to fold IFN_{MASK,LEN}_LOAD call CALL.  Return true on success.
!    MASK_P indicates it's for MASK if true, otherwise it's for LEN.  */
  
  static bool
! gimple_fold_partial_load (gimple_stmt_iterator *gsi, gcall *call, bool mask_p)
  {
    tree lhs = gimple_call_lhs (call);
!   if (!lhs)
!     return false;
  
!   if (tree rhs
!       = gimple_fold_partial_load_store_mem_ref (call, TREE_TYPE (lhs), mask_p))
      {
!       gassign *new_stmt = gimple_build_assign (lhs, rhs);
!       gimple_set_location (new_stmt, gimple_location (call));
!       gimple_move_vops (new_stmt, call);
!       gsi_replace (gsi, new_stmt, false);
!       return true;
      }
-   return false;
- }
  
! /* Try to fold IFN_{MASK,LEN}_STORE call CALL.  Return true on success.
!    MASK_P indicates it's for MASK if true, otherwise it's for LEN.  */
  
! static bool
! gimple_fold_partial_store (gimple_stmt_iterator *gsi, gcall *call,
! 			   bool mask_p)
! {
!   internal_fn ifn = gimple_call_internal_fn (call);
!   tree rhs = gimple_call_arg (call, internal_fn_stored_value_index (ifn));
!   if (tree lhs
!       = gimple_fold_partial_load_store_mem_ref (call, TREE_TYPE (rhs), mask_p))
      {
!       gassign *new_stmt = gimple_build_assign (lhs, rhs);
        gimple_set_location (new_stmt, gimple_location (call));
        gimple_move_vops (new_stmt, call);
        gsi_replace (gsi, new_stmt, false);
--- 5870,5937 ----
    return fold_build2 (MEM_REF, vectype, ptr, offset);
  }
  
! /* Try to fold IFN_{MASK,LEN}_LOAD/STORE call CALL.  Return true on success.  */
  
  static bool
! gimple_fold_partial_load_store (gimple_stmt_iterator *gsi, gcall *call)
  {
+   internal_fn ifn = gimple_call_internal_fn (call);
    tree lhs = gimple_call_lhs (call);
!   bool is_load = (lhs != NULL_TREE);
!   tree vectype;
  
!   if (is_load)
!     vectype = TREE_TYPE (lhs);
!   else
      {
!       tree rhs = gimple_call_arg (call, internal_fn_stored_value_index (ifn));
!       vectype = TREE_TYPE (rhs);
      }
  
!   enum mask_load_store_state state
!     = partial_load_store_mask_state (call, vectype);
  
!   /* Handle all-inactive case.  */
!   if (state == MASK_ALL_INACTIVE)
      {
!       if (is_load)
! 	{
! 	  /* Replace load with else value.  */
! 	  int else_index = internal_fn_else_index (ifn);
! 	  tree else_value = gimple_call_arg (call, else_index);
! 	  gassign *new_stmt = gimple_build_assign (lhs, else_value);
! 	  gimple_set_location (new_stmt, gimple_location (call));
! 	  gsi_replace (gsi, new_stmt, false);
! 	  return true;
! 	}
!       else
! 	{
! 	  /* Remove inactive store altogether.  */
! 	  unlink_stmt_vdef (call);
! 	  release_defs (call);
! 	  gsi_replace (gsi, gimple_build_nop (), true);
! 	  return true;
! 	}
!     }
! 
!   /* We cannot simplify a gather/scatter or load/store lanes further.  */
!   if (internal_gather_scatter_fn_p (ifn)
!       || TREE_CODE (vectype) == ARRAY_TYPE)
!     return false;
! 
!   /* Handle all-active case by folding to regular memory operation.  */
!   if (tree mem_ref = gimple_fold_partial_load_store_mem_ref (call, vectype))
!     {
!       gassign *new_stmt;
!       if (is_load)
! 	new_stmt = gimple_build_assign (lhs, mem_ref);
!       else
! 	{
! 	  tree rhs
! 	    = gimple_call_arg (call, internal_fn_stored_value_index (ifn));
! 	  new_stmt = gimple_build_assign (mem_ref, rhs);
! 	}
! 
        gimple_set_location (new_stmt, gimple_location (call));
        gimple_move_vops (new_stmt, call);
        gsi_replace (gsi, new_stmt, false);
*************** gimple_fold_call (gimple_stmt_iterator *
*** 6075,6093 ****
  	  cplx_result = true;
  	  uaddc_usubc = true;
  	  break;
- 	case IFN_MASK_LOAD:
- 	  changed |= gimple_fold_partial_load (gsi, stmt, true);
- 	  break;
- 	case IFN_MASK_STORE:
- 	  changed |= gimple_fold_partial_store (gsi, stmt, true);
- 	  break;
  	case IFN_LEN_LOAD:
  	case IFN_MASK_LEN_LOAD:
! 	  changed |= gimple_fold_partial_load (gsi, stmt, false);
! 	  break;
  	case IFN_LEN_STORE:
  	case IFN_MASK_LEN_STORE:
! 	  changed |= gimple_fold_partial_store (gsi, stmt, false);
  	  break;
  	default:
  	  break;
--- 6164,6184 ----
  	  cplx_result = true;
  	  uaddc_usubc = true;
  	  break;
  	case IFN_LEN_LOAD:
+ 	case IFN_MASK_LOAD:
  	case IFN_MASK_LEN_LOAD:
! 	case IFN_MASK_GATHER_LOAD:
! 	case IFN_MASK_LEN_GATHER_LOAD:
! 	case IFN_MASK_LOAD_LANES:
! 	case IFN_MASK_LEN_LOAD_LANES:
  	case IFN_LEN_STORE:
+ 	case IFN_MASK_STORE:
  	case IFN_MASK_LEN_STORE:
! 	case IFN_MASK_SCATTER_STORE:
! 	case IFN_MASK_LEN_SCATTER_STORE:
! 	case IFN_MASK_STORE_LANES:
! 	case IFN_MASK_LEN_STORE_LANES:
! 	  changed |= gimple_fold_partial_load_store (gsi, stmt);
  	  break;
  	default:
  	  break;
diff -Nrcpad gcc-16-20251207/gcc/gimple-ssa-warn-access.cc gcc-16-20251214/gcc/gimple-ssa-warn-access.cc
*** gcc-16-20251207/gcc/gimple-ssa-warn-access.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/gimple-ssa-warn-access.cc	Sun Dec 14 22:32:07 2025
*************** maybe_warn_alloc_args_overflow (gimple *
*** 2334,2347 ****
  	    }
  	  else if (tree_int_cst_lt (maxobjsize, args[i]))
  	    {
! 	      /* G++ emits calls to ::operator new[](SIZE_MAX) in C++98
! 		 mode and with -fno-exceptions as a way to indicate array
! 		 size overflow.  There's no good way to detect C++98 here
! 		 so avoid diagnosing these calls for all C++ modes.  */
  	      if (i == 0
  		  && fn
  		  && !args[1]
- 		  && lang_GNU_CXX ()
  		  && DECL_IS_OPERATOR_NEW_P (fn)
  		  && integer_all_onesp (args[i]))
  		continue;
--- 2334,2347 ----
  	    }
  	  else if (tree_int_cst_lt (maxobjsize, args[i]))
  	    {
! 	      /* G++ emits calls to ::operator new[](SIZE_MAX) in C++98 mode or
! 		 with -fno-exceptions as a way to indicate array size overflow.
! 		 Avoid diagnosing these calls.  Additionally, see e.g. PR99934,
! 		 G++ also potentially generates such calls in C++11 and later as
! 		 well, so suppress the diagnostic in all C++ modes.  */
  	      if (i == 0
  		  && fn
  		  && !args[1]
  		  && DECL_IS_OPERATOR_NEW_P (fn)
  		  && integer_all_onesp (args[i]))
  		continue;
diff -Nrcpad gcc-16-20251207/gcc/gimplify.cc gcc-16-20251214/gcc/gimplify.cc
*** gcc-16-20251207/gcc/gimplify.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/gimplify.cc	Sun Dec 14 22:32:07 2025
*************** gimplify_scan_omp_clauses (tree *list_p,
*** 14858,14863 ****
--- 14858,14868 ----
  	  nowait = 1;
  	  break;
  
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
+ 	  sorry_at (OMP_CLAUSE_LOCATION (c), "%<uses_allocators%> clause");
+ 	  remove = 1;
+ 	  break;
+ 
  	case OMP_CLAUSE_ORDERED:
  	case OMP_CLAUSE_UNTIED:
  	case OMP_CLAUSE_COLLAPSE:
*************** end_adjust_omp_map_clause:
*** 16366,16371 ****
--- 16371,16377 ----
  	case OMP_CLAUSE_FINALIZE:
  	case OMP_CLAUSE_INCLUSIVE:
  	case OMP_CLAUSE_EXCLUSIVE:
+ 	case OMP_CLAUSE_USES_ALLOCATORS:
  	  break;
  
  	case OMP_CLAUSE_NOHOST:
diff -Nrcpad gcc-16-20251207/gcc/go/ChangeLog gcc-16-20251214/gcc/go/ChangeLog
*** gcc-16-20251207/gcc/go/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/go/ChangeLog	Sun Dec 14 22:32:07 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-12-12  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	* lang.opt.urls: Regenerate.
+ 
  2025-11-30  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
  
  	* lang.opt.urls: Regenerate.
diff -Nrcpad gcc-16-20251207/gcc/go/lang.opt.urls gcc-16-20251214/gcc/go/lang.opt.urls
*** gcc-16-20251207/gcc/go/lang.opt.urls	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/go/lang.opt.urls	Sun Dec 14 22:32:07 2025
*************** I
*** 4,10 ****
  UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-I)
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
  
  ; skipping UrlSuffix for 'Wall' due to multiple URLs:
  ;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
--- 4,10 ----
  UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-I)
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-L)
  
  ; skipping UrlSuffix for 'Wall' due to multiple URLs:
  ;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
diff -Nrcpad gcc-16-20251207/gcc/internal-fn.cc gcc-16-20251214/gcc/internal-fn.cc
*** gcc-16-20251207/gcc/internal-fn.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/internal-fn.cc	Sun Dec 14 22:32:07 2025
*************** internal_fn_len_index (internal_fn fn)
*** 5006,5011 ****
--- 5006,5012 ----
    switch (fn)
      {
      case IFN_LEN_LOAD:
+       return 3;
      case IFN_LEN_STORE:
        return 2;
  
*************** internal_fn_else_index (internal_fn fn)
*** 5071,5076 ****
--- 5072,5080 ----
      case IFN_COND_LEN_NOT:
        return 2;
  
+     case IFN_LEN_LOAD:
+       return 2;
+ 
      case IFN_COND_ADD:
      case IFN_COND_SUB:
      case IFN_COND_MUL:
*************** internal_len_load_store_bias (internal_f
*** 5401,5407 ****
  {
    optab optab = direct_internal_fn_optab (ifn);
    insn_code icode = direct_optab_handler (optab, mode);
!   int bias_no = 3;
  
    if (icode == CODE_FOR_nothing)
      {
--- 5405,5411 ----
  {
    optab optab = direct_internal_fn_optab (ifn);
    insn_code icode = direct_optab_handler (optab, mode);
!   int bias_idx = internal_fn_len_index (ifn) + 1;
  
    if (icode == CODE_FOR_nothing)
      {
*************** internal_len_load_store_bias (internal_f
*** 5412,5433 ****
  	{
  	  /* Try MASK_LEN_LOAD.  */
  	  optab = direct_internal_fn_optab (IFN_MASK_LEN_LOAD);
  	}
        else
  	{
  	  /* Try MASK_LEN_STORE.  */
  	  optab = direct_internal_fn_optab (IFN_MASK_LEN_STORE);
  	}
        icode = convert_optab_handler (optab, mode, mask_mode);
-       bias_no = 4;
      }
  
    if (icode != CODE_FOR_nothing)
      {
        /* For now we only support biases of 0 or -1.  Try both of them.  */
!       if (insn_operand_matches (icode, bias_no, GEN_INT (0)))
  	return 0;
!       if (insn_operand_matches (icode, bias_no, GEN_INT (-1)))
  	return -1;
      }
  
--- 5416,5438 ----
  	{
  	  /* Try MASK_LEN_LOAD.  */
  	  optab = direct_internal_fn_optab (IFN_MASK_LEN_LOAD);
+ 	  bias_idx = internal_fn_len_index (IFN_MASK_LEN_LOAD) + 1;
  	}
        else
  	{
  	  /* Try MASK_LEN_STORE.  */
  	  optab = direct_internal_fn_optab (IFN_MASK_LEN_STORE);
+ 	  bias_idx = internal_fn_len_index (IFN_MASK_LEN_STORE) + 1;
  	}
        icode = convert_optab_handler (optab, mode, mask_mode);
      }
  
    if (icode != CODE_FOR_nothing)
      {
        /* For now we only support biases of 0 or -1.  Try both of them.  */
!       if (insn_operand_matches (icode, bias_idx, GEN_INT (0)))
  	return 0;
!       if (insn_operand_matches (icode, bias_idx, GEN_INT (-1)))
  	return -1;
      }
  
diff -Nrcpad gcc-16-20251207/gcc/ipa-inline.cc gcc-16-20251214/gcc/ipa-inline.cc
*** gcc-16-20251207/gcc/ipa-inline.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/ipa-inline.cc	Sun Dec 14 22:32:07 2025
*************** speculation_useful_p (struct cgraph_edge
*** 1971,1977 ****
  
    gcc_assert (e->speculative && !e->indirect_unknown_callee);
  
!   /* Even if calll statement is not hot, we can still have useful speculation
       in cases where a lot of time is spent is callee.
       Do not check maybe_hot_p.  */
    if (!e->count.nonzero_p ())
--- 1971,1977 ----
  
    gcc_assert (e->speculative && !e->indirect_unknown_callee);
  
!   /* Even if call statement is not hot, we can still have useful speculation
       in cases where a lot of time is spent is callee.
       Do not check maybe_hot_p.  */
    if (!e->count.nonzero_p ())
diff -Nrcpad gcc-16-20251207/gcc/jit/ChangeLog gcc-16-20251214/gcc/jit/ChangeLog
*** gcc-16-20251207/gcc/jit/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/jit/ChangeLog	Sun Dec 14 22:32:07 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* docs/_build/texinfo/libgccjit.texi: Fix comment typo, shold -> should.
+ 	* docs/internals/index.rst: Likewise.
+ 
  2025-11-12  Antoni Boucher  <bouanto@zoho.com>
  
  	* jit-playback.cc: Support new function attributes.
diff -Nrcpad gcc-16-20251207/gcc/jit/docs/_build/texinfo/libgccjit.texi gcc-16-20251214/gcc/jit/docs/_build/texinfo/libgccjit.texi
*** gcc-16-20251207/gcc/jit/docs/_build/texinfo/libgccjit.texi	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/jit/docs/_build/texinfo/libgccjit.texi	Sun Dec 14 22:32:07 2025
*************** in your email (along with the host tripl
*** 16418,16424 ****
  
  A good patch should contain the information listed in the
  gcc contribution guide linked to above; for a @code{jit} patch, the patch
! shold contain:
  
  @quotation
  
--- 16418,16424 ----
  
  A good patch should contain the information listed in the
  gcc contribution guide linked to above; for a @code{jit} patch, the patch
! should contain:
  
  @quotation
  
diff -Nrcpad gcc-16-20251207/gcc/jit/docs/internals/index.rst gcc-16-20251214/gcc/jit/docs/internals/index.rst
*** gcc-16-20251207/gcc/jit/docs/internals/index.rst	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/jit/docs/internals/index.rst	Sun Dec 14 22:32:07 2025
*************** in your email (along with the host tripl
*** 358,364 ****
  
  A good patch should contain the information listed in the
  gcc contribution guide linked to above; for a ``jit`` patch, the patch
! shold contain:
  
    * the code itself (for example, a new API entrypoint will typically
      touch ``libgccjit.h`` and ``.c``, along with support code in
--- 358,364 ----
  
  A good patch should contain the information listed in the
  gcc contribution guide linked to above; for a ``jit`` patch, the patch
! should contain:
  
    * the code itself (for example, a new API entrypoint will typically
      touch ``libgccjit.h`` and ``.c``, along with support code in
diff -Nrcpad gcc-16-20251207/gcc/lto/ChangeLog gcc-16-20251214/gcc/lto/ChangeLog
*** gcc-16-20251207/gcc/lto/ChangeLog	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/lto/ChangeLog	Sun Dec 14 22:32:07 2025
***************
*** 1,3 ****
--- 1,9 ----
+ 2025-12-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR ipa/122955
+ 	* lto-partition.cc (lto_1_to_1_map): Use save_as_a<asm_node*> around next.
+ 	(create_asm_partition): Likewise.
+ 
  2025-11-25  Siddhesh Poyarekar  <siddhesh@gotplt.org>
  
  	PR lto/122515
diff -Nrcpad gcc-16-20251207/gcc/lto/lto-partition.cc gcc-16-20251214/gcc/lto/lto-partition.cc
*** gcc-16-20251207/gcc/lto/lto-partition.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/lto/lto-partition.cc	Sun Dec 14 22:32:07 2025
*************** lto_1_to_1_map (void)
*** 383,389 ****
      }
  
    struct asm_node *anode;
!   for (anode = symtab->first_asm_symbol (); anode; anode = anode->next)
      node_into_file_partition (anode, pmap);
  
    create_partition_if_empty ();
--- 383,389 ----
      }
  
    struct asm_node *anode;
!   for (anode = symtab->first_asm_symbol (); anode; anode = safe_as_a<asm_node*>(anode->next))
      node_into_file_partition (anode, pmap);
  
    create_partition_if_empty ();
*************** create_asm_partition (void)
*** 406,412 ****
    if (anode)
      {
        ltrans_partition partition = new_partition ("asm_nodes");
!       for (; anode; anode = anode->next)
  	add_symbol_to_partition (partition, anode);
      }
  }
--- 406,412 ----
    if (anode)
      {
        ltrans_partition partition = new_partition ("asm_nodes");
!       for (; anode; anode = safe_as_a<asm_node*>(anode->next))
  	add_symbol_to_partition (partition, anode);
      }
  }
diff -Nrcpad gcc-16-20251207/gcc/lto-streamer-out.cc gcc-16-20251214/gcc/lto-streamer-out.cc
*** gcc-16-20251207/gcc/lto-streamer-out.cc	Sun Dec  7 22:32:07 2025
--- gcc-16-20251214/gcc/lto-streamer-out.cc	Sun Dec 14 22:32:07 2025
*************** lto_output (void)
*** 2828,2834 ****
    if (!flag_wpa)
      {
        asm_node *anode;
!       for (anode = symtab->first_asm_symbol (); anode; anode = anode->next)
  	lto_set_symtab_encoder_in_partition (encoder, anode);
      }
  
--- 2828,2836 ----
    if (!flag_wpa)
      {
        asm_node *anode;
!       for (anode = symtab->first_asm_symbol ();
! 	   anode;
! 	   anode = safe_as_a<asm_node*>(anode->next))
  	lto_set_symtab_encoder_in_partition (encoder, anode);
      }
  
diff -Nrcpad gcc-16-20251207/gcc/m2/ChangeLog gcc-16-20251214/gcc/m2/ChangeLog
*** gcc-16-20251207/gcc/m2/ChangeLog	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/m2/ChangeLog	Sun Dec 14 22:32:07 2025
***************
*** 1,3 ****
--- 1,12 ----
+ 2025-12-12  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	* lang.opt.urls: Regenerate.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gm2-compiler/M2Check.mod (buildError4): Fix comment typo,
+ 	paramters -> parameters.
+ 
  2025-11-30  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
  
  	* lang.opt.urls: Regenerate.
diff -Nrcpad gcc-16-20251207/gcc/m2/gm2-compiler/M2Check.mod gcc-16-20251214/gcc/m2/gm2-compiler/M2Check.mod
*** gcc-16-20251207/gcc/m2/gm2-compiler/M2Check.mod	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/m2/gm2-compiler/M2Check.mod	Sun Dec 14 22:32:07 2025
*************** BEGIN
*** 615,621 ****
           (* We need to create top level error message first.  *)
           tinfo^.error := NewError (tinfo^.token) ;
           (* The parameters to MetaString4 in buildError4 must match the order
!             of paramters passed to ParameterTypeCompatible.  *)
           s := MetaString4 (tinfo^.format,
                             tinfo^.procedure,
                             tinfo^.formal, tinfo^.actual,
--- 615,621 ----
           (* We need to create top level error message first.  *)
           tinfo^.error := NewError (tinfo^.token) ;
           (* The parameters to MetaString4 in buildError4 must match the order
!             of parameters passed to ParameterTypeCompatible.  *)
           s := MetaString4 (tinfo^.format,
                             tinfo^.procedure,
                             tinfo^.formal, tinfo^.actual,
diff -Nrcpad gcc-16-20251207/gcc/m2/lang.opt.urls gcc-16-20251214/gcc/m2/lang.opt.urls
*** gcc-16-20251207/gcc/m2/lang.opt.urls	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/m2/lang.opt.urls	Sun Dec 14 22:32:07 2025
*************** I
*** 41,47 ****
  UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-I)
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
  
  M
  UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
--- 41,47 ----
  UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-I)
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-L)
  
  M
  UrlSuffix(gcc/Preprocessor-Options.html#index-M) LangUrlSuffix_D(gdc/Code-Generation.html#index-M)
diff -Nrcpad gcc-16-20251207/gcc/match.pd gcc-16-20251214/gcc/match.pd
*** gcc-16-20251207/gcc/match.pd	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/match.pd	Sun Dec 14 22:32:07 2025
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3273,3278 ****
--- 3273,3279 ----
         || POINTER_TYPE_P (itype))
        && wi::eq_p (wi::to_wide (int_cst), wi::max_value (itype))))))
  
+ #if GIMPLE
  /* Saturation add for unsigned integer.  */
  (if (INTEGRAL_TYPE_P (type) && TYPE_UNSIGNED (type))
   (match (usadd_overflow_mask @0 @1)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 3814,3819 ****
--- 3815,3821 ----
       }
       (if (c2_is_max_p)))))
  )
+ #endif
  
  /* The boundary condition for case 10: IMM = 1:
     SAT_U_SUB = X >= IMM ? (X - IMM) : 0.
*************** and,
*** 11765,11770 ****
--- 11767,11773 ----
  	  (vec_perm @2 @5 { op0; })))))))))))
  
  
+ #if GIMPLE
  /* Match count trailing zeroes for simplify_count_zeroes in forwprop.
     The canonical form is array[((x & -x) * C) >> SHIFT] where C is a magic
     constant which when multiplied by a power of 2 contains a unique value
*************** and,
*** 11912,11917 ****
--- 11915,11922 ----
   (bit_not
    (nop_convert1? (bit_xor@0 (convert2? (lshift integer_onep@1 @2)) @3))))
  
+ #endif
+ 
  /* n - (((n > C1) ? n : C1) & -C2) ->  n & C1 for unsigned case.
     n - (((n > C1) ? n : C1) & -C2) ->  (n <= C1) ? n : (n & C1) for signed case.  */
  (simplify
diff -Nrcpad gcc-16-20251207/gcc/optabs-tree.cc gcc-16-20251214/gcc/optabs-tree.cc
*** gcc-16-20251207/gcc/optabs-tree.cc	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/optabs-tree.cc	Sun Dec 14 22:32:07 2025
*************** target_supports_len_load_store_p (machin
*** 615,642 ****
  {
    optab op = is_load ? len_load_optab : len_store_optab;
    optab masked_op = is_load ? mask_len_load_optab : mask_len_store_optab;
  
!   if (direct_optab_handler (op, mode))
      {
!       if (ifn)
! 	*ifn = is_load ? IFN_LEN_LOAD : IFN_LEN_STORE;
!       return true;
      }
    machine_mode mask_mode;
!   enum insn_code icode;
!   if (targetm.vectorize.get_mask_mode (mode).exists (&mask_mode)
        && ((icode = convert_optab_handler (masked_op, mode, mask_mode))
  	  != CODE_FOR_nothing))
!     {
!       if (ifn)
! 	*ifn = is_load ? IFN_MASK_LEN_LOAD : IFN_MASK_LEN_STORE;
!       if (elsvals && is_load)
! 	get_supported_else_vals (icode,
! 				 internal_fn_else_index (IFN_MASK_LEN_LOAD),
! 				 *elsvals);
!       return true;
!     }
!   return false;
  }
  
  /* If target supports vector load/store with length for vector mode MODE,
--- 615,641 ----
  {
    optab op = is_load ? len_load_optab : len_store_optab;
    optab masked_op = is_load ? mask_len_load_optab : mask_len_store_optab;
+   internal_fn which_ifn;
  
!   enum insn_code icode;
!   if ((icode = direct_optab_handler (op, mode)) != CODE_FOR_nothing)
      {
!       which_ifn = is_load ? IFN_LEN_LOAD : IFN_LEN_STORE;
      }
    machine_mode mask_mode;
!   if (!icode
!       && targetm.vectorize.get_mask_mode (mode).exists (&mask_mode)
        && ((icode = convert_optab_handler (masked_op, mode, mask_mode))
  	  != CODE_FOR_nothing))
!     which_ifn = is_load ? IFN_MASK_LEN_LOAD : IFN_MASK_LEN_STORE;
! 
!   if (icode && elsvals && is_load)
!     get_supported_else_vals (icode, internal_fn_else_index (which_ifn),
! 			     *elsvals);
! 
!   if (icode && ifn)
!     *ifn = which_ifn;
!   return icode;
  }
  
  /* If target supports vector load/store with length for vector mode MODE,
diff -Nrcpad gcc-16-20251207/gcc/regcprop.cc gcc-16-20251214/gcc/regcprop.cc
*** gcc-16-20251207/gcc/regcprop.cc	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/regcprop.cc	Sun Dec 14 22:32:08 2025
*************** struct queued_debug_insn_change
*** 59,71 ****
     value.  The OLDEST_REGNO field points to the head of the list, and
     the NEXT_REGNO field runs through the list.  The MODE field indicates
     what mode the data is known to be in; this field is VOIDmode when the
!    register is not known to contain valid data.  */
  
  struct value_data_entry
  {
    machine_mode mode;
    unsigned int oldest_regno;
    unsigned int next_regno;
    struct queued_debug_insn_change *debug_insn_changes;
  };
  
--- 59,74 ----
     value.  The OLDEST_REGNO field points to the head of the list, and
     the NEXT_REGNO field runs through the list.  The MODE field indicates
     what mode the data is known to be in; this field is VOIDmode when the
!    register is not known to contain valid data.  The FRAME_RELATED field
!    indicates if the instruction that updated this register is frame
!    related or not.  */
  
  struct value_data_entry
  {
    machine_mode mode;
    unsigned int oldest_regno;
    unsigned int next_regno;
+   bool frame_related;
    struct queued_debug_insn_change *debug_insn_changes;
  };
  
*************** static void set_value_regno (unsigned, m
*** 88,99 ****
  static void init_value_data (struct value_data *);
  static void kill_clobbered_value (rtx, const_rtx, void *);
  static void kill_set_value (rtx, const_rtx, void *);
! static void copy_value (rtx, rtx, struct value_data *);
  static bool mode_change_ok (machine_mode, machine_mode,
  			    unsigned int);
  static rtx maybe_mode_change (machine_mode, machine_mode,
  			      machine_mode, unsigned int, unsigned int);
! static rtx find_oldest_value_reg (enum reg_class, rtx, struct value_data *);
  static bool replace_oldest_value_reg (rtx *, enum reg_class, rtx_insn *,
  				      struct value_data *);
  static bool replace_oldest_value_addr (rtx *, enum reg_class,
--- 91,103 ----
  static void init_value_data (struct value_data *);
  static void kill_clobbered_value (rtx, const_rtx, void *);
  static void kill_set_value (rtx, const_rtx, void *);
! static void copy_value (rtx, rtx, struct value_data *, bool frame_related);
  static bool mode_change_ok (machine_mode, machine_mode,
  			    unsigned int);
  static rtx maybe_mode_change (machine_mode, machine_mode,
  			      machine_mode, unsigned int, unsigned int);
! static bool incompatible_frame_status (bool, bool);
! static rtx find_oldest_value_reg (enum reg_class, rtx, struct value_data *, bool frame_related);
  static bool replace_oldest_value_reg (rtx *, enum reg_class, rtx_insn *,
  				      struct value_data *);
  static bool replace_oldest_value_addr (rtx *, enum reg_class,
*************** kill_value_one_regno (unsigned int regno
*** 147,152 ****
--- 151,157 ----
    vd->e[regno].mode = VOIDmode;
    vd->e[regno].oldest_regno = regno;
    vd->e[regno].next_regno = INVALID_REGNUM;
+   vd->e[regno].frame_related = false;
    if (vd->e[regno].debug_insn_changes)
      free_debug_insn_changes (vd, regno);
  
*************** init_value_data (struct value_data *vd)
*** 227,232 ****
--- 232,238 ----
        vd->e[i].oldest_regno = i;
        vd->e[i].next_regno = INVALID_REGNUM;
        vd->e[i].debug_insn_changes = NULL;
+       vd->e[i].frame_related = false;
      }
    vd->max_value_regs = 0;
    vd->n_debug_insn_changes = 0;
*************** struct kill_set_value_data
*** 248,253 ****
--- 254,260 ----
  {
    struct value_data *vd;
    rtx ignore_set_reg;
+   bool insn_is_frame_related;
  };
  
  /* Called through note_stores.  If X is set, not clobbered, kill its
*************** kill_set_value (rtx x, const_rtx set, vo
*** 264,270 ****
      {
        kill_value (x, ksvd->vd);
        if (REG_P (x))
! 	set_value_regno (REGNO (x), GET_MODE (x), ksvd->vd);
      }
  }
  
--- 271,280 ----
      {
        kill_value (x, ksvd->vd);
        if (REG_P (x))
! 	{
! 	  set_value_regno (REGNO (x), GET_MODE (x), ksvd->vd);
! 	  ksvd->vd->e[REGNO(x)].frame_related = ksvd->insn_is_frame_related;
! 	}
      }
  }
  
*************** kill_autoinc_value (rtx_insn *insn, stru
*** 283,288 ****
--- 293,299 ----
  	  x = XEXP (x, 0);
  	  kill_value (x, vd);
  	  set_value_regno (REGNO (x), GET_MODE (x), vd);
+ 	  vd->e[REGNO(x)].frame_related = RTX_FRAME_RELATED_P (insn);
  	  iter.skip_subrtxes ();
  	}
      }
*************** kill_autoinc_value (rtx_insn *insn, stru
*** 292,298 ****
     to reflect that SRC contains an older copy of the shared value.  */
  
  static void
! copy_value (rtx dest, rtx src, struct value_data *vd)
  {
    unsigned int dr = REGNO (dest);
    unsigned int sr = REGNO (src);
--- 303,309 ----
     to reflect that SRC contains an older copy of the shared value.  */
  
  static void
! copy_value (rtx dest, rtx src, struct value_data *vd, bool frame_related)
  {
    unsigned int dr = REGNO (dest);
    unsigned int sr = REGNO (src);
*************** copy_value (rtx dest, rtx src, struct va
*** 391,396 ****
--- 402,409 ----
      continue;
    vd->e[i].next_regno = dr;
  
+   vd->e[dr].frame_related = frame_related;
+ 
    if (flag_checking)
      validate_value_data (vd);
  }
*************** maybe_mode_change (machine_mode orig_mod
*** 455,466 ****
    return NULL_RTX;
  }
  
  /* Find the oldest copy of the value contained in REGNO that is in
     register class CL and has mode MODE.  If found, return an rtx
     of that oldest register, otherwise return NULL.  */
  
  static rtx
! find_oldest_value_reg (enum reg_class cl, rtx reg, struct value_data *vd)
  {
    unsigned int regno = REGNO (reg);
    machine_mode mode = GET_MODE (reg);
--- 468,495 ----
    return NULL_RTX;
  }
  
+ /* Copy propagation must not replace a value in a frame-related
+    instruction with one produced by a non–frame-related instruction.
+    Doing so may cause the DCE pass to delete the original frame-related
+    instruction, which would in turn produce incorrect DWARF information
+    (see PR122274).  TO_FRAME_RELATED indicates whether the destination
+    instruction receiving the propagated value is frame-related.
+    FROM_FRAME_RELATED indicates whether the instruction providing that
+    value is frame-related.
+    Return true if copy propagation is not permitted.  */
+ 
+ static bool
+ incompatible_frame_status (bool to_frame_related, bool from_frame_related)
+ {
+   return to_frame_related && !from_frame_related;
+ }
+ 
  /* Find the oldest copy of the value contained in REGNO that is in
     register class CL and has mode MODE.  If found, return an rtx
     of that oldest register, otherwise return NULL.  */
  
  static rtx
! find_oldest_value_reg (enum reg_class cl, rtx reg, struct value_data *vd, bool frame_related)
  {
    unsigned int regno = REGNO (reg);
    machine_mode mode = GET_MODE (reg);
*************** find_oldest_value_reg (enum reg_class cl
*** 488,493 ****
--- 517,525 ----
        if (!in_hard_reg_set_p (reg_class_contents[cl], mode, i))
  	continue;
  
+       if (incompatible_frame_status (frame_related, vd->e[i].frame_related))
+ 	continue;
+ 
        new_rtx = maybe_mode_change (oldmode, vd->e[regno].mode, mode, i, regno);
        if (new_rtx)
  	{
*************** static bool
*** 513,519 ****
  replace_oldest_value_reg (rtx *loc, enum reg_class cl, rtx_insn *insn,
  			  struct value_data *vd)
  {
!   rtx new_rtx = find_oldest_value_reg (cl, *loc, vd);
    if (new_rtx && (!DEBUG_INSN_P (insn) || !skip_debug_insn_p))
      {
        if (DEBUG_INSN_P (insn))
--- 545,551 ----
  replace_oldest_value_reg (rtx *loc, enum reg_class cl, rtx_insn *insn,
  			  struct value_data *vd)
  {
!   rtx new_rtx = find_oldest_value_reg (cl, *loc, vd, RTX_FRAME_RELATED_P (insn));
    if (new_rtx && (!DEBUG_INSN_P (insn) || !skip_debug_insn_p))
      {
        if (DEBUG_INSN_P (insn))
*************** copyprop_hardreg_forward_1 (basic_block
*** 807,815 ****
  	{
  	  unsigned int regno = REGNO (SET_SRC (set));
  	  rtx r1 = find_oldest_value_reg (REGNO_REG_CLASS (regno),
! 					  SET_DEST (set), vd);
  	  rtx r2 = find_oldest_value_reg (REGNO_REG_CLASS (regno),
! 					  SET_SRC (set), vd);
  	  if (rtx_equal_p (r1 ? r1 : SET_DEST (set), r2 ? r2 : SET_SRC (set)))
  	    {
  	      bool last = insn == BB_END (bb);
--- 839,847 ----
  	{
  	  unsigned int regno = REGNO (SET_SRC (set));
  	  rtx r1 = find_oldest_value_reg (REGNO_REG_CLASS (regno),
! 					  SET_DEST (set), vd, false);
  	  rtx r2 = find_oldest_value_reg (REGNO_REG_CLASS (regno),
! 					  SET_SRC (set), vd, false);
  	  if (rtx_equal_p (r1 ? r1 : SET_DEST (set), r2 ? r2 : SET_SRC (set)))
  	    {
  	      bool last = insn == BB_END (bb);
*************** copyprop_hardreg_forward_1 (basic_block
*** 933,939 ****
  	  if (REG_P (dest))
  	    {
  	      new_rtx = find_oldest_value_reg (REGNO_REG_CLASS (regno),
! 					       src, vd);
  
  	      if (new_rtx && validate_change (insn, &SET_SRC (set), new_rtx, 0))
  		{
--- 965,971 ----
  	  if (REG_P (dest))
  	    {
  	      new_rtx = find_oldest_value_reg (REGNO_REG_CLASS (regno),
! 					       src, vd, RTX_FRAME_RELATED_P (insn));
  
  	      if (new_rtx && validate_change (insn, &SET_SRC (set), new_rtx, 0))
  		{
*************** copyprop_hardreg_forward_1 (basic_block
*** 954,959 ****
--- 986,993 ----
  	  for (i = vd->e[regno].oldest_regno; i != regno;
  	       i = vd->e[i].next_regno)
  	    {
+ 	      if (incompatible_frame_status (RTX_FRAME_RELATED_P (insn), vd->e[i].frame_related))
+ 		continue;
  	      new_rtx = maybe_mode_change (vd->e[i].mode, vd->e[regno].mode,
  				       mode, i, regno);
  	      if (new_rtx != NULL_RTX)
*************** copyprop_hardreg_forward_1 (basic_block
*** 1082,1087 ****
--- 1116,1122 ----
  
        ksvd.vd = vd;
        ksvd.ignore_set_reg = NULL_RTX;
+       ksvd.insn_is_frame_related = false;
  
        /* Clobber call-clobbered registers.  */
        if (CALL_P (insn))
*************** copyprop_hardreg_forward_1 (basic_block
*** 1099,1105 ****
  		  rtx dest = SET_DEST (x);
  		  kill_value (dest, vd);
  		  set_value_regno (REGNO (dest), GET_MODE (dest), vd);
! 		  copy_value (dest, SET_SRC (x), vd);
  		  ksvd.ignore_set_reg = dest;
  		  set_regno = REGNO (dest);
  		  set_nregs = REG_NREGS (dest);
--- 1134,1140 ----
  		  rtx dest = SET_DEST (x);
  		  kill_value (dest, vd);
  		  set_value_regno (REGNO (dest), GET_MODE (dest), vd);
! 		  copy_value (dest, SET_SRC (x), vd, false);
  		  ksvd.ignore_set_reg = dest;
  		  set_regno = REGNO (dest);
  		  set_nregs = REG_NREGS (dest);
*************** copyprop_hardreg_forward_1 (basic_block
*** 1147,1152 ****
--- 1182,1189 ----
  
        if (!noop_p)
  	{
+ 	  ksvd.insn_is_frame_related = RTX_FRAME_RELATED_P (insn);
+ 
  	  /* Notice stores.  */
  	  note_stores (insn, kill_set_value, &ksvd);
  
*************** copyprop_hardreg_forward_1 (basic_block
*** 1154,1160 ****
  	  if (copy_p)
  	    {
  	      df_insn_rescan (insn);
! 	      copy_value (SET_DEST (set), SET_SRC (set), vd);
  	    }
  	}
  
--- 1191,1197 ----
  	  if (copy_p)
  	    {
  	      df_insn_rescan (insn);
! 	      copy_value (SET_DEST (set), SET_SRC (set), vd, RTX_FRAME_RELATED_P (insn));
  	    }
  	}
  
diff -Nrcpad gcc-16-20251207/gcc/rtlanal.cc gcc-16-20251214/gcc/rtlanal.cc
*** gcc-16-20251207/gcc/rtlanal.cc	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/rtlanal.cc	Sun Dec 14 22:32:08 2025
*************** single_set_2 (const rtx_insn *insn, cons
*** 1546,1551 ****
--- 1546,1554 ----
  	    case CLOBBER:
  	      break;
  
+ 	    default:
+ 	      return NULL_RTX;
+ 
  	    case SET:
  	      /* We can consider insns having multiple sets, where all
  		 but one are dead as single set insns.  In common case
*************** single_set_2 (const rtx_insn *insn, cons
*** 1555,1577 ****
  		 When we reach set first time, we just expect this is
  		 the single set we are looking for and only when more
  		 sets are found in the insn, we check them.  */
  	      if (!set_verified)
  		{
! 		  if (find_reg_note (insn, REG_UNUSED, SET_DEST (set))
! 		      && !side_effects_p (set))
  		    set = NULL;
  		  else
  		    set_verified = 1;
  		}
  	      if (!set)
  		set = sub, set_verified = 0;
! 	      else if (!find_reg_note (insn, REG_UNUSED, SET_DEST (sub))
! 		       || side_effects_p (sub))
  		return NULL_RTX;
  	      break;
- 
- 	    default:
- 	      return NULL_RTX;
  	    }
  	}
      }
--- 1558,1585 ----
  		 When we reach set first time, we just expect this is
  		 the single set we are looking for and only when more
  		 sets are found in the insn, we check them.  */
+ 	      auto unused = [] (const rtx_insn *insn, rtx dest) {
+ 		if (!df)
+ 		  return false;
+ 		if (df_note)
+ 		  return !!find_reg_note (insn, REG_UNUSED, dest);
+ 		return (REG_P (dest)
+ 			&& !HARD_REGISTER_P (dest)
+ 			&& REGNO (dest) < df->regs_inited
+ 			&& DF_REG_USE_COUNT (REGNO (dest)) == 0);
+ 	      };
  	      if (!set_verified)
  		{
! 		  if (unused (insn, SET_DEST (set)) && !side_effects_p (set))
  		    set = NULL;
  		  else
  		    set_verified = 1;
  		}
  	      if (!set)
  		set = sub, set_verified = 0;
! 	      else if (!unused (insn, SET_DEST (sub)) || side_effects_p (sub))
  		return NULL_RTX;
  	      break;
  	    }
  	}
      }
diff -Nrcpad gcc-16-20251207/gcc/rust/ChangeLog gcc-16-20251214/gcc/rust/ChangeLog
*** gcc-16-20251207/gcc/rust/ChangeLog	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/rust/ChangeLog	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,14 ----
+ 2025-12-12  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	* lang.opt.urls: Regenerate.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* backend/rust-tree.cc (fold_builtin_source_location): Fix string literal
+ 	typo, funciton -> function.
+ 	* resolve/rust-late-name-resolver-2.0.cc (Late::visit): Fix comment typo,
+ 	begining -> beginning.
+ 
  2025-12-03  Marc Poulhiès  <dkm@kataplop.net>
  
  	* lex/rust-lex.cc (rust_input_source_test): Reindent.
diff -Nrcpad gcc-16-20251207/gcc/rust/backend/rust-tree.cc gcc-16-20251214/gcc/rust/backend/rust-tree.cc
*** gcc-16-20251207/gcc/rust/backend/rust-tree.cc	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/rust/backend/rust-tree.cc	Sun Dec 14 22:32:08 2025
*************** fold_builtin_source_location (location_t
*** 4882,4888 ****
  	    }
  	  else if (strcmp (n, "_M_function_name") == 0)
  	    {
! 	      const char *name = "todo: add funciton name here";
  
  	      // if (current_function_decl)
  	      // name = cxx_printable_name (current_function_decl, 2);
--- 4882,4888 ----
  	    }
  	  else if (strcmp (n, "_M_function_name") == 0)
  	    {
! 	      const char *name = "todo: add function name here";
  
  	      // if (current_function_decl)
  	      // name = cxx_printable_name (current_function_decl, 2);
diff -Nrcpad gcc-16-20251207/gcc/rust/lang.opt.urls gcc-16-20251214/gcc/rust/lang.opt.urls
*** gcc-16-20251207/gcc/rust/lang.opt.urls	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/rust/lang.opt.urls	Sun Dec 14 22:32:08 2025
*************** I
*** 4,10 ****
  UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-I)
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L)
  
  ; skipping UrlSuffix for 'Wall' due to multiple URLs:
  ;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
--- 4,10 ----
  UrlSuffix(gcc/Directory-Options.html#index-I) LangUrlSuffix_D(gdc/Directory-Options.html#index-I) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-I)
  
  L
! UrlSuffix(gcc/Directory-Options.html#index-L) LangUrlSuffix_D(gdc/Directory-Options.html#index-L) LangUrlSuffix_Algol68(ga68/Directory-options.html#index-L)
  
  ; skipping UrlSuffix for 'Wall' due to multiple URLs:
  ;   duplicate: 'gcc/Standard-Libraries.html#index-Wall-1'
diff -Nrcpad gcc-16-20251207/gcc/rust/resolve/rust-late-name-resolver-2.0.cc gcc-16-20251214/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
*** gcc-16-20251207/gcc/rust/resolve/rust-late-name-resolver-2.0.cc	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/rust/resolve/rust-late-name-resolver-2.0.cc	Sun Dec 14 22:32:08 2025
*************** Late::visit (AST::SelfParam &param)
*** 252,258 ****
  
    DefaultResolver::visit (param);
    // FIXME: this location should be a bit off
!   // ex: would point to the begining of "mut self" instead of the "self"
    std::ignore = ctx.values.insert (Identifier ("self", param.get_locus ()),
  				   param.get_node_id ());
  }
--- 252,258 ----
  
    DefaultResolver::visit (param);
    // FIXME: this location should be a bit off
!   // ex: would point to the beginning of "mut self" instead of the "self"
    std::ignore = ctx.values.insert (Identifier ("self", param.get_locus ()),
  				   param.get_node_id ());
  }
diff -Nrcpad gcc-16-20251207/gcc/symtab.cc gcc-16-20251214/gcc/symtab.cc
*** gcc-16-20251207/gcc/symtab.cc	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/symtab.cc	Sun Dec 14 22:32:08 2025
*************** symtab_node::verify_symtab_nodes (void)
*** 1485,1491 ****
    hash_map<tree, symtab_node *> comdat_head_map (251);
    asm_node *anode;
  
!   for (anode = symtab->first_asm_symbol (); anode; anode = anode->next)
      if (anode->order < 0 || anode->order >= symtab->order)
         {
  	  error ("invalid order in asm node %i", anode->order);
--- 1485,1493 ----
    hash_map<tree, symtab_node *> comdat_head_map (251);
    asm_node *anode;
  
!   for (anode = symtab->first_asm_symbol ();
!        anode;
!        anode = safe_as_a<asm_node*>(anode->next))
      if (anode->order < 0 || anode->order >= symtab->order)
         {
  	  error ("invalid order in asm node %i", anode->order);
diff -Nrcpad gcc-16-20251207/gcc/system.h gcc-16-20251214/gcc/system.h
*** gcc-16-20251207/gcc/system.h	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/system.h	Sun Dec 14 22:32:08 2025
*************** extern int fprintf_unlocked (FILE *, con
*** 201,206 ****
--- 201,209 ----
  #if defined (INCLUDE_ALGORITHM) || !defined (HAVE_SWAP_IN_UTILITY)
  # include <algorithm>
  #endif
+ #ifdef INCLUDE_DEQUE
+ # include <deque>
+ #endif
  #ifdef INCLUDE_LIST
  # include <list>
  #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/ChangeLog gcc-16-20251214/gcc/testsuite/ChangeLog
*** gcc-16-20251207/gcc/testsuite/ChangeLog	Sun Dec  7 22:32:08 2025
--- gcc-16-20251214/gcc/testsuite/ChangeLog	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,1515 ----
+ 2025-12-13  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/modules/module1.a68: Also test contracted
+ 	forms.
+ 	* algol68/execute/modules/module3.a68: Likewise.
+ 	* algol68/execute/modules/module5.a68: Likewise.
+ 	* algol68/execute/modules/program-1.a68: Likewise.
+ 
+ 2025-12-13  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/122734
+ 	* gcc.dg/tree-ssa/20030711-1.c: Update.
+ 	* gcc.dg/tree-ssa/copy-headers-10.c: New test.
+ 	* gcc.dg/tree-ssa/copy-headers-11.c: New test.
+ 	* gcc.dg/tree-ssa/copy-headers-12.c: New test.
+ 
+ 2025-12-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* g++.dg/gomp/deprecate-1.C: New test.
+ 
+ 2025-12-13  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c-c++-common/gomp/52-deps.c: Change locations of 2 warnings for C.
+ 	* gcc.dg/gomp/deprecate-1.c: New test.
+ 
+ 2025-12-13  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* lib/gnat.exp (gnat_init): Set gcc_warning_prefix and
+ 	gcc_error_prefix.
+ 
+ 2025-12-13  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	PR tree-optimization/119293
+ 	* gcc.dg/vect/vect-121.c: XFAIL on ia32.
+ 
+ 2025-12-12  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	* g++.dg/ext/is_constructible9.C: Add to testcase.
+ 
+ 2025-12-12  Chung-Lin Tang  <cltang@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 	    Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* c-c++-common/gomp/uses_allocators-1.c: New test.
+ 	* c-c++-common/gomp/uses_allocators-2.c: New test.
+ 	* c-c++-common/gomp/uses_allocators-4.c: New test.
+ 	* c-c++-common/gomp/uses_allocators-7.c: New test.
+ 	* g++.dg/gomp/deprecate-2.C: New test.
+ 	* g++.dg/gomp/uses_allocators-1.C: New test.
+ 	* gcc.dg/gomp/deprecate-2.c: New test.
+ 
+ 2025-12-12  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	* g++.target/s390/builtin-array-arg-1.C: New test.
+ 	* gcc.target/s390/builtin-array-arg-1.c: New test.
+ 
+ 2025-12-12  David Malcolm  <dmalcolm@redhat.com>
+ 
+ 	PR analyzer/122003
+ 	* c-c++-common/analyzer/allocation-size-multiline-1.c: Update for split
+ 	of region creation events.
+ 	* c-c++-common/analyzer/bzip2-arg-parse-1.c: Drop test for enode
+ 	merging.  Add -Wno-analyzer-too-complex.
+ 	* c-c++-common/analyzer/coreutils-cksum-pr108664.c: Add
+ 	-Wno-analyzer-symbol-too-complex.  Add dg-bogus for false +ve seen
+ 	during patch development.
+ 	* c-c++-common/analyzer/coreutils-group_number.c: New test.
+ 	* c-c++-common/analyzer/data-model-20.c: Mark warnings as xfail.
+ 	* c-c++-common/analyzer/deref-before-check-qemu-qtest_rsp_args.c:
+ 	Add xfails.
+ 	* c-c++-common/analyzer/dot-output.c: Update for changes to dumps.
+ 	* c-c++-common/analyzer/fd-symbolic-socket.c: Update for
+ 	improvements to locations of leaks.
+ 	* c-c++-common/analyzer/fibonacci.c: Update regex.
+ 	* c-c++-common/analyzer/flex-with-call-summaries.c: Add xfail.
+ 	* c-c++-common/analyzer/flex-without-call-summaries.c: Add
+ 	-Wno-analyzer-symbol-too-complex.  Add xfail.
+ 	* c-c++-common/analyzer/infinite-recursion-5.c: Disable cases that
+ 	now explode the analysis.
+ 	* c-c++-common/analyzer/infinite-recursion-pr108524-2.c: Remove
+ 	xfail.
+ 	* c-c++-common/analyzer/invalid-shift-1.c: Remove xfails with c++26.
+ 	* c-c++-common/analyzer/ipa-callbacks-1.c: New test.
+ 	* c-c++-common/analyzer/loop-4.c: Expect incorrect UNKNOWN within
+ 	loop.  Update expected number of enodes.
+ 	* c-c++-common/analyzer/loop-n-down-to-1-by-1.c: Expect incorrect
+ 	UNKNOWN within loop.
+ 	* c-c++-common/analyzer/loop.c: Drop xfail.
+ 	* c-c++-common/analyzer/out-of-bounds-coreutils.c: Expect infinite
+ 	loop warning.
+ 	* c-c++-common/analyzer/paths-4.c: Update expected number of
+ 	enodes.
+ 	* c-c++-common/analyzer/pr94362-1.c: Drop -Wno-analyzer-too-complex.
+ 	* c-c++-common/analyzer/pr94851-2.c: Add xfail.
+ 	* c-c++-common/analyzer/pr96650-1-notrans.c: Add
+ 	-Wno-analyzer-too-complex.
+ 	* c-c++-common/analyzer/pr98628.c: Likewise.
+ 	* c-c++-common/analyzer/pr99774-1.c: Likewise.
+ 	* c-c++-common/analyzer/pragma-2.c: Expect double-free warning.
+ 	* c-c++-common/analyzer/realloc-1.c: Move expected location of
+ 	leak from trailing "}" to realloc call.
+ 	* c-c++-common/analyzer/sock-1.c: Add -fno-exceptions.
+ 	* c-c++-common/analyzer/sprintf-2.c: Add __attribute__ nonnull to
+ 	decl.
+ 	* c-c++-common/analyzer/sprintf-concat.c: Move expected location
+ 	of leak of p from sprintf to trailing "}".
+ 	* c-c++-common/analyzer/stdarg-sentinel-1.c: Drop
+ 	-Wno-analyzer-too-complex.
+ 	* c-c++-common/analyzer/strncpy-1.c: Add __attribute__ nonnull to
+ 	decl.
+ 	* c-c++-common/analyzer/strstr-1.c: Likewise.
+ 	* g++.dg/analyzer/analyzer.exp: Drop -fanalyzer-call-summaries.
+ 	* g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C:
+ 	Update expected messages.
+ 	* g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C:
+ 	Likewise.
+ 	* g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C: Likewise.
+ 	* g++.dg/analyzer/pr94028.C: Move expected location of leak
+ 	warning to where return value of f is discarded within m.
+ 	* g++.dg/analyzer/pr96641.C: Expect infinite recursion warning.
+ 	* gcc.dg/analyzer/CWE-131-examples.c: Add
+ 	-Wno-analyzer-too-complex.
+ 	* gcc.dg/analyzer/abs-1.c (test_2): Fix return type.
+ 	* gcc.dg/analyzer/analyzer-decls.h: Reformat.  Add
+ 	__attribute__ ((nothrow)) to all functions.
+ 	* gcc.dg/analyzer/analyzer.exp: Drop -fanalyzer-call-summaries.
+ 	* gcc.dg/analyzer/boxed-malloc-1.c: Fix return types.
+ 	* gcc.dg/analyzer/call-summaries-2.c: Likewise.
+ 	* gcc.dg/analyzer/combined-conditionals-1.c: Likewise.
+ 	* gcc.dg/analyzer/compound-assignment-2.c: Expect warning about
+ 	missing return.
+ 	* gcc.dg/analyzer/compound-assignment-3.c: Likewise.
+ 	* gcc.dg/analyzer/conditionals-3.c: Fix return type.
+ 	* gcc.dg/analyzer/data-model-1.c: Likewise.
+ 	* gcc.dg/analyzer/data-model-15.c: Likewise.
+ 	* gcc.dg/analyzer/data-model-17.c: Likewise.
+ 	* gcc.dg/analyzer/data-model-20a.c: Remove xfail from bogus leak.
+ 	* gcc.dg/analyzer/data-model-7.c: Fix return type.
+ 	* gcc.dg/analyzer/doom-d_main-IdentifyVersion.c: Add xfail to some
+ 	of the leak msgs.
+ 	* gcc.dg/analyzer/doom-s_sound-pr108867.c: Add xfail.
+ 	* gcc.dg/analyzer/edges-1.c: Update for improvements to location
+ 	of leak.
+ 	* gcc.dg/analyzer/error-1.c: Fix return type.
+ 	* gcc.dg/analyzer/explode-1.c: Drop xfail.  Expect uninit and
+ 	double-free warnings.
+ 	* gcc.dg/analyzer/explode-2.c: Add xfail.
+ 	* gcc.dg/analyzer/explode-3.c: Drop xfail.  Expect uninit and
+ 	double-free warnings.
+ 	* gcc.dg/analyzer/fd-datagram-socket.c: Move expected location of
+ 	leaks to closing "}"s.
+ 	* gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c: Add
+ 	false +ve leak message, due to not considering that program is
+ 	about to exit.
+ 	* gcc.dg/analyzer/fd-stream-socket.c: Move expected location of
+ 	leaks to closing "}"s.
+ 	* gcc.dg/analyzer/malloc-1.c: Fix return types.
+ 	* gcc.dg/analyzer/malloc-many-paths-2.c: Likewise.
+ 	* gcc.dg/analyzer/malloc-paths-10.c: Likewise.
+ 	* gcc.dg/analyzer/malloc-vs-local-4.c: Likewise.
+ 	* gcc.dg/analyzer/memset-CVE-2017-18549-1.c: Likewise.
+ 	* gcc.dg/analyzer/null-deref-pr102671-1.c: Enable
+ 	-fanalyzer-call-summaries.
+ 	* gcc.dg/analyzer/null-deref-pr102671-2.c: Remove xfail.
+ 	* gcc.dg/analyzer/pr101143.c: Fix return type.
+ 	* gcc.dg/analyzer/pr101837.c: Fix return type.  Add warning about
+ 	missing return.
+ 	* gcc.dg/analyzer/pr101983-not-main.c: Fix return type.
+ 	* gcc.dg/analyzer/pr103892.c: Enable -fanalyzer-call-summaries.
+ 	* gcc.dg/analyzer/pr104224.c: Add xfails.
+ 	* gcc.dg/analyzer/pr104434-nonconst.c: Likewise.
+ 	* gcc.dg/analyzer/pr93032-mztools-signed-char.c: Increase
+ 	exploration limits by a factor of 5.
+ 	* gcc.dg/analyzer/pr93032-mztools-unsigned-char.c: Likewise.
+ 	* gcc.dg/analyzer/pr93355-localealias-feasibility-2.c: Fix return type.
+ 	* gcc.dg/analyzer/pr93355-localealias.c: Add xfail.  Add expected
+ 	leak true +ve and uninit false +ve.
+ 	* gcc.dg/analyzer/pr94579.c: Add warning about missing return.
+ 	* gcc.dg/analyzer/pr98599-a.c: Add missing return stmts.
+ 	* gcc.dg/analyzer/pr99771-1.c: Fix expected locations of leaks.
+ 	* gcc.dg/analyzer/pr99774-2.c: Likewise.
+ 	* gcc.dg/analyzer/sensitive-1.c: Fix return types.
+ 	* gcc.dg/analyzer/state-diagram-1-sarif.py: Update.
+ 	* gcc.dg/analyzer/stdarg-1.c
+ 	(__analyzer_test_not_enough_args_2_middle): Add test coverage for
+ 	wording of call event with variadic args.
+ 	* gcc.dg/analyzer/strcmp-1.c: Fix return types.
+ 	* gcc.dg/analyzer/strcpy-1.c: Likewise.
+ 	* gcc.dg/analyzer/switch-enum-taint-1.c: Add warning about missing
+ 	return.
+ 	* gcc.dg/analyzer/switch.c: Fix return types.
+ 	* gcc.dg/analyzer/taint-assert.c: Likewise.
+ 	* gcc.dg/analyzer/taint-write-offset-1.c: Likewise.
+ 	* gcc.dg/analyzer/torture/analyzer-torture.exp: Drop
+ 	-fanalyzer-call-summaries.
+ 	* gcc.dg/analyzer/torture/boxed-ptr-1.c: Fix return type.
+ 	* gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c: Add
+ 	-Wno-analyzer-too-complex.
+ 	* gcc.dg/analyzer/torture/loop-inc-ptr-1.c: Skip at -O3 to avoid
+ 	changes to enode count.
+ 	* gcc.dg/analyzer/torture/pr102225.c: Consolidate on one line to
+ 	avoid caring about precise location of leak warning.
+ 	* gcc.dg/analyzer/torture/pr93379.c: Skip on -fno-fat-lto-objects.
+ 	Add warning about uninit.
+ 	* gcc.dg/analyzer/torture/stdarg-4.c: Replace UNKNOWN with
+ 	symbolic sum of params.
+ 	* gcc.dg/analyzer/untracked-1.c: Fix return type.
+ 	* gcc.dg/analyzer/use-after-free.c: Likewise.
+ 	* gcc.dg/analyzer/zlib-3.c: Add xfails.
+ 	* gcc.dg/plugin/analyzer_cpython_plugin.cc
+ 	(class refcnt_stmt_finder): Eliminate.
+ 	(check_refcnt): ...in favor of a call to
+ 	make_ploc_fixer_for_epath_for_leak_diagnostic.
+ 	* gcc.dg/plugin/analyzer_gil_plugin.cc: Update for
+ 	location-handling changes.
+ 	* gcc.dg/plugin/infoleak-CVE-2011-1078-1.c: Add missing
+ 	"return 0;".
+ 	* gcc.dg/plugin/infoleak-CVE-2011-1078-2.c: Fix return types.
+ 	* gcc.dg/plugin/infoleak-CVE-2017-18549-1.c: Likewise.
+ 	* gdc.dg/analyzer/analyzer.exp: Drop -fanalyzer-call-summaries.
+ 	* gfortran.dg/analyzer/analyzer.exp: Likewise.
+ 	* gfortran.dg/analyzer/uninit-pr63311.f90: Add
+ 	-Wno-analyzer-too-complex.
+ 
+ 2025-12-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR rtl-optimization/121852
+ 	* gcc.dg/pr121852.c: New test.
+ 
+ 2025-12-12  Tejas Belagod  <tejas.belagod@arm.com>
+ 	    Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	* g++.target/aarch64/sve/acle/general-c++/svbool_ternary.C: New test.
+ 
+ 2025-12-12  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/123098
+ 	* gcc.dg/debug/dwarf2/omp-fesdr.c: Use #pragma omp masked
+ 	instead of #pragma omp master.
+ 	* g++.dg/debug/dwarf2/omp-fesdr.C: Likewise.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* gcc.target/loongarch/la64/add-const.c: New test.
+ 	* gcc.target/loongarch/la64/alsl-cost.c: New test.
+ 	* gcc.target/loongarch/la64/alsl_wu.c: New test.
+ 	* gcc.target/loongarch/la64/and-large-immediate-opt.c: New test.
+ 	* gcc.target/loongarch/la64/arch-func-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/arch-pragma-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/attr-model-1.c: New test.
+ 	* gcc.target/loongarch/la64/attr-model-2.c: New test.
+ 	* gcc.target/loongarch/la64/attr-model-3.c: New test.
+ 	* gcc.target/loongarch/la64/attr-model-4.c: New test.
+ 	* gcc.target/loongarch/la64/attr-model-5.c: New test.
+ 	* gcc.target/loongarch/la64/attr-model-diag.c: New test.
+ 	* gcc.target/loongarch/la64/attr-model-test.c: New test.
+ 	* gcc.target/loongarch/la64/bitint-alignments.c: New test.
+ 	* gcc.target/loongarch/la64/bitint-args.c: New test.
+ 	* gcc.target/loongarch/la64/bitint-sizes.c: New test.
+ 	* gcc.target/loongarch/la64/bitwise-shift-reassoc.c: New test.
+ 	* gcc.target/loongarch/la64/bitwise_extend.c: New test.
+ 	* gcc.target/loongarch/la64/bstrins-1.c: New test.
+ 	* gcc.target/loongarch/la64/bstrins-2.c: New test.
+ 	* gcc.target/loongarch/la64/bstrins-3.c: New test.
+ 	* gcc.target/loongarch/la64/bstrins-4.c: New test.
+ 	* gcc.target/loongarch/la64/bstrpick_alsl_paired.c: New test.
+ 	* gcc.target/loongarch/la64/bytepick_combine.c: New test.
+ 	* gcc.target/loongarch/la64/bytepick_shift_128.c: New test.
+ 	* gcc.target/loongarch/la64/can_inline_1.c: New test.
+ 	* gcc.target/loongarch/la64/can_inline_2.c: New test.
+ 	* gcc.target/loongarch/la64/can_inline_3.c: New test.
+ 	* gcc.target/loongarch/la64/can_inline_4.c: New test.
+ 	* gcc.target/loongarch/la64/can_inline_5.c: New test.
+ 	* gcc.target/loongarch/la64/can_inline_6.c: New test.
+ 	* gcc.target/loongarch/la64/cmodel-extreme-1.c: New test.
+ 	* gcc.target/loongarch/la64/cmodel-extreme-2.c: New test.
+ 	* gcc.target/loongarch/la64/cmodel-func-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/cmodel-pragma-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/cmov_ii.c: New test.
+ 	* gcc.target/loongarch/la64/compare-both-non-zero.c: New test.
+ 	* gcc.target/loongarch/la64/conditional-move-opt-1.c: New test.
+ 	* gcc.target/loongarch/la64/conditional-move-opt-2.c: New test.
+ 	* gcc.target/loongarch/la64/conditional-move-opt-3.c: New test.
+ 	* gcc.target/loongarch/la64/const-double-zero-stx.c: New test.
+ 	* gcc.target/loongarch/la64/crc-sext.c: New test.
+ 	* gcc.target/loongarch/la64/direct-extern-1.c: New test.
+ 	* gcc.target/loongarch/la64/div-div32.c: New test.
+ 	* gcc.target/loongarch/la64/div-no-div32.c: New test.
+ 	* gcc.target/loongarch/la64/divf.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-extreme-tls-desc.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-lto.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-2.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-3.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-no-anchor.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-tls-desc.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-tls-ld-gd.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-auto-tls-le-ie.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-extreme-auto-tls-ld-gd.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-extreme-tls-desc.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-medium-auto-tls-ld-gd.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-medium-call36-auto-tls-ld-gd.c: New test.
+ 	* gcc.target/loongarch/la64/explicit-relocs-tls-desc.c: New test.
+ 	* gcc.target/loongarch/la64/extendsidi2-combine.c: New test.
+ 	* gcc.target/loongarch/la64/fclass-compile.c: New test.
+ 	* gcc.target/loongarch/la64/fclass-run.c: New test.
+ 	* gcc.target/loongarch/la64/flogb.c: New test.
+ 	* gcc.target/loongarch/la64/flt-abi-isa-1.c: New test.
+ 	* gcc.target/loongarch/la64/flt-abi-isa-2.c: New test.
+ 	* gcc.target/loongarch/la64/flt-abi-isa-3.c: New test.
+ 	* gcc.target/loongarch/la64/flt-abi-isa-4.c: New test.
+ 	* gcc.target/loongarch/la64/frint.c: New test.
+ 	* gcc.target/loongarch/la64/fscaleb.c: New test.
+ 	* gcc.target/loongarch/la64/ftint-no-inexact.c: New test.
+ 	* gcc.target/loongarch/la64/ftint.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-1.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-2.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-3.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-4.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-5.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-6.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-7.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-8.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-extreme-1.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-extreme-2.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-extreme-3.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-extreme-4.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-extreme-5.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-extreme-6.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-1.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-2.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-3.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-5.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-6.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-7.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-8.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-call36-1.c: New test.
+ 	* gcc.target/loongarch/la64/func-call-medium-call36.c: New test.
+ 	* gcc.target/loongarch/la64/imm-load.c: New test.
+ 	* gcc.target/loongarch/la64/imm-load1.c: New test.
+ 	* gcc.target/loongarch/la64/invariant-recip.c: New test.
+ 	* gcc.target/loongarch/la64/la64.exp: New test.
+ 	* gcc.target/loongarch/la64/larch-frecipe-builtin.c: New test.
+ 	* gcc.target/loongarch/la64/larch-frecipe-intrinsic.c: New test.
+ 	* gcc.target/loongarch/la64/lasx-func-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/lasx-pragma-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/lsx-func-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/lsx-pragma-attr-1.c: New test.
+ 	* gcc.target/loongarch/la64/math-float-128.c: New test.
+ 	* gcc.target/loongarch/la64/mem-and-mask-opt.c: New test.
+ 	* gcc.target/loongarch/la64/memcpy-vec-1.c: New test.
+ 	* gcc.target/loongarch/la64/memcpy-vec-2.c: New test.
+ 	* gcc.target/loongarch/la64/memcpy-vec-3.c: New test.
+ 	* gcc.target/loongarch/la64/mode-tieable-opt.c: New test.
+ 	* gcc.target/loongarch/la64/mov-zero-2.c: New test.
+ 	* gcc.target/loongarch/la64/movcf2gr-via-fr.c: New test.
+ 	* gcc.target/loongarch/la64/movcf2gr.c: New test.
+ 	* gcc.target/loongarch/la64/mul-const-reduction.c: New test.
+ 	* gcc.target/loongarch/la64/mulh_wu.c: New test.
+ 	* gcc.target/loongarch/la64/mulw_d_w.c: New test.
+ 	* gcc.target/loongarch/la64/mulw_d_wu.c: New test.
+ 	* gcc.target/loongarch/la64/pr109465-1.c: New test.
+ 	* gcc.target/loongarch/la64/pr109465-2.c: New test.
+ 	* gcc.target/loongarch/la64/pr109465-3.c: New test.
+ 	* gcc.target/loongarch/la64/pr113148.c: New test.
+ 	* gcc.target/loongarch/la64/pr114861.c: New test.
+ 	* gcc.target/loongarch/la64/pr118561.c: New test.
+ 	* gcc.target/loongarch/la64/pr118828-2.c: New test.
+ 	* gcc.target/loongarch/la64/pr118828-3.c: New test.
+ 	* gcc.target/loongarch/la64/pr118828-4.c: New test.
+ 	* gcc.target/loongarch/la64/pr118828.c: New test.
+ 	* gcc.target/loongarch/la64/pr118843.c: New test.
+ 	* gcc.target/loongarch/la64/pr119127.c: New test.
+ 	* gcc.target/loongarch/la64/pr121542.c: New test.
+ 	* gcc.target/loongarch/la64/pr121634.c: New test.
+ 	* gcc.target/loongarch/la64/pr121875.c: New test.
+ 	* gcc.target/loongarch/la64/prolog-opt.c: New test.
+ 	* gcc.target/loongarch/la64/recip-divf.c: New test.
+ 	* gcc.target/loongarch/la64/recip-sqrtf.c: New test.
+ 	* gcc.target/loongarch/la64/relocs-symbol-noaddend.c: New test.
+ 	* gcc.target/loongarch/la64/revb.c: New test.
+ 	* gcc.target/loongarch/la64/rotl-with-rotr.c: New test.
+ 	* gcc.target/loongarch/la64/rotrw.c: New test.
+ 	* gcc.target/loongarch/la64/sign-extend-1.c: New test.
+ 	* gcc.target/loongarch/la64/sign-extend-2.c: New test.
+ 	* gcc.target/loongarch/la64/sign-extend-3.c: New test.
+ 	* gcc.target/loongarch/la64/sign-extend-4.c: New test.
+ 	* gcc.target/loongarch/la64/sign-extend-5.c: New test.
+ 	* gcc.target/loongarch/la64/sign-extend-6.c: New test.
+ 	* gcc.target/loongarch/la64/sign-extend-bitwise.c: New test.
+ 	* gcc.target/loongarch/la64/sign_extend_ashift.c: New test.
+ 	* gcc.target/loongarch/la64/slt-sign-extend.c: New test.
+ 	* gcc.target/loongarch/la64/smuldi3_highpart.c: New test.
+ 	* gcc.target/loongarch/la64/spill-less.c: New test.
+ 	* gcc.target/loongarch/la64/sqrtf.c: New test.
+ 	* gcc.target/loongarch/la64/switch-qi.c: New test.
+ 	* gcc.target/loongarch/la64/tls-extreme-macro.c: New test.
+ 	* gcc.target/loongarch/la64/tls-gd-noplt.c: New test.
+ 	* gcc.target/loongarch/la64/tls-ie-extreme.c: New test.
+ 	* gcc.target/loongarch/la64/tls-ie-norelax.c: New test.
+ 	* gcc.target/loongarch/la64/tls-ie-relax.c: New test.
+ 	* gcc.target/loongarch/la64/tls-le-relax.c: New test.
+ 	* gcc.target/loongarch/la64/widen-mul-rtx-cost-signed.c: New test.
+ 	* gcc.target/loongarch/la64/widen-mul-rtx-cost-unsigned.c: New test.
+ 	* gcc.target/loongarch/la64/zero-size-field-pass.c: New test.
+ 	* gcc.target/loongarch/la64/zero-size-field-ret.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/abd-lasx.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/avg-ceil-lasx.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/avg-floor-lasx.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/fnmam4-vec.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/lasx-andn-iorn.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/lasx-extract-even_odd-opt.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/lasx-func-attr-2.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/lasx-pragma-attr-2.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/lasx-reduc-1.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/lasx-xvpermi_q-opt.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/pr112476-2.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/pr112476-4.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/pr113033.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/pragma-push-pop.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-b.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-d.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-h.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-w.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/sad-lasx.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/strict-align.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vec_pack_unpack_256.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vec_reduc_half.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-extract.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-frint-no-inexact.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-frint.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-ftint-no-inexact.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-ftint.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-ld-st-imm12.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-muh.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-rotr.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-shuf-fp.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-slp-two-operator.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-widen-add.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-widen-mul.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vect-widen-sub.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vfmax-vfmin.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/vrepli.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/wide-mul-reduc-1.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/wide-mul-reduc-2.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/xvfcmp-d.c: New test.
+ 	* gcc.target/loongarch/vector/lasx/xvfcmp-f.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/abd-lsx.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/avg-ceil-lsx.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/avg-floor-lsx.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/lsx-andn-iorn.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/lsx-func-attr-2.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/lsx-pragma-attr-2.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/mov-zero-1.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/popcnt.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/popcount.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/pr112476-1.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/pr112476-3.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/pr119084.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/pr121064.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/pr122097.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/rotl-with-vrotr-b.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/rotl-with-vrotr-d.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/rotl-with-vrotr-h.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/rotl-with-vrotr-w.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/sad-lsx.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vec_pack_unpack_128.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vect-frint-scalar-no-inexact.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vect-frint-scalar.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vect-shift-imm-round.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vector-func-attr-1.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vector-pragma-attr-1.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vfcmp-d.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/vfcmp-f.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/xorsign-run.c: New test.
+ 	* gcc.target/loongarch/vector/lsx/xorsign.c: New test.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* g++.target/loongarch/bytepick.C: Skip on LA32.
+ 	* g++.target/loongarch/got-load.C: Likewise.
+ 	* g++.target/loongarch/pr106828.C: Likewise.
+ 	* g++.target/loongarch/vect-ashr-lshr.C: Add loongarch_asx check.
+ 	* gcc.dg/ifcvt-4.c: Skip on LA32.
+ 	* gcc.dg/stack-usage-1.c: Change __loongarch_lp64 to __loongarch__.
+ 	* gcc.dg/tree-ssa/gen-vect-2.c: Skip on LoongArch.
+ 	* gcc.dg/tree-ssa/gen-vect-25.c: Likewise.
+ 	* gcc.dg/tree-ssa/pr83403-1.c: Add dg-additional-options.
+ 	* gcc.dg/tree-ssa/pr83403-2.c: Likewise.
+ 	* gcc.target/loongarch/float-load.c: Add hard_float check.
+ 	* gcc.target/loongarch/larch-builtin.c: Skip some check on LA32.
+ 	* gcc.target/loongarch/pr115752.c: Add hard_float check.
+ 	* gcc.target/loongarch/vector/loongarch-vector.exp: Add
+ 	check_effective_target_loongarch_sx.
+ 	* lib/target-supports.exp: Add hard float condition to
+ 	check_effective_target_scalar_all_fma.
+ 	Disable loongarch for check_effective_target_vect_cmdline_needed.
+ 	Add check_effective_target_loongarch_sx condition to
+ 	check_vect_support_and_set_flags.
+ 	* gcc.target/loongarch/abd-lasx.c: Removed.
+ 	* gcc.target/loongarch/abd-lsx.c: Removed.
+ 	* gcc.target/loongarch/add-const.c: Removed.
+ 	* gcc.target/loongarch/alsl-cost.c: Removed.
+ 	* gcc.target/loongarch/alsl_wu.c: Removed.
+ 	* gcc.target/loongarch/and-large-immediate-opt.c: Removed.
+ 	* gcc.target/loongarch/arch-func-attr-1.c: Removed.
+ 	* gcc.target/loongarch/arch-pragma-attr-1.c: Removed.
+ 	* gcc.target/loongarch/attr-model-1.c: Removed.
+ 	* gcc.target/loongarch/attr-model-2.c: Removed.
+ 	* gcc.target/loongarch/attr-model-3.c: Removed.
+ 	* gcc.target/loongarch/attr-model-4.c: Removed.
+ 	* gcc.target/loongarch/attr-model-5.c: Removed.
+ 	* gcc.target/loongarch/attr-model-diag.c: Removed.
+ 	* gcc.target/loongarch/attr-model-test.c: Removed.
+ 	* gcc.target/loongarch/avg-ceil-lasx.c: Removed.
+ 	* gcc.target/loongarch/avg-ceil-lsx.c: Removed.
+ 	* gcc.target/loongarch/avg-floor-lasx.c: Removed.
+ 	* gcc.target/loongarch/avg-floor-lsx.c: Removed.
+ 	* gcc.target/loongarch/bitint-alignments.c: Removed.
+ 	* gcc.target/loongarch/bitint-args.c: Removed.
+ 	* gcc.target/loongarch/bitint-sizes.c: Removed.
+ 	* gcc.target/loongarch/bitwise-shift-reassoc.c: Removed.
+ 	* gcc.target/loongarch/bitwise_extend.c: Removed.
+ 	* gcc.target/loongarch/bstrins-1.c: Removed.
+ 	* gcc.target/loongarch/bstrins-2.c: Removed.
+ 	* gcc.target/loongarch/bstrins-3.c: Removed.
+ 	* gcc.target/loongarch/bstrins-4.c: Removed.
+ 	* gcc.target/loongarch/bstrpick_alsl_paired.c: Removed.
+ 	* gcc.target/loongarch/bytepick_combine.c: Removed.
+ 	* gcc.target/loongarch/bytepick_shift_128.c: Removed.
+ 	* gcc.target/loongarch/can_inline_1.c: Removed.
+ 	* gcc.target/loongarch/can_inline_2.c: Removed.
+ 	* gcc.target/loongarch/can_inline_3.c: Removed.
+ 	* gcc.target/loongarch/can_inline_4.c: Removed.
+ 	* gcc.target/loongarch/can_inline_5.c: Removed.
+ 	* gcc.target/loongarch/can_inline_6.c: Removed.
+ 	* gcc.target/loongarch/cmodel-extreme-1.c: Removed.
+ 	* gcc.target/loongarch/cmodel-extreme-2.c: Removed.
+ 	* gcc.target/loongarch/cmodel-func-attr-1.c: Removed.
+ 	* gcc.target/loongarch/cmodel-pragma-attr-1.c: Removed.
+ 	* gcc.target/loongarch/cmov_ii.c: Removed.
+ 	* gcc.target/loongarch/compare-both-non-zero.c: Removed.
+ 	* gcc.target/loongarch/conditional-move-opt-1.c: Removed.
+ 	* gcc.target/loongarch/conditional-move-opt-2.c: Removed.
+ 	* gcc.target/loongarch/conditional-move-opt-3.c: Removed.
+ 	* gcc.target/loongarch/const-double-zero-stx.c: Removed.
+ 	* gcc.target/loongarch/crc-sext.c: Removed.
+ 	* gcc.target/loongarch/direct-extern-1.c: Removed.
+ 	* gcc.target/loongarch/div-div32.c: Removed.
+ 	* gcc.target/loongarch/div-no-div32.c: Removed.
+ 	* gcc.target/loongarch/divf.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-lto.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-single-load-store-no-anchor.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-single-load-store.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-tls-desc.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-auto-tls-le-ie.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-extreme-auto-tls-ld-gd.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-medium-auto-tls-ld-gd.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c: Removed.
+ 	* gcc.target/loongarch/explicit-relocs-tls-desc.c: Removed.
+ 	* gcc.target/loongarch/extendsidi2-combine.c: Removed.
+ 	* gcc.target/loongarch/fclass-compile.c: Removed.
+ 	* gcc.target/loongarch/fclass-run.c: Removed.
+ 	* gcc.target/loongarch/flogb.c: Removed.
+ 	* gcc.target/loongarch/flt-abi-isa-1.c: Removed.
+ 	* gcc.target/loongarch/flt-abi-isa-2.c: Removed.
+ 	* gcc.target/loongarch/flt-abi-isa-3.c: Removed.
+ 	* gcc.target/loongarch/flt-abi-isa-4.c: Removed.
+ 	* gcc.target/loongarch/fnmam4-vec.c: Removed.
+ 	* gcc.target/loongarch/frint.c: Removed.
+ 	* gcc.target/loongarch/fscaleb.c: Removed.
+ 	* gcc.target/loongarch/ftint-no-inexact.c: Removed.
+ 	* gcc.target/loongarch/ftint.c: Removed.
+ 	* gcc.target/loongarch/func-call-1.c: Removed.
+ 	* gcc.target/loongarch/func-call-2.c: Removed.
+ 	* gcc.target/loongarch/func-call-3.c: Removed.
+ 	* gcc.target/loongarch/func-call-4.c: Removed.
+ 	* gcc.target/loongarch/func-call-5.c: Removed.
+ 	* gcc.target/loongarch/func-call-6.c: Removed.
+ 	* gcc.target/loongarch/func-call-7.c: Removed.
+ 	* gcc.target/loongarch/func-call-8.c: Removed.
+ 	* gcc.target/loongarch/func-call-extreme-1.c: Removed.
+ 	* gcc.target/loongarch/func-call-extreme-2.c: Removed.
+ 	* gcc.target/loongarch/func-call-extreme-3.c: Removed.
+ 	* gcc.target/loongarch/func-call-extreme-4.c: Removed.
+ 	* gcc.target/loongarch/func-call-extreme-5.c: Removed.
+ 	* gcc.target/loongarch/func-call-extreme-6.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-1.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-2.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-3.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-5.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-6.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-7.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-8.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-call36-1.c: Removed.
+ 	* gcc.target/loongarch/func-call-medium-call36.c: Removed.
+ 	* gcc.target/loongarch/imm-load.c: Removed.
+ 	* gcc.target/loongarch/imm-load1.c: Removed.
+ 	* gcc.target/loongarch/invariant-recip.c: Removed.
+ 	* gcc.target/loongarch/larch-frecipe-builtin.c: Removed.
+ 	* gcc.target/loongarch/larch-frecipe-intrinsic.c: Removed.
+ 	* gcc.target/loongarch/lasx-andn-iorn.c: Removed.
+ 	* gcc.target/loongarch/lasx-extract-even_odd-opt.c: Removed.
+ 	* gcc.target/loongarch/lasx-func-attr-1.c: Removed.
+ 	* gcc.target/loongarch/lasx-func-attr-2.c: Removed.
+ 	* gcc.target/loongarch/lasx-pragma-attr-1.c: Removed.
+ 	* gcc.target/loongarch/lasx-pragma-attr-2.c: Removed.
+ 	* gcc.target/loongarch/lasx-reduc-1.c: Removed.
+ 	* gcc.target/loongarch/lasx-xvpermi_q-opt.c: Removed.
+ 	* gcc.target/loongarch/lsx-andn-iorn.c: Removed.
+ 	* gcc.target/loongarch/lsx-func-attr-1.c: Removed.
+ 	* gcc.target/loongarch/lsx-func-attr-2.c: Removed.
+ 	* gcc.target/loongarch/lsx-pragma-attr-1.c: Removed.
+ 	* gcc.target/loongarch/lsx-pragma-attr-2.c: Removed.
+ 	* gcc.target/loongarch/math-float-128.c: Removed.
+ 	* gcc.target/loongarch/mem-and-mask-opt.c: Removed.
+ 	* gcc.target/loongarch/memcpy-vec-1.c: Removed.
+ 	* gcc.target/loongarch/memcpy-vec-2.c: Removed.
+ 	* gcc.target/loongarch/memcpy-vec-3.c: Removed.
+ 	* gcc.target/loongarch/mode-tieable-opt.c: Removed.
+ 	* gcc.target/loongarch/mov-zero-1.c: Removed.
+ 	* gcc.target/loongarch/mov-zero-2.c: Removed.
+ 	* gcc.target/loongarch/movcf2gr-via-fr.c: Removed.
+ 	* gcc.target/loongarch/movcf2gr.c: Removed.
+ 	* gcc.target/loongarch/mul-const-reduction.c: Removed.
+ 	* gcc.target/loongarch/mulh_wu.c: Removed.
+ 	* gcc.target/loongarch/mulw_d_w.c: Removed.
+ 	* gcc.target/loongarch/mulw_d_wu.c: Removed.
+ 	* gcc.target/loongarch/popcnt.c: Removed.
+ 	* gcc.target/loongarch/popcount.c: Removed.
+ 	* gcc.target/loongarch/pr109465-1.c: Removed.
+ 	* gcc.target/loongarch/pr109465-2.c: Removed.
+ 	* gcc.target/loongarch/pr109465-3.c: Removed.
+ 	* gcc.target/loongarch/pr112476-1.c: Removed.
+ 	* gcc.target/loongarch/pr112476-2.c: Removed.
+ 	* gcc.target/loongarch/pr112476-3.c: Removed.
+ 	* gcc.target/loongarch/pr112476-4.c: Removed.
+ 	* gcc.target/loongarch/pr113033.c: Removed.
+ 	* gcc.target/loongarch/pr113148.c: Removed.
+ 	* gcc.target/loongarch/pr114861.c: Removed.
+ 	* gcc.target/loongarch/pr118561.c: Removed.
+ 	* gcc.target/loongarch/pr118828-2.c: Removed.
+ 	* gcc.target/loongarch/pr118828-3.c: Removed.
+ 	* gcc.target/loongarch/pr118828-4.c: Removed.
+ 	* gcc.target/loongarch/pr118828.c: Removed.
+ 	* gcc.target/loongarch/pr118843.c: Removed.
+ 	* gcc.target/loongarch/pr119084.c: Removed.
+ 	* gcc.target/loongarch/pr119127.c: Removed.
+ 	* gcc.target/loongarch/pr121064.c: Removed.
+ 	* gcc.target/loongarch/pr121542.c: Removed.
+ 	* gcc.target/loongarch/pr121634.c: Removed.
+ 	* gcc.target/loongarch/pr121875.c: Removed.
+ 	* gcc.target/loongarch/pr122097.c: Removed.
+ 	* gcc.target/loongarch/pragma-push-pop.c: Removed.
+ 	* gcc.target/loongarch/prolog-opt.c: Removed.
+ 	* gcc.target/loongarch/recip-divf.c: Removed.
+ 	* gcc.target/loongarch/recip-sqrtf.c: Removed.
+ 	* gcc.target/loongarch/relocs-symbol-noaddend.c: Removed.
+ 	* gcc.target/loongarch/revb.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-rotr.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-vrotr-b.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-vrotr-d.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-vrotr-h.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-vrotr-w.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-xvrotr-b.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-xvrotr-d.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-xvrotr-h.c: Removed.
+ 	* gcc.target/loongarch/rotl-with-xvrotr-w.c: Removed.
+ 	* gcc.target/loongarch/rotrw.c: Removed.
+ 	* gcc.target/loongarch/sad-lasx.c: Removed.
+ 	* gcc.target/loongarch/sad-lsx.c: Removed.
+ 	* gcc.target/loongarch/sign-extend-1.c: Removed.
+ 	* gcc.target/loongarch/sign-extend-2.c: Removed.
+ 	* gcc.target/loongarch/sign-extend-3.c: Removed.
+ 	* gcc.target/loongarch/sign-extend-4.c: Removed.
+ 	* gcc.target/loongarch/sign-extend-5.c: Removed.
+ 	* gcc.target/loongarch/sign-extend-6.c: Removed.
+ 	* gcc.target/loongarch/sign-extend-bitwise.c: Removed.
+ 	* gcc.target/loongarch/sign_extend_ashift.c: Removed.
+ 	* gcc.target/loongarch/slt-sign-extend.c: Removed.
+ 	* gcc.target/loongarch/smuldi3_highpart.c: Removed.
+ 	* gcc.target/loongarch/spill-less.c: Removed.
+ 	* gcc.target/loongarch/sqrtf.c: Removed.
+ 	* gcc.target/loongarch/strict-align.c: Removed.
+ 	* gcc.target/loongarch/switch-qi.c: Removed.
+ 	* gcc.target/loongarch/tls-extreme-macro.c: Removed.
+ 	* gcc.target/loongarch/tls-gd-noplt.c: Removed.
+ 	* gcc.target/loongarch/tls-ie-extreme.c: Removed.
+ 	* gcc.target/loongarch/tls-ie-norelax.c: Removed.
+ 	* gcc.target/loongarch/tls-ie-relax.c: Removed.
+ 	* gcc.target/loongarch/tls-le-relax.c: Removed.
+ 	* gcc.target/loongarch/vec_pack_unpack_128.c: Removed.
+ 	* gcc.target/loongarch/vec_pack_unpack_256.c: Removed.
+ 	* gcc.target/loongarch/vec_reduc_half.c: Removed.
+ 	* gcc.target/loongarch/vect-extract.c: Removed.
+ 	* gcc.target/loongarch/vect-frint-no-inexact.c: Removed.
+ 	* gcc.target/loongarch/vect-frint-scalar-no-inexact.c: Removed.
+ 	* gcc.target/loongarch/vect-frint-scalar.c: Removed.
+ 	* gcc.target/loongarch/vect-frint.c: Removed.
+ 	* gcc.target/loongarch/vect-ftint-no-inexact.c: Removed.
+ 	* gcc.target/loongarch/vect-ftint.c: Removed.
+ 	* gcc.target/loongarch/vect-ld-st-imm12.c: Removed.
+ 	* gcc.target/loongarch/vect-muh.c: Removed.
+ 	* gcc.target/loongarch/vect-rotr.c: Removed.
+ 	* gcc.target/loongarch/vect-shift-imm-round.c: Removed.
+ 	* gcc.target/loongarch/vect-shuf-fp.c: Removed.
+ 	* gcc.target/loongarch/vect-slp-two-operator.c: Removed.
+ 	* gcc.target/loongarch/vect-widen-add.c: Removed.
+ 	* gcc.target/loongarch/vect-widen-mul.c: Removed.
+ 	* gcc.target/loongarch/vect-widen-sub.c: Removed.
+ 	* gcc.target/loongarch/vector-func-attr-1.c: Removed.
+ 	* gcc.target/loongarch/vector-pragma-attr-1.c: Removed.
+ 	* gcc.target/loongarch/vfcmp-d.c: Removed.
+ 	* gcc.target/loongarch/vfcmp-f.c: Removed.
+ 	* gcc.target/loongarch/vfmax-vfmin.c: Removed.
+ 	* gcc.target/loongarch/vrepli.c: Removed.
+ 	* gcc.target/loongarch/wide-mul-reduc-1.c: Removed.
+ 	* gcc.target/loongarch/wide-mul-reduc-2.c: Removed.
+ 	* gcc.target/loongarch/widen-mul-rtx-cost-signed.c: Removed.
+ 	* gcc.target/loongarch/widen-mul-rtx-cost-unsigned.c: Removed.
+ 	* gcc.target/loongarch/xorsign-run.c: Removed.
+ 	* gcc.target/loongarch/xorsign.c: Removed.
+ 	* gcc.target/loongarch/xvfcmp-d.c: Removed.
+ 	* gcc.target/loongarch/xvfcmp-f.c: Removed.
+ 	* gcc.target/loongarch/zero-size-field-pass.c: Removed.
+ 	* gcc.target/loongarch/zero-size-field-ret.c: Removed.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* gcc.target/loongarch/la32/memcpy.c: New test.
+ 
+ 2025-12-12  Jiajie Chen  <c@jia.je>
+ 
+ 	* gcc.target/loongarch/la32/trunc_int_for_mode.c: New test.
+ 
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* gcc.target/loongarch/la32/and.c: New test.
+ 	* gcc.target/loongarch/la32/la32.exp: New test.
+ 
+ 2025-12-12  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/manorboy.a68: New file.
+ 
+ 2025-12-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/107406
+ 	* gfortran.dg/coarray_lock_3.f90: Remove dg-error on
+ 	valid code.
+ 	* gfortran.dg/coarray_lock_4.f90: Likewise.
+ 	* gfortran.dg/coarray_lock_5.f90: Likwise
+ 	Co-Authored by: Andre Vehreschild <vehre@gcc.gnu.org>
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR testsuite/123098
+ 	* gcc.dg/vect/vect-simd-clone-15.c (foo): Use OpenMP 5.2
+ 	syntax for linear clause.
+ 	* g++.dg/vect/simd-clone-6.cc (foo): Likewise.
+ 	* c-c++-common/goacc-gomp/pr93465-1.c: Use
+ 	#pragma omp begin declare target instead of
+ 	#pragma omp declare target.
+ 	* c-c++-common/goacc-gomp/nesting-fail-1.c: Use #pragma omp masked
+ 	instead of #pragma omp master.
+ 	* gfortran.dg/goacc-gomp/pr102330-1.f90 (r1): Use
+ 	!$omp masked taskloop simd instead of !$omp master taskloop simd.
+ 	* gfortran.dg/vect/pr86421.f90 (foo): Use OpenMP 5.2 syntax for
+ 	linear clause.
+ 	* gfortran.dg/gomp/allocate-16.f90: Use \\\$ instead of $ in dg-error
+ 	and use relative line numbers instead of absolute.
+ 	* gfortran.dg/gomp/groupprivate-2.f90: Add -Wno-deprecated-openmp
+ 	to dg-additional-options.
+ 	* gfortran.dg/gomp/groupprivate-5.f90: Likewise.
+ 	* gfortran.dg/goacc/pr93329.f90: Likewise.
+ 
+ 2025-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/specs/put_image2.ads: New test.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/121114
+ 	* g++.dg/tree-ssa/pr110819.C: Guard scan-tree-dump-not delete on
+ 	c++23_down and add comment explaining why C++26 fails that.
+ 	* g++.dg/tree-ssa/pr96945.C: Likewise.
+ 	* g++.dg/tree-ssa/pr109442.C: Likewise.
+ 	* g++.dg/tree-ssa/pr116868.C: Likewise.
+ 	* g++.dg/tree-ssa/pr58483.C: Likewise.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* gfortran.dg/interface_16.f90: Fix comment typo,calll -> call.
+ 
+ 2025-12-11  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/107142
+ 	* gfortran.dg/pdt_78.f03: New test.
+ 
+ 2025-12-11  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/110012
+ 	* gfortran.dg/pdt_77.f03: New test.
+ 
+ 2025-12-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* lib/g++-dg.exp: Handle "modules" std.
+ 	* lib/target-supports.exp (check_effective_target_modules): New.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* gfortran.dg/gomp/allocate-14.f90: Suppress warnings.
+ 	* gfortran.dg/gomp/allocate-16.f90: Ditto.
+ 	* gfortran.dg/gomp/allocate-5.f90: Ditto.
+ 	* gfortran.dg/gomp/allocate-6.f90: Ditto.
+ 	* gfortran.dg/gomp/allocate-7.f90: Ditto.
+ 	* gfortran.dg/gomp/allocators-3.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-simd-2.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-simd-6.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-target-1.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-target-2.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-target-4.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-target-5.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-target-indirect-1.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-target-indirect-2.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-variant-10.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-variant-8.f90: Ditto.
+ 	* gfortran.dg/gomp/implicit-save.f90: Ditto.
+ 	* gfortran.dg/gomp/linear-1.f90: Ditto.
+ 	* gfortran.dg/gomp/linear-2.f90: Ditto.
+ 	* gfortran.dg/gomp/linear-3.f90: Ditto.
+ 	* gfortran.dg/gomp/linear-4.f90: Ditto.
+ 	* gfortran.dg/gomp/linear-6.f90: Ditto.
+ 	* gfortran.dg/gomp/map-12.f90: Ditto.
+ 	* gfortran.dg/gomp/map-6.f90: Ditto.
+ 	* gfortran.dg/gomp/map-7.f90: Ditto.
+ 	* gfortran.dg/gomp/map-8.f90: Ditto.
+ 	* gfortran.dg/gomp/order-8.f90: Ditto.
+ 	* gfortran.dg/gomp/pr83977.f90: Ditto.
+ 	* gfortran.dg/gomp/reduction1.f90: Ditto.
+ 	* gfortran.dg/gomp/schedule-modifiers-2.f90: Ditto.
+ 	* gfortran.dg/gomp/workshare-reduction-55.f90: Ditto.
+ 	* gfortran.dg/gomp/workshare-reduction-56.f90: Ditto.
+ 	* gfortran.dg/gomp/workshare-reduction-57.f90: Ditto.
+ 	* gfortran.dg/gomp/workshare-reduction-58.f90: Ditto.
+ 	* gfortran.dg/gomp/52-deps.f90: New test.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* c-c++-common/gomp/Wparentheses-2.c: Suppress warnings.
+ 	* c-c++-common/gomp/attrs-metadirective-1.c: Ditto.
+ 	* c-c++-common/gomp/attrs-metadirective-2.c: Ditto.
+ 	* c-c++-common/gomp/attrs-metadirective-3.c: Ditto.
+ 	* c-c++-common/gomp/attrs-metadirective-4.c: Ditto.
+ 	* c-c++-common/gomp/attrs-metadirective-5.c: Ditto.
+ 	* c-c++-common/gomp/attrs-metadirective-8.c: Ditto.
+ 	* c-c++-common/gomp/begin-declare-target-1.c: Ditto.
+ 	* c-c++-common/gomp/begin-declare-target-2.c: Ditto.
+ 	* c-c++-common/gomp/clauses-3.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-1.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-2.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-3.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-4.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-5.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-7.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-indirect-1.c: Ditto.
+ 	* c-c++-common/gomp/declare-target-indirect-2.c: Ditto.
+ 	* c-c++-common/gomp/declare-variant-10.c: Ditto.
+ 	* c-c++-common/gomp/declare-variant-8.c: Ditto.
+ 	* c-c++-common/gomp/defaultmap-2.c: Ditto.
+ 	* c-c++-common/gomp/defaultmap-3.c: Ditto.
+ 	* c-c++-common/gomp/depend-iterator-2.c: Ditto.
+ 	* c-c++-common/gomp/depobj-1.c: Ditto.
+ 	* c-c++-common/gomp/directive-1.c: Ditto.
+ 	* c-c++-common/gomp/distribute-1.c: Ditto.
+ 	* c-c++-common/gomp/doacross-1.c: Ditto.
+ 	* c-c++-common/gomp/doacross-2.c: Ditto.
+ 	* c-c++-common/gomp/doacross-3.c: Ditto.
+ 	* c-c++-common/gomp/doacross-4.c: Ditto.
+ 	* c-c++-common/gomp/doacross-8.c: Ditto.
+ 	* c-c++-common/gomp/linear-1.c: Ditto.
+ 	* c-c++-common/gomp/linear-2.c: Ditto.
+ 	* c-c++-common/gomp/linear-3.c: Ditto.
+ 	* c-c++-common/gomp/loop-6.c: Ditto.
+ 	* c-c++-common/gomp/map-1.c: Ditto.
+ 	* c-c++-common/gomp/map-3.c: Ditto.
+ 	* c-c++-common/gomp/map-6.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-1.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-2.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-3.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-4.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-5.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-8.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-construct.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-device.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-target-device-1.c: Ditto.
+ 	* c-c++-common/gomp/metadirective-target-device-2.c: Ditto.
+ 	* c-c++-common/gomp/order-2.c: Ditto.
+ 	* c-c++-common/gomp/ordered-3.c: Ditto.
+ 	* c-c++-common/gomp/ordered-5.c: Ditto.
+ 	* c-c++-common/gomp/pr102640.c: Ditto.
+ 	* c-c++-common/gomp/pr106836.c: Ditto.
+ 	* c-c++-common/gomp/pr120180-1.c: Ditto.
+ 	* c-c++-common/gomp/pr88203-1.c: Ditto.
+ 	* c-c++-common/gomp/pr88203-2.c: Ditto.
+ 	* c-c++-common/gomp/pr88203-3.c: Ditto.
+ 	* c-c++-common/gomp/pr91401-2.c: Ditto.
+ 	* c-c++-common/gomp/pr91987.c: Ditto.
+ 	* c-c++-common/gomp/reverse-offload-1.c: Ditto.
+ 	* c-c++-common/gomp/schedule-modifiers-1.c: Ditto.
+ 	* c-c++-common/gomp/sink-1.c: Ditto.
+ 	* c-c++-common/gomp/sink-2.c: Ditto.
+ 	* c-c++-common/gomp/sink-3.c: Ditto.
+ 	* c-c++-common/gomp/sink-4.c: Ditto.
+ 	* c-c++-common/gomp/sink-5.c: Ditto.
+ 	* c-c++-common/gomp/target-teams-1.c: Ditto.
+ 	* g++.dg/gomp/attrs-12.C: Ditto.
+ 	* g++.dg/gomp/attrs-5.C: Ditto.
+ 	* g++.dg/gomp/attrs-9.C: Ditto.
+ 	* g++.dg/gomp/clause-3.C: Ditto.
+ 	* g++.dg/gomp/declare-simd-3.C: Ditto.
+ 	* g++.dg/gomp/declare-simd-4.C: Ditto.
+ 	* g++.dg/gomp/declare-simd-6.C: Ditto.
+ 	* g++.dg/gomp/declare-simd-7.C: Ditto.
+ 	* g++.dg/gomp/declare-simd-8.C: Ditto.
+ 	* g++.dg/gomp/declare-target-1.C: Ditto.
+ 	* g++.dg/gomp/declare-target-2.C: Ditto.
+ 	* g++.dg/gomp/declare-target-3.C: Ditto.
+ 	* g++.dg/gomp/declare-target-indirect-1.C: Ditto.
+ 	* g++.dg/gomp/depend-iterator-2.C: Ditto.
+ 	* g++.dg/gomp/depobj-1.C: Ditto.
+ 	* g++.dg/gomp/doacross-2.C: Ditto.
+ 	* g++.dg/gomp/linear-1.C: Ditto.
+ 	* g++.dg/gomp/linear-2.C: Ditto.
+ 	* g++.dg/gomp/linear-3.C: Ditto.
+ 	* g++.dg/gomp/linear-5.C: Ditto.
+ 	* g++.dg/gomp/map-1.C: Ditto.
+ 	* g++.dg/gomp/pr118876.C: Ditto.
+ 	* g++.dg/gomp/pr119370.C: Ditto.
+ 	* g++.dg/gomp/sink-1.C: Ditto.
+ 	* g++.dg/gomp/sink-2.C: Ditto.
+ 	* g++.dg/gomp/sink-3.C: Ditto.
+ 	* g++.dg/gomp/target-simd-clone-1.C: Ditto.
+ 	* g++.dg/gomp/target-simd-clone-2.C: Ditto.
+ 	* g++.dg/gomp/target-teams-1.C: Ditto.
+ 	* g++.dg/gomp/udr-5.C: Ditto.
+ 	* gcc.dg/gomp/attrs-12.c: Ditto.
+ 	* gcc.dg/gomp/attrs-5.c: Ditto.
+ 	* gcc.dg/gomp/attrs-9.c: Ditto.
+ 	* gcc.dg/gomp/clause-1.c: Ditto.
+ 	* gcc.dg/gomp/declare-simd-3.c: Ditto.
+ 	* gcc.dg/gomp/linear-1.c: Ditto.
+ 	* gcc.dg/gomp/metadirective-1.c: Ditto.
+ 	* gcc.dg/gomp/pr104757.c: Ditto.
+ 	* gcc.dg/gomp/sink-fold-1.c: Ditto.
+ 	* gcc.dg/gomp/sink-fold-2.c: Ditto.
+ 	* gcc.dg/gomp/sink-fold-3.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-1.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-2.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-3.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-4.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-5.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-6.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-7.c: Ditto.
+ 	* gcc.dg/gomp/target-simd-clone-8.c: Ditto.
+ 	* gcc.dg/gomp/workshare-reduction-55.c: Ditto.
+ 	* gcc.dg/gomp/workshare-reduction-56.c: Ditto.
+ 	* gcc.dg/gomp/workshare-reduction-57.c: Ditto.
+ 	* gcc.dg/gomp/workshare-reduction-58.c: Ditto.
+ 	* c-c++-common/gomp/52-deps.c: New test.
+ 	* g++.dg/gomp/map-csm-dep.C: New test.
+ 	* gcc.dg/gomp/map-csm-dep.c: New test.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* c-c++-common/cpp/openmp-define-3.c: Bump OMP version.
+ 	* c-c++-common/gomp/Wparentheses-1.c: Suppress deprecation
+ 	warnings.
+ 	* c-c++-common/gomp/Wparentheses-3.c: Ditto.
+ 	* c-c++-common/gomp/affinity-3.c: Ditto.
+ 	* c-c++-common/gomp/allocate-18.c: Ditto.
+ 	* c-c++-common/gomp/cancel-1.c: Ditto.
+ 	* c-c++-common/gomp/clause-dups-1.c: Ditto.
+ 	* c-c++-common/gomp/clauses-1.c: Suppress deprecation
+ 	warnings and fix misspelled directive. Add
+ 	'-Wunknown-pragmas'.
+ 	* c-c++-common/gomp/clauses-6.c: Suppress deprecation warnings.
+ 	* c-c++-common/gomp/declare-variant-1.c: Ditto.
+ 	* c-c++-common/gomp/declare-variant-2.c: Ditto.
+ 	* c-c++-common/gomp/depend-iterator-1.c: Ditto.
+ 	* c-c++-common/gomp/lastprivate-conditional-1.c: Ditto.
+ 	* c-c++-common/gomp/loop-1.c: Ditto.
+ 	* c-c++-common/gomp/loop-2.c: Ditto.
+ 	* c-c++-common/gomp/loop-3.c: Ditto.
+ 	* c-c++-common/gomp/loop-4.c: Ditto.
+ 	* c-c++-common/gomp/master-combined-1.c: Ditto.
+ 	* c-c++-common/gomp/master-combined-2.c: Ditto.
+ 	* c-c++-common/gomp/nesting-2.c: Ditto.
+ 	* c-c++-common/gomp/pr100902-1.c: Ditto.
+ 	* c-c++-common/gomp/pr61486-2.c: Ditto.
+ 	* c-c++-common/gomp/pr85696.c: Ditto.
+ 	* c-c++-common/gomp/pr85956.c: Ditto.
+ 	* c-c++-common/gomp/pr98187.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-1.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-10.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-11.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-12.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-13.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-14.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-2.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-3.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-4.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-5.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-6.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-7.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-8.c: Ditto.
+ 	* c-c++-common/gomp/pr99928-9.c: Ditto.
+ 	* c-c++-common/gomp/task-detach-1.c: Ditto.
+ 	* c-c++-common/gomp/teams-2.c: Ditto.
+ 	* g++.dg/gomp/attrs-1.C: Ditto.
+ 	* g++.dg/gomp/attrs-2.C: Ditto.
+ 	* g++.dg/gomp/attrs-4.C: Ditto.
+ 	* g++.dg/gomp/block-0.C: Ditto.
+ 	* g++.dg/gomp/block-10.C: Ditto.
+ 	* g++.dg/gomp/block-5.C: Ditto.
+ 	* g++.dg/gomp/block-9.C: Ditto.
+ 	* g++.dg/gomp/depend-iterator-1.C: Ditto.
+ 	* g++.dg/gomp/master-1.C: Ditto.
+ 	* g++.dg/gomp/master-2.C: Ditto.
+ 	* g++.dg/gomp/master-3.C: Ditto.
+ 	* g++.dg/gomp/method-1.C: Ditto.
+ 	* g++.dg/gomp/pr29965-3.C: Ditto.
+ 	* g++.dg/gomp/pr29965-9.C: Ditto.
+ 	* g++.dg/gomp/pr78363-4.C: Ditto.
+ 	* g++.dg/gomp/pr78363-6.C: Ditto.
+ 	* g++.dg/gomp/pr79664.C: Ditto.
+ 	* g++.dg/gomp/pr94477.C: Ditto.
+ 	* g++.dg/gomp/pr94512.C: Ditto.
+ 	* g++.dg/gomp/tpl-master-1.C: Ditto.
+ 	* gcc.dg/gomp/appendix-a/a.12.1.c: Ditto.
+ 	* gcc.dg/gomp/appendix-a/a.33.2.c: Ditto.
+ 	* gcc.dg/gomp/attrs-1.c: Ditto.
+ 	* gcc.dg/gomp/attrs-2.c: Ditto.
+ 	* gcc.dg/gomp/attrs-4.c: Ditto.
+ 	* gcc.dg/gomp/block-10.c: Ditto.
+ 	* gcc.dg/gomp/block-5.c: Ditto.
+ 	* gcc.dg/gomp/block-9.c: Ditto.
+ 	* gcc.dg/gomp/master-1.c: Ditto.
+ 	* gcc.dg/gomp/master-2.c: Ditto.
+ 	* gcc.dg/gomp/master-3.c: Ditto.
+ 	* gcc.dg/gomp/nesting-1.c: Ditto.
+ 	* gcc.dg/gomp/pr104517.c: Ditto.
+ 	* gcc.dg/gomp/pr29965-3.c: Ditto.
+ 	* gcc.dg/gomp/pr35818.c: Ditto.
+ 	* gcc.dg/gomp/pr91216.c: Ditto.
+ 	* gcc.dg/gomp/sharing-2.c: Ditto.
+ 	* gfortran.dg/gomp/adjust-args-10.f90: Ditto.
+ 	* gfortran.dg/gomp/affinity-1.f90: Ditto.
+ 	* gfortran.dg/gomp/allocate-clause.f90: Ditto.
+ 	* gfortran.dg/gomp/appendix-a/a.12.1.f90: Ditto.
+ 	* gfortran.dg/gomp/appendix-a/a.33.2.f90: Ditto.
+ 	* gfortran.dg/gomp/c_ptr_tests_20.f90: Ditto.
+ 	* gfortran.dg/gomp/c_ptr_tests_21.f90: Ditto.
+ 	* gfortran.dg/gomp/cancel-1.f90: Ditto.
+ 	* gfortran.dg/gomp/clauses-1.f90: Ditto.
+ 	* gfortran.dg/gomp/declare-variant-1.f90: Ditto.
+ 	* gfortran.dg/gomp/depend-iterator-1.f90: Ditto.
+ 	* gfortran.dg/gomp/depend-iterator-2.f90: Ditto.
+ 	* gfortran.dg/gomp/is_device_ptr-1.f90: Ditto.
+ 	* gfortran.dg/gomp/is_device_ptr-2.f90: Ditto.
+ 	* gfortran.dg/gomp/is_device_ptr-3.f90: Ditto.
+ 	* gfortran.dg/gomp/lastprivate-conditional-1.f90: Ditto.
+ 	* gfortran.dg/gomp/loop-4.f90: Ditto.
+ 	* gfortran.dg/gomp/loop-exit.f90: Ditto.
+ 	* gfortran.dg/gomp/map-3.f90: Ditto.
+ 	* gfortran.dg/gomp/nesting-2.f90: Ditto.
+ 	* gfortran.dg/gomp/nesting-3.f90: Ditto.
+ 	* gfortran.dg/gomp/nowait-2.f90: Ditto.
+ 	* gfortran.dg/gomp/nowait-4.f90: Ditto.
+ 	* gfortran.dg/gomp/nowait-5.f90: Ditto.
+ 	* gfortran.dg/gomp/openmp-simd-2.f90: Ditto.
+ 	* gfortran.dg/gomp/openmp-simd-3.f90: Ditto.
+ 	* gfortran.dg/gomp/parallel-master-1.f90: Ditto.
+ 	* gfortran.dg/gomp/parallel-master-2.f90: Ditto.
+ 	* gfortran.dg/gomp/pr107214-8.f90: Ditto.
+ 	* gfortran.dg/gomp/pr48117.f90: Ditto.
+ 	* gfortran.dg/gomp/pr94672.f90: Ditto.
+ 	* gfortran.dg/gomp/pr99928-1.f90: Suppression + fix whitespace.
+ 	* gfortran.dg/gomp/pr99928-11.f90: Suppression.
+ 	* gfortran.dg/gomp/pr99928-2.f90: Suppression + fix whitespace.
+ 	* gfortran.dg/gomp/pr99928-3.f90: Ditto.
+ 	* gfortran.dg/gomp/pr99928-4.f90: Ditto.
+ 	* gfortran.dg/gomp/pr99928-5.f90: Ditto.
+ 	* gfortran.dg/gomp/pr99928-6.f90: Ditto.
+ 	* gfortran.dg/gomp/pr99928-8.f90: Ditto.
+ 	* gfortran.dg/gomp/sharing-3.f90: Suppress deprecation warnings.
+ 	* gfortran.dg/gomp/strictly-structured-block-1.f90: Ditto.
+ 	* gfortran.dg/gomp/strictly-structured-block-2.f90: Ditto.
+ 	* gfortran.dg/gomp/target1.f90: Ditto.
+ 	* gfortran.dg/gomp/taskloop-1.f90: Ditto.
+ 	* gfortran.dg/gomp/taskloop-2.f90: Ditto.
+ 	* gfortran.dg/openmp-define-3.f90: Bump expected version.
+ 	* c-c++-common/gomp/master-construct-dep.c: New test.
+ 	* gfortran.dg/gomp/master-construct-dep.f90: New test.
+ 
+ 2025-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/aggr33.adb: New test.
+ 
+ 2025-12-11  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc.dg/tls/struct-2.c: New test.
+ 
+ 2025-12-10  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.target/i386/lea-3.c: Add -fno-PIE.
+ 	* gcc.target/i386/lea-4.c: New, with -fPIE.
+ 
+ 2025-12-10  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* gcc.dg/sibcall-12.c: Add -fno-PIE on ia32.
+ 	* gcc.target/i386/pr106060-2.c: Likewise.
+ 	* gcc.target/i386/pr106060-3.c: Likewise.
+ 	* gcc.target/i386/vect-shiftv4qi.c: Likewise.
+ 
+ 2025-12-10  Jakub Jelinek  <jakub@redhat.com>
+ 	    Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR middle-end/123069
+ 	* gcc.c-torture/compile/pr123069.c: New test.
+ 
+ 2025-12-10  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/sign-int-2.a68: New test.
+ 	* algol68/execute/sign-real-2.a68: Likewise.
+ 
+ 2025-12-10  Jose E. Marchesi  <jose.marchesi@oracle.com>
+ 
+ 	* algol68/execute/mult-char-1.a68: Cover int*char cases.
+ 
+ 2025-12-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/modules/compile-std1.C: Test <vector> translation.
+ 
+ 2025-12-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* g++.dg/modules/compile-std1.C: Add dg-module-cmi lines.
+ 	* g++.dg/modules/modules.exp (host_header_path): New.
+ 	(munge_cmi): Factor out...
+ 	(dg-module-cmi): ...from here.
+ 
+ 2025-12-10  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/pr123074.C: Move to...
+ 	* g++.target/riscv/rvv/autovec/pr123074.C: ...here.
+ 	* gcc.target/riscv/rvv/rvv.exp: Remove 'C'.
+ 
+ 2025-12-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* g++.dg/lookup/extern-c-redecl3.C (pid_t): Define.
+ 	Use it for fork return type.
+ 	terms of __builtin_fork.
+ 	* g++.dg/pid_t-1.C: New test.
+ 	* gcc.dg/pid_t-1.c: Likewise.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR tree-optimization/123074
+ 	* gcc.target/riscv/rvv/rvv.exp: Include *.C.
+ 	* gcc.target/riscv/rvv/autovec/pr123074.C: New test.
+ 
+ 2025-12-09  Qing Zhao  <qing.zhao@oracle.com>
+ 
+ 	PR c/122982
+ 	* gcc.dg/pointer-counted-by-pr122982.c: New test.
+ 
+ 2025-12-09  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Add asm check
+ 	for vmslt.vx.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c: Ditto.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test
+ 	helper macros.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
+ 	data for run test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i16.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i32.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i64.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i8.c: New test.
+ 
+ 2025-12-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/121230
+ 	* gcc.target/i386/pr121230.c: New testcase.
+ 
+ 2025-12-09  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Revert:
+ 	2025-12-09  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122819
+ 	* g++.dg/modules/tpl-friend-22.C: New test.
+ 
+ 2025-12-09  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c/123018
+ 	* gcc.dg/pr123018.c: New test.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR tree-optimization/122635
+ 	* gcc.target/aarch64/sve/pfalse-store.c: Expect more elided
+ 	stores.
+ 	* gcc.target/riscv/rvv/autovec/pr122635-1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr122635-2.c: New test.
+ 	* gcc.target/powerpc/p9-vec-length-epil-8.c: Expect two lxvl
+ 	less.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/max-vect-1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/max-vect-2.c: New test.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/123022
+ 	* gcc.target/riscv/rvv/autovec/pr123022-2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/pr123022.c: New test.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/115325
+ 	* gcc.target/riscv/pragma-target-1.c: New test.
+ 	* gcc.target/riscv/pragma-target-2.c: New test.
+ 
+ 2025-12-09  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8-run.c: New test.
+ 	* gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8.c: New test.
+ 
+ 2025-12-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR target/123027
+ 	* gcc.target/i386/pr123027.c: New testcase.
+ 	* gcc.dg/torture/pr123027.c: Likewise.
+ 
+ 2025-12-09  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/122819
+ 	* g++.dg/modules/tpl-friend-22.C: New test.
+ 
+ 2025-12-08  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/46555
+ 	* gcc.dg/tree-ssa/pr46555.c: New test.
+ 
+ 2025-12-08  Harald Anlauf  <anlauf@gmx.de>
+ 	    Steven G. Kargl  <kargl@gcc.gnu.org>
+ 
+ 	PR fortran/123025
+ 	* gfortran.dg/assumed_charlen_dummy.f90: These tests failed
+ 	with the change because of the default -pedantic option
+ 	used by the dg.exp mechanisms. Overide this default.
+ 	* gfortran.dg/automatic_char_len_1.f90: Ditto.
+ 	* gfortran.dg/entry_23.f: Ditto.
+ 	* gfortran.dg/finalize_59.f90: Dito.
+ 	* gfortran.dg/g77/f90-intrinsic-bit.f: Ditto.
+ 	* gfortran.dg/g77/f90-intrinsic-mathematical.f: Ditto.
+ 	* gfortran.dg/g77/f90-intrinsic-numeric.f: Ditto.
+ 	* gfortran.dg/g77/intrinsic-unix-bessel.f: Ditto.
+ 	* gfortran.dg/g77/intrinsic-unix-erf.f: Ditto.
+ 	* gfortran.dg/initialization_9.f90: Ditto.
+ 	* gfortran.dg/intrinsic_actual_4.f90: Ditto.
+ 	* gfortran.dg/namelist_assumed_char.f90: Ditto.
+ 	* gfortran.dg/pr15140.f90: Ditto.
+ 
+ 2025-12-08  Egas Ribeiro  <egas.g.ribeiro@tecnico.ulisboa.pt>
+ 
+ 	PR c++/119343
+ 	* g++.dg/template/sfinae-deleted-pr119343.C: New test.
+ 
+ 2025-12-08  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gcc.dg/tls/data-sections-1.c: New test.
+ 
+ 2025-12-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123040
+ 	* g++.dg/torture/pr123040.C: New testcase.
+ 
+ 2025-12-08  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/123038
+ 	* gcc.dg/vect/pr123038.c: New testcase.
+ 
+ 2025-12-08  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/123026
+ 	* gcc.target/aarch64/pr123026.c: New test.
+ 
+ 2025-12-08  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/122343
+ 	* gcc.target/i386/avx2-vpcmpgtq-1.c: Compile with
+ 	-fno-fuse-ops-with-volatile-access.
+ 
+ 2025-12-07  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* gnat.dg/reduce3.adb: New test.
+ 
+ 2025-12-07  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/122343
+ 	* gcc.target/i386/20040112-1.c: Add -fomit-frame-pointer and use
+ 	check-function-bodies to check for loop.
+ 	* gcc.target/i386/avx-ne-convert-1.c: Compile with
+ 	-fno-fuse-ops-with-volatile-access.
+ 	* gcc.target/i386/avx10_2-bf16-1.c: Likewise.
+ 	* gcc.target/i386/avx10_2-convert-1.c: Likewise.
+ 	* gcc.target/i386/avx10_2-satcvt-1.c: Likewise.
+ 	* gcc.target/i386/avx512bf16-vcvtneps2bf16-1.c: Likewise.
+ 	* gcc.target/i386/avx512bf16vl-vcvtneps2bf16-1a.c: Likewise.
+ 	* gcc.target/i386/avx512bf16vl-vcvtneps2bf16-1b.c: Likewise.
+ 	* gcc.target/i386/avx512bitalg-vpshufbitqmb.c: Likewise.
+ 	* gcc.target/i386/avx512bw-vpcmpb-1.c: Likewise.
+ 	* gcc.target/i386/avx512bw-vpcmpub-1.c: Likewise.
+ 	* gcc.target/i386/avx512bw-vpcmpuw-1.c: Likewise.
+ 	* gcc.target/i386/avx512bw-vpcmpw-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvtps2qq-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvtps2uqq-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvtqq2pd-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvtqq2ps-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvttps2qq-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvttps2uqq-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvtuqq2pd-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vcvtuqq2ps-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vextractf32x8-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vextractf64x2-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vextracti64x2-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vfpclasspd-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vfpclassps-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vfpclasssd-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vfpclassss-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vpmullq-1.c: Likewise.
+ 	* gcc.target/i386/avx512dq-vpmullq-3.c: Likewise.
+ 	* gcc.target/i386/avx512f-pr100267-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcmppd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcmpps-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtps2pd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtsd2si-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtsd2si64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtsd2usi-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtsd2usi64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtsi2ss-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtss2si-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtss2si64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtss2usi-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvtss2usi64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttsd2si-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttsd2si64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttsd2usi-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttsd2usi64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttss2si-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttss2si64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttss2usi-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vcvttss2usi64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vextractf32x4-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vextractf64x4-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vextracti64x4-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vmovapd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vmovaps-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vmovdqa64-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpandnq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpbroadcastd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpbroadcastq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpeqq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpequq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpged-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpgeq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpgeud-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpgeuq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpled-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpleq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpleud-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpleuq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpltd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpltq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpltud-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpltuq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpneqd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpneqq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpnequd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpnequq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpud-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vpcmpuq-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vrndscalepd-1.c: Likewise.
+ 	* gcc.target/i386/avx512f-vrndscaleps-1.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-complex-fma.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vaddph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtpd2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2dq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2pd-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2psx-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2qq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2udq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2uqq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2uw-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtph2w-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtps2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtqq2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvttph2dq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvttph2qq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvttph2udq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvttph2uqq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvttph2uw-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvttph2w-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vcvtuqq2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vfcmaddcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vfcmulcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vfmaddcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vfmulcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vfpclassph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vfpclasssh-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vmulph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vrcpph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vrsqrtph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16-vsqrtph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vaddph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtpd2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtph2dq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtph2psx-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtph2qq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtph2udq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtph2uqq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtph2uw-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtph2w-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtps2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtqq2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvttph2dq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvttph2udq-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvttph2uw-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvttph2w-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vcvtuqq2ph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vfcmaddcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vfcmulcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vfmaddcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vfmulcph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vfpclassph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vmulph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vrcpph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vrsqrtph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512fp16vl-vsqrtph-1a.c: Likewise.
+ 	* gcc.target/i386/avx512vl-pr100267-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vcmppd-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vcmpps-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vcvtpd2ps-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vcvtpd2udq-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vcvttpd2udq-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vcvttps2udq-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vextractf32x4-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vmovapd-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vmovaps-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vmovdqa64-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vpcmpd-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vpcmpeqq-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vpcmpequq-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vpcmpq-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vpcmpud-1.c: Likewise.
+ 	* gcc.target/i386/avx512vl-vpcmpuq-1.c: Likewise.
+ 	* gcc.target/i386/pr122343-1a.c: New test.
+ 	* gcc.target/i386/pr122343-1b.c: Likewise.
+ 	* gcc.target/i386/pr122343-2a.c: Likewise.
+ 	* gcc.target/i386/pr122343-2b.c: Likewise.
+ 	* gcc.target/i386/pr122343-3.c: Likewise.
+ 	* gcc.target/i386/pr122343-4a.c: Likewise.
+ 	* gcc.target/i386/pr122343-4b.c: Likewise.
+ 	* gcc.target/i386/pr122343-5a.c: Likewise.
+ 	* gcc.target/i386/pr122343-5b.c: Likewise.
+ 	* gcc.target/i386/pr122343-6a.c: Likewise.
+ 	* gcc.target/i386/pr122343-6b.c: Likewise.
+ 	* gcc.target/i386/pr122343-7.c: Likewise.
+ 
  2025-12-06  Alexandre Oliva  <oliva@adacore.com>
  
  	PR rtl-optimization/122947
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/manorboy.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/manorboy.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/manorboy.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/algol68/execute/manorboy.a68	Sun Dec 14 22:32:08 2025
***************
*** 0 ****
--- 1,7 ----
+ begin proc a = (int in_k, proc int x1, x2, x3, x4, x5) int:
+          (int k := in_k;
+           proc b = int: a (k -:= 1, b, x1, x2, x3, x4);
+           (k <= 0 | x4 + x5 | b));
+ 
+       assert (a (10, int:1, int:-1, int:-1, int:1, int:0) = -67)
+ end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/modules/module1.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/modules/module1.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/modules/module1.a68	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/algol68/execute/modules/module1.a68	Sun Dec 14 22:32:08 2025
***************
*** 1,8 ****
  module Module1 =
  def
!     pub mode MyInt = int;
!     pub int beast_number := 666;
!     pub string who = "jemarch";
      puts ("Hello from module'n")
  postlude
      puts ("Bye from module'n")
--- 1,8 ----
  module Module1 =
  def
!     pub mode MyInt = int, MyOtherInt = int;
!     pub int beast_number := 666, angelic_number := 777;
!     pub string who = "jemarch", whoelse = "pietro";
      puts ("Hello from module'n")
  postlude
      puts ("Bye from module'n")
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/modules/module3.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/modules/module3.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/modules/module3.a68	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/algol68/execute/modules/module3.a68	Sun Dec 14 22:32:08 2025
***************
*** 1,9 ****
  module Module_3 =
  def 
!     { variable = 0 in_proc = 1 } pub proc bump = void: counter +:= 1;
!     { variable = 0 in_proc = 1 } pub proc bumptimes = (int n) void: to n do bump od;
!     { variable = 1 in_proc = 0 } pub proc vbump := void: counter +:= 1;
!     { variable = 1 in_proc = 0 } pub proc vbumptimes := (int n) void: to n do vbump od;
      { variable = 0 in_proc = 1 } pub proc getcounter = int: counter;
      { variable = 0 in_proc = 0 } pub proc int anothergetcounter = getcounter;
      int counter := 10;
--- 1,9 ----
  module Module_3 =
  def 
!     { variable = 0 in_proc = 1 } pub proc bump = void: counter +:= 1,
!     { variable = 0 in_proc = 1 }          bumptimes = (int n) void: to n do bump od;
!     { variable = 1 in_proc = 0 } pub proc vbump := void: counter +:= 1,
!     { variable = 1 in_proc = 0 }          vbumptimes := (int n) void: to n do vbump od;
      { variable = 0 in_proc = 1 } pub proc getcounter = int: counter;
      { variable = 0 in_proc = 0 } pub proc int anothergetcounter = getcounter;
      int counter := 10;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/modules/module5.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/modules/module5.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/modules/module5.a68	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/algol68/execute/modules/module5.a68	Sun Dec 14 22:32:08 2025
***************
*** 1,7 ****
  module Module_5 =
! def pub prio // = 9;
!     pub op // = (int a, b) int: a + b;
!     pub prio LALA = 9;
!     pub op LALA = (int a, b) int: a - b;
      skip
  fed
--- 1,6 ----
  module Module_5 =
! def pub prio // = 9, LALA = 9, LELE = 9;
!     pub op // = (int a, b) int: a + b,
!            LALA = (int a, b) int: a - b;
      skip
  fed
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/modules/program-1.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/modules/program-1.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/modules/program-1.a68	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/algol68/execute/modules/program-1.a68	Sun Dec 14 22:32:08 2025
*************** begin string je = access Module1 begin w
*** 15,20 ****
        assert (aa = "jemarch");
        assert (bb = "jemarch");
        assert (cc = "jemarch");
!       access Module1 to 1 do assert (who = "jemarch") od;
!       access Module1 (assert (beast_number = 666))
  end
--- 15,21 ----
        assert (aa = "jemarch");
        assert (bb = "jemarch");
        assert (cc = "jemarch");
!       access Module1 to 1 do assert (who = "jemarch" AND whoelse = "pietro") od;
!       access Module1 (assert (beast_number = 666 AND angelic_number = 777));
!       access Module1 (MyInt a = 1; MyOtherInt b = 1; assert (a + b = 2))
  end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/mult-char-1.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/mult-char-1.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/mult-char-1.a68	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/algol68/execute/mult-char-1.a68	Sun Dec 14 22:32:08 2025
***************
*** 1,5 ****
  # { dg-options "-fstropping=upper" }  #
  BEGIN ASSERT ("a" * 3 = "aaa");
        ASSERT ("" * 1 = "");
!       ASSERT ("x" * 0 = "x")
  END
--- 1,8 ----
  # { dg-options "-fstropping=upper" }  #
  BEGIN ASSERT ("a" * 3 = "aaa");
        ASSERT ("" * 1 = "");
!       ASSERT ("x" * 0 = "x");
!       ASSERT (3 * "a" = "aaa");
!       ASSERT (1 * "" = "");
!       ASSERT (0 * "x" = "x")
  END
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/sign-int-2.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/sign-int-2.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/sign-int-2.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/algol68/execute/sign-int-2.a68	Sun Dec 14 22:32:08 2025
***************
*** 0 ****
--- 1,4 ----
+ begin proc fixed = (int v, int width, after) string: skip;
+       int x = 2, y = 3;
+       fixed (SIGN (x * y), 0, 0)
+ end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/algol68/execute/sign-real-2.a68 gcc-16-20251214/gcc/testsuite/algol68/execute/sign-real-2.a68
*** gcc-16-20251207/gcc/testsuite/algol68/execute/sign-real-2.a68	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/algol68/execute/sign-real-2.a68	Sun Dec 14 22:32:08 2025
***************
*** 0 ****
--- 1,4 ----
+ begin proc fixed = (int v, int width, after) string: skip;
+       real x = 2, y = 3;
+       fixed (SIGN (x * y), 0, 0)
+ end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/allocation-size-multiline-1.c	Sun Dec 14 22:32:08 2025
*************** void test_symbolic (int n)
*** 66,84 ****
  /* { dg-begin-multiline-output "" }
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ^~~~~~~~~~~~~~~~~~~~~~~~
!   'test_symbolic': event 1
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ^~~~~~~~~~~~~~~~~~~~~~~~
                                |
!                               (1) allocated 'n * 2' bytes and assigned to 'int32_t *'
     { dg-end-multiline-output "" { target c } } */
  
  /* { dg-begin-multiline-output "" }
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ~~~~~~~~~~~~~~~~~^~~~~~~
!   'void test_symbolic(int)': event 1
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ~~~~~~~~~~~~~~~~~^~~~~~~
                                                 |
!                                                (1) allocated '(n * 2)' bytes and assigned to 'int32_t*' {aka '{re:long :re?}int*'} here; 'sizeof (int32_t {aka {re:long :re?}int})' is '4'
     { dg-end-multiline-output "" { target c++ } } */
--- 66,86 ----
  /* { dg-begin-multiline-output "" }
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ^~~~~~~~~~~~~~~~~~~~~~~~
!   'test_symbolic': events 1-2
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ^~~~~~~~~~~~~~~~~~~~~~~~
                                |
!                               (1) allocated 'n * 2' bytes here
!                               (2) assigned to 'int32_t *'
     { dg-end-multiline-output "" { target c } } */
  
  /* { dg-begin-multiline-output "" }
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ~~~~~~~~~~~~~~~~~^~~~~~~
!   'void test_symbolic(int)': events 1-2
     int32_t *ptr = (int32_t *) __builtin_malloc (n * 2);
                                ~~~~~~~~~~~~~~~~~^~~~~~~
                                                 |
!                                                (1) allocated '(n * 2)' bytes here
!                                                (2) assigned to 'int32_t*' {aka '{re:long :re?}int*'} here; 'sizeof (int32_t {aka {re:long :re?}int})' is '4'
     { dg-end-multiline-output "" { target c++ } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/bzip2-arg-parse-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/bzip2-arg-parse-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/bzip2-arg-parse-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/bzip2-arg-parse-1.c	Sun Dec 14 22:32:08 2025
*************** void test (Cell   *argList)
*** 91,95 ****
  
     /* The analyzer ought to be able to successfully merge all of the
        above changes that can reach here into a single state.  */
!    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  }
--- 91,98 ----
  
     /* The analyzer ought to be able to successfully merge all of the
        above changes that can reach here into a single state.  */
!    /* __analyzer_dump_exploded_nodes (0);*/ /* { dg-warning "1 processed enode" "FIXME" { xfail *-*-* } } */
  }
+ 
+ /* FIXME: */
+ /* { dg-additional-options "-Wno-analyzer-too-complex" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-require-effective-target int32plus } */
  /* { dg-require-effective-target size24plus } */
! 
  /* Reduced from coreutils's cksum.c: cksum_slice8 */
  
  typedef long unsigned int size_t;
--- 1,6 ----
  /* { dg-require-effective-target int32plus } */
  /* { dg-require-effective-target size24plus } */
! /* { dg-additional-options "-Wno-analyzer-symbol-too-complex" } */
  /* Reduced from coreutils's cksum.c: cksum_slice8 */
  
  typedef long unsigned int size_t;
*************** cksum_slice8(FILE* fp, uint_fast32_t* cr
*** 72,78 ****
  
      unsigned char* cp = (unsigned char*)datap;
      while (bytes_read--)
!       crc = (crc << 8) ^ crctab[0][((crc >> 24) ^ *cp++) & 0xFF];
      if (feof_unlocked(fp))
        break;
    }
--- 72,78 ----
  
      unsigned char* cp = (unsigned char*)datap;
      while (bytes_read--)
!       crc = (crc << 8) ^ crctab[0][((crc >> 24) ^ *cp++) & 0xFF]; /* { dg-bogus "use of uninitialized value" } */
      if (feof_unlocked(fp))
        break;
    }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/coreutils-group_number.c	Sun Dec 14 22:32:08 2025
***************
*** 0 ****
--- 1,43 ----
+ /* Reduced from ICE seen with coreutils-9.1:lib/human.c, which is GPLv3+. */
+ 
+ /* { dg-additional-options "-Wno-analyzer-too-complex" } */
+ /* { dg-additional-options "-Wno-analyzer-symbol-too-complex" } */
+ 
+ typedef __SIZE_TYPE__ size_t;
+ 
+ char *
+ group_number (char *number, size_t numberlen, char const *grouping,
+               char const *thousands_sep)
+ {
+   char *d;
+   size_t grouplen = (18446744073709551615UL);
+   size_t thousands_seplen = __builtin_strlen (thousands_sep);
+   size_t i = numberlen;
+ 
+   char buf[100];
+   __builtin_memcpy (buf, number, numberlen);
+   d = number + numberlen;
+ 
+   for (;;)
+     {
+       unsigned char g = *grouping;
+ 
+       if (g)
+         {
+           grouplen = g < 0x7f ? g : i;
+           grouping++;
+         }
+ 
+       if (i < grouplen)
+         grouplen = i;
+ 
+       d -= grouplen;
+       i -= grouplen;
+       __builtin_memcpy (d, buf + i, grouplen);
+       if (i == 0)
+         return d;
+ 
+       d -= thousands_seplen;
+       __builtin_memcpy (d, thousands_sep, thousands_seplen);
+     }
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/data-model-20.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/data-model-20.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/data-model-20.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/data-model-20.c	Sun Dec 14 22:32:08 2025
*************** test (int n) {
*** 15,28 ****
  
    for (i = 0; i < n; i++) {
      if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) {
!       for (; i >= 0; i++) { /* { dg-warning "infinite loop" } */
  	/* This loop is in the wrong direction, so not technically an
  	   infinite loop ("i" will eventually wrap around), but the
  	   analyzer's condition handling treats the overflow as such.
  	   In any case, the code is suspect and warrants a warning.  */
  	free(arr[i]); /* { dg-bogus "double-'free'" } */
        }
!       free(arr); /* { dg-warning "leak" } */
        return NULL;
      }
    }
--- 15,28 ----
  
    for (i = 0; i < n; i++) {
      if ((arr[i] = (struct foo *)malloc(sizeof(struct foo))) == NULL) {
!       for (; i >= 0; i++) { /* { dg-warning "infinite loop" "" { xfail *-*-* } } */
  	/* This loop is in the wrong direction, so not technically an
  	   infinite loop ("i" will eventually wrap around), but the
  	   analyzer's condition handling treats the overflow as such.
  	   In any case, the code is suspect and warrants a warning.  */
  	free(arr[i]); /* { dg-bogus "double-'free'" } */
        }
!       free(arr); /* { dg-warning "leak" "" { xfail *-*-* } } */
        return NULL;
      }
    }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/deref-before-check-qemu-qtest_rsp_args.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/deref-before-check-qemu-qtest_rsp_args.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/deref-before-check-qemu-qtest_rsp_args.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/deref-before-check-qemu-qtest_rsp_args.c	Sun Dec 14 22:32:08 2025
***************
*** 5,11 ****
  
  #define g_assert(expr) \
    do {									\
!     if (expr) ; else /* { dg-warning "check of '\\*words' for NULL after already dereferencing it" } */ \
        g_assertion_message_expr (#expr);			\
  } while (0)
  
--- 5,11 ----
  
  #define g_assert(expr) \
    do {									\
!     if (expr) ; else /* { dg-warning "check of '\\*words' for NULL after already dereferencing it" "FIXME" { xfail *-*-* } } */ \
        g_assertion_message_expr (#expr);			\
  } while (0)
  
*************** redo:
*** 60,73 ****
      words = g_strsplit(line->str, " ", 0);
      g_string_free(line, TRUE);
  
!     if (strcmp(words[0], "IRQ") == 0) { /* { dg-message "pointer '\\*words' is dereferenced here" } */
          /* [...snip...] */
          g_strfreev(words);
          goto redo;
      }
  
!     g_assert(words[0] != NULL); /* { dg-message "in expansion of macro 'g_assert'" } */
      /* [...snip...] */
  
      return words;
  }
--- 60,81 ----
      words = g_strsplit(line->str, " ", 0);
      g_string_free(line, TRUE);
  
!     if (strcmp(words[0], "IRQ") == 0) { /* { dg-message "pointer '\\*words' is dereferenced here" "FIXME" { xfail *-*-* } } */
          /* [...snip...] */
          g_strfreev(words);
          goto redo;
      }
  
!     g_assert(words[0] != NULL); /* { dg-message "in expansion of macro 'g_assert'" "FIXME" { xfail *-*-* } } */
      /* [...snip...] */
  
      return words;
  }
+ 
+ /* FIXME:
+    - old implementation was recording the check at the enode for
+    "_5 = *words_12;", which is within the expansion of g_assert
+    for "words[0]".
+    - new implementation places it at the enode for "if (_5 != 0B)" which
+    is within the definition of g_assert, for "if (expr"), and thus
+    rejected.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/dot-output.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/dot-output.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/dot-output.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/dot-output.c	Sun Dec 14 22:32:08 2025
*************** int test_2 (void)
*** 42,49 ****
    return c1;
  }
  
- /* { dg-final { dg-check-dot "dot-output.c.callgraph.dot" } } */
  /* { dg-final { dg-check-dot "dot-output.c.eg.dot" } } */
  /* { dg-final { dg-check-dot "dot-output.c.state-purge.dot" } } */
! /* { dg-final { dg-check-dot "dot-output.c.supergraph.dot" } } */
! /* { dg-final { dg-check-dot "dot-output.c.supergraph-eg.dot" } } */
--- 42,51 ----
    return c1;
  }
  
  /* { dg-final { dg-check-dot "dot-output.c.eg.dot" } } */
  /* { dg-final { dg-check-dot "dot-output.c.state-purge.dot" } } */
! /* { dg-final { dg-check-dot "dot-output.c.supergraph.0.original.dot" } } */
! /* { dg-final { dg-check-dot "dot-output.c.supergraph.1.fixup-locations.dot" } } */
! /* { dg-final { dg-check-dot "dot-output.c.supergraph.2.simplified.dot" } } */
! /* { dg-final { dg-check-dot "dot-output.c.supergraph.3.sorted.dot" } } */
! /* { dg-final { dg-check-dot "dot-output.c.supergraph.4.eg.dot" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/fd-symbolic-socket.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/fd-symbolic-socket.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/fd-symbolic-socket.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/fd-symbolic-socket.c	Sun Dec 14 22:32:08 2025
*************** void test_close_checked_socket (int type
*** 39,48 ****
  void test_leak_checked_socket (int type)
  {
    int fd = socket (AF_UNIX, type, 0); /* { dg-message "socket created here" } */
!   if (fd == -1) /* { dg-warning "leak of file descriptor 'fd'" } */
      return;
!   // TODO: strange location for leak message
! }
  
  void test_bind_on_checked_socket (int type, const char *sockname)
  {
--- 39,47 ----
  void test_leak_checked_socket (int type)
  {
    int fd = socket (AF_UNIX, type, 0); /* { dg-message "socket created here" } */
!   if (fd == -1)
      return;
! } /* { dg-warning "leak of file descriptor 'fd'" } */
  
  void test_bind_on_checked_socket (int type, const char *sockname)
  {
*************** void test_leak_of_bound_socket (int type
*** 77,84 ****
    memset (&addr, 0, sizeof (addr));
    addr.sun_family = AF_UNIX;
    strncpy (addr.sun_path, sockname, sizeof(addr.sun_path) - 1);
!   bind (fd, (struct sockaddr *)&addr, sizeof (addr)); /* { dg-warning "leak of file descriptor 'fd'" } */
! }
  
  void test_listen_without_bind (int type)
  {
--- 76,83 ----
    memset (&addr, 0, sizeof (addr));
    addr.sun_family = AF_UNIX;
    strncpy (addr.sun_path, sockname, sizeof(addr.sun_path) - 1);
!   bind (fd, (struct sockaddr *)&addr, sizeof (addr));
! } /* { dg-warning "leak of file descriptor 'fd'" } */
  
  void test_listen_without_bind (int type)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/fibonacci.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/fibonacci.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/fibonacci.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/fibonacci.c	Sun Dec 14 22:32:08 2025
*************** int fib (int n)
*** 6,9 ****
      return n;
  } 
  
! /* { dg-regexp "\[^\n\r\]+: warning: analysis bailed out early \\(\[0-9\]+ 'after-snode' enodes; \[0-9\]+ enodes\\) \[^\n\r\]*" } */
--- 6,9 ----
      return n;
  } 
  
! /* { dg-regexp "\[^\n\r\]+: warning: analysis bailed out early \\(\[0-9\]+ enodes\\) \[^\n\r\]*" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/flex-with-call-summaries.c	Sun Dec 14 22:32:08 2025
*************** static int yy_get_next_buffer (void)
*** 881,887 ****
  				else
  					b->yy_buf_size *= 2;
  
! 				b->yy_ch_buf = (char *)  /* { dg-warning "leak" } */
  					/* Include room in for 2 EOB chars. */
  					yyrealloc( (void *) b->yy_ch_buf,
  							 (yy_size_t) (b->yy_buf_size + 2)  );
--- 881,887 ----
  				else
  					b->yy_buf_size *= 2;
  
! 				b->yy_ch_buf = (char *)  /* { dg-warning "leak" "" { xfail *-*-* } } */
  					/* Include room in for 2 EOB chars. */
  					yyrealloc( (void *) b->yy_ch_buf,
  							 (yy_size_t) (b->yy_buf_size + 2)  );
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/flex-without-call-summaries.c	Sun Dec 14 22:32:08 2025
***************
*** 3,9 ****
  
  /* { dg-additional-options "-fno-analyzer-call-summaries" } */
  
! /* { dg-additional-options "-Wno-analyzer-too-complex" } */
  /* { dg-additional-options "-D_POSIX_SOURCE" } */
  
  /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } } */
--- 3,9 ----
  
  /* { dg-additional-options "-fno-analyzer-call-summaries" } */
  
! /* { dg-additional-options "-Wno-analyzer-too-complex -Wno-analyzer-symbol-too-complex" } */
  /* { dg-additional-options "-D_POSIX_SOURCE" } */
  
  /* { dg-skip-if "requires hosted libstdc++ for stdlib malloc" { ! hostedlib } } */
*************** static int yy_get_next_buffer (void)
*** 881,888 ****
  				else
  					b->yy_buf_size *= 2;
  
! 				b->yy_ch_buf = (char *)  /* { dg-warning "leak of '\\*b.yy_ch_buf'" "" { target c } } */
! 							 /* { dg-warning "leak of '\\*b.yy_buffer_state::yy_ch_buf'" "" { target c++ } .-1 } */
  					/* Include room in for 2 EOB chars. */
  					yyrealloc( (void *) b->yy_ch_buf,
  							 (yy_size_t) (b->yy_buf_size + 2)  );
--- 881,888 ----
  				else
  					b->yy_buf_size *= 2;
  
! 				b->yy_ch_buf = (char *)  /* { dg-warning "leak of '\\*b.yy_ch_buf'" "" { xfail *-*-* } } */
! 							 /* { dg-warning "leak of '\\*b.yy_buffer_state::yy_ch_buf'" "" { xfail *-*-* } .-1 } */
  					/* Include room in for 2 EOB chars. */
  					yyrealloc( (void *) b->yy_ch_buf,
  							 (yy_size_t) (b->yy_buf_size + 2)  );
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-5.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-5.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-5.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-5.c	Sun Dec 14 22:32:08 2025
*************** int nowarn_if_i (int i)
*** 68,73 ****
--- 68,75 ----
      return -1;
  }
  
+ // FIXME: need to disable these to avoid bailing out too early with a "too complex" warning
+ #if 0
  int nowarn_switch (int i, int a[])
  {
    switch (i)
*************** int warn_switch (int i, int a[])
*** 94,99 ****
--- 96,102 ----
      default: return warn_switch (a[1], a + 5);
      }
  }
+ #endif
  
  NORETURN void fnoreturn (void);
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-2.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/infinite-recursion-pr108524-2.c	Sun Dec 14 22:32:08 2025
*************** void test_switch_2 (int i)
*** 107,113 ****
        test_switch_2 (1776);
        break;
      default:
!       test_switch_2 (1492); /* { dg-warning "infinite recursion" "" { xfail *-*-* } } */
        break;
      }
  }
--- 107,113 ----
        test_switch_2 (1776);
        break;
      default:
!       test_switch_2 (1492); /* { dg-warning "infinite recursion" } */
        break;
      }
  }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/invalid-shift-1.c	Sun Dec 14 22:32:08 2025
*************** _dl_hwcaps_subdirs_build_bitmask (int su
*** 12,21 ****
  
    uint32_t mask;
    if (subdirs != 32)
!     mask = (1 << subdirs) - 1; /* { dg-message "shift by count \\('33'\\) >= precision of type \\('\[0-9\]+'\\)" "" { xfail c++26 } } */
    else
      mask = -1;
!   return mask ^ ((1U << inactive) - 1); /* { dg-message "shift by negative count \\('-1'\\)" "" { xfail c++26 } } */
  }
  
  void f1 (int);
--- 12,21 ----
  
    uint32_t mask;
    if (subdirs != 32)
!     mask = (1 << subdirs) - 1; /* { dg-message "shift by count \\('33'\\) >= precision of type \\('\[0-9\]+'\\)" } */
    else
      mask = -1;
!   return mask ^ ((1U << inactive) - 1); /* { dg-message "shift by negative count \\('-1'\\)" } */
  }
  
  void f1 (int);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/ipa-callbacks-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/ipa-callbacks-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/ipa-callbacks-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/ipa-callbacks-1.c	Sun Dec 14 22:32:08 2025
***************
*** 0 ****
--- 1,39 ----
+ /* Regression test for ICE seen handling callbacks.  */
+ 
+ int
+ middle (int flag,
+ 	int (*on_success) (),
+ 	int (*on_failure) ())
+ {
+   if (flag)
+     return on_success ();
+   else
+     return on_failure ();
+ }
+ 
+ static int
+ success_callback ()
+ {
+   return 0;
+ }
+ 
+ static int
+ failure_callback_x ()
+ {
+   return -1;
+ }
+ 
+ static int
+ failure_callback_y ()
+ {
+   return -1;
+ }
+ 
+ int
+ outer (int flag_a, int flag_b)
+ {
+   return middle (flag_a, success_callback,
+ 		 (flag_b
+ 		  ? failure_callback_x
+ 		  : failure_callback_y));
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/loop-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/loop-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/loop-4.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/loop-4.c	Sun Dec 14 22:32:08 2025
*************** void test(void)
*** 11,18 ****
--- 11,20 ----
    for (i=0; i<256; i++) {
  
      __analyzer_eval (i >= 0); /* { dg-warning "TRUE" } */
+     /* { dg-bogus "UNKNOWN" "unknown" { xfail *-*-* } .-1 } */
  
      __analyzer_eval (i < 256); /* { dg-warning "TRUE" } */
+     /* { dg-bogus "UNKNOWN" "unknown" { xfail *-*-* } .-1 } */
  
      for (j=0; j<256; j++) {
  
*************** void test(void)
*** 23,29 ****
        /* { dg-bogus "UNKNOWN" "unknown" { xfail *-*-* } .-1 } */
        /* TODO(xfail^^^): should report TRUE twice. */
  
!       __analyzer_dump_exploded_nodes (0); /* { dg-warning "3 processed enodes" } */
  
        for (k=0; k<256; k++) {
  
--- 25,31 ----
        /* { dg-bogus "UNKNOWN" "unknown" { xfail *-*-* } .-1 } */
        /* TODO(xfail^^^): should report TRUE twice. */
  
!       __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
  
        for (k=0; k<256; k++) {
  
*************** void test(void)
*** 33,39 ****
  	__analyzer_eval (k < 256); /* { dg-warning "TRUE" "true" } */
  	/* { dg-bogus "UNKNOWN" "unknown" { xfail *-*-* } .-1 } */
  
! 	__analyzer_dump_exploded_nodes (0); /* { dg-warning "4 processed enodes" } */
        }
      }
    }
--- 35,41 ----
  	__analyzer_eval (k < 256); /* { dg-warning "TRUE" "true" } */
  	/* { dg-bogus "UNKNOWN" "unknown" { xfail *-*-* } .-1 } */
  
! 	__analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
        }
      }
    }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/loop-n-down-to-1-by-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/loop-n-down-to-1-by-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/loop-n-down-to-1-by-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/loop-n-down-to-1-by-1.c	Sun Dec 14 22:32:08 2025
*************** void test(int n)
*** 24,31 ****
        __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
    }
  
!   __analyzer_eval (i <= 0); /* { dg-warning "TRUE" "true" } */
! 
  
    __analyzer_eval (i == 0); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
    /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */
--- 24,31 ----
        __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
    }
  
!   __analyzer_eval (i <= 0); /* { dg-warning "TRUE" "true" { xfail *-*-* } } */
!   /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
  
    __analyzer_eval (i == 0); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
    /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/loop.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/loop.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/loop.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/loop.c	Sun Dec 14 22:32:08 2025
*************** void test(void)
*** 11,17 ****
        /* (should report TRUE twice). */
  
        __analyzer_eval (i == 0); /* { dg-warning "TRUE" } */
!       /* { dg-warning "FALSE" "2nd" { xfail *-*-* } .-1 } */
        /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-2 } */
        /* TODO(xfail^^^): ideally we ought to figure out i > 0 after 1st iteration.  */
  
--- 11,17 ----
        /* (should report TRUE twice). */
  
        __analyzer_eval (i == 0); /* { dg-warning "TRUE" } */
!       /* { dg-warning "FALSE" "2nd" { target *-*-* } .-1 } */
        /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-2 } */
        /* TODO(xfail^^^): ideally we ought to figure out i > 0 after 1st iteration.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/out-of-bounds-coreutils.c	Sun Dec 14 22:32:08 2025
***************
*** 3,9 ****
  void add_zero_terminator (char *buf)
  {
    char *end = buf;
!   while (end++); /* TODO: arguably we should report this.  */
    if (buf < end)
      end[-1] = '\0';
  }
--- 3,9 ----
  void add_zero_terminator (char *buf)
  {
    char *end = buf;
!   while (end++); /* { dg-warning "infinite loop" } */
    if (buf < end)
      end[-1] = '\0';
  }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/paths-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/paths-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/paths-4.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/paths-4.c	Sun Dec 14 22:32:08 2025
*************** int test_2 (struct state *s)
*** 32,53 ****
        switch (s->mode) /* { dg-message "if it ever follows 'default:' branch, it will always do so\.\.\." } */
  	{
  	case 0:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
  	  do_stuff (s, 0);
  	  break;
  	case 1:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  	  do_stuff (s, 17);
  	  break;
  	case 2:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  	  do_stuff (s, 5);
  	  break;
  	case 3:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  	  return 42;
  	case 4:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
  	  return -3;
  	}
      }
--- 32,53 ----
        switch (s->mode) /* { dg-message "if it ever follows 'default:' branch, it will always do so\.\.\." } */
  	{
  	case 0:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
  	  do_stuff (s, 0);
  	  break;
  	case 1:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
  	  do_stuff (s, 17);
  	  break;
  	case 2:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
  	  do_stuff (s, 5);
  	  break;
  	case 3:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
  	  return 42;
  	case 4:
! 	  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
  	  return -3;
  	}
      }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr94362-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr94362-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr94362-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr94362-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
- /* { dg-additional-options "-Wno-analyzer-too-complex" } */
- /* TODO: remove the need for -Wno-analyzer-too-complex.  */
- 
  typedef struct evp_pkey_asn1_method_st EVP_PKEY_ASN1_METHOD;
  typedef struct engine_st ENGINE;
  struct stack_st_EVP_PKEY_ASN1_METHOD;
--- 1,3 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr94851-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr94851-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr94851-2.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr94851-2.c	Sun Dec 14 22:32:08 2025
*************** int pamark(void) {
*** 46,52 ****
      if (curbp->b_amark == (AMARK *)NULL)
        curbp->b_amark = p;
      else
!       last->m_next = p; /* { dg-warning "dereference of NULL 'last'" "deref" } */
    }
  
    p->m_name = (char)c; /* { dg-bogus "leak of 'p'" "bogus leak" } */
--- 46,52 ----
      if (curbp->b_amark == (AMARK *)NULL)
        curbp->b_amark = p;
      else
!       last->m_next = p; /* { dg-warning "dereference of NULL 'last'" "deref" { xfail *-*-* } } */
    }
  
    p->m_name = (char)c; /* { dg-bogus "leak of 'p'" "bogus leak" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr96650-1-notrans.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr96650-1-notrans.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr96650-1-notrans.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr96650-1-notrans.c	Sun Dec 14 22:32:08 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-additional-options "-O2 -fno-analyzer-transitivity" } */
+ /* { dg-additional-options "-Wno-analyzer-too-complex" } */
  
  int *wf;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr98628.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr98628.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr98628.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr98628.c	Sun Dec 14 22:32:08 2025
***************
*** 1,4 ****
! /* { dg-additional-options "-O1" } */
  
  void foo(void *);
  struct chanset_t {
--- 1,4 ----
! /* { dg-additional-options "-O1 -Wno-analyzer-too-complex" } */
  
  void foo(void *);
  struct chanset_t {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr99774-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr99774-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pr99774-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pr99774-1.c	Sun Dec 14 22:32:08 2025
***************
*** 2,8 ****
     Reduced from
       https://git.qemu.org/?p=qemu.git;a=blob;f=subprojects/libvhost-user/libvhost-user.c;h=fab7ca17ee1fb27bcfc338527d1aeb9f923aade5;hb=HEAD#l1184
     which is licensed under GNU GPLv2 or later. */
! 
  typedef unsigned char uint8_t;
  typedef unsigned short uint16_t;
  typedef unsigned long uint64_t;
--- 2,8 ----
     Reduced from
       https://git.qemu.org/?p=qemu.git;a=blob;f=subprojects/libvhost-user/libvhost-user.c;h=fab7ca17ee1fb27bcfc338527d1aeb9f923aade5;hb=HEAD#l1184
     which is licensed under GNU GPLv2 or later. */
! /* { dg-additional-options "-Wno-analyzer-too-complex" } */
  typedef unsigned char uint8_t;
  typedef unsigned short uint16_t;
  typedef unsigned long uint64_t;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pragma-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pragma-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/pragma-2.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/pragma-2.c	Sun Dec 14 22:32:08 2025
*************** void test (void)
*** 48,54 ****
  	  *pp = malloc (16); /* { dg-warning "leak" } */
  	  break;
  	case 1:
! 	  free (*pp);
  	  break;
  	case 2:
  	  /* no-op.  */
--- 48,54 ----
  	  *pp = malloc (16); /* { dg-warning "leak" } */
  	  break;
  	case 1:
! 	  free (*pp); /* { dg-warning "double-free" } */
  	  break;
  	case 2:
  	  /* no-op.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/realloc-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/realloc-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/realloc-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/realloc-1.c	Sun Dec 14 22:32:08 2025
*************** void test_10 (char *s, int n)
*** 93,96 ****
  {
    __builtin_realloc(s, n); /* { dg-warning "ignoring return value of '__builtin_realloc' declared with attribute 'warn_unused_result'" "" { target c } } */
    /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )*unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */
! } /* { dg-warning "leak" } */
--- 93,96 ----
  {
    __builtin_realloc(s, n); /* { dg-warning "ignoring return value of '__builtin_realloc' declared with attribute 'warn_unused_result'" "" { target c } } */
    /* { dg-warning "ignoring return value of 'void\\* __builtin_realloc\\(void\\*, (long )*unsigned int\\)' declared with attribute 'warn_unused_result'" "" { target c++ } .-1 } */
! } /* { dg-warning "leak" "" { target *-*-* } .-2 } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/sock-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/sock-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/sock-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/sock-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,4 ----
+ /* { dg-additional-options "-fno-exceptions" } */
  typedef unsigned int __u32;
  __extension__ typedef __signed__ long long __s64;
  __extension__ typedef unsigned long long __u64;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/sprintf-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/sprintf-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/sprintf-2.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/sprintf-2.c	Sun Dec 14 22:32:08 2025
***************
*** 3,9 ****
  
  extern int
  sprintf(char* dst, const char* fmt, ...)
!   __attribute__((__nothrow__));
  
  #include "../../gcc.dg/analyzer/analyzer-decls.h"
  
--- 3,10 ----
  
  extern int
  sprintf(char* dst, const char* fmt, ...)
!   __attribute__((__nothrow__))
!   __attribute__((nonnull (1, 2)));
  
  #include "../../gcc.dg/analyzer/analyzer-decls.h"
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/sprintf-concat.c	Sun Dec 14 22:32:08 2025
*************** test_2 (const char *a, const char *b)
*** 31,35 ****
    char *p = (char *) malloc (sz); /* { dg-message "allocated here" } */
    if (!p)
      return;
!   sprintf (p, "%s/%s", a, b); /* { dg-warning "leak of 'p' " } */
! }
--- 31,35 ----
    char *p = (char *) malloc (sz); /* { dg-message "allocated here" } */
    if (!p)
      return;
!   sprintf (p, "%s/%s", a, b);
! } /* { dg-warning "leak of 'p' " } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/stdarg-sentinel-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,5 ****
- /* { dg-additional-options "-Wno-analyzer-too-complex" } */
- 
  #define NULL ((void *)0)
  
  void test_sentinel (int arg, ...)
--- 1,3 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/strncpy-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/strncpy-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/strncpy-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/strncpy-1.c	Sun Dec 14 22:32:08 2025
***************
*** 7,13 ****
  
  typedef __SIZE_TYPE__ size_t;
  
! extern char *strncpy (char *dst, const char *src, size_t count);
  
  char *
  test_passthrough (char *dst, const char *src, size_t count)
--- 7,15 ----
  
  typedef __SIZE_TYPE__ size_t;
  
! extern char *
! strncpy (char *dst, const char *src, size_t count)
!   __attribute__ ((nonnull (1, 2)));
  
  char *
  test_passthrough (char *dst, const char *src, size_t count)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/strstr-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/strstr-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/analyzer/strstr-1.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/analyzer/strstr-1.c	Sun Dec 14 22:32:08 2025
***************
*** 4,10 ****
  
  #include "../../gcc.dg/analyzer/analyzer-decls.h"
  
! extern char *strstr (const char* str, const char* substr);
  
  char *
  test_passthrough (const char* str, const char* substr)
--- 4,12 ----
  
  #include "../../gcc.dg/analyzer/analyzer-decls.h"
  
! extern char *
! strstr (const char* str, const char* substr)
!   __attribute__ ((nonnull));
  
  char *
  test_passthrough (const char* str, const char* substr)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/cpp/openmp-define-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/cpp/openmp-define-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/cpp/openmp-define-3.c	Sun Dec  7 22:32:09 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/cpp/openmp-define-3.c	Sun Dec 14 22:32:08 2025
***************
*** 6,11 ****
  # error _OPENMP not defined
  #endif
  
! #if _OPENMP != 201511
  # error _OPENMP defined to wrong value
  #endif
--- 6,11 ----
  # error _OPENMP not defined
  #endif
  
! #if _OPENMP != 202111
  # error _OPENMP defined to wrong value
  #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/goacc-gomp/nesting-fail-1.c	Sun Dec 14 22:32:08 2025
*************** f_omp (void)
*** 118,124 ****
        ;
    }
  
! #pragma omp master
    {
  #pragma acc parallel /* { dg-error "OpenACC construct inside of non-OpenACC region" } */
      ;
--- 118,124 ----
        ;
    }
  
! #pragma omp masked
    {
  #pragma acc parallel /* { dg-error "OpenACC construct inside of non-OpenACC region" } */
      ;
*************** f_acc_parallel (void)
*** 229,235 ****
  
  #pragma acc parallel
    {
! #pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
--- 229,235 ----
  
  #pragma acc parallel
    {
! #pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
*************** f_acc_kernels (void)
*** 293,299 ****
  
  #pragma acc kernels
    {
! #pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
--- 293,299 ----
  
  #pragma acc kernels
    {
! #pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
*************** f_acc_serial (void)
*** 357,363 ****
  
  #pragma acc serial
    {
! #pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
--- 357,363 ----
  
  #pragma acc serial
    {
! #pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
*************** f_acc_data (void)
*** 421,427 ****
  
  #pragma acc data
    {
! #pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
--- 421,427 ----
  
  #pragma acc data
    {
! #pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC region" } */
      ;
    }
  
*************** f_acc_loop (void)
*** 492,498 ****
  #pragma acc loop
    for (i = 0; i < 2; ++i)
      {
! #pragma omp master /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
        ;
      }
  
--- 492,498 ----
  #pragma acc loop
    for (i = 0; i < 2; ++i)
      {
! #pragma omp masked /* { dg-error "non-OpenACC construct inside of OpenACC routine" } */
        ;
      }
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/goacc-gomp/pr93465-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,9 ****
! #pragma omp declare target
  #pragma acc routine seq /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f1\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  void f1 (void) {}
  #pragma omp end declare target
  
! #pragma omp declare target
  void f1 (void);
  
  #pragma acc routine seq /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f1\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
--- 1,9 ----
! #pragma omp begin declare target
  #pragma acc routine seq /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f1\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  void f1 (void) {}
  #pragma omp end declare target
  
! #pragma omp begin declare target
  void f1 (void);
  
  #pragma acc routine seq /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f1\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
*************** void f1 (void);
*** 11,22 ****
  
  
  
! #pragma omp declare target
  #pragma acc routine /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f2\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  extern void f2 (void);
  #pragma omp end declare target
  
! #pragma omp declare target
  extern void f2 (void);
  #pragma omp end declare target
  
--- 11,22 ----
  
  
  
! #pragma omp begin declare target
  #pragma acc routine /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f2\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  extern void f2 (void);
  #pragma omp end declare target
  
! #pragma omp begin declare target
  extern void f2 (void);
  #pragma omp end declare target
  
*************** extern void f2 (void);
*** 24,35 ****
  extern void f2 (void);
  
  
! #pragma omp declare target
  #pragma acc routine gang /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f3\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  void f3 (void);
  #pragma omp end declare target
  
! #pragma omp declare target
  void f3 (void) {}
  #pragma omp end declare target
  
--- 24,35 ----
  extern void f2 (void);
  
  
! #pragma omp begin declare target
  #pragma acc routine gang /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f3\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  void f3 (void);
  #pragma omp end declare target
  
! #pragma omp begin declare target
  void f3 (void) {}
  #pragma omp end declare target
  
*************** void f3 (void) {}
*** 37,49 ****
  
  
  /* Surprisingly, this diagnosis also works for '#pragma acc routine' first,
!    followed by '#pragma omp declare target'; the latter gets applied first.  */
  
  
  #pragma acc routine /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f4\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  extern void f4 (void);
  
! #pragma omp declare target
  extern void f4 (void);
  #pragma omp end declare target
  
--- 37,49 ----
  
  
  /* Surprisingly, this diagnosis also works for '#pragma acc routine' first,
!    followed by '#pragma omp begin declare target'; the latter gets applied first.  */
  
  
  #pragma acc routine /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f4\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  extern void f4 (void);
  
! #pragma omp begin declare target
  extern void f4 (void);
  #pragma omp end declare target
  
*************** extern void f4 (void);
*** 51,56 ****
  #pragma acc routine gang /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f5\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  void f5 (void) {}
  
! #pragma omp declare target
  extern void f5 (void);
  #pragma omp end declare target
--- 51,56 ----
  #pragma acc routine gang /* { dg-error "cannot apply '#pragma acc routine' to '\(void \)?f5\(\\(\\)\)?', which has also been marked with an OpenMP 'declare target' directive" } */
  void f5 (void) {}
  
! #pragma omp begin declare target
  extern void f5 (void);
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/52-deps.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/52-deps.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/52-deps.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/52-deps.c	Sun Dec 14 22:32:08 2025
***************
*** 0 ****
--- 1,28 ----
+ // tests for deprecation of 'to' clause with 'declare target' and the '-'
+ // operator when used in reductions.
+ 
+ int x = 24;
+ 
+ #pragma omp declare target to(x)	// { dg-warning "'to' clause with 'declare target' deprecated since OpenMP 5.2, use 'enter' \\\[-Wdeprecated-openmp\\\]" }
+ 
+ int foo(int x)
+ {
+   return x + 1;
+ }
+ #pragma omp declare target to(foo)	// { dg-warning "'to' clause with 'declare target' deprecated since OpenMP 5.2, use 'enter' \\\[-Wdeprecated-openmp\\\]" }
+ 
+ int
+ main()
+ {
+   int y;
+   int result = 0;
+ 
+   #pragma omp target map(from:y)
+   y = foo(x);
+ 
+   #pragma omp parallel for reduction(-: result) // { dg-warning "'-' operator for reductions deprecated in OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" }
+   for (int i = 0; i < 8; ++i)
+     result -= i;
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/Wparentheses-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/Wparentheses-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/Wparentheses-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/Wparentheses-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,5 ****
  /* PR c/70436 */
! /* { dg-additional-options "-Wparentheses" } */
  
  int a, b, c;
  void bar (void);
--- 1,5 ----
  /* PR c/70436 */
! /* { dg-additional-options "-Wparentheses -Wno-deprecated-openmp" } */
  
  int a, b, c;
  void bar (void);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/Wparentheses-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/Wparentheses-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/Wparentheses-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/Wparentheses-2.c	Sun Dec 14 22:32:08 2025
***************
*** 1,5 ****
  /* PR c/70436 */
! /* { dg-additional-options "-Wparentheses" } */
  
  int a, b, c;
  void bar (void);
--- 1,5 ----
  /* PR c/70436 */
! /* { dg-additional-options "-Wparentheses -Wno-deprecated-openmp" } */
  
  int a, b, c;
  void bar (void);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/Wparentheses-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/Wparentheses-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/Wparentheses-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/Wparentheses-3.c	Sun Dec 14 22:32:08 2025
***************
*** 1,5 ****
  /* PR c/70436 */
! /* { dg-additional-options "-Wparentheses -fno-openmp" } */
  
  int a, b, c;
  void bar (void);
--- 1,5 ----
  /* PR c/70436 */
! /* { dg-additional-options "-Wparentheses -fno-openmp -Wno-deprecated-openmp" } */
  
  int a, b, c;
  void bar (void);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/affinity-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/affinity-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/affinity-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/affinity-3.c	Sun Dec 14 22:32:08 2025
***************
*** 1,5 ****
  /* { dg-additional-options "-Wno-volatile" { target c++ } } */
! 
  int arr[64], arr2[64];
  struct S { int a[4]; } k;
  short arr4[4];
--- 1,5 ----
  /* { dg-additional-options "-Wno-volatile" { target c++ } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int arr[64], arr2[64];
  struct S { int a[4]; } k;
  short arr4[4];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/allocate-18.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/allocate-18.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/allocate-18.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/allocate-18.c	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef enum omp_allocator_handle_t
  #if __cplusplus >= 201103L
  : __UINTPTR_TYPE__
*************** void test0 ()
*** 24,30 ****
    #ifndef __cplusplus
      _Static_assert (_Alignof(A1) == _Alignof(B1), "wrong alignment");
    #elif __cplusplus >= 201103L
!      static_assert (alignof(A1) == alignof(B1), "wrong alignment"); 
    #endif
  }
  
--- 25,31 ----
    #ifndef __cplusplus
      _Static_assert (_Alignof(A1) == _Alignof(B1), "wrong alignment");
    #elif __cplusplus >= 201103L
!      static_assert (alignof(A1) == alignof(B1), "wrong alignment");
    #endif
  }
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
! 
  #define N 100
  
  void
--- 1,6 ----
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  void
*************** f (int a[], int b[], int c[])
*** 26,32 ****
        otherwise (teams loop)
        when (device={arch("nvptx")}: parallel loop))]] /* { dg-error "'otherwise' or 'default' clause must appear last" } */
      for (i = 0; i < N; i++) c[i] = a[i] * b[i];
!   
    [[omp::directive (metadirective
        when (device={arch("nvptx")} parallel loop) /* { dg-error "expected ':' before 'parallel'" } */
        default (teams loop))]]
--- 26,32 ----
        otherwise (teams loop)
        when (device={arch("nvptx")}: parallel loop))]] /* { dg-error "'otherwise' or 'default' clause must appear last" } */
      for (i = 0; i < N; i++) c[i] = a[i] * b[i];
! 
    [[omp::directive (metadirective
        when (device={arch("nvptx")} parallel loop) /* { dg-error "expected ':' before 'parallel'" } */
        default (teams loop))]]
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-2.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
! 
  #define N 100
  
  int
--- 1,6 ----
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  int
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c	Sun Dec 14 22:32:08 2025
***************
*** 1,7 ****
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! 
  #define N 100
  
  void
--- 1,7 ----
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  void
*************** f (int x[], int y[], int z[])
*** 9,15 ****
  {
    int i;
  
!   [[omp::sequence (directive (target map(to: x, y) map(from: z)),  /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } }  */ 
  		   directive (metadirective
  			      when (device={arch("nvptx")}: teams loop)
  			      default (parallel loop)))]]
--- 9,15 ----
  {
    int i;
  
!   [[omp::sequence (directive (target map(to: x, y) map(from: z)),  /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } }  */
  		   directive (metadirective
  			      when (device={arch("nvptx")}: teams loop)
  			      default (parallel loop)))]]
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-4.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-4.c	Sun Dec 14 22:32:08 2025
***************
*** 2,8 ****
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
  /* { dg-additional-options "-fdump-tree-original" } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! 
  #define N 100
  
  #pragma omp declare target
--- 2,8 ----
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
  /* { dg-additional-options "-fdump-tree-original" } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-5.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-5.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-5.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-5.c	Sun Dec 14 22:32:08 2025
***************
*** 1,7 ****
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
  /* { dg-additional-options "-fdump-tree-original" } */
! 
  #define N 100
  
  void
--- 1,7 ----
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
  /* { dg-additional-options "-fdump-tree-original" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-8.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-8.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-8.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/attrs-metadirective-8.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
! 
  #define N 256
  
  void
--- 1,6 ----
  /* { dg-do compile { target { c || c++11 } } } */
  /* { dg-options "-fopenmp -std=c23" { target { c } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 256
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/begin-declare-target-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/begin-declare-target-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/begin-declare-target-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/begin-declare-target-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  extern int a;
  #pragma omp begin declare target device_type (host)
  int b;
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern int a;
  #pragma omp begin declare target device_type (host)
  int b;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/begin-declare-target-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/begin-declare-target-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/begin-declare-target-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/begin-declare-target-2.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  extern int a;
  #pragma omp begin declare target
  #pragma omp declare target to (a)
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern int a;
  #pragma omp begin declare target
  #pragma omp declare target to (a)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/cancel-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/cancel-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/cancel-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/cancel-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-fopenmp" } */
  
  void
  f1 (void)
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -Wno-deprecated-openmp" } */
  
  void
  f1 (void)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clause-dups-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clause-dups-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clause-dups-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clause-dups-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  void f0 (void);
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clauses-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clauses-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clauses-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clauses-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
! 
  typedef enum omp_allocator_handle_t
  #if __cplusplus >= 201103L
  : __UINTPTR_TYPE__
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp -Wunknown-pragmas" }
  typedef enum omp_allocator_handle_t
  #if __cplusplus >= 201103L
  : __UINTPTR_TYPE__
*************** bar (int d, int m, int i1, int i2, int i
*** 362,368 ****
    for (int i = 0; i < 64; i++)
      ll++;
    #pragma omp taskgroup task_reduction (+:r2) allocate (r2)
!   #pragma omp mastked taskloop \
      private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp) \
      reduction(default, +:r) in_reduction(+:r2) filter (d)
    for (int i = 0; i < 64; i++)
--- 362,368 ----
    for (int i = 0; i < 64; i++)
      ll++;
    #pragma omp taskgroup task_reduction (+:r2) allocate (r2)
!   #pragma omp masked taskloop \
      private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp) \
      reduction(default, +:r) in_reduction(+:r2) filter (d)
    for (int i = 0; i < 64; i++)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clauses-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clauses-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clauses-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clauses-3.c	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  struct T { int a; int *b; };
  struct S { int *s; char u; struct T v; long x; };
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clauses-6.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clauses-6.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/clauses-6.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/clauses-6.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
! 
  typedef enum omp_allocator_handle_t
  #if __cplusplus >= 201103L
  : __UINTPTR_TYPE__
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef enum omp_allocator_handle_t
  #if __cplusplus >= 201103L
  : __UINTPTR_TYPE__
*************** omp_lock_hint_nonspeculative = omp_sync_
*** 30,36 ****
  omp_sync_hint_speculative = 0x8,
  omp_lock_hint_speculative = omp_sync_hint_speculative
  } omp_sync_hint_t;
!   
  typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
    char __omp_depend_t__[2 * sizeof (void *)];
  } omp_depend_t;
--- 30,36 ----
  omp_sync_hint_speculative = 0x8,
  omp_lock_hint_speculative = omp_sync_hint_speculative
  } omp_sync_hint_t;
! 
  typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
    char __omp_depend_t__[2 * sizeof (void *)];
  } omp_depend_t;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  int foo (void), bar (void);
  extern int a;
  int b;
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int foo (void), bar (void);
  extern int a;
  int b;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-2.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  extern int a;
  #pragma omp declare target
  #pragma omp declare target to (a)
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern int a;
  #pragma omp declare target
  #pragma omp declare target to (a)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-3.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  #pragma omp declare target
  int a[] = { 1, 2, 3 };
  extern int b[];			/* { dg-error "'b' in declare target directive does not have mappable type" } */
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int a[] = { 1, 2, 3 };
  extern int b[];			/* { dg-error "'b' in declare target directive does not have mappable type" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-4.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-4.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  void f1 (void) {}
  void f2 (void);
  #pragma omp declare target to (f1) device_type (any) to (f2)
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void f1 (void) {}
  void f2 (void);
  #pragma omp declare target to (f1) device_type (any) to (f2)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-5.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-5.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-5.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-5.c	Sun Dec 14 22:32:08 2025
***************
*** 1,2 ****
--- 1,3 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  void foo (void);	/* { dg-error "'#pragma omp declare target' without corresponding '#pragma omp end declare target'" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-7.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-7.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-7.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-7.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  #pragma omp declare target device_type (any)		/* { dg-error "directive with only 'device_type' or 'indirect' clauses" } */
  
  void f1 (void) {}
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target device_type (any)		/* { dg-error "directive with only 'device_type' or 'indirect' clauses" } */
  
  void f1 (void) {}
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  extern int a, b;
  #define X 1
  #define Y 0
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern int a, b;
  #define X 1
  #define Y 0
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-target-indirect-2.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
! 
  #pragma omp begin declare target indirect
  void fn1 (void) { }
  #pragma omp end declare target
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp begin declare target indirect
  void fn1 (void) { }
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-1.c	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int foo (int, int, int *);
  int bar (int, int, int *);
  int foobar (int, int, int *);
*************** corge (void)
*** 43,49 ****
    for (i = 0; i < 3; i++)
      waldo (7);
    #pragma omp parallel
!   #pragma omp master    
    waldo (8);
  }
  
--- 44,50 ----
    for (i = 0; i < 3; i++)
      waldo (7);
    #pragma omp parallel
!   #pragma omp master
    waldo (8);
  }
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-10.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-10.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-10.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-10.c	Sun Dec 14 22:32:08 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-foffload=disable -fdump-tree-gimple" } */
  /* { dg-additional-options "-mavx512bw" { target { i?86-*-* x86_64-*-* } } } */
! 
  #undef i386
  void f01 (void);
  #pragma omp declare variant (f01) match (device={isa(avx512f,avx512bw)})
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-foffload=disable -fdump-tree-gimple" } */
  /* { dg-additional-options "-mavx512bw" { target { i?86-*-* x86_64-*-* } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #undef i386
  void f01 (void);
  #pragma omp declare variant (f01) match (device={isa(avx512f,avx512bw)})
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-2.c	Sun Dec 14 22:32:08 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  void f0 (void);
  void f1 (void);
  #pragma omp declare variant	/* { dg-error "expected '\\(' before end of line" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-8.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-8.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/declare-variant-8.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/declare-variant-8.c	Sun Dec 14 22:32:08 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! 
  void f01 (void);
  #pragma omp declare variant (f01) match (user={condition(6 == 7)},implementation={vendor(gnu)})
  void f02 (void);
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void f01 (void);
  #pragma omp declare variant (f01) match (user={condition(6 == 7)},implementation={vendor(gnu)})
  void f02 (void);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/defaultmap-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/defaultmap-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/defaultmap-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/defaultmap-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! 
  struct S { int s; };
  void foo (char *);
  void bar (int, char *, struct S, int *);
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S { int s; };
  void foo (char *);
  void bar (int, char *, struct S, int *);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/defaultmap-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/defaultmap-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/defaultmap-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/defaultmap-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  struct S { int s; };
  void foo (char *);
  void bar (int, char *, struct S, int *);
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S { int s; };
  void foo (char *);
  void bar (int, char *, struct S, int *);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/depend-iterator-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-additional-options "-Wno-volatile" { target c++ } } */
! 
  int arr[64], arr2[64];
  struct S { int a[4]; } k;
  short arr4[4];
--- 1,5 ----
  /* { dg-additional-options "-Wno-volatile" { target c++ } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int arr[64], arr2[64];
  struct S { int a[4]; } k;
  short arr4[4];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/depend-iterator-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int a, b[64];
  struct S { int c; } *d, *e;
  struct T;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/depobj-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/depobj-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/depobj-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/depobj-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
    char __omp_depend_t__[2 * sizeof (void *)];
  } omp_depend_t;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/directive-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/directive-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/directive-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/directive-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int thr;
  #pragma omp threadprivate, (thr)		/* { dg-error "expected '\\\(' before ',' token" } */
  						/* { dg-error "expected end of line before ',' token" "" { target c++ } .-1 } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/distribute-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/distribute-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/distribute-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/distribute-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int s1, s2, s3, s4, s5, s6, s7, s8;
  #pragma omp declare target (s1, s2, s3, s4, s5, s6, s7, s8)
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  void
  foo (void)
  {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* PR middle-end/87649 */
! 
  void
  foo (void)
  {
--- 1,5 ----
  /* PR middle-end/87649 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  void
  foo (void)
  {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-4.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-4.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* PR middle-end/98205 */
! 
  void baz (int) __attribute__((noreturn));
  
  void
--- 1,5 ----
  /* PR middle-end/98205 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void baz (int) __attribute__((noreturn));
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-8.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-8.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/doacross-8.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/doacross-8.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/108685 */
  /* { dg-do compile } */
! 
  void
  foo (int a)
  {
--- 1,6 ----
  /* PR middle-end/108685 */
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (int a)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/lastprivate-conditional-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,4 ****
! void
  foo (int *p)
  {
    int a = -1, b = -1, c = -1, d = -1, e = -1, f = -1, g = -1, h = -1;
--- 1,5 ----
! // { dg-additional-options "-Wno-deprecated-openmp" }
!   void
  foo (int *p)
  {
    int a = -1, b = -1, c = -1, d = -1, e = -1, f = -1, g = -1, h = -1;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/linear-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/linear-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/linear-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/linear-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  int i;
  
  #pragma omp declare simd linear (val (x) : 1) linear (y : 2)
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int i;
  
  #pragma omp declare simd linear (val (x) : 1) linear (y : 2)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/linear-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/linear-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/linear-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/linear-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  int i;
  
  #pragma omp declare simd linear (x : val, step (1)) linear (y : step (2))
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int i;
  
  #pragma omp declare simd linear (x : val, step (1)) linear (y : step (2))
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/linear-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/linear-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/linear-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/linear-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  int step (int);
  int val;
  #pragma omp declare simd linear (val (x) : step (1))	/* { dg-error "is neither constant nor a parameter" } */
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int step (int);
  int val;
  #pragma omp declare simd linear (val (x) : step (1))	/* { dg-error "is neither constant nor a parameter" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo (void);
  int v;
  #ifdef __cplusplus
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #ifdef __cplusplus
  extern "C" {
  #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #ifdef __cplusplus
  extern "C" {
  #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-4.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-4.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int r, l;
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-6.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-6.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/loop-6.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/loop-6.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int bar (int);
  int baz (int *);
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/map-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/map-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/map-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/map-1.c	Sun Dec 14 22:32:09 2025
***************
*** 3,9 ****
  /* See also corresponding OpenMP C++ variant: '../../g++.dg/gomp/map-1.C'.  */
  
  /* See also corresponding OpenACC variant: '../goacc/data-clause-1.c'.  */
! 
  extern int a[][10], a2[][10];
  int b[10], c[10][2], d[10], e[10], f[10];
  int b2[10], c2[10][2], d2[10], e2[10], f2[10];
--- 3,9 ----
  /* See also corresponding OpenMP C++ variant: '../../g++.dg/gomp/map-1.C'.  */
  
  /* See also corresponding OpenACC variant: '../goacc/data-clause-1.c'.  */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern int a[][10], a2[][10];
  int b[10], c[10][2], d[10], e[10], f[10];
  int b2[10], c2[10][2], d2[10], e2[10], f2[10];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/map-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/map-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/map-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/map-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S { int i : 1; int j : 4; long long k : 25; };
  void bar (struct S, int);
  #pragma omp declare target to (bar)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/map-6.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/map-6.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/map-6.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/map-6.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-original" } */
! 
  void
  foo (void)
  {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-original" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
*************** foo (void)
*** 29,41 ****
    ; /* { dg-error "'map' clause with map-type modifier other than 'always', 'close', 'iterator', 'mapper' or 'present' before 'a'" "" { target c } .-1 }  */
  
  
!   #pragma omp target map (close a) /* { dg-error "'close' undeclared" "" { target c } } */ 
!   /* { dg-error "'close' was not declared in this scope" "" { target c++ } .-1 } */ 
    /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
    ;
  
    #pragma omp target map (always a) /* { dg-error "'always' undeclared" "" { target c } } */
!   /* { dg-error "'always' was not declared in this scope" "" { target c++ } .-1 } */ 
    /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
    ;
  
--- 29,41 ----
    ; /* { dg-error "'map' clause with map-type modifier other than 'always', 'close', 'iterator', 'mapper' or 'present' before 'a'" "" { target c } .-1 }  */
  
  
!   #pragma omp target map (close a) /* { dg-error "'close' undeclared" "" { target c } } */
!   /* { dg-error "'close' was not declared in this scope" "" { target c++ } .-1 } */
    /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
    ;
  
    #pragma omp target map (always a) /* { dg-error "'always' undeclared" "" { target c } } */
!   /* { dg-error "'always' was not declared in this scope" "" { target c++ } .-1 } */
    /* { dg-error "expected '\\)' before 'a'" "" { target *-*-* } .-2 } */
    ;
  
*************** foo (void)
*** 141,150 ****
    #pragma omp target exit data map(present,always,close,delete: a) map(close,present,always,release:b) map(always close present,from:b1)
  
    int close = 0;
!   #pragma omp target map (close) 
    ;
  
!   #pragma omp target map (close a) /* { dg-error "expected '\\)' before 'a'" } */ 
    ;
  
    int always = 0;
--- 141,150 ----
    #pragma omp target exit data map(present,always,close,delete: a) map(close,present,always,release:b) map(always close present,from:b1)
  
    int close = 0;
!   #pragma omp target map (close)
    ;
  
!   #pragma omp target map (close a) /* { dg-error "expected '\\)' before 'a'" } */
    ;
  
    int always = 0;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/master-combined-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/master-combined-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/master-combined-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/master-combined-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  void bar (int *);
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/master-combined-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/master-combined-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/master-combined-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/master-combined-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (int *a)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/master-construct-dep.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/master-construct-dep.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/master-construct-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/master-construct-dep.c	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,22 ----
+ // { dg-additional-options "-Wopenmp" }
+ int
+ main()
+ {
+   int x = 0;
+   #pragma omp parallel
+   for (int i = 0; i < 8; ++i)
+   {
+     #pragma omp master // { dg-warning "'master' construct deprecated since OpenMP 5.1, use 'masked' \\\[-Wdeprecated-openmp\\\]" }
+     {
+       ++x;
+     }
+   }
+   for (int i = 0; i < 8; ++i)
+   {
+     #pragma omp parallel master // { dg-warning "'master' construct deprecated since OpenMP 5.1, use 'masked' \\\[-Wdeprecated-openmp\\\]" }
+     {
+       ++x;
+     }
+   }
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  #define N 100
  
  void
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  void
*************** f (int a[], int b[], int c[])
*** 35,41 ****
        otherwise (teams loop) \
        when (device={arch("nvptx")}: parallel loop) /* { dg-error "'otherwise' or 'default' clause must appear last" } */
      for (i = 0; i < N; i++) c[i] = a[i] * b[i];
!     
    #pragma omp metadirective \
        when (device={arch("nvptx")} parallel loop) /* { dg-error "expected ':' before 'parallel'" } */ \
        default (teams loop)
--- 35,41 ----
        otherwise (teams loop) \
        when (device={arch("nvptx")}: parallel loop) /* { dg-error "'otherwise' or 'default' clause must appear last" } */
      for (i = 0; i < N; i++) c[i] = a[i] * b[i];
! 
    #pragma omp metadirective \
        when (device={arch("nvptx")} parallel loop) /* { dg-error "expected ':' before 'parallel'" } */ \
        default (teams loop)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  #define N 100
  
  int
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  int
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-additional-options "-fdump-tree-gimple" } */
  
  #define N 100
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-additional-options "-fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  #define N 100
  
*************** f (int x[], int y[], int z[])
*** 8,14 ****
  {
    int i;
  
!   #pragma omp target map(to: x, y) map(from: z)  /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } }  */ 
      #pragma omp metadirective \
  	when (device={arch("nvptx")}: teams loop) \
  	default (parallel loop)
--- 8,14 ----
  {
    int i;
  
!   #pragma omp target map(to: x, y) map(from: z)  /* { dg-bogus "'target' construct with nested 'teams' construct contains directives outside of the 'teams' construct" "PR118694" { xfail offload_nvptx } }  */
      #pragma omp metadirective \
  	when (device={arch("nvptx")}: teams loop) \
  	default (parallel loop)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-4.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-4.c	Sun Dec 14 22:32:09 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-original" } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! 
  #define N 100
  
  #pragma omp declare target
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-original" } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-5.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-5.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-5.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-5.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-original" } */
! 
  #define N 100
  
  void
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-original" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-8.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-8.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-8.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-8.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  #define N 256
  
  void
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 256
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-construct.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-construct.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-construct.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-construct.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-foffload=disable -fdump-tree-optimized" } */
! 
  #include <stdlib.h>
  
  static void
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-foffload=disable -fdump-tree-optimized" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  static void
*************** static void doit (transform_fn *f, int n
*** 27,39 ****
    check (n, a, s);
  }
  
! /* Check various combinations for enforcing correct ordering of 
     construct matches.  */
  static void
  f1 (int n, double* a, double s)
  {
  #pragma omp target teams
! #pragma omp parallel  
  #pragma omp metadirective					\
    when (construct={target}					\
  	: for)							\
--- 27,39 ----
    check (n, a, s);
  }
  
! /* Check various combinations for enforcing correct ordering of
     construct matches.  */
  static void
  f1 (int n, double* a, double s)
  {
  #pragma omp target teams
! #pragma omp parallel
  #pragma omp metadirective					\
    when (construct={target}					\
  	: for)							\
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-device.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-device.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-device.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-device.c	Sun Dec 14 22:32:09 2025
***************
*** 1,7 ****
  /* { dg-do compile }  */
  /* { dg-additional-options "-foffload=disable -fdump-tree-optimized" } */
  /* { dg-additional-options "-DDEVICE_ARCH=x86_64 -DDEVICE_ISA=sse -msse" { target { x86 && lp64 } } } */
! 
  #include <stdlib.h>
  
  static void
--- 1,7 ----
  /* { dg-do compile }  */
  /* { dg-additional-options "-foffload=disable -fdump-tree-optimized" } */
  /* { dg-additional-options "-DDEVICE_ARCH=x86_64 -DDEVICE_ISA=sse -msse" { target { x86 && lp64 } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  static void
*************** f2 (int n, double* a, double s)
*** 53,59 ****
      a[i] = a[i] * s;
  }
  
! /* Check arch.  Either DEVICE_ARCH is defined by command-line option, 
     or we know it is not x86_64.  */
  #ifdef DEVICE_ARCH
  static void
--- 53,59 ----
      a[i] = a[i] * s;
  }
  
! /* Check arch.  Either DEVICE_ARCH is defined by command-line option,
     or we know it is not x86_64.  */
  #ifdef DEVICE_ARCH
  static void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,7 ****
  /* { dg-do compile }  */
  /* { dg-additional-options "-fdump-tree-optimized" } */
  /* { dg-additional-options "-DDEVICE_ARCH=x86_64 -DDEVICE_ISA=mmx -mmmx" { target { x86 && lp64 } } } */
! 
  #include <stdlib.h>
  
  static void
--- 1,7 ----
  /* { dg-do compile }  */
  /* { dg-additional-options "-fdump-tree-optimized" } */
  /* { dg-additional-options "-DDEVICE_ARCH=x86_64 -DDEVICE_ISA=mmx -mmmx" { target { x86 && lp64 } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  static void
*************** f2 (int n, double* a, double s)
*** 53,59 ****
      a[i] = a[i] * s;
  }
  
! /* Check arch.  Either DEVICE_ARCH is defined by command-line option, 
     or we know it is not x86_64.  */
  #ifdef DEVICE_ARCH
  static void
--- 53,59 ----
      a[i] = a[i] * s;
  }
  
! /* Check arch.  Either DEVICE_ARCH is defined by command-line option,
     or we know it is not x86_64.  */
  #ifdef DEVICE_ARCH
  static void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/metadirective-target-device-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-optimized" } */
! 
  /* In configurations without offloading configured, we can resolve many
     instances of the target_device context selector at gimplification time
     instead of waiting until late resolution.  */
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-optimized" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* In configurations without offloading configured, we can resolve many
     instances of the target_device context selector at gimplification time
     instead of waiting until late resolution.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/nesting-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/nesting-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/nesting-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/nesting-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/order-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/order-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/order-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/order-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,4 ****
! void
  f1 (int *a)
  {
    int i;
--- 1,5 ----
! // { dg-additional-options "-Wno-deprecated-openmp" }
!   void
  f1 (int *a)
  {
    int i;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/ordered-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/ordered-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/ordered-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/ordered-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  void
  foo (void)
  {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/ordered-5.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/ordered-5.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/ordered-5.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/ordered-5.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  void
  foo (void)
  {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr100902-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr100902-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr100902-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr100902-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* PR c/100902 */
! 
  void
  foo (int *ptr)
  {
--- 1,5 ----
  /* PR c/100902 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (int *ptr)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr102640.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr102640.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr102640.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr102640.c	Sun Dec 14 22:32:09 2025
***************
*** 6,12 ****
  /* { dg-final { scan-tree-dump-not "firstprivate\\\(var\[123]\\\)" "gimple" } } */
  /* { dg-final { scan-tree-dump-not ".omp_data_arr.\[0-9]*.var" "omplower" } } */
  /* { dg-final { scan-tree-dump-not ".omp_data_i->var" "omplower" } } */
! 
  void
  foo (void)
  {
--- 6,12 ----
  /* { dg-final { scan-tree-dump-not "firstprivate\\\(var\[123]\\\)" "gimple" } } */
  /* { dg-final { scan-tree-dump-not ".omp_data_arr.\[0-9]*.var" "omplower" } } */
  /* { dg-final { scan-tree-dump-not ".omp_data_i->var" "omplower" } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr106836.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr106836.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr106836.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr106836.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* PR c/106836 */
! 
  void
  foo (void)
  {
--- 1,5 ----
  /* PR c/106836 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr120180-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr120180-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr120180-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr120180-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  /* This test case checks that the inner metadirective is accepted as intervening
     code since it resolves to 'omp nothing'.  */
  
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* This test case checks that the inner metadirective is accepted as intervening
     code since it resolves to 'omp nothing'.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr61486-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr61486-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr61486-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr61486-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/61486 */
  /* { dg-do compile } */
! 
  #pragma omp declare target
  void dosomething (int *a, int n, int m);
  #pragma omp end declare target
--- 1,6 ----
  /* PR middle-end/61486 */
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  void dosomething (int *a, int n, int m);
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr85696.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr85696.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr85696.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr85696.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* PR c/85696 */
! 
  #ifndef __cplusplus
  void
  foo (int n, int a[][n])
--- 1,5 ----
  /* PR c/85696 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #ifndef __cplusplus
  void
  foo (int n, int a[][n])
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr85956.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr85956.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr85956.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr85956.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/85956 */
  /* { dg-do compile } */
! /* { dg-additional-options "-O2 -Wall" } */
  
  void
  foo (int n, void *p)
--- 1,6 ----
  /* PR middle-end/85956 */
  /* { dg-do compile } */
! /* { dg-additional-options "-O2 -Wall -Wno-deprecated-openmp" } */
  
  void
  foo (int n, void *p)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr88203-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr88203-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr88203-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr88203-1.c	Sun Dec 14 22:32:09 2025
***************
*** 2,8 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
  /* { dg-additional-options "-std=c++11" { target c++ } } */
! 
  void foo (const char *);
  #pragma omp declare target to (foo)
  
--- 2,8 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
  /* { dg-additional-options "-std=c++11" { target c++ } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo (const char *);
  #pragma omp declare target to (foo)
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr88203-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr88203-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr88203-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr88203-2.c	Sun Dec 14 22:32:09 2025
***************
*** 2,8 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-std=gnu99" { target c } } */
  /* { dg-additional-options "-std=gnu++11" { target c++ } } */
! 
  void foo (const char *, const char *);
  #pragma omp declare target to (foo)
  
--- 2,8 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-std=gnu99" { target c } } */
  /* { dg-additional-options "-std=gnu++11" { target c++ } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo (const char *, const char *);
  #pragma omp declare target to (foo)
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr88203-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr88203-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr88203-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr88203-3.c	Sun Dec 14 22:32:09 2025
***************
*** 2,8 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
  /* { dg-additional-options "-std=c++11" { target c++ } } */
! 
  void foo (const char *);
  #pragma omp declare target to (foo)
  
--- 2,8 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-std=c99" { target c } } */
  /* { dg-additional-options "-std=c++11" { target c++ } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo (const char *);
  #pragma omp declare target to (foo)
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr91401-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr91401-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr91401-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr91401-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  void f0 (void);
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr91987.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr91987.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr91987.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr91987.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* PR c++/91987 */
! 
  int bar (void);
  void baz (int *);
  #pragma omp declare target to (baz)
--- 1,5 ----
  /* PR c++/91987 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int bar (void);
  void baz (int *);
  #pragma omp declare target to (baz)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr98187.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr98187.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr98187.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr98187.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR c++/98187 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp-simd -O2 -fdump-tree-gimple" } */
  /* { dg-final { scan-tree-dump-times "#pragma omp simd" 17 "gimple" } } */
  
  void
--- 1,6 ----
  /* PR c++/98187 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp-simd -O2 -fdump-tree-gimple -Wno-deprecated-openmp" } */
  /* { dg-final { scan-tree-dump-times "#pragma omp simd" 17 "gimple" } } */
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int f00, f01, f02, f03, f04, f05, f06, f07, f08, f09;
  int f12, f13, f14, f15, f16, f17, f18, f19;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int f00, f01, f02, f03, f04, f05, f06, f07, f08, f09;
  int f12, f13, f14, f15, f16, f17, f18, f19;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-10.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-10.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-10.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-10.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int *r00, *r01, *r02, *r03, *r04, *r05;
  int *r13, *r14, *r15, *r16, *r17, *r18, *r19;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int *r00, *r01, *r02, *r03, *r04, *r05;
  int *r13, *r14, *r15, *r16, *r17, *r18, *r19;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-11.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-11.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-11.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-11.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int r00, r01, r02;
  
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int r00, r01, r02;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-12.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-12.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-12.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-12.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! 
  int
  foo (void)
  {
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-13.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-13.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-13.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-13.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int j00a, j00b, j01a, j01b, j02a, j02b, j03a, j03b;
  int j06a, j06b, j07a, j07b, j08a, j08b, j09a, j09b, j10a, j10b;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int j00a, j00b, j01a, j01b, j02a, j02b, j03a, j03b;
  int j06a, j06b, j07a, j07b, j08a, j08b, j09a, j09b, j10a, j10b;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-14.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-14.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-14.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-14.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int j00a, j00b, j01a, j01b, j02a, j02b, j03a, j03b, j04a, j04b;
  int j06a, j06b, j07a, j07b, j08a, j08b, j09a, j09b, j10a, j10b;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int j00a, j00b, j01a, j01b, j02a, j02b, j03a, j03b, j04a, j04b;
  int j06a, j06b, j07a, j07b, j08a, j08b, j09a, j09b, j10a, j10b;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int l00, l01, l02, l03, l04, l05, l06, l07;
  int l10, l11, l12, l13, l14, l15, l16, l17, l18;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int l00, l01, l02, l03, l04, l05, l06, l07;
  int l10, l11, l12, l13, l14, l15, l16, l17, l18;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int l00, l01, l02, l03, l04, l07, l08, l09;
  int l10, l11;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int l00, l01, l02, l03, l04, l07, l08, l09;
  int l10, l11;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-4.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-4.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int l00, l01, l05, l06, l07, l08;
  
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int l00, l01, l05, l06, l07, l08;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-5.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-5.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-5.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-5.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int j00, j01, j02, j03, j04, j06, j07, j08, j09;
  int j10;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int j00, j01, j02, j03, j04, j06, j07, j08, j09;
  int j10;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-6.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-6.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-6.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-6.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int j00, j01, j02, j03, j04, j06, j07, j08, j09;
  int j10;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int j00, j01, j02, j03, j04, j06, j07, j08, j09;
  int j10;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-7.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-7.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-7.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-7.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  void
  foo (void)
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  void
  foo (void)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-8.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-8.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-8.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-8.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int r00, r01, r02, r03, r04, r05;
  int r13, r14, r15, r16, r17, r18, r19;
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int r00, r01, r02, r03, r04, r05;
  int r13, r14, r15, r16, r17, r18, r19;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-9.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-9.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/pr99928-9.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/pr99928-9.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple" } */
  
  int r00[4], r01[4], r02[4], r03[4], r04[4], r05[4];
  int r13[4], r14[4], r15[4], r16[4], r17[4], r18[4], r19[4];
--- 1,6 ----
  /* PR middle-end/99928 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" } */
  
  int r00[4], r01[4], r02[4], r03[4], r04[4], r05[4];
  int r13[4], r14[4], r15[4], r16[4], r17[4], r18[4], r19[4];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/reverse-offload-1.c	Sun Dec 14 22:32:09 2025
***************
*** 5,11 ****
  /* { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare target\\)\\)\[\n\r\]*int called_in_target1" 1 "omplower" } }  */
  /* { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare target\\)\\)\[\n\r\]*int called_in_target2" 1 "omplower" } }  */
  /* { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare target\\)\\)\[\n\r\]*void tg_fn" 1 "omplower" } }  */
! 
  #pragma omp requires reverse_offload
  
  extern int add_3 (int);
--- 5,11 ----
  /* { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare target\\)\\)\[\n\r\]*int called_in_target1" 1 "omplower" } }  */
  /* { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare target\\)\\)\[\n\r\]*int called_in_target2" 1 "omplower" } }  */
  /* { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare target\\)\\)\[\n\r\]*void tg_fn" 1 "omplower" } }  */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires reverse_offload
  
  extern int add_3 (int);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/schedule-modifiers-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  void
  foo (void)
  {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -Wunknown-pragmas -Werror" } */
! 
  extern void bark (void);
  int i,j,k;
  int array[555];
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -Wunknown-pragmas -Werror" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void bark (void);
  int i,j,k;
  int array[555];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  void bar (int *);
  
  void
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void bar (int *);
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-3.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-3.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-3.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-3.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  /* Test that we can handle multiple undeclared sink variables
     gracefully.  */
  
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that we can handle multiple undeclared sink variables
     gracefully.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-4.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-4.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-omplower" } */
! 
  /* Test that we adjust pointer offsets for sink variables
     correctly.  */
  
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-omplower" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that we adjust pointer offsets for sink variables
     correctly.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-5.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-5.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/sink-5.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/sink-5.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  void bar (int);
  
  void
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void bar (int);
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/target-teams-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/target-teams-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/target-teams-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/target-teams-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! 
  int v = 6;
  void bar (int);
  void bar2 (int, long *, long *);
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int v = 6;
  void bar (int);
  void bar2 (int, long *, long *);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/task-detach-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/task-detach-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/task-detach-1.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/task-detach-1.c	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-fopenmp" } */
  
  typedef enum omp_event_handle_t
  {
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -Wno-deprecated-openmp" } */
  
  typedef enum omp_event_handle_t
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/teams-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/teams-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/teams-2.c	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/teams-2.c	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-1.c	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,48 ----
+ typedef enum omp_allocator_handle_t
+ #if __cplusplus >= 201103L
+ : __UINTPTR_TYPE__
+ #endif
+ {
+   omp_default_mem_alloc = 1,
+   omp_low_lat_mem_alloc = 5,
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+   int key;
+   int value;
+ } omp_alloctrait_t;
+ 
+ extern void *omp_alloc (__SIZE_TYPE__, omp_allocator_handle_t);
+ 
+ void
+ f (omp_allocator_handle_t my_alloc)
+ {
+   #pragma omp target
+   {
+     int a; /* { dg-error "'my_alloc' in 'allocator' clause inside a target region must be specified in an 'uses_allocators' clause on the 'target' directive" "not yet implemented" { xfail *-*-* } } */
+     #pragma omp allocate(a) allocator(my_alloc) /* { dg-message "sorry, unimplemented: '#pragma omp allocate' not yet supported" "" { target c++ } }  */
+     a  = 5;
+     void *prt = omp_alloc(32, my_alloc);
+     #pragma omp parallel allocate(allocator(my_alloc) : a) firstprivate(a) /* { dg-error "allocator 'my_alloc' in 'allocate' clause inside a target region must be specified in an 'uses_allocators' clause on the 'target' directive" "not yet implemented" { xfail *-*-* } } */
+       a = 7;
+   }
+ }
+ 
+ void
+ g (omp_allocator_handle_t my_alloc)
+ {
+   /* The following defines a default-mem-space allocator with no extra traits. */
+   #pragma omp target uses_allocators(my_alloc)
+   {
+     int a;
+     #pragma omp allocate(a) allocator(my_alloc)  /* { dg-message "sorry, unimplemented: '#pragma omp allocate' not yet supported" "" { target c++ } }  */
+     a  = 5;
+     void *prt = omp_alloc(32, my_alloc);
+     #pragma omp parallel allocate(allocator(my_alloc) : a) firstprivate(a)
+       a = 7;
+   }
+ }
+ 
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 37 }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-2.c	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,35 ----
+ typedef enum omp_allocator_handle_t
+ #if __cplusplus >= 201103L
+ : __UINTPTR_TYPE__
+ #endif
+ {
+   omp_default_mem_alloc = 1,
+   omp_low_lat_mem_alloc = 5,
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+   int key;
+   int value;
+ } omp_alloctrait_t;
+ 
+ void
+ f ()
+ {
+    omp_alloctrait_t trait[1] = {{1,1}};
+    omp_allocator_handle_t my_alloc;
+    #pragma omp target uses_allocators(traits(trait) : my_alloc)  /* { dg-error "traits array 'trait' must be of 'const omp_alloctrait_t \\\[\\\]' type" } */
+      ;
+ }
+ 
+ void
+ g ()
+ {
+    const omp_alloctrait_t trait[1] = {{1,1}};
+    omp_allocator_handle_t my_alloc;
+    #pragma omp target uses_allocators(traits(trait) : my_alloc)
+      ;
+ }
+ 
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 31 }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-4.c	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,144 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-Wno-deprecated-openmp" } */
+ 
+ //#include <omp.h>
+ 
+ typedef __UINTPTR_TYPE__ omp_uintptr_t;
+ 
+ #if __cplusplus >= 201103L
+ # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
+ #else
+ # define __GOMP_UINTPTR_T_ENUM
+ #endif
+ 
+ typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_default_mem_space = 0,
+   omp_large_cap_mem_space = 1,
+   omp_const_mem_space = 2,
+   omp_high_bw_mem_space = 3,
+   omp_low_lat_mem_space = 4,
+   ompx_gnu_managed_mem_space = 200,
+   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
+ } omp_memspace_handle_t;
+ 
+ typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_null_allocator = 0,
+   omp_default_mem_alloc = 1,
+   omp_large_cap_mem_alloc = 2,
+   omp_const_mem_alloc = 3,
+   omp_high_bw_mem_alloc = 4,
+   omp_low_lat_mem_alloc = 5,
+   omp_cgroup_mem_alloc = 6,
+   omp_pteam_mem_alloc = 7,
+   omp_thread_mem_alloc = 8,
+   ompx_gnu_pinned_mem_alloc = 200,
+   ompx_gnu_managed_mem_alloc = 201,
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef enum omp_alloctrait_key_t
+ {
+   omp_atk_sync_hint = 1,
+   omp_atk_alignment = 2,
+   omp_atk_access = 3,
+   omp_atk_pool_size = 4,
+   omp_atk_fallback = 5,
+   omp_atk_fb_data = 6,
+   omp_atk_pinned = 7,
+   omp_atk_partition = 8
+ } omp_alloctrait_key_t;
+ 
+ typedef enum omp_alloctrait_value_t
+ {
+   omp_atv_default = (__UINTPTR_TYPE__) -1,
+   omp_atv_false = 0,
+   omp_atv_true = 1,
+   omp_atv_contended = 3,
+   omp_atv_uncontended = 4,
+   omp_atv_serialized = 5,
+   omp_atv_private = 6,
+   omp_atv_all = 7,
+   omp_atv_thread = 8,
+   omp_atv_pteam = 9,
+   omp_atv_cgroup = 10,
+   omp_atv_default_mem_fb = 11,
+   omp_atv_null_fb = 12,
+   omp_atv_abort_fb = 13,
+   omp_atv_allocator_fb = 14,
+   omp_atv_environment = 15,
+   omp_atv_nearest = 16,
+   omp_atv_blocked = 17,
+   omp_atv_interleaved = 18
+ } omp_alloctrait_value_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+   omp_alloctrait_key_t key;
+   omp_uintptr_t value;
+ } omp_alloctrait_t;
+ 
+ omp_alloctrait_key_t k;
+ omp_alloctrait_value_t v;
+ 
+ int f (const omp_alloctrait_t arg_traits[], int n)
+ {
+   omp_allocator_handle_t foo, bar;
+   const omp_alloctrait_t traits_array[] = { { omp_atk_pinned,    omp_atv_true },
+ 					    { omp_atk_partition, omp_atv_nearest } };
+   extern const omp_alloctrait_t ex_traits[2];
+   extern const omp_alloctrait_t ex2_traits[];
+ #ifndef __cplusplus
+   const omp_alloctrait_t vla_traits[n] = {};  /* Not useful, but shouldn't crash.  */
+ #else
+   const omp_alloctrait_t vla_traits[n] = { { omp_atk_pinned,    omp_atv_true },
+   					   { omp_atk_partition, omp_atv_nearest } };
+ #endif
+ 
+   #pragma omp target uses_allocators (baz) /* { dg-error "'baz' undeclared .first use in this function." "" { target c } } */
+     ;                                      /* { dg-error "'baz' has not been declared" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (foo (xyz)) /* { dg-error "'xyz' undeclared .first use in this function." "" { target c } } */
+     ;                                            /* { dg-error "'xyz' has not been declared" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (foo (traits_array), baz (traits_array)) /* { dg-error "'baz' has not been declared" "" { target c++ } } */
+     ;
+   #pragma omp target uses_allocators (foo (arg_traits)) /* { dg-error "traits array 'arg_traits' must be defined in same scope as the construct on which the clause appears" } */
+     ;                                                   /* { dg-error "traits array 'arg_traits' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-1 } */
+   #pragma omp target uses_allocators (foo (ex_traits)) /* { dg-error "traits array 'ex_traits' must be defined in same scope as the construct on which the clause appears" } */
+     ;                                                  /* { dg-error "traits array must be initialized with constants" "" { target *-*-* } .-1 } */
+   #pragma omp target uses_allocators (foo (ex2_traits)) /* { dg-error "traits array 'ex2_traits' must be defined in same scope as the construct on which the clause appears" } */
+     ;                                                   /* { dg-error "traits array 'ex2_traits' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-1 } */
+   #pragma omp target uses_allocators (foo (vla_traits)) /* { dg-error "variable length traits arrays are not supported" "" { target c++ } } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_no_such_space) : foo) /* { dg-error "'omp_no_such_space' undeclared .first use in this function." "" { target c } } */
+     ;                                                                    /* { dg-error "'omp_no_such_space' was not declared in this scope" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (memspace(1) : foo) /* { dg-error "memspace modifier '1' must be constant enum of 'omp_memspace_handle_t' type" } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_no_such_space) : foo, bar) /* { dg-error "'uses_allocators' clause only accepts a single allocator when using modifiers" } */
+     ;                                                                         /* { dg-error "memspace modifier 'omp_no_such_space' must be constant enum of 'omp_memspace_handle_t' type" "" { target c++ } .-1 } */
+   #pragma omp target uses_allocators (traits(xyz) : bar) /* { dg-error "'xyz' was not declared in this scope" "" { target c++ } } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space), traits(traits_array), memspace (omp_no_such_space) : bar) /* { dg-error "duplicate 'memspace' modifier" "" { target c } } */
+     ;                                                                                                                            /* { dg-error "expected '\\\)' before 'memspace" "" { target c } .-1 } */
+                                                                                                                                  /* { dg-error "duplicate 'memspace' modifier" "" { target c++ } .-2 } */
+   #pragma omp target uses_allocators (traitz(traits_array), memspace(omp_high_bw_mem_space) : bar) /* { dg-error "'traitz' undeclared .first use in this function." "" { target c } } */
+     ;                                                                                              /* { dg-error "'memspace' undeclared .first use in this function." "" { target c } .-1 } */
+                                                                                                    /* { dg-error "'traitz' has not been declared" "" { target c++ } .-2 } */
+                                                                                                    /* { dg-error "'memspace' has not been declared" "" { target c++ } .-3 } */
+                                                                                                    /* { dg-error "expected '\\\)' before ':' token" "" { target *-*-* } .-4 } */
+   #pragma omp target uses_allocators (omp_null_allocator)
+     ;
+   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo, bar) /* { dg-error "'uses_allocators' clause only accepts a single allocator when using modifiers" } */
+     ;
+   #pragma omp target uses_allocators (memspace(omp_high_bw_mem_space) : foo(foo_traits)) /* { dg-error "'foo_traits' undeclared .first use in this function.; did you mean 'vla_traits'." "" { target c } } */
+     ;                                                                                    /* { dg-error "'foo_traits' has not been declared" "" { target c++ } .-1 } */
+                                                                                          /* { dg-error "legacy 'foo\\\(foo_traits\\\)' traits syntax not allowed in 'uses_allocators' clause when using modifiers" "" { target *-*-* } .-2 } */
+   return 0;
+ }
+ 
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 103 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 111 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 113 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 117 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target c } 119 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 131 }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c
*** gcc-16-20251207/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/c-c++-common/gomp/uses_allocators-7.c	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,83 ----
+ // { dg-do compile }
+ 
+ //#include <omp.h>
+ 
+ typedef __UINTPTR_TYPE__ omp_uintptr_t;
+ 
+ #if __cplusplus >= 201103L
+ # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
+ #else
+ # define __GOMP_UINTPTR_T_ENUM
+ #endif
+ 
+ typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_default_mem_space = 0,
+   omp_large_cap_mem_space = 1,
+   omp_const_mem_space = 2,
+   omp_high_bw_mem_space = 3,
+   omp_low_lat_mem_space = 4,
+   ompx_gnu_managed_mem_space = 200,
+   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
+ } omp_memspace_handle_t;
+ 
+ typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_null_allocator = 0,
+   omp_default_mem_alloc = 1,
+   omp_large_cap_mem_alloc = 2,
+   omp_const_mem_alloc = 3,
+   omp_high_bw_mem_alloc = 4,
+   omp_low_lat_mem_alloc = 5,
+   omp_cgroup_mem_alloc = 6,
+   omp_pteam_mem_alloc = 7,
+   omp_thread_mem_alloc = 8,
+   ompx_gnu_pinned_mem_alloc = 200,
+   ompx_gnu_managed_mem_alloc = 201,
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+ //  omp_alloctrait_key_t key;
+ //  omp_uintptr_t value;
+ } omp_alloctrait_t;
+ 
+ 
+ void f()
+ {
+  omp_allocator_handle_t my;
+  struct t {
+    omp_allocator_handle_t a1;
+  } s;
+ 
+ const omp_allocator_handle_t my3 = (omp_allocator_handle_t) 300;
+ omp_allocator_handle_t my4[1];
+ const omp_alloctrait_t t[] = {};
+  #pragma omp target uses_allocators(my, omp_default_mem_alloc, omp_null_allocator)  // OK
+    ;
+  #pragma omp target uses_allocators(my) firstprivate(my) // { dg-error "'my' appears more than once in data clauses" }
+    ;
+  #pragma omp target private(my) uses_allocators(my) // { dg-error "'my' appears more than once in data clauses" }
+    ;
+  #pragma omp target uses_allocators(my3)
+    ;
+  #pragma omp target uses_allocators(s.a1)
+    // { dg-error "expected '\\)' before '\\.' token" "" { target *-*-* } .-1 }
+    // { dg-error "allocator 's' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-2 }
+    ;
+  #pragma omp target uses_allocators(my4)
+    // { dg-error "allocator 'my4' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-1 }
+    ;
+  #pragma omp target uses_allocators(my4[0])
+    // { dg-error "expected '\\)' before '\\\[' token" "" { target *-*-* } .-1 }
+    // { dg-error "allocator 'my4' must be of 'omp_allocator_handle_t' type" "" { target *-*-* } .-2 }
+    ;
+  #pragma omp target uses_allocators(memspace(omp_default_mem_space) : my, my(t)) // { dg-error "legacy 'my\\(t\\)' traits syntax not allowed in 'uses_allocators' clause when using modifiers" }
+    ;
+ }
+ 
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 57 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 61 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 63 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 76 }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/analyzer.exp gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/analyzer.exp
*** gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/analyzer.exp	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/analyzer.exp	Sun Dec 14 22:32:09 2025
*************** if [info exists DEFAULT_CXXFLAGS] then {
*** 29,35 ****
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_CXXFLAGS " -fanalyzer -Wanalyzer-too-complex -fanalyzer-call-summaries"
  
  # Initialize `dg'.
  dg-init
--- 29,35 ----
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_CXXFLAGS " -fanalyzer -Wanalyzer-too-complex"
  
  # Initialize `dg'.
  dg-init
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-default.C	Sun Dec 14 22:32:09 2025
*************** int main () {
*** 16,20 ****
  
  /* { dg-note "\\(1\\) 'a\\.std::.+::_M_ptr' is NULL" "" { target c++14_down } declare_a } */
  /* { dg-note "dereference of NULL 'a\\.std::.+::operator->\\(\\)'" "" { target *-*-* } deref_a } */
- /* { dg-note "calling 'std::.+::operator->' from 'main'" "" { target *-*-* } deref_a } */
- /* { dg-note "returning to 'main' from 'std::.+::operator->'" "" { target *-*-* } deref_a } */
--- 16,18 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers-no.C	Sun Dec 14 22:32:09 2025
*************** int main () {
*** 17,21 ****
  
  /* { dg-note "\\(1\\) 'a\\.std::.+::_M_ptr' is NULL" "" { target c++14_down } declare_a } */
  /* { dg-note "dereference of NULL 'a\\.std::.+::operator->\\(\\)'" "" { target *-*-* } deref_a } */
- /* { dg-note "calling 'std::.+::operator->' from 'main'" "" { target *-*-* } deref_a } */
- /* { dg-note "returning to 'main' from 'std::.+::operator->'" "" { target *-*-* } deref_a } */
--- 17,19 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/fanalyzer-show-events-in-system-headers.C	Sun Dec 14 22:32:09 2025
***************
*** 6,12 ****
  
  struct A {int x; int y;};
  
! int main () { /* { dg-message "\\(1\\) entry to 'main'" "telltale event that we are going within a deeper frame than 'main'" } */
    std::shared_ptr<A> a;
    a->x = 4; /* { dg-line deref_a } */ 
    /* { dg-warning "dereference of NULL" "" { target *-*-* } deref_a } */
--- 6,12 ----
  
  struct A {int x; int y;};
  
! int main () {
    std::shared_ptr<A> a;
    a->x = 4; /* { dg-line deref_a } */ 
    /* { dg-warning "dereference of NULL" "" { target *-*-* } deref_a } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/pr94028.C gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/pr94028.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/pr94028.C	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/pr94028.C	Sun Dec 14 22:32:09 2025
*************** j *
*** 30,41 ****
  f (B * b, int h, bool)
  {
    d (b->cls);
!   return new j (b, h); // { dg-warning "leak" }
  }
  
  void
  m ()
  {
    if (i)
!     f (&k, 0, false);
  }
--- 30,41 ----
  f (B * b, int h, bool)
  {
    d (b->cls);
!   return new j (b, h);
  }
  
  void
  m ()
  {
    if (i)
!     f (&k, 0, false); // { dg-warning "leak" }
  }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/pr96641.C gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/pr96641.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/analyzer/pr96641.C	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/analyzer/pr96641.C	Sun Dec 14 22:32:09 2025
*************** struct iz : uh {
*** 7,13 ****
    virtual void
    sx ()
    {
!     sx ();
    }
  };
  
--- 7,13 ----
    virtual void
    sx ()
    {
!     sx (); /* { dg-warning "infinite recursion" } */
    }
  };
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C gcc-16-20251214/gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C	Sun Dec  7 22:32:10 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/debug/dwarf2/omp-fesdr.C	Sun Dec 14 22:32:09 2025
*************** f7 (void)
*** 14,20 ****
  
    #pragma omp parallel
    {
!     #pragma omp master
      v7o++;
      #pragma omp for private (v7i) firstprivate (v7k) reduction (+:v7l)
      for (v7n = 0; v7n < 3; v7n++)
--- 14,20 ----
  
    #pragma omp parallel
    {
!     #pragma omp masked
      v7o++;
      #pragma omp for private (v7i) firstprivate (v7k) reduction (+:v7l)
      for (v7n = 0; v7n < 3; v7n++)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/ext/is_constructible9.C gcc-16-20251214/gcc/testsuite/g++.dg/ext/is_constructible9.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/ext/is_constructible9.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/ext/is_constructible9.C	Sun Dec 14 22:32:09 2025
*************** static_assert(is_constructible<A, int, i
*** 24,29 ****
--- 24,35 ----
  // { dg-message "'A' is not constructible from 'int, int', because" "" { target *-*-* } .-1 }
  // { dg-error "no matching function for call to" "" { target *-*-* } .-2 }
  
+ struct V {  // { dg-message "following virtual functions are pure" }
+   virtual void foo() = 0;  // { dg-message "" }
+ };
+ static_assert(is_constructible<V>::value, "");  // { dg-error "assert" }
+ // { dg-error "object of abstract type" "" { target *-*-* } .-1 }
+ 
  template <typename T, typename... Args>
  struct is_nothrow_constructible {
    static constexpr bool value = __is_nothrow_constructible(T, Args...);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile { target c++11 } }
! 
  typedef enum omp_allocator_handle_t
  : __UINTPTR_TYPE__
  {
--- 1,5 ----
  // { dg-do compile { target c++11 } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef enum omp_allocator_handle_t
  : __UINTPTR_TYPE__
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-12.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-12.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-12.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-12.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile { target c++11 } }
! 
  #pragma omp declare target
  #pragma omp declare target
  [[omp::directive (declare target)]];
--- 1,5 ----
  // { dg-do compile { target c++11 } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  #pragma omp declare target
  [[omp::directive (declare target)]];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile { target c++11 } }
! 
  typedef enum omp_allocator_handle_t
  : __UINTPTR_TYPE__
  {
--- 1,5 ----
  // { dg-do compile { target c++11 } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef enum omp_allocator_handle_t
  : __UINTPTR_TYPE__
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-4.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-4.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-4.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-4.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile { target c++11 } }
! 
  void
  foo (int x)
  {
--- 1,5 ----
  // { dg-do compile { target c++11 } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (int x)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-5.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-5.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-5.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-5.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile { target c++11 } }
! 
  typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
    char __omp_depend_t__[2 * sizeof (void *)];
  } omp_depend_t;
--- 1,5 ----
  // { dg-do compile { target c++11 } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
    char __omp_depend_t__[2 * sizeof (void *)];
  } omp_depend_t;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-9.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-9.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/attrs-9.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/attrs-9.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile { target c++11 } }
! 
  int n1 = 0, n2 = 42;
  [[omp::sequence (directive (requires, atomic_default_mem_order (seq_cst)))]];
  [[omp::directive (declare reduction (plus: int: omp_out += omp_in) initializer (omp_priv = 0))]];
--- 1,5 ----
  // { dg-do compile { target c++11 } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int n1 = 0, n2 = 42;
  [[omp::sequence (directive (requires, atomic_default_mem_order (seq_cst)))]];
  [[omp::directive (declare reduction (plus: int: omp_out += omp_in) initializer (omp_priv = 0))]];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-0.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-0.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-0.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-0.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile }
! // { dg-options "-fopenmp -fdump-tree-omplower" }
  
  void bar();
  void foo()
--- 1,5 ----
  // { dg-do compile }
! // { dg-options "-fopenmp -fdump-tree-omplower -Wno-deprecated-openmp" }
  
  void bar();
  void foo()
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-10.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-10.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-10.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-10.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile }
! 
  void foo(int i)
  {
    int j;
--- 1,5 ----
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo(int i)
  {
    int j;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-5.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-5.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-5.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-5.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile }
! 
  void foo()
  {
    #pragma omp master
--- 1,5 ----
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo()
  {
    #pragma omp master
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-9.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-9.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/block-9.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/block-9.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile }
! 
  void foo(int i)
  {
    int j;
--- 1,5 ----
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo(int i)
  {
    int j;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/clause-3.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/clause-3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/clause-3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/clause-3.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-require-effective-target tls }
! 
  #define p parallel
  
  extern void bar (void);
--- 1,6 ----
  // { dg-do compile }
  // { dg-require-effective-target tls }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define p parallel
  
  extern void bar (void);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-3.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-3.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-options "-fopenmp -ffat-lto-objects" }
! 
  #pragma omp declare simd uniform(b) linear(c, d) linear(uval(e)) linear(ref(f))
  int f1 (int a, int b, int c, int &d, int &e, int &f)
  {
--- 1,6 ----
  // { dg-do compile }
  // { dg-options "-fopenmp -ffat-lto-objects" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare simd uniform(b) linear(c, d) linear(uval(e)) linear(ref(f))
  int f1 (int a, int b, int c, int &d, int &e, int &f)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-4.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-4.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-4.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-4.C	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare simd linear(p:1) linear(q:-1) linear(s:-3)
  int
  f1 (int *p, int *q, short *s)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-6.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-6.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-6.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-6.C	Sun Dec 14 22:32:09 2025
***************
*** 1,7 ****
  // PR c++/71257
  // { dg-do compile }
  // { dg-options "-fopenmp-simd" }
! 
  struct S { int a; };
  #pragma omp declare simd linear(val(a):2)
  int f1 (int &a);
--- 1,7 ----
  // PR c++/71257
  // { dg-do compile }
  // { dg-options "-fopenmp-simd" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S { int a; };
  #pragma omp declare simd linear(val(a):2)
  int f1 (int &a);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-7.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-7.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-7.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-7.C	Sun Dec 14 22:32:09 2025
***************
*** 1,7 ****
  // PR middle-end/78025
  // { dg-do compile }
  // { dg-additional-options "-O2" }
! 
  struct S { S (); ~S (); };
  
  int bar1 (int, int, float &, S &, int *, int, int &, int &, int &, int &, int &);
--- 1,7 ----
  // PR middle-end/78025
  // { dg-do compile }
  // { dg-additional-options "-O2" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S { S (); ~S (); };
  
  int bar1 (int, int, float &, S &, int *, int, int &, int &, int &, int &, int &);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-8.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-8.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-simd-8.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-simd-8.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // PR c++/100872
! 
  template <int N, typename T>
  struct S {
    #pragma omp declare simd aligned(a : N * 2) aligned(b) linear(ref(b): N)
--- 1,5 ----
  // PR c++/100872
! // { dg-additional-options "-Wno-deprecated-openmp" }
  template <int N, typename T>
  struct S {
    #pragma omp declare simd aligned(a : N * 2) aligned(b) linear(ref(b): N)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! 
  #pragma omp declare target
  void f1 (int);
  void f1 (double);
--- 1,6 ----
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  void f1 (int);
  void f1 (double);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! 
  #pragma omp declare target
  template <typename T>
  struct S { T a; };
--- 1,6 ----
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  template <typename T>
  struct S { T a; };
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-3.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-3.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-additional-options "-fdump-tree-gimple" }
! 
  // Test implicit marking of declare target to.
  
  int foo () { return 1; }
--- 1,6 ----
  // { dg-do compile }
  // { dg-additional-options "-fdump-tree-gimple" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  // Test implicit marking of declare target to.
  
  int foo () { return 1; }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-indirect-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-indirect-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/declare-target-indirect-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/declare-target-indirect-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-skip-if "c++98 does not support attributes" { c++98_only } }
! 
  [[omp::decl (declare target, indirect(1))]] // { dg-error "directive with only 'device_type' or 'indirect' clause" }
  int f (void) { return 5; }
  
--- 1,5 ----
  // { dg-skip-if "c++98 does not support attributes" { c++98_only } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  [[omp::decl (declare target, indirect(1))]] // { dg-error "directive with only 'device_type' or 'indirect' clause" }
  int f (void) { return 5; }
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/depend-iterator-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/depend-iterator-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/depend-iterator-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/depend-iterator-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,4 ****
! // { dg-additional-options "-Wno-volatile" }
  
  int arr[64], arr2[64];
  struct S { int a[4]; } k;
--- 1,4 ----
! // { dg-additional-options "-Wno-volatile -Wno-deprecated-openmp" }
  
  int arr[64], arr2[64];
  struct S { int a[4]; } k;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/depend-iterator-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/depend-iterator-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/depend-iterator-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/depend-iterator-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int a, b[64];
  struct S { int c; } *d, *e;
  struct T;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/depobj-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/depobj-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/depobj-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/depobj-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
    char __omp_depend_t__[2 * sizeof (void *)];
  } omp_depend_t;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/deprecate-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/deprecate-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/deprecate-1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/deprecate-1.C	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,124 ----
+ /* { dg-additional-options "-fdiagnostics-show-caret -Wdeprecated-openmp" } */
+ 
+ #pragma omp declare simd linear (val(a) : 1)	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (val(a) : 1)
+                                   ^~~
+                                   ---- -   -
+                                            val, step (1)
+    { dg-end-multiline-output "" } */
+ #pragma omp declare simd linear (val(b))	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (val(b))
+                                   ^~~
+                                   ---- -
+                                         : val
+    { dg-end-multiline-output "" } */
+ int foo (int a, int b);
+ 
+ #pragma omp declare simd linear (ref(a) : 1)	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (ref(a) : 1)
+                                   ^~~
+                                   ---- -   -
+                                            ref, step (1)
+    { dg-end-multiline-output "" } */
+ #pragma omp declare simd linear (ref(b))	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (ref(b))
+                                   ^~~
+                                   ---- -
+                                         : ref
+    { dg-end-multiline-output "" } */
+ int baz (int &a, int &b);
+ 
+ #pragma omp declare simd linear (uval(a) : 1)	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (uval(a) : 1)
+                                   ^~~~
+                                   ----- -   -
+                                             uval, step (1)
+    { dg-end-multiline-output "" } */
+ #pragma omp declare simd linear (uval(b))	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (uval(b))
+                                   ^~~~
+                                   ----- -
+                                          : uval
+    { dg-end-multiline-output "" } */
+ int qux (int &a, int &b);
+ 
+ int v;
+ #pragma omp declare target to (v)		/* { dg-warning "'to' clause with 'declare target' deprecated since OpenMP 5.2, use 'enter'" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare target to (v)
+                             ^~
+                             enter
+    { dg-end-multiline-output "" } */
+ 
+ void
+ bar ()
+ {
+   int r = 0;
+   #pragma omp parallel reduction (-:r)		/* { dg-warning "'-' operator for reductions deprecated in OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp parallel reduction (-:r)
+                                    ^
+                                    +
+    { dg-end-multiline-output "" } */
+   ++r;
+   #pragma omp for ordered (1)
+   for (int i = 0; i < 64; i++)
+     {
+       #pragma omp ordered depend (sink: i - 1)	/* { dg-warning "'sink' modifier with 'depend' clause deprecated since OpenMP 5.2, use with 'doacross'" } */
+ /* { dg-begin-multiline-output "" }
+        #pragma omp ordered depend (sink: i - 1)
+                            ^~~~~~
+                            doacross
+    { dg-end-multiline-output "" } */
+       #pragma omp ordered depend (source)	/* { dg-warning "'source' modifier with 'depend' clause deprecated since OpenMP 5.2, use with 'doacross'" } */
+ /* { dg-begin-multiline-output "" }
+        #pragma omp ordered depend (source)
+                            ^~~~~~
+                            doacross
+    { dg-end-multiline-output "" } */
+     }
+   #pragma omp target map (always close present, tofrom: r)	/* { dg-warning "'map' clause modifiers without comma separation is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp target map (always close present, tofrom: r)
+                           ^
+                                   ,
+    #pragma omp target map (always close present, tofrom: r)
+                           ^
+                                         ,
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp parallel proc_bind (master)	/* { dg-warning "'master' affinity deprecated since OpenMP 5.1, use 'primary'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp parallel proc_bind (master)
+                         ^~~~~~~~~
+                                    ------
+                                    primary
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp parallel master			/* { dg-warning "'master' construct deprecated since OpenMP 5.1, use 'masked'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp parallel master
+                         ^~~~~~
+                         masked
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp master				/* { dg-warning "'master' construct deprecated since OpenMP 5.1, use 'masked'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp master
+                                                                                                                                     ^
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp metadirective when (device={arch("blahblah")}: nothing) default (nothing)		/* { dg-warning "'default' clause on metadirectives deprecated since OpenMP 5.2, use 'otherwise'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp metadirective when (device={arch("blahblah")}: nothing) default (nothing)
+                                                                        ^~~~~~~
+                                                                        otherwise
+    { dg-end-multiline-output "" } */
+   ;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/deprecate-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/deprecate-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/deprecate-2.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/deprecate-2.C	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-additional-options "-fdiagnostics-show-caret -Wdeprecated-openmp" } */
+ 
+ typedef enum omp_allocator_handle_t
+ #if __cplusplus >= 201103L
+ : __UINTPTR_TYPE__
+ #endif
+ {
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+   int key;
+   int value;
+ } omp_alloctrait_t;
+ 
+ 
+ void f()
+ {
+   omp_allocator_handle_t myalloc;
+   const omp_alloctrait_t mytraits[] = {};
+   #pragma omp target uses_allocators(myalloc(mytraits))
+ /* { dg-begin-multiline-output "" }
+    #pragma omp target uses_allocators(myalloc(mytraits))
+                                       ^~~~~~~~~~~~~~~~~
+                                       -------
+                                       traits           : myalloc
+    { dg-end-multiline-output "" } */
+    ;
+ 
+ // { dg-warning "38: the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* }  22 }
+ 
+ 
+   #pragma omp target uses_allocators  (  myalloc  (  mytraits  )  )
+ /* { dg-begin-multiline-output "" }
+    #pragma omp target uses_allocators  (  myalloc  (  mytraits  )  )
+                                           ^~~~~~~~~~~~~~~~~~~~~~~
+                                           -------
+                                           traits                 : myalloc
+    { dg-end-multiline-output "" } */
+    ;
+ 
+ // { dg-warning "42: the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* }  34 }
+ }
+ 
+ // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
+ // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/doacross-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/doacross-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/doacross-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/doacross-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // PR c++/100957
  // { dg-do compile }
! 
  struct S {
    S ()
    {
--- 1,6 ----
  // PR c++/100957
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S {
    S ()
    {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! 
  int i;
  
  #pragma omp declare simd linear (ref (x) : 1) linear (uval (y) : 2)
--- 1,6 ----
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int i;
  
  #pragma omp declare simd linear (ref (x) : 1) linear (uval (y) : 2)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! 
  #pragma omp declare target
  
  int i, j;
--- 1,6 ----
  // { dg-do compile }
  // { dg-options "-fopenmp" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  
  int i, j;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-3.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-3.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile { target c++11 } }
  // { dg-options "-fopenmp" }
! 
  int i;
  
  #pragma omp declare simd linear (x : ref, step (1)) linear (y : step (2), uval)
--- 1,6 ----
  // { dg-do compile { target c++11 } }
  // { dg-options "-fopenmp" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int i;
  
  #pragma omp declare simd linear (x : ref, step (1)) linear (y : step (2), uval)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-5.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-5.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/linear-5.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/linear-5.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile { target c++11 } } */
  /* { dg-options "-fopenmp" } */
! 
  constexpr int step (int x) { return x; }
  constexpr int val = 1;
  constexpr int ref = 2;
--- 1,6 ----
  /* { dg-do compile { target c++11 } } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  constexpr int step (int x) { return x; }
  constexpr int val = 1;
  constexpr int ref = 2;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/map-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/map-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/map-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/map-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test 'map' clause diagnostics.  */
  
  /* See also corresponding OpenMP C/C++ variant: '../../c-c++-common/gomp/map-1.c'.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/map-csm-dep.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/map-csm-dep.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/map-csm-dep.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/map-csm-dep.C	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,40 ----
+ // can't manage to elicit the "illegal comma" but it seems that we're already getting errors for improper syntax.
+ // otherwise, though, the deprecation works as intended.
+ int
+ main()
+   {
+     float B[8];
+     float C[8];
+     // this should be completely fine
+     #pragma omp target teams map(to: B[0:8], C[0:8])
+     {}
+     // this should give us a deprecation warning
+     #pragma omp target teams map(close always present to: B[0:8], C[0:8]) // { dg-warning "'map' clause modifiers without comma separation is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" }
+     {}
+     // this should be completely fine
+     #pragma omp target teams map(close, always, present, to: B[0:8], C[0:8])
+     {}
+ 
+     #pragma omp target teams map(close always,, present, to: B[0:8], C[0:8])
+     {}
+     // { dg-error "'close' was not declared in this scope" "" { target *-*-* } 18 }
+     // { dg-error "expected '\\)' before 'always'" "" { target *-*-* } 18 }
+     // { dg-error "expected primary-expression before ',' token" "" { target *-*-* } 18 }
+     // { dg-error "'present' was not declared in this scope" "" { target *-*-* } 18 }
+     // { dg-error "found ':' in nested-name-specifier, expected '::'" "" { target *-*-* } 18 }
+     // { dg-error "'to' has not been declared; did you mean 'auto'?" "" { target *-*-* } 18 }
+ 
+     #pragma omp target teams map(,close to: B[0:8], C[0:8]) 
+     {}
+     // { dg-error "expected primary-expression before ',' token" "" { target *-*-* } 27 }
+     // { dg-error "'close' was not declared in this scope" "" { target *-*-* } 27 }
+     // { dg-error "expected '\\)' before 'to'" "" { target *-*-* } 27 }
+     
+     #pragma omp target teams map(close,,always to: B[0:8] C[0:8])
+     {}
+     // { dg-error "expected primary-expression before ',' token" "" { target *-*-* } 33 }
+     // { dg-error "'close' was not declared in this scope" "" { target *-*-* } 33 }
+     // { dg-error "'always' was not declared in this scope" "" { target *-*-* } 33 }
+     // { dg-error "expected '\\)' before 'to'" "" { target *-*-* } 33 }
+     return 0;
+   }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/master-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/master-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/master-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/master-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  extern void bar(int);
  
  void foo (void)
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void bar(int);
  
  void foo (void)
*************** void foo (void)
*** 14,20 ****
    }
  
    /* Yes, this is legal -- structured-block contains statement contains
!      openmp-construct contains master-construct.  */
    #pragma omp master
    #pragma omp master
    #pragma omp master
--- 14,20 ----
    }
  
    /* Yes, this is legal -- structured-block contains statement contains
!      openmp-construct contains masked-construct.  */
    #pragma omp master
    #pragma omp master
    #pragma omp master
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/master-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/master-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/master-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/master-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  void f1(void)
  {
    #pragma omp master asdf	/* { dg-error "expected" } */
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void f1(void)
  {
    #pragma omp master asdf	/* { dg-error "expected" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/master-3.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/master-3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/master-3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/master-3.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-omplower" } */
  
  extern void bar(int);
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-omplower -Wno-deprecated-openmp" } */
  
  extern void bar(int);
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/method-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/method-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/method-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/method-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* PR c++/24513 */
  /* { dg-do compile } */
! 
  struct S
  {
    void foo (int *p)
--- 1,6 ----
  /* PR c++/24513 */
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S
  {
    void foo (int *p)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr118876.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr118876.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr118876.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr118876.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // PR c++/118876
  // { dg-do compile }
! 
  #pragma omp declare target
  struct A { ~A () {} } a[2];
  #pragma omp end declare target
--- 1,6 ----
  // PR c++/118876
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  struct A { ~A () {} } a[2];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr119370.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr119370.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr119370.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr119370.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // PR c++/119370
  // { dg-do compile }
! 
  #pragma omp declare target
  struct S {
    int s;
--- 1,6 ----
  // PR c++/119370
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  struct S {
    int s;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr29965-3.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr29965-3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr29965-3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr29965-3.C	Sun Dec 14 22:32:09 2025
***************
*** 1,7 ****
  // PR middle-end/29965
  // Test that OpenMP construct bodies which never return don't cause ICEs.
  // { dg-do compile }
! // { dg-options "-O2 -fopenmp" }
  
  extern void baz () __attribute__ ((noreturn));
  
--- 1,7 ----
  // PR middle-end/29965
  // Test that OpenMP construct bodies which never return don't cause ICEs.
  // { dg-do compile }
! // { dg-options "-O2 -fopenmp -Wno-deprecated-openmp" }
  
  extern void baz () __attribute__ ((noreturn));
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr29965-9.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr29965-9.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr29965-9.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr29965-9.C	Sun Dec 14 22:32:09 2025
***************
*** 3,9 ****
  // This is invalid code, but we don't emit diagnostics for it, nevertheless
  // we test that we don't ICE on it.
  // { dg-do compile }
! // { dg-options "-O2 -fopenmp" }
  
  void
  foo1 ()
--- 3,9 ----
  // This is invalid code, but we don't emit diagnostics for it, nevertheless
  // we test that we don't ICE on it.
  // { dg-do compile }
! // { dg-options "-O2 -fopenmp -Wno-deprecated-openmp" }
  
  void
  foo1 ()
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr78363-4.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr78363-4.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr78363-4.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr78363-4.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-require-effective-target c++11 }
! // { dg-additional-options "-g" }
  
  int main()
  {
--- 1,6 ----
  // { dg-do compile }
  // { dg-require-effective-target c++11 }
! // { dg-additional-options "-g -Wno-deprecated-openmp" }
  
  int main()
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr78363-6.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr78363-6.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr78363-6.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr78363-6.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-require-effective-target c++11 }
! // { dg-additional-options "-g" }
  
  int main()
  {
--- 1,6 ----
  // { dg-do compile }
  // { dg-require-effective-target c++11 }
! // { dg-additional-options "-g -Wno-deprecated-openmp" }
  
  int main()
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr79664.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr79664.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr79664.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr79664.C	Sun Dec 14 22:32:09 2025
***************
*** 1,7 ****
  // PR c++/79664
  // { dg-do compile }
  // { dg-options "-std=c++14 -fopenmp -Winvalid-constexpr -pedantic-errors" }
! 
  constexpr int
  f1 ()
  {
--- 1,7 ----
  // PR c++/79664
  // { dg-do compile }
  // { dg-options "-std=c++14 -fopenmp -Winvalid-constexpr -pedantic-errors" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  constexpr int
  f1 ()
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr94477.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr94477.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr94477.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr94477.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // PR c++/94477
  // { dg-do compile }
! 
  void foo ();
  
  template <int>
--- 1,6 ----
  // PR c++/94477
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo ();
  
  template <int>
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr94512.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr94512.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/pr94512.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/pr94512.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // PR c++/94512
! 
  void
  foo ();
  
--- 1,5 ----
  // PR c++/94512
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo ();
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/sink-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/sink-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/sink-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/sink-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  void bar (int, int, int);
  
  template<typename T>
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void bar (int, int, int);
  
  template<typename T>
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/sink-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/sink-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/sink-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/sink-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-skip-if "requires hosted libstdc++ for iostream" { ! hostedlib } } */
! 
  /* Tests iterators are allowed in ordered loops and that we keep track
     of the original iterator DECL for diagnostic purposes.  */
  
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-skip-if "requires hosted libstdc++ for iostream" { ! hostedlib } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Tests iterators are allowed in ordered loops and that we keep track
     of the original iterator DECL for diagnostic purposes.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/sink-3.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/sink-3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/sink-3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/sink-3.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
! 
  /* Test that we adjust pointer offsets for sink variables
     correctly.  */
  
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-gimple" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that we adjust pointer offsets for sink variables
     correctly.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/target-simd-clone-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/target-simd-clone-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/target-simd-clone-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/target-simd-clone-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details -fdump-ipa-cgraph" } */
! 
  /* Test that simd clones are generated for functions with "declare target".  */
  
  #pragma omp declare target
--- 1,6 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details -fdump-ipa-cgraph" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that simd clones are generated for functions with "declare target".  */
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/target-simd-clone-2.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/target-simd-clone-2.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/target-simd-clone-2.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/target-simd-clone-2.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! 
  /* Test that simd clones are not generated for "declare target"
     functions that throw.  */
  
--- 1,6 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that simd clones are not generated for "declare target"
     functions that throw.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/target-teams-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/target-teams-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/target-teams-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/target-teams-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-additional-options "-fdump-tree-gimple" }
! 
  int v = 6;
  void bar (int);
  void bar2 (int, long *, long *);
--- 1,6 ----
  // { dg-do compile }
  // { dg-additional-options "-fdump-tree-gimple" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int v = 6;
  void bar (int);
  void bar2 (int, long *, long *);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/tpl-master-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/tpl-master-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/tpl-master-1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/tpl-master-1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,6 ****
  // PR c++/24734
  // { dg-do compile }
! // { dg-options "-fopenmp -fdump-tree-gimple" }
  
  int i;
  
--- 1,6 ----
  // PR c++/24734
  // { dg-do compile }
! // { dg-options "-fopenmp -fdump-tree-gimple -Wno-deprecated-openmp" }
  
  int i;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/udr-5.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/udr-5.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/udr-5.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/udr-5.C	Sun Dec 14 22:32:09 2025
***************
*** 1,5 ****
  // { dg-do compile }
! 
  struct S
  {
    int s;
--- 1,5 ----
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S
  {
    int s;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C gcc-16-20251214/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/gomp/uses_allocators-1.C	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,105 ----
+ // { dg-do compile }
+ /* { dg-additional-options "-Wno-deprecated-openmp" } */
+ 
+ //#include <omp.h>
+ 
+ typedef __UINTPTR_TYPE__ omp_uintptr_t;
+ 
+ #if __cplusplus >= 201103L
+ # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
+ #else
+ # define __GOMP_UINTPTR_T_ENUM
+ #endif
+ 
+ typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_default_mem_space = 0,
+   omp_large_cap_mem_space = 1,
+   omp_const_mem_space = 2,
+   omp_high_bw_mem_space = 3,
+   omp_low_lat_mem_space = 4,
+   ompx_gnu_managed_mem_space = 200,
+   __omp_memspace_handle_t_max__ = __UINTPTR_MAX__
+ } omp_memspace_handle_t;
+ 
+ typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
+ {
+   omp_null_allocator = 0,
+   omp_default_mem_alloc = 1,
+   omp_large_cap_mem_alloc = 2,
+   omp_const_mem_alloc = 3,
+   omp_high_bw_mem_alloc = 4,
+   omp_low_lat_mem_alloc = 5,
+   omp_cgroup_mem_alloc = 6,
+   omp_pteam_mem_alloc = 7,
+   omp_thread_mem_alloc = 8,
+   ompx_gnu_pinned_mem_alloc = 200,
+   ompx_gnu_managed_mem_alloc = 201,
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+ //  omp_alloctrait_key_t key;
+ //  omp_uintptr_t value;
+ } omp_alloctrait_t;
+ 
+ 
+ template<typename TH, TH alloc>
+ void f()
+ {
+  #pragma omp target uses_allocators(alloc)
+    ;
+ }
+ 
+ template<typename TH, typename TT>
+ void g(TT trait, TH alloc)
+ {
+  #pragma omp target uses_allocators(alloc)
+    ;
+  #pragma omp target uses_allocators(alloc(trait))
+    // { dg-error "traits array 'trait' must be defined in same scope as the construct on which the clause appears" "" { target *-*-* } .-1 }
+    // { dg-error "traits array 'trait' must be of 'const omp_alloctrait_t \\\[\\\]' type" "" { target *-*-* } .-2 }
+    ;
+ }
+ 
+ void use()
+ {
+   omp_allocator_handle_t my;
+   static const omp_alloctrait_t t[] = {};
+ 
+   f<omp_allocator_handle_t, omp_null_allocator>(); // OK
+   f<omp_allocator_handle_t, omp_default_mem_alloc>(); // OK
+ 
+   g<omp_allocator_handle_t, const omp_alloctrait_t[]>(t, my); // 't'/traits not in the same scope
+ }
+ 
+ template<typename TH, TH alloc>
+ void f2()
+ {
+  #pragma omp target uses_allocators(alloc)
+    // { dg-error "allocator '\\(omp_allocator_handle_t\\)300' must be either a variable or a predefined allocator" "" { target *-*-* } .-1 }
+    ;
+ }
+ 
+ template<typename TH, typename TT>
+ void g2(TH alloc)
+ {
+  TT t = {};
+  #pragma omp target uses_allocators(alloc(t))
+    ;
+ }
+ 
+ void use2()
+ {
+   omp_allocator_handle_t my;
+   const omp_allocator_handle_t wrong = (omp_allocator_handle_t) 300;
+ 
+   f2<omp_allocator_handle_t, wrong>(); // 300 is not a predefined allocator
+ 
+   g2<omp_allocator_handle_t, const omp_alloctrait_t[]>(my); // OK
+ }
+ 
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 51 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 58 }
+ // { dg-message "sorry, unimplemented: 'uses_allocators' clause" "" { target *-*-* } 89 }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C gcc-16-20251214/gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/lookup/extern-c-redecl3.C	Sun Dec 14 22:32:09 2025
***************
*** 5,21 ****
  // { dg-final { scan-assembler-not "call\[\t \]+\[^\$\]*?_Z4forkv" { target i?86-*-* x86_64-*-* } } }
  // { dg-final { scan-assembler "call\[\t \]+_?fork" { target i?86-*-* x86_64-*-* } } }
  
! extern "C" int fork (void);
  
  void
  foo ()
  {
!   extern int fork (void);
    fork ();
  }
  
  extern "C"
! int
  fork (void)
  {
    return 0;
--- 5,23 ----
  // { dg-final { scan-assembler-not "call\[\t \]+\[^\$\]*?_Z4forkv" { target i?86-*-* x86_64-*-* } } }
  // { dg-final { scan-assembler "call\[\t \]+_?fork" { target i?86-*-* x86_64-*-* } } }
  
! typedef __typeof (__builtin_fork ()) pid_t;
! 
! extern "C" pid_t fork (void);
  
  void
  foo ()
  {
!   extern pid_t fork (void);
    fork ();
  }
  
  extern "C"
! pid_t
  fork (void)
  {
    return 0;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/lto/pr106409_0.C gcc-16-20251214/gcc/testsuite/g++.dg/lto/pr106409_0.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/lto/pr106409_0.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/lto/pr106409_0.C	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR tree-optimization/106409 */
+ /* { dg-lto-do link } */
+ /* { dg-lto-options { { -flto -W -Wall -O2 -fno-exceptions } { -flto -W -Wall -O2 -std=c++98 } { -flto -W -Wall -O2 -std=gnu++20 } } } */
+ struct bb
+ {
+   int t;
+   int t1;
+   int t2;
+   int t3;
+ };
+ 
+ [[gnu::noipa]]
+ void *f(unsigned long paramCount)
+ {
+     if (paramCount == 0)
+       return 0;
+     return new bb[paramCount]();
+ }
+ 
+ int main(void)
+ {
+   f(100);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/modules/compile-std1.C gcc-16-20251214/gcc/testsuite/g++.dg/modules/compile-std1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/modules/compile-std1.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/modules/compile-std1.C	Sun Dec 14 22:32:09 2025
***************
*** 1,9 ****
  // { dg-additional-options "-fmodules --compile-std-module -g -O" }
  // { dg-do compile { target c++20 } }
  
- import <bits/stdc++.h>;
  import std;
  import std.compat;
  
  void f()
  {
--- 1,14 ----
  // { dg-additional-options "-fmodules --compile-std-module -g -O" }
+ // { dg-additional-options "-flang-info-include-translate" }
  // { dg-do compile { target c++20 } }
+ // { dg-module-cmi std }
+ // { dg-module-cmi std.compat }
+ // { dg-module-cmi <bits/stdc++.h> }
  
  import std;
  import std.compat;
+ #include <vector>		// { dg-message "translated to import" }
+ import <bits/stdc++.h>;
  
  void f()
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/modules/modules.exp gcc-16-20251214/gcc/testsuite/g++.dg/modules/modules.exp
*** gcc-16-20251207/gcc/testsuite/g++.dg/modules/modules.exp	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/modules/modules.exp	Sun Dec 14 22:32:09 2025
*************** global module_cmis
*** 54,59 ****
--- 54,96 ----
  
  set DEFAULT_REPO "gcm.cache"
  
+ # Return the pathname for <HNAME>.
+ # On failure this will return garbage that results in the understandable
+ # FAIL: g++.dg/modules/compile-std1.C module-cmi <bits/stdcx++.h> (gcm.cache/,/ader_path1095619.C:1:10: fatal error: bits/stdcx++.h: No such file or directory.gcm)
+ # ??? it would be nice to have a simple --print-include-name flag.
+ proc host_header_path {hname} {
+     global tool
+     set src header_path[pid].C
+     set f [open $src "w"]
+     puts $f "#include <$hname>"
+     close $f
+     set opts [list "additional_flags=-H" "additional_flags=-fdirectives-only"]
+     set lines [${tool}_target_compile $src /dev/null preprocess $opts]
+     file delete $f
+     # The first line of the -H output is ". /path/to/hname"
+     set newline_idx [expr {[string first "\n" $lines] - 1}]
+     set path [string range $lines 2 $newline_idx]
+     verbose "header_path: $path" 1
+     return $path
+ }
+ 
+ # Return the pathname CMI munged like the compiler.
+ proc munge_cmi {cmi} {
+     if { [string index $cmi 0] == "/" } {
+ 	set cmi [string range $cmi 1 end]
+     } else {
+ 	set cmi ",/$cmi"
+     }
+     set path [file split $cmi]
+     # subst /../ -> /,,/
+     # sadly tcl 8.5 does not have lmap
+     set rplac {}
+     foreach elt $path {lappend rplac [expr {$elt == ".." ? ",," : $elt}]}
+     set cmi [file join {*}$rplac]
+     verbose "munge_cmi: $cmi" 1
+     return $cmi
+ }
+ 
  # Register the module name this produces.
  # dg-module-cmi !?=?NAME WHEN?
  # dg-module-cmi !?{} - header unit
*************** proc dg-module-cmi { args } {
*** 83,100 ****
  	if { $name == "" } {
  	    # get the source file name.  ick!
  	    upvar prog srcname
! 	    set cmi "$srcname.gcm"
! 	    if { [string index $cmi 0] == "/" } {
! 		set cmi [string range $cmi 1 end]
! 	    } else {
! 		set cmi ",/$cmi"
! 	    }
! 	    set path [file split $cmi]
! 	    # subst /../ -> /,,/
! 	    # sadly tcl 8.5 does not have lmap
! 	    set rplac {}
! 	    foreach elt $path {lappend rplac [expr {$elt == ".." ? ",," : $elt}]}
! 	    set cmi [file join {*}$rplac]
  	} else {
  	    set cmi "[regsub : $name -].gcm"
  	}
--- 120,130 ----
  	if { $name == "" } {
  	    # get the source file name.  ick!
  	    upvar prog srcname
! 	    set cmi [munge_cmi "$srcname.gcm"]
! 	} elseif { [string index $name 0] == "<"
! 		   && [string index $name end] == ">" } {
! 	    set header "[regsub {<(.*)>} $name {\1}]"
! 	    set cmi [munge_cmi "[host_header_path $header].gcm"]
  	} else {
  	    set cmi "[regsub : $name -].gcm"
  	}
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/pid_t-1.C gcc-16-20251214/gcc/testsuite/g++.dg/pid_t-1.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/pid_t-1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/pid_t-1.C	Sun Dec 14 22:32:09 2025
***************
*** 0 ****
--- 1,3 ----
+ /* { dg-options "-Wall" } */
+ 
+ extern "C" int fork (void); // { dg-warning "conflicts with built-in declaration" "" { target { *-*-solaris2* && ilp32 } } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/template/sfinae-deleted-pr119343.C gcc-16-20251214/gcc/testsuite/g++.dg/template/sfinae-deleted-pr119343.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/template/sfinae-deleted-pr119343.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/template/sfinae-deleted-pr119343.C	Sun Dec 14 22:32:10 2025
***************
*** 0 ****
--- 1,31 ----
+ // { dg-do compile { target c++11 } }
+ // PR c++/119343 - No SFINAE for deleted explicit specializations
+ 
+ struct true_type { static constexpr bool value = true; };
+ struct false_type { static constexpr bool value = false; };
+ 
+ struct X {
+   static void f()=delete;
+   template<int> static void g();
+ };
+ template<> void X::g<0>()=delete;
+ struct Y {
+   static void f();
+   template<int> static void g();
+ };
+ 
+ template<class T,class=void>
+ struct has_f : false_type {};
+ template<class T>
+ struct has_f<T,decltype(void(T::f))> : true_type {};
+ 
+ static_assert(!has_f<X>::value, "");
+ static_assert(has_f<Y>::value, "");
+ 
+ template<class T,class=void>
+ struct has_g0 : false_type {};
+ template<class T>
+ struct has_g0<T,decltype(void(T::template g<0>))> : true_type {};
+ 
+ static_assert(!has_g0<X>::value, "");
+ static_assert(has_g0<Y>::value, "");
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/torture/pr123040.C gcc-16-20251214/gcc/testsuite/g++.dg/torture/pr123040.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/torture/pr123040.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.dg/torture/pr123040.C	Sun Dec 14 22:32:10 2025
***************
*** 0 ****
--- 1,61 ----
+ // { dg-do compile }
+ 
+ template <int kBytes, typename From, typename To>
+ void CopyBytes(From from, To to) {
+   __builtin_memcpy(to, from, kBytes);
+ }
+ template <typename From, typename To> void CopySameSize(From *from, To to) {
+   CopyBytes<sizeof(From)>(from, to);
+ }
+ template <typename> using MakeUnsigned = char;
+ template <typename Lane, int N> struct Simd {
+   using T = Lane;
+   static constexpr int kPrivateLanes = N;
+   template <typename NewT> using Rebind = Simd<NewT, 0>;
+ };
+ template <class D> using TFromD = D::T;
+ template <class T, class D> using Rebind = D::template Rebind<T>;
+ template <class D> using RebindToUnsigned = Rebind<MakeUnsigned<D>, D>;
+ template <typename T, int> struct Vec128 {
+   using PrivateT = T;
+   static constexpr int kPrivateN = 6;
+   T raw[16];
+ };
+ template <class V> using DFromV = Simd<typename V::PrivateT, V::kPrivateN>;
+ template <class D> Vec128<TFromD<D>, D::kPrivateLanes> Zero(D);
+ template <class D> using VFromD = decltype(Zero(D()));
+ template <class D, class VFrom> VFromD<D> BitCast(D, VFrom v) {
+   VFromD<D> to;
+   CopySameSize(&v, to.raw);
+   return to;
+ }
+ template <int N> Vec128<signed char, N> And(Vec128<signed char, N> b) {
+   Vec128<signed char, N> a;
+   DFromV<decltype(a)> d;
+   RebindToUnsigned<decltype(d)> du;
+   auto au(a);
+   auto bu = BitCast(du, b);
+   for (int i = 0; i < N; ++i)
+     au.raw[i] &= bu.raw[i];
+   return au;
+ }
+ void Or(Vec128<signed char, 16>);
+ template <int N> void IfVecThenElse(Vec128<signed char, N> yes) {
+   Vec128 __trans_tmp_2 = And(yes);
+   Or(__trans_tmp_2);
+ }
+ template <int N> void IfThenElseZero(Vec128<signed char, N> yes) {
+   IfVecThenElse(yes);
+ }
+ Vec128<signed char, 16> Abs_a;
+ char MaskedAbs___trans_tmp_5;
+ void MaskedAbs() {
+   Vec128<signed char, 16> __trans_tmp_4;
+   for (int i = 0; i < 16; ++i) {
+     MaskedAbs___trans_tmp_5 = Abs_a.raw[i] ? -Abs_a.raw[i] : 0;
+     Abs_a.raw[i] = MaskedAbs___trans_tmp_5;
+   }
+   __trans_tmp_4 = Abs_a;
+   Vec128 __trans_tmp_3 = __trans_tmp_4;
+   IfThenElseZero(__trans_tmp_3);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr109442.C gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr109442.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr109442.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr109442.C	Sun Dec 14 22:32:10 2025
*************** T vat1(std::vector<T> v1) {
*** 9,12 ****
  // This should compile to empty function; check that no size of
  // vector is determined and there is no allocation
  // { dg-final { scan-tree-dump-not "_M_start" "optimized" } }
! // { dg-final { scan-tree-dump-not "delete" "optimized" } }
--- 9,13 ----
  // This should compile to empty function; check that no size of
  // vector is determined and there is no allocation
  // { dg-final { scan-tree-dump-not "_M_start" "optimized" } }
! // For C++26 delete appears in ~bad_array() and ~bad_array_new_length() dtors.
! // { dg-final { scan-tree-dump-not "delete" "optimized" { target c++23_down } } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr110819.C gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr110819.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr110819.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr110819.C	Sun Dec 14 22:32:10 2025
*************** void use_idx_const_size_reserve() {
*** 11,14 ****
      for (std::vector<int>::size_type i = 0; i < s; i++)
          f(v[i]);
  }
! // { dg-final { scan-tree-dump-not "delete" "optimized" } }
--- 11,15 ----
      for (std::vector<int>::size_type i = 0; i < s; i++)
          f(v[i]);
  }
! // For C++26 delete appears in ~bad_array() and ~bad_array_new_length() dtors.
! // { dg-final { scan-tree-dump-not "delete" "optimized" { target c++23_down } } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr116868.C gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr116868.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr116868.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr116868.C	Sun Dec 14 22:32:10 2025
*************** int sumVector() {
*** 9,12 ****
      }
      return sum;
  }
! // { dg-final { scan-tree-dump-not "delete" "optimized" } }
--- 9,13 ----
      }
      return sum;
  }
! // For C++26 delete appears in ~bad_array() and ~bad_array_new_length() dtors.
! // { dg-final { scan-tree-dump-not "delete" "optimized" { target c++23_down } } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr58483.C gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr58483.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr58483.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr58483.C	Sun Dec 14 22:32:10 2025
*************** void use_idx_const_size_reserve() {
*** 11,14 ****
      for (std::vector<int>::size_type i = 0; i < s; i++)
          f(v[i]);
  }
! // { dg-final { scan-tree-dump-not "delete" "optimized" } }
--- 11,15 ----
      for (std::vector<int>::size_type i = 0; i < s; i++)
          f(v[i]);
  }
! // For C++26 delete appears in ~bad_array() and ~bad_array_new_length() dtors.
! // { dg-final { scan-tree-dump-not "delete" "optimized" { target c++23_down } } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr96945.C gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr96945.C
*** gcc-16-20251207/gcc/testsuite/g++.dg/tree-ssa/pr96945.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/tree-ssa/pr96945.C	Sun Dec 14 22:32:10 2025
*************** struct c7 {
*** 57,60 ****
  void foo7(){
      std::vector<c7> vi = {c7(),c7(),c7()};
  }
! // { dg-final { scan-tree-dump-not "delete" "optimized" } }
--- 57,61 ----
  void foo7(){
      std::vector<c7> vi = {c7(),c7(),c7()};
  }
! // For C++26 delete appears in ~bad_array() and ~bad_array_new_length() dtors.
! // { dg-final { scan-tree-dump-not "delete" "optimized" { target c++23_down } } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.dg/vect/simd-clone-6.cc gcc-16-20251214/gcc/testsuite/g++.dg/vect/simd-clone-6.cc
*** gcc-16-20251207/gcc/testsuite/g++.dg/vect/simd-clone-6.cc	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.dg/vect/simd-clone-6.cc	Sun Dec 14 22:32:10 2025
*************** struct S { int a; };
*** 10,16 ****
  int c[N], e[N], f[N];
  S d[N];
  
! #pragma omp declare simd linear(ref(b, c) : 1)
  int
  foo (int a, S &b, int &c)
  {
--- 10,16 ----
  int c[N], e[N], f[N];
  S d[N];
  
! #pragma omp declare simd linear(b, c : ref, step (1))
  int
  foo (int a, S &b, int &c)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/svbool_ternary.C gcc-16-20251214/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/svbool_ternary.C
*** gcc-16-20251207/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/svbool_ternary.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/svbool_ternary.C	Sun Dec 14 22:32:10 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ #include <arm_sve.h>
+ 
+ svbool_t g (svbool_t p, svbool_t q, svbool_t a, svbool_t b,
+             svbool_t c, svbool_t d)
+ {
+   return (p == q) ? p : (a == b ? c : d);
+ }
+ 
+ /* { dg-final { scan-tree-dump-not {VEC_COND_EXPR} "optimized" } } */
+ /* { dg-final { scan-assembler-times {\teor\tp[0-9]+\.b} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.target/loongarch/bytepick.C gcc-16-20251214/gcc/testsuite/g++.target/loongarch/bytepick.C
*** gcc-16-20251207/gcc/testsuite/g++.target/loongarch/bytepick.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.target/loongarch/bytepick.C	Sun Dec 14 22:32:10 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-options "-O2 -mabi=lp64d" } */
  /* { dg-final { scan-assembler-times "bytepick.w\t\\\$r4,\\\$r5,\\\$r4" 3 } } */
  /* { dg-final { scan-assembler-times "bytepick.d\t\\\$r4,\\\$r5,\\\$r4" 7 } } */
--- 1,4 ----
! /* { dg-do compile { target { loongarch64*-*-* } } } */
  /* { dg-options "-O2 -mabi=lp64d" } */
  /* { dg-final { scan-assembler-times "bytepick.w\t\\\$r4,\\\$r5,\\\$r4" 3 } } */
  /* { dg-final { scan-assembler-times "bytepick.d\t\\\$r4,\\\$r5,\\\$r4" 7 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.target/loongarch/got-load.C gcc-16-20251214/gcc/testsuite/g++.target/loongarch/got-load.C
*** gcc-16-20251207/gcc/testsuite/g++.target/loongarch/got-load.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.target/loongarch/got-load.C	Sun Dec 14 22:32:10 2025
***************
*** 1,4 ****
! /* { dg-do compile } */
  /* { dg-options "-mabi=lp64d -O2 -mexplicit-relocs -mcmodel=normal -fdump-rtl-expand -fno-stack-protector" } */
  /* { dg-final { scan-rtl-dump-times "mem/u" 2 "expand" } } */
  
--- 1,4 ----
! /* { dg-do compile { target { loongarch64*-*-* } } } */
  /* { dg-options "-mabi=lp64d -O2 -mexplicit-relocs -mcmodel=normal -fdump-rtl-expand -fno-stack-protector" } */
  /* { dg-final { scan-rtl-dump-times "mem/u" 2 "expand" } } */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.target/loongarch/pr106828.C gcc-16-20251214/gcc/testsuite/g++.target/loongarch/pr106828.C
*** gcc-16-20251207/gcc/testsuite/g++.target/loongarch/pr106828.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.target/loongarch/pr106828.C	Sun Dec 14 22:32:10 2025
***************
*** 1,4 ****
! /* { dg-do preprocess } */
  /* { dg-options "-mabi=lp64d -fsanitize=address" } */
  
  /* Tests whether the compiler supports compile option '-fsanitize=address'.  */
--- 1,4 ----
! /* { dg-do preprocess { target { loongarch64*-*-* } } } */
  /* { dg-options "-mabi=lp64d -fsanitize=address" } */
  
  /* Tests whether the compiler supports compile option '-fsanitize=address'.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.target/loongarch/vect-ashr-lshr.C gcc-16-20251214/gcc/testsuite/g++.target/loongarch/vect-ashr-lshr.C
*** gcc-16-20251207/gcc/testsuite/g++.target/loongarch/vect-ashr-lshr.C	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/g++.target/loongarch/vect-ashr-lshr.C	Sun Dec 14 22:32:10 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-mlasx -O2" } */
+ /* { dg-require-effective-target loongarch_asx } */
  /* { dg-final { scan-assembler-times "vsrli.b" 2 } } */
  /* { dg-final { scan-assembler-times "vsrli.h" 2 } } */
  /* { dg-final { scan-assembler-times "vsrli.w" 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.target/riscv/rvv/autovec/pr123074.C gcc-16-20251214/gcc/testsuite/g++.target/riscv/rvv/autovec/pr123074.C
*** gcc-16-20251207/gcc/testsuite/g++.target/riscv/rvv/autovec/pr123074.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.target/riscv/rvv/autovec/pr123074.C	Sun Dec 14 22:32:10 2025
***************
*** 0 ****
--- 1,124 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv64gcv_zvl256b -mabi=lp64d -mrvv-vector-bits=zvl -mrvv-max-lmul=m2 -fpermissive -Wno-return-type" } */
+ 
+ namespace std {
+ template <typename _Iterator> _Iterator __miter_base(_Iterator);
+ template <typename _Default, typename, template <typename> class>
+ struct __detector {
+   using type = _Default;
+ };
+ template <typename _Default, template <typename> class _Op>
+ using __detected_or = __detector<_Default, void, _Op>;
+ template <typename _Default, template <typename> class _Op>
+ using __detected_or_t = typename __detected_or<_Default, _Op>::type;
+ template <typename _Tp> class allocator {
+ public:
+   typedef _Tp value_type;
+ };
+ template <typename> struct pointer_traits {
+   template <typename _Up> using rebind = _Up *;
+ };
+ } // namespace std
+ namespace __gnu_cxx {
+ template <typename _Iterator, typename> class __normal_iterator {
+ public:
+   _Iterator base();
+ };
+ } // namespace __gnu_cxx
+ namespace std {
+ template <bool, typename _OutIter, typename _InIter>
+ void __assign_one(_OutIter __out, _InIter __in) {
+   *__out = *__in;
+ }
+ template <bool _IsMove, typename _BI1, typename _BI2>
+ __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) { /* { dg-warning "with no type" "" } */
+   while (__first != __last) {
+     --__last;
+     --__result;
+     __assign_one<_IsMove>(__result, __last);
+   }
+ }
+ template <bool _IsMove, typename _BI1, typename _BI2>
+ __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result) { /* { dg-warning "with no type" "" } */
+   __copy_move_backward_a2<_IsMove>(__first, __last, __result);
+ }
+ template <bool _IsMove, typename _II, typename _OI>
+ __copy_move_backward_a(_II __first, _II __last, _OI __result) { /* { dg-warning "with no type" "" } */
+   __copy_move_backward_a1<_IsMove>(__first, __last, __result);
+ }
+ template <typename _BI1, typename _BI2>
+ move_backward(_BI1 __first, _BI1 __last, _BI2 __result) { /* { dg-warning "with no type" "" } */
+   __copy_move_backward_a<true>(__first, __miter_base(__last), __result);
+ }
+ struct __allocator_traits_base {
+   template <typename _Tp> using __pointer = typename _Tp::pointer;
+   template <typename _Tp> using __c_pointer = typename _Tp::const_pointer;
+ };
+ template <typename _Alloc> struct allocator_traits : __allocator_traits_base {
+   typedef typename _Alloc::value_type value_type;
+   using pointer = __detected_or_t<value_type *, __pointer>;
+   template <template <typename> class, typename _Tp> struct _Ptr {
+     using type = typename pointer_traits<pointer>::rebind<_Tp>;
+   };
+   using const_pointer = typename _Ptr<__c_pointer, value_type>::type;
+ };
+ } // namespace std
+ namespace __gnu_cxx {
+ template <typename _Alloc>
+ struct __alloc_traits : std::allocator_traits<_Alloc> {};
+ } // namespace __gnu_cxx
+ namespace std {
+ template <typename, typename _Alloc> struct _Vector_base {
+   typedef __gnu_cxx::__alloc_traits<_Alloc> _Tp_alloc_type;
+   typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer pointer;
+   struct {
+     pointer _M_finish;
+   } _M_impl;
+ };
+ template <typename _Tp, typename _Alloc = allocator<_Tp>>
+ class vector : _Vector_base<_Tp, _Alloc> {
+   typedef _Vector_base<_Tp, _Alloc> _Base;
+   typedef typename _Base::_Tp_alloc_type _Alloc_traits;
+ 
+ public:
+   typedef _Tp value_type;
+   typedef typename _Base::pointer pointer;
+   typedef typename _Alloc_traits::const_pointer const_pointer;
+   typedef __gnu_cxx::__normal_iterator<pointer, vector> iterator;
+   typedef __gnu_cxx::__normal_iterator<const_pointer, vector> const_iterator;
+   iterator begin();
+   iterator insert(const_iterator, const value_type &);
+   struct _Temporary_value {};
+   template <typename _Arg> void _M_insert_aux(iterator, _Arg &&);
+ };
+ template <typename _Tp, typename _Alloc>
+ typename vector<_Tp, _Alloc>::iterator
+ vector<_Tp, _Alloc>::insert(const_iterator, const value_type &) {
+   auto __pos = begin();
+   _Temporary_value __x_copy;
+   _M_insert_aux(__pos, __x_copy);
+ }
+ template <typename _Tp, typename _Alloc>
+ template <typename _Arg>
+ void vector<_Tp, _Alloc>::_M_insert_aux(iterator __position, _Arg &&) {
+   move_backward(__position.base(), this->_M_impl._M_finish,
+                 this->_M_impl._M_finish);
+ }
+ namespace internals {
+ struct distributing {
+   distributing &operator=(const distributing &);
+   int global_row;
+   *constraints; /* { dg-warning "with no type" "" } */
+ };
+ distributing &distributing::operator=(const distributing &in) {
+   global_row = in.global_row;
+   return; /* { dg-warning "return-statement with no value" "" } */
+ }
+ insert_index(vector<distributing> my_indices) { /* { dg-warning "with no type" "" } */
+   typedef vector<distributing>::iterator index_iterator;
+   index_iterator pos;
+   distributing row_value;
+   my_indices.insert(pos, row_value);
+ }
+ } // namespace internals
+ } // namespace std
diff -Nrcpad gcc-16-20251207/gcc/testsuite/g++.target/s390/builtin-array-arg-1.C gcc-16-20251214/gcc/testsuite/g++.target/s390/builtin-array-arg-1.C
*** gcc-16-20251207/gcc/testsuite/g++.target/s390/builtin-array-arg-1.C	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/g++.target/s390/builtin-array-arg-1.C	Sun Dec 14 22:32:10 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=z13 -mzarch" } */
+ /* { dg-final { scan-assembler-times {\tlarl\t(%r1),.LANCHOR0\n\tvllezf\t%v24,0\(\1\)\n\tbr\t%r14} 2 } } */
+ /* { dg-final { scan-assembler-times {\tlarl\t(%r1),.LANCHOR0\n\tvl\t%v24,4\(\1\)\n\tbr\t%r14} 1 } } */
+ 
+ /* Test C++ semantics w.r.t. array arguments.  */
+ 
+ #include "../../gcc.target/s390/builtin-array-arg-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.c-torture/compile/pr123069.c gcc-16-20251214/gcc/testsuite/gcc.c-torture/compile/pr123069.c
*** gcc-16-20251207/gcc/testsuite/gcc.c-torture/compile/pr123069.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.c-torture/compile/pr123069.c	Sun Dec 14 22:32:10 2025
***************
*** 0 ****
--- 1,9 ----
+ /* PR middle-end/123069 */
+ 
+ __attribute__((__vector_size__ (2 * sizeof (long long)))) unsigned long long v;
+ 
+ void
+ foo (void)
+ {
+   v *= 0xffffffff00000000ULL;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/CWE-131-examples.c	Sun Dec 14 22:32:10 2025
***************
*** 18,24 ****
     ALL DOCUMENTS AND THE INFORMATION CONTAINED IN THE CWE ARE PROVIDED ON AN "AS IS" BASIS AND THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE MITRE CORPORATION, ITS BOARD OF TRUSTEES, OFFICERS, AGENTS, AND EMPLOYEES, DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION THEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  
     IN NO EVENT SHALL THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE MITRE CORPORATION, ITS BOARD OF TRUSTEES, OFFICERS, AGENTS, AND EMPLOYEES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE INFORMATION OR THE USE OR OTHER DEALINGS IN THE CWE.  */
! 
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
--- 18,24 ----
     ALL DOCUMENTS AND THE INFORMATION CONTAINED IN THE CWE ARE PROVIDED ON AN "AS IS" BASIS AND THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE MITRE CORPORATION, ITS BOARD OF TRUSTEES, OFFICERS, AGENTS, AND EMPLOYEES, DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION THEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  
     IN NO EVENT SHALL THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE MITRE CORPORATION, ITS BOARD OF TRUSTEES, OFFICERS, AGENTS, AND EMPLOYEES BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE INFORMATION OR THE USE OR OTHER DEALINGS IN THE CWE.  */
! /* { dg-additional-options "-Wno-analyzer-too-complex" } */
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/abs-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/abs-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/abs-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/abs-1.c	Sun Dec 14 22:32:10 2025
*************** hide_long (long x)
*** 15,21 ****
    return x;
  }
    
! long int test_2 (long int x)
  {
    __analyzer_eval (labs (hide_long (42)) == 42); /* { dg-warning "TRUE" } */
    __analyzer_eval (labs (hide_long (-17)) == 17); /* { dg-warning "TRUE" } */
--- 15,21 ----
    return x;
  }
    
! void test_2 (long int x)
  {
    __analyzer_eval (labs (hide_long (42)) == 42); /* { dg-warning "TRUE" } */
    __analyzer_eval (labs (hide_long (-17)) == 17); /* { dg-warning "TRUE" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/analyzer-decls.h	Sun Dec 14 22:32:10 2025
***************
*** 17,41 ****
     None of these are actually implemented.  */
  
  /* Trigger a breakpoint in the analyzer when reached.  */
! extern void __analyzer_break (void);
  
  /* Emit a warning describing the 2nd argument (which can be of any
     type), at the given verbosity level.  This is for use when
     debugging, and may be of use in DejaGnu tests.  */
! extern void __analyzer_describe (int verbosity, ...);
  
  /* Dump copious information about the analyzer’s state when reached.  */
! extern void __analyzer_dump (void);
  
  /* Emit a warning describing the size of the base region of (*ptr).  */
! extern void __analyzer_dump_capacity (const void *ptr);
  
  /* When reached, dump GraphViz .dot source to stderr for a diagram
     describing the analyzer’s state.  */
! extern void __analyzer_dump_dot (void);
  
  /* Dump information about what decls have escaped at this point on the path.  */
! extern void __analyzer_dump_escaped (void);
  
  /* Dump information after analysis on all of the exploded nodes at this
     program point.
--- 17,53 ----
     None of these are actually implemented.  */
  
  /* Trigger a breakpoint in the analyzer when reached.  */
! extern void
! __analyzer_break (void)
!   __attribute__ ((nothrow));
  
  /* Emit a warning describing the 2nd argument (which can be of any
     type), at the given verbosity level.  This is for use when
     debugging, and may be of use in DejaGnu tests.  */
! extern void
! __analyzer_describe (int verbosity, ...)
!   __attribute__ ((nothrow));
  
  /* Dump copious information about the analyzer’s state when reached.  */
! extern void
! __analyzer_dump (void)
!   __attribute__ ((nothrow));
  
  /* Emit a warning describing the size of the base region of (*ptr).  */
! extern void
! __analyzer_dump_capacity (const void *ptr)
!   __attribute__ ((nothrow));
  
  /* When reached, dump GraphViz .dot source to stderr for a diagram
     describing the analyzer’s state.  */
! extern void
! __analyzer_dump_dot (void)
!   __attribute__ ((nothrow));
  
  /* Dump information about what decls have escaped at this point on the path.  */
! extern void
! __analyzer_dump_escaped (void)
!   __attribute__ ((nothrow));
  
  /* Dump information after analysis on all of the exploded nodes at this
     program point.
*************** extern void __analyzer_dump_escaped (voi
*** 45,80 ****
  
     __analyzer_dump_exploded_nodes (1);
     will also dump all of the states within those nodes.  */
! extern void __analyzer_dump_exploded_nodes (int);
  
  /* Emit a warning describing what is known about the value of NAME.  */
! extern void __analyzer_dump_named_constant (const char *name);
  
  /* Emit a placeholder "note" diagnostic with a path to this call site,
     if the analyzer finds a feasible path to it.  */
! extern void __analyzer_dump_path (void);
  
  /* Dump the region_model's state to stderr.  */
! extern void __analyzer_dump_region_model (void);
  
  /* Emit a warning describing the state of the 2nd argument
     (which can be of any type) with respect to NAME.
     This is for use when debugging, and may be of use in DejaGnu tests.  */
! extern void __analyzer_dump_state (const char *name, ...);
  
  /* Dump copious information about the analyzer’s state when reached.  */
! extern void __analyzer_dump_xml (void);
  
  /* Emit a warning with text "TRUE", FALSE" or "UNKNOWN" based on the
     truthfulness of the argument.  */
! extern void __analyzer_eval (int);
  
  /* Obtain an "unknown" void *.  */
! extern void *__analyzer_get_unknown_ptr (void);
  
  /* Complain if PTR doesn't point to a null-terminated string.
     TODO: eventually get the strlen of the buffer (without the
     optimizer touching it).  */
! extern __SIZE_TYPE__ __analyzer_get_strlen (const char *ptr);
  
  #endif /* #ifndef ANALYZER_DECLS_H.  */
--- 57,110 ----
  
     __analyzer_dump_exploded_nodes (1);
     will also dump all of the states within those nodes.  */
! extern void
! __analyzer_dump_exploded_nodes (int)
!   __attribute__ ((nothrow));
  
  /* Emit a warning describing what is known about the value of NAME.  */
! extern void
! __analyzer_dump_named_constant (const char *name)
!   __attribute__ ((nothrow));
  
  /* Emit a placeholder "note" diagnostic with a path to this call site,
     if the analyzer finds a feasible path to it.  */
! extern void
! __analyzer_dump_path (void)
!   __attribute__ ((nothrow));
  
  /* Dump the region_model's state to stderr.  */
! extern void
! __analyzer_dump_region_model (void)
!   __attribute__ ((nothrow));
  
  /* Emit a warning describing the state of the 2nd argument
     (which can be of any type) with respect to NAME.
     This is for use when debugging, and may be of use in DejaGnu tests.  */
! extern void
! __analyzer_dump_state (const char *name, ...)
!   __attribute__ ((nothrow));
  
  /* Dump copious information about the analyzer’s state when reached.  */
! extern void
! __analyzer_dump_xml (void)
!   __attribute__ ((nothrow));
  
  /* Emit a warning with text "TRUE", FALSE" or "UNKNOWN" based on the
     truthfulness of the argument.  */
! extern void
! __analyzer_eval (int)
!   __attribute__ ((nothrow));
  
  /* Obtain an "unknown" void *.  */
! extern void *
! __analyzer_get_unknown_ptr (void)
!   __attribute__ ((nothrow));
  
  /* Complain if PTR doesn't point to a null-terminated string.
     TODO: eventually get the strlen of the buffer (without the
     optimizer touching it).  */
! extern __SIZE_TYPE__
! __analyzer_get_strlen (const char *ptr)
!   __attribute__ ((nothrow));
  
  #endif /* #ifndef ANALYZER_DECLS_H.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/analyzer.exp gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/analyzer.exp
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/analyzer.exp	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/analyzer.exp	Sun Dec 14 22:32:10 2025
*************** if [info exists DEFAULT_CFLAGS] then {
*** 30,36 ****
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_CFLAGS "-fanalyzer -Wanalyzer-too-complex -Wanalyzer-symbol-too-complex -fanalyzer-call-summaries"
  
  if { [istarget "*-*-darwin*" ] } {
    # On macOS, system headers redefine by default some macros (memcpy,
--- 30,36 ----
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_CFLAGS "-fanalyzer -Wanalyzer-too-complex -Wanalyzer-symbol-too-complex"
  
  if { [istarget "*-*-darwin*" ] } {
    # On macOS, system headers redefine by default some macros (memcpy,
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/boxed-malloc-1.c	Sun Dec 14 22:32:10 2025
*************** boxed_malloc (size_t sz)
*** 17,23 ****
    return result;
  }
  
! boxed_ptr
  boxed_free (boxed_ptr ptr)
  {
    free (ptr.value);
--- 17,23 ----
    return result;
  }
  
! void
  boxed_free (boxed_ptr ptr)
  {
    free (ptr.value);
*************** void test_22 (void)
*** 287,300 ****
    free (ptr.value); /* { dg-warning "double-'free' of 'ptr.value'" } */ 
  }
  
! int test_24 (void)
  {
    boxed_ptr ptr;
    ptr.value = __builtin_alloca (sizeof (int)); /* { dg-message "region created on stack here" } */
    free (ptr.value); /* { dg-warning "'free' of 'ptr.value' which points to memory on the stack \\\[CWE-590\\\]" } */
  }
  
! int test_25 (void)
  {
    char tmp[100]; /* { dg-message "region created on stack here" } */
    boxed_ptr p;
--- 287,300 ----
    free (ptr.value); /* { dg-warning "double-'free' of 'ptr.value'" } */ 
  }
  
! void test_24 (void)
  {
    boxed_ptr ptr;
    ptr.value = __builtin_alloca (sizeof (int)); /* { dg-message "region created on stack here" } */
    free (ptr.value); /* { dg-warning "'free' of 'ptr.value' which points to memory on the stack \\\[CWE-590\\\]" } */
  }
  
! void test_25 (void)
  {
    char tmp[100]; /* { dg-message "region created on stack here" } */
    boxed_ptr p;
*************** int test_25 (void)
*** 304,310 ****
  
  char global_buffer[100]; /* { dg-message "region created here" } */
  
! int test_26 (void)
  {
    boxed_ptr p;
    p.value = global_buffer;
--- 304,310 ----
  
  char global_buffer[100]; /* { dg-message "region created here" } */
  
! void test_26 (void)
  {
    boxed_ptr p;
    p.value = global_buffer;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/call-summaries-2.c	Sun Dec 14 22:32:10 2025
*************** int consume_two_ints_from_va_list (__bui
*** 509,515 ****
    return i * j;
  }
  
! int test_consume_two_ints_from_va_list (__builtin_va_list ap1)
  {
    int p1, p2;
    __builtin_va_list ap2;
--- 509,515 ----
    return i * j;
  }
  
! void test_consume_two_ints_from_va_list (__builtin_va_list ap1)
  {
    int p1, p2;
    __builtin_va_list ap2;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/combined-conditionals-1.c	Sun Dec 14 22:32:10 2025
*************** void test_6 (void)
*** 48,54 ****
      __analyzer_dump_path (); /* { dg-message "\\(2\\) \\.\\.\\.to here" } */
  }
  
! int test_7 (void)
  {
    if (foo () ? bar () ? baz () : 0 : 0) /* { dg-message "\\(1\\) following 'true' branch\\.\\.\\." } */
      __analyzer_dump_path (); /* { dg-message "\\(2\\) \\.\\.\\.to here" } */    
--- 48,54 ----
      __analyzer_dump_path (); /* { dg-message "\\(2\\) \\.\\.\\.to here" } */
  }
  
! void test_7 (void)
  {
    if (foo () ? bar () ? baz () : 0 : 0) /* { dg-message "\\(1\\) following 'true' branch\\.\\.\\." } */
      __analyzer_dump_path (); /* { dg-message "\\(2\\) \\.\\.\\.to here" } */    
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/compound-assignment-2.c	Sun Dec 14 22:32:10 2025
*************** test_2 (void)
*** 22,24 ****
--- 22,25 ----
    aw2.ptrs[1] = malloc (512);
  } /* { dg-warning "leak of 'aw2.ptrs.0.'" "leak of element 0" } */
  /* { dg-warning "leak of 'aw2.ptrs.1.'" "leak of element 1" { target *-*-* } .-1 } */
+ /* { dg-warning "use of uninitialized value '<return-value>'" "missing return" { target *-*-* } .-2 } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/compound-assignment-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/compound-assignment-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/compound-assignment-3.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/compound-assignment-3.c	Sun Dec 14 22:32:10 2025
*************** test_2 (void)
*** 23,25 ****
--- 23,26 ----
    struct union_wrapper uw2;
    uw2.u.ptr = malloc (1024);
  } /* { dg-warning "leak of 'uw2.u.ptr'" } */
+ /* { dg-warning "use of uninitialized value '<return-value>'" "missing return" { target *-*-* } .-1 } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/conditionals-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/conditionals-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/conditionals-3.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/conditionals-3.c	Sun Dec 14 22:32:10 2025
*************** static void __analyzer_only_called_when_
*** 12,18 ****
    __analyzer_eval (i == 17); /* { dg-warning "TRUE" } */
  }
  
! int test_1 (int flag_a, int flag_b)
  {
    int i = 17;
  
--- 12,18 ----
    __analyzer_eval (i == 17); /* { dg-warning "TRUE" } */
  }
  
! void test_1 (int flag_a, int flag_b)
  {
    int i = 17;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-1.c	Sun Dec 14 22:32:10 2025
*************** struct coord
*** 178,184 ****
    long y;
  };
  
! int test_12d (struct coord c)
  {
    struct coord d;
    d = c;
--- 178,184 ----
    long y;
  };
  
! void test_12d (struct coord c)
  {
    struct coord d;
    d = c;
*************** int test_39 (void)
*** 848,854 ****
    return *ptr;
  }
  
! int test_40 (int flag)
  {
    int i;
    if (flag)
--- 848,854 ----
    return *ptr;
  }
  
! void test_40 (int flag)
  {
    int i;
    if (flag)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-15.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-15.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-15.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-15.c	Sun Dec 14 22:32:10 2025
*************** int test_2 (const struct coord *c1, cons
*** 26,32 ****
    return (dx * dx) + (dy * dy) + (dz * dz) <= r_squared;
  }
  
! int test_3 (const struct coord *c1, const struct coord *c2, struct coord *out)
  {
    out->x = c1->x + c2->x;
    out->y = c1->y + c2->y;
--- 26,32 ----
    return (dx * dx) + (dy * dy) + (dz * dz) <= r_squared;
  }
  
! void test_3 (const struct coord *c1, const struct coord *c2, struct coord *out)
  {
    out->x = c1->x + c2->x;
    out->y = c1->y + c2->y;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-17.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-17.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-17.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-17.c	Sun Dec 14 22:32:10 2025
*************** static const config table[2] = {
*** 14,20 ****
    { cb_2 }
  };
  
! int deflate (foo_t *s, int which)
  {
    (*(table[which].func))(s);
  }
--- 14,20 ----
    { cb_2 }
  };
  
! void deflate (foo_t *s, int which)
  {
    (*(table[which].func))(s);
  }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-20a.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-20a.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-20a.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-20a.c	Sun Dec 14 22:32:10 2025
*************** test (int n) {
*** 17,23 ****
        for (; i >= 0; i--) {
  	free(arr[i]); /* { dg-bogus "double-'free'" } */
        }
!       free(arr); /* { dg-bogus "leak" "" { xfail *-*-* } } */
        return NULL;
      }
    }
--- 17,23 ----
        for (; i >= 0; i--) {
  	free(arr[i]); /* { dg-bogus "double-'free'" } */
        }
!       free(arr); /* { dg-bogus "leak" } */
        return NULL;
      }
    }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-7.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-7.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/data-model-7.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/data-model-7.c	Sun Dec 14 22:32:10 2025
***************
*** 1,7 ****
  /* { dg-additional-options "-fno-analyzer-state-merge" } */
  #include "analyzer-decls.h"
  
! int test_40 (int flag)
  {
    int i;
    if (flag)
--- 1,7 ----
  /* { dg-additional-options "-fno-analyzer-state-merge" } */
  #include "analyzer-decls.h"
  
! void test_40 (int flag)
  {
    int i;
    if (flag)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/doom-d_main-IdentifyVersion.c	Sun Dec 14 22:32:10 2025
*************** IdentifyVersion(void)
*** 147,159 ****
      strcpy(basedefault,
             "devdata"
             "default.cfg");
!     return; /* { dg-warning "leak of 'doom2wad'" } */
!     /* { dg-warning "leak of 'doomuwad'"    "leak" { target *-*-* } .-1 } */
!     /* { dg-warning "leak of 'doomwad'"     "leak" { target *-*-* } .-2 } */
!     /* { dg-warning "leak of 'doom1wad'"    "leak" { target *-*-* } .-3 } */
!     /* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
!     /* { dg-warning "leak of 'tntwad'"      "leak" { target *-*-* } .-5 } */
!     /* { dg-warning "leak of 'doom2fwad'"   "leak" { target *-*-* } .-6 } */
    }
  
    if (M_CheckParm("-regdev")) {
--- 147,159 ----
      strcpy(basedefault,
             "devdata"
             "default.cfg");
!     return; /* { dg-warning "leak of 'doom2wad'" "" { xfail *-*-* } } */
!     /* { dg-warning "leak of 'doomuwad'"    "leak" { xfail *-*-* } .-1 } */
!     /* { dg-warning "leak of 'doomwad'"     "leak" { xfail *-*-* } .-2 } */
!     /* { dg-warning "leak of 'doom1wad'"    "leak" { xfail *-*-* } .-3 } */
!     /* { dg-warning "leak of 'plutoniawad'" "leak" { xfail *-*-* } .-4 } */
!     /* { dg-warning "leak of 'tntwad'"      "leak" { xfail *-*-* } .-5 } */
!     /* { dg-warning "leak of 'doom2fwad'"   "leak" { xfail *-*-* } .-6 } */
    }
  
    if (M_CheckParm("-regdev")) {
*************** IdentifyVersion(void)
*** 170,182 ****
      strcpy(basedefault,
             "devdata"
             "default.cfg");
!     return; /* { dg-warning "leak of 'doom2wad'" } */
!     /* { dg-warning "leak of 'doomuwad'"    "leak" { target *-*-* } .-1 } */
!     /* { dg-warning "leak of 'doomwad'"     "leak" { target *-*-* } .-2 } */
!     /* { dg-warning "leak of 'doom1wad'"    "leak" { target *-*-* } .-3 } */
!     /* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
!     /* { dg-warning "leak of 'tntwad'"      "leak" { target *-*-* } .-5 } */
!     /* { dg-warning "leak of 'doom2fwad'"   "leak" { target *-*-* } .-6 } */
    }
  
    if (M_CheckParm("-comdev")) {
--- 170,182 ----
      strcpy(basedefault,
             "devdata"
             "default.cfg");
!     return; /* { dg-warning "leak of 'doom2wad'" "" { xfail *-*-* } } */
!     /* { dg-warning "leak of 'doomuwad'"    "leak" { xfail *-*-* } .-1 } */
!     /* { dg-warning "leak of 'doomwad'"     "leak" { xfail *-*-* } .-2 } */
!     /* { dg-warning "leak of 'doom1wad'"    "leak" { xfail *-*-* } .-3 } */
!     /* { dg-warning "leak of 'plutoniawad'" "leak" { xfail *-*-* } .-4 } */
!     /* { dg-warning "leak of 'tntwad'"      "leak" { xfail *-*-* } .-5 } */
!     /* { dg-warning "leak of 'doom2fwad'"   "leak" { xfail *-*-* } .-6 } */
    }
  
    if (M_CheckParm("-comdev")) {
*************** IdentifyVersion(void)
*** 193,205 ****
      strcpy(basedefault,
             "devdata"
             "default.cfg");
!     return; /* { dg-warning "leak of 'doom2wad'" } */
!     /* { dg-warning "leak of 'doomuwad'"    "leak" { target *-*-* } .-1 } */
!     /* { dg-warning "leak of 'doomwad'"     "leak" { target *-*-* } .-2 } */
!     /* { dg-warning "leak of 'doom1wad'"    "leak" { target *-*-* } .-3 } */
!     /* { dg-warning "leak of 'plutoniawad'" "leak" { target *-*-* } .-4 } */
!     /* { dg-warning "leak of 'tntwad'"      "leak" { target *-*-* } .-5 } */
!     /* { dg-warning "leak of 'doom2fwad'"   "leak" { target *-*-* } .-6 } */
    }
  
    if (!access(doom2fwad, 4)) {
--- 193,205 ----
      strcpy(basedefault,
             "devdata"
             "default.cfg");
!     return; /* { dg-warning "leak of 'doom2wad'" "" { xfail *-*-* } } */
!     /* { dg-warning "leak of 'doomuwad'"    "leak" { xfail *-*-* } .-1 } */
!     /* { dg-warning "leak of 'doomwad'"     "leak" { xfail *-*-* } .-2 } */
!     /* { dg-warning "leak of 'doom1wad'"    "leak" { xfail *-*-* } .-3 } */
!     /* { dg-warning "leak of 'plutoniawad'" "leak" { xfail *-*-* } .-4 } */
!     /* { dg-warning "leak of 'tntwad'"      "leak" { xfail *-*-* } .-5 } */
!     /* { dg-warning "leak of 'doom2fwad'"   "leak" { xfail *-*-* } .-6 } */
    }
  
    if (!access(doom2fwad, 4)) {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/doom-s_sound-pr108867.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/doom-s_sound-pr108867.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/doom-s_sound-pr108867.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/doom-s_sound-pr108867.c	Sun Dec 14 22:32:10 2025
*************** S_getChannel(void* origin, sfxinfo_t* sf
*** 633,639 ****
    if (cnum == numChannels) {
  
      for (cnum = 0; cnum < numChannels; cnum++)
!       if (channels[cnum].sfxinfo->priority >= sfxinfo->priority) /* { dg-warning "dereference of NULL" } */
          break;
  
      if (cnum == numChannels) {
--- 633,639 ----
    if (cnum == numChannels) {
  
      for (cnum = 0; cnum < numChannels; cnum++)
!       if (channels[cnum].sfxinfo->priority >= sfxinfo->priority) /* { dg-warning "dereference of NULL" "" { xfail *-*-* } } */
          break;
  
      if (cnum == numChannels) {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/edges-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/edges-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/edges-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/edges-1.c	Sun Dec 14 22:32:10 2025
*************** void test_1 (const char *path, int flag)
*** 22,30 ****
      bar ();
  
    if (flag) /* { dg-message "when 'flag == 0'" "branch event" } */
!     fclose (fp); /* { dg-bogus "leak" "warning at wrong location" { xfail *-*-* } .-1 } */
! } /* { dg-warning "leak of FILE 'fp'" "warning" { xfail *-*-* } } */
! // TODO(xfail): location of leak message ought to be on closing brace
  
  void test_2 (const char *path, int flag)
  {
--- 22,29 ----
      bar ();
  
    if (flag) /* { dg-message "when 'flag == 0'" "branch event" } */
!     fclose (fp);
! } /* { dg-warning "leak of FILE 'fp'" "warning" } */
  
  void test_2 (const char *path, int flag)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/error-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/error-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/error-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/error-1.c	Sun Dec 14 22:32:10 2025
*************** void test_6 (int st, const char *str)
*** 65,92 ****
    __analyzer_eval (st == 0); /* { dg-warning "TRUE" } */
  }
  
! char *test_error_unterminated (int st)
  {
    char fmt[3] = "abc";
    error (st, errno, fmt); /* { dg-warning "stack-based buffer over-read" } */
    /* { dg-message "while looking for null terminator for argument 3 \\('&fmt'\\) of 'error'..." "event" { target *-*-* } .-1 } */
  }
  
! char *test_error_at_line_unterminated (int st, int errno)
  {
    char fmt[3] = "abc";
    error_at_line (st, errno, __FILE__, __LINE__, fmt); /* { dg-warning "stack-based buffer over-read" } */
    /* { dg-message "while looking for null terminator for argument 5 \\('&fmt'\\) of 'error_at_line'..." "event" { target *-*-* } .-1 } */
  }
  
! char *test_error_uninitialized (int st, int errno)
  {
    char fmt[16];
    error (st, errno, fmt); /* { dg-warning "use of uninitialized value 'fmt\\\[0\\\]'" } */
    /* { dg-message "while looking for null terminator for argument 3 \\('&fmt'\\) of 'error'..." "event" { target *-*-* } .-1 } */
  }
  
! char *test_error_at_line_uninitialized (int st, int errno)
  {
    char fmt[16];
    error_at_line (st, errno, __FILE__, __LINE__, fmt); /* { dg-warning "use of uninitialized value 'fmt\\\[0\\\]'" } */
--- 65,92 ----
    __analyzer_eval (st == 0); /* { dg-warning "TRUE" } */
  }
  
! void test_error_unterminated (int st)
  {
    char fmt[3] = "abc";
    error (st, errno, fmt); /* { dg-warning "stack-based buffer over-read" } */
    /* { dg-message "while looking for null terminator for argument 3 \\('&fmt'\\) of 'error'..." "event" { target *-*-* } .-1 } */
  }
  
! void test_error_at_line_unterminated (int st, int errno)
  {
    char fmt[3] = "abc";
    error_at_line (st, errno, __FILE__, __LINE__, fmt); /* { dg-warning "stack-based buffer over-read" } */
    /* { dg-message "while looking for null terminator for argument 5 \\('&fmt'\\) of 'error_at_line'..." "event" { target *-*-* } .-1 } */
  }
  
! void test_error_uninitialized (int st, int errno)
  {
    char fmt[16];
    error (st, errno, fmt); /* { dg-warning "use of uninitialized value 'fmt\\\[0\\\]'" } */
    /* { dg-message "while looking for null terminator for argument 3 \\('&fmt'\\) of 'error'..." "event" { target *-*-* } .-1 } */
  }
  
! void test_error_at_line_uninitialized (int st, int errno)
  {
    char fmt[16];
    error_at_line (st, errno, __FILE__, __LINE__, fmt); /* { dg-warning "use of uninitialized value 'fmt\\\[0\\\]'" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/explode-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/explode-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/explode-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/explode-1.c	Sun Dec 14 22:32:10 2025
*************** void test (void)
*** 47,57 ****
  	{
  	default:
  	case 0:
! 	  *pp = malloc (16);  /* { dg-warning "leak" "" { xfail *-*-* } } */
! 	  // TODO: xfail
  	  break;
  	case 1:
! 	  free (*pp);
  	  break;
  	case 2:
  	  /* no-op.  */
--- 47,57 ----
  	{
  	default:
  	case 0:
! 	  *pp = malloc (16);  /* { dg-warning "leak" } */ 
  	  break;
  	case 1:
! 	  free (*pp); /* { dg-warning "uninit" } */
! 	  /* { dg-warning "double-'free'" "" { target *-*-* } .-1 } */
  	  break;
  	case 2:
  	  /* no-op.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/explode-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/explode-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/explode-2.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/explode-2.c	Sun Dec 14 22:32:10 2025
*************** void test (void)
*** 24,30 ****
  	  p0 = malloc (16); /* { dg-warning "leak" "" { xfail *-*-* } } */
  	  break;
  	case 1:
! 	  free (p0); /* { dg-warning "double-'free' of 'p0'" } */
  	  break;
  
  	case 2:
--- 24,30 ----
  	  p0 = malloc (16); /* { dg-warning "leak" "" { xfail *-*-* } } */
  	  break;
  	case 1:
! 	  free (p0); /* { dg-warning "double-'free' of 'p0'" "" { xfail *-*-* } } */
  	  break;
  
  	case 2:
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/explode-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/explode-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/explode-3.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/explode-3.c	Sun Dec 14 22:32:10 2025
*************** void test (void)
*** 29,39 ****
  	{
  	default:
  	case 0:
! 	  *pp = malloc (16); /* { dg-warning "leak" "" { xfail *-*-* } } */
! 	  // TODO: xfail
  	  break;
  	case 1:
! 	  free (*pp);
  	  break;
  	case 2:
  	  /* no-op.  */
--- 29,39 ----
  	{
  	default:
  	case 0:
! 	  *pp = malloc (16); /* { dg-warning "leak" } */
  	  break;
  	case 1:
! 	  free (*pp); /* { dg-warning "uninit" } */
! 	  /* { dg-warning "double-'free'" "" { target *-*-* } .-1 } */
  	  break;
  	case 2:
  	  /* no-op.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/fd-datagram-socket.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/fd-datagram-socket.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/fd-datagram-socket.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/fd-datagram-socket.c	Sun Dec 14 22:32:10 2025
*************** void test_close_checked_socket (void)
*** 37,46 ****
  void test_leak_checked_socket (void)
  {
    int fd = socket (AF_UNIX, SOCK_DGRAM, 0); /* { dg-message "datagram socket created here" } */
!   if (fd == -1) /* { dg-warning "leak of file descriptor 'fd'" } */
      return;
!   // TODO: strange location for leak message
! }
  
  void test_bind (const char *sockname)
  {
--- 37,45 ----
  void test_leak_checked_socket (void)
  {
    int fd = socket (AF_UNIX, SOCK_DGRAM, 0); /* { dg-message "datagram socket created here" } */
!   if (fd == -1) 
      return;
! } /* { dg-warning "leak of file descriptor 'fd'" } */
  
  void test_bind (const char *sockname)
  {
*************** void test_leak_of_bound_socket (const ch
*** 76,83 ****
    memset (&addr, 0, sizeof (addr));
    addr.sun_family = AF_UNIX;
    strncpy (addr.sun_path, sockname, sizeof(addr.sun_path) - 1);
!   bind (fd, (struct sockaddr *)&addr, sizeof (addr)); /* { dg-warning "leak of file descriptor 'fd'" } */
! }
  
  void test_listen_on_datagram_socket_without_bind (void)
  {
--- 75,82 ----
    memset (&addr, 0, sizeof (addr));
    addr.sun_family = AF_UNIX;
    strncpy (addr.sun_path, sockname, sizeof(addr.sun_path) - 1);
!   bind (fd, (struct sockaddr *)&addr, sizeof (addr));
! } /* { dg-warning "leak of file descriptor 'fd'" } */
  
  void test_listen_on_datagram_socket_without_bind (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c	Sun Dec 14 22:32:10 2025
*************** main (void)
*** 114,120 ****
                  new = accept (sock,
                                (struct sockaddr *) &clientname,
                                &size);
!                 if (new < 0)
                    {
                      perror ("accept");
                      exit (EXIT_FAILURE);
--- 114,120 ----
                  new = accept (sock,
                                (struct sockaddr *) &clientname,
                                &size);
!                 if (new < 0) /* { dg-bogus "leak" "FIXME" { xfail *-*-* } } */
                    {
                      perror ("accept");
                      exit (EXIT_FAILURE);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/fd-stream-socket.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/fd-stream-socket.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/fd-stream-socket.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/fd-stream-socket.c	Sun Dec 14 22:32:10 2025
*************** void test_close_checked_socket (void)
*** 36,45 ****
  void test_leak_checked_socket (void)
  {
    int fd = socket (AF_UNIX, SOCK_STREAM, 0); /* { dg-message "stream socket created here" } */
!   if (fd == -1) /* { dg-warning "leak of file descriptor 'fd'" } */
      return;
!   // TODO: strange location for leak message
! }
  
  void test_bind_on_checked_socket (const char *sockname)
  {
--- 36,44 ----
  void test_leak_checked_socket (void)
  {
    int fd = socket (AF_UNIX, SOCK_STREAM, 0); /* { dg-message "stream socket created here" } */
!   if (fd == -1)
      return;
! } /* { dg-warning "leak of file descriptor 'fd'" } */
  
  void test_bind_on_checked_socket (const char *sockname)
  {
*************** void test_leak_of_bound_socket (const ch
*** 74,81 ****
    memset (&addr, 0, sizeof (addr));
    addr.sun_family = AF_UNIX;
    strncpy (addr.sun_path, sockname, sizeof(addr.sun_path) - 1);
!   bind (fd, (struct sockaddr *)&addr, sizeof (addr)); /* { dg-warning "leak of file descriptor 'fd'" } */
! }
  
  void test_listen_without_bind (void)
  {
--- 73,80 ----
    memset (&addr, 0, sizeof (addr));
    addr.sun_family = AF_UNIX;
    strncpy (addr.sun_path, sockname, sizeof(addr.sun_path) - 1);
!   bind (fd, (struct sockaddr *)&addr, sizeof (addr));
! } /* { dg-warning "leak of file descriptor 'fd'" } */
  
  void test_listen_without_bind (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-1.c	Sun Dec 14 22:32:10 2025
*************** int *test_23a (int n)
*** 267,279 ****
    return ptr;
  }
  
! int test_24 (void)
  {
    void *ptr = __builtin_alloca (sizeof (int)); /* { dg-message "region created on stack here" } */
    free (ptr); /* { dg-warning "'free' of 'ptr' which points to memory on the stack \\\[CWE-590\\\]" } */
  }
  
! int test_25 (void)
  {
    char tmp[100]; /* { dg-message "region created on stack here" } */
    void *p = tmp;
--- 267,279 ----
    return ptr;
  }
  
! void test_24 (void)
  {
    void *ptr = __builtin_alloca (sizeof (int)); /* { dg-message "region created on stack here" } */
    free (ptr); /* { dg-warning "'free' of 'ptr' which points to memory on the stack \\\[CWE-590\\\]" } */
  }
  
! void test_25 (void)
  {
    char tmp[100]; /* { dg-message "region created on stack here" } */
    void *p = tmp;
*************** int test_25 (void)
*** 283,289 ****
  
  char global_buffer[100]; /* { dg-message "region created here" } */
  
! int test_26 (void)
  {
    void *p = global_buffer;
    free (p); /* { dg-warning "'free' of 'p' which points to memory not on the heap \\\[CWE-590\\\]" } */
--- 283,289 ----
  
  char global_buffer[100]; /* { dg-message "region created here" } */
  
! void test_26 (void)
  {
    void *p = global_buffer;
    free (p); /* { dg-warning "'free' of 'p' which points to memory not on the heap \\\[CWE-590\\\]" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-many-paths-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-many-paths-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-many-paths-2.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-many-paths-2.c	Sun Dec 14 22:32:10 2025
*************** extern void Py_Dealloc (PyObject *op);
*** 15,25 ****
  	Py_Dealloc((PyObject *)(op));			\
      } while (0)
  
! int test (PyObject *obj_01, PyObject *obj_02, PyObject *obj_03,
! 	  PyObject *obj_04, PyObject *obj_05, PyObject *obj_06,
! 	  PyObject *obj_07, PyObject *obj_08, PyObject *obj_09,
! 	  PyObject *obj_10, PyObject *obj_11, PyObject *obj_12,
! 	  PyObject *obj_13, PyObject *obj_14, PyObject *obj_15
  )
  {
    Py_DECREF (obj_01); Py_DECREF (obj_02); Py_DECREF (obj_03);
--- 15,26 ----
  	Py_Dealloc((PyObject *)(op));			\
      } while (0)
  
! void
! test (PyObject *obj_01, PyObject *obj_02, PyObject *obj_03,
!       PyObject *obj_04, PyObject *obj_05, PyObject *obj_06,
!       PyObject *obj_07, PyObject *obj_08, PyObject *obj_09,
!       PyObject *obj_10, PyObject *obj_11, PyObject *obj_12,
!       PyObject *obj_13, PyObject *obj_14, PyObject *obj_15
  )
  {
    Py_DECREF (obj_01); Py_DECREF (obj_02); Py_DECREF (obj_03);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-paths-10.c	Sun Dec 14 22:32:10 2025
***************
*** 1,7 ****
  #include <stdlib.h>
  #include "analyzer-decls.h"
  
! int test (int flag)
  {
    int other_flag;
    if (flag)
--- 1,7 ----
  #include <stdlib.h>
  #include "analyzer-decls.h"
  
! void test (int flag)
  {
    int other_flag;
    if (flag)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/malloc-vs-local-4.c	Sun Dec 14 22:32:10 2025
*************** void __attribute__((noinline)) callee_2
*** 22,28 ****
    *ptr = 42;
  }
  
! int test_2 (int flag)
  {
    int i;
  
--- 22,28 ----
    *ptr = 42;
  }
  
! void test_2 (int flag)
  {
    int i;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/memset-CVE-2017-18549-1.c	Sun Dec 14 22:32:10 2025
*************** extern void check_uninit (u8 v);
*** 43,49 ****
  
  /* Adapted from drivers/scsi/aacraid/commctrl.c  */
  
! static int aac_send_raw_srb(/* [...snip...] */)
  {
  	u32 byte_count = 0;
  
--- 43,49 ----
  
  /* Adapted from drivers/scsi/aacraid/commctrl.c  */
  
! static void aac_send_raw_srb(/* [...snip...] */)
  {
  	u32 byte_count = 0;
  
*************** static int aac_send_raw_srb(/* [...snip.
*** 74,80 ****
  	check_uninit (reply.padding[1]); /* { dg-warning "uninitialized value" } */
  }
  
! static int aac_send_raw_srb_fixed(/* [...snip...] */)
  {
  	u32 byte_count = 0;
  
--- 74,80 ----
  	check_uninit (reply.padding[1]); /* { dg-warning "uninitialized value" } */
  }
  
! static void aac_send_raw_srb_fixed(/* [...snip...] */)
  {
  	u32 byte_count = 0;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-1.c	Sun Dec 14 22:32:10 2025
***************
*** 1,5 ****
  /* { dg-require-effective-target ptr_eq_long } */
! /* { dg-additional-options "-O2 -Wno-shift-count-overflow -Wno-analyzer-symbol-too-complex" } */
  
  struct lisp;
  union vectorlike_header { long size; };
--- 1,5 ----
  /* { dg-require-effective-target ptr_eq_long } */
! /* { dg-additional-options "-O2 -Wno-shift-count-overflow -Wno-analyzer-symbol-too-complex -fanalyzer-call-summaries" } */
  
  struct lisp;
  union vectorlike_header { long size; };
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c	Sun Dec  7 22:32:11 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/null-deref-pr102671-2.c	Sun Dec 14 22:32:10 2025
*************** PSEUDOVECTOR_TYPEP (union vectorlike_hea
*** 36,42 ****
  {
    long PSEUDOVECTOR_FLAG = 1L << 62;
    long PVEC_TYPE_MASK = 0x3fL << 24;
!   return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK)) /* { dg-bogus "dereference of NULL 'time'" "PR analyzer/107526" { xfail *-*-* } } */
  	  == (PSEUDOVECTOR_FLAG | (code << 24)));
  }
  
--- 36,42 ----
  {
    long PSEUDOVECTOR_FLAG = 1L << 62;
    long PVEC_TYPE_MASK = 0x3fL << 24;
!   return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK)) /* { dg-bogus "dereference of NULL 'time'" "PR analyzer/107526" } */
  	  == (PSEUDOVECTOR_FLAG | (code << 24)));
  }
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr101143.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr101143.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr101143.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr101143.c	Sun Dec 14 22:32:10 2025
*************** test_malloc (void)
*** 10,16 ****
    return malloc (sizeof (int));
  }
  
! void *
  test_alloca (void)
  {
    void *p = alloca (sizeof (int));
--- 10,16 ----
    return malloc (sizeof (int));
  }
  
! void
  test_alloca (void)
  {
    void *p = alloca (sizeof (int));
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr101837.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr101837.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr101837.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr101837.c	Sun Dec 14 22:32:10 2025
*************** void memcheck(void *ptr) {
*** 7,10 ****
  }
  
  int emalloc(int size) { memcheck(__builtin_malloc(size)); } /* { dg-message "allocated here" } */
! int main() { int max_envvar_len = emalloc(max_envvar_len + 1); } /* { dg-message "use of uninitialized value 'max_envvar_len'" } */
--- 7,12 ----
  }
  
  int emalloc(int size) { memcheck(__builtin_malloc(size)); } /* { dg-message "allocated here" } */
! /* { dg-warning "use of uninitialized value '<return-value>'" "missing return" { target *-*-* } .-1 } */
! 
! void main() { int max_envvar_len = emalloc(max_envvar_len + 1); } /* { dg-message "use of uninitialized value 'max_envvar_len'" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr101983-not-main.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr101983-not-main.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr101983-not-main.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr101983-not-main.c	Sun Dec 14 22:32:10 2025
*************** void func(struct list **res)
*** 31,37 ****
  	} while (true);
  }
  
! int not_main()
  {
  	struct list *res;
  	func(&res);
--- 31,37 ----
  	} while (true);
  }
  
! void not_main()
  {
  	struct list *res;
  	func(&res);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr103892.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr103892.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr103892.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr103892.c	Sun Dec 14 22:32:10 2025
***************
*** 1,4 ****
! /* { dg-additional-options "-O2 -Wno-analyzer-too-complex -Wno-analyzer-symbol-too-complex" } */
  
  /* C only: C++ FE optimizes argstr_get_word completely away
     and therefore the number of SN diminishes compared to C,
--- 1,4 ----
! /* { dg-additional-options "-O2 -Wno-analyzer-too-complex -Wno-analyzer-symbol-too-complex -fanalyzer-call-summaries" } */
  
  /* C only: C++ FE optimizes argstr_get_word completely away
     and therefore the number of SN diminishes compared to C,
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr104224.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr104224.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr104224.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr104224.c	Sun Dec 14 22:32:10 2025
*************** void func5(const int *a, int max)
*** 50,57 ****
  
  int func6(const int *num)
  {
!         if (*num)  /* { dg-warning "uninitialized" } */
!                 return *num;  /* { dg-warning "uninitialized" } */
          else
                  return 0;
  }
--- 50,57 ----
  
  int func6(const int *num)
  {
!         if (*num)  /* { dg-warning "uninitialized" "FIXME: feasibility" { xfail *-*-* } } */
!                 return *num;  /* { dg-warning "uninitialized" "FIXME: feasibility" { xfail *-*-* } } */
          else
                  return 0;
  }
*************** void func8(const int *a, int max)
*** 66,72 ****
  {
          int i;
          for (i=0; i<max; i++) {
!                 if (a[i]) /* { dg-warning "uninitialized" } */
                          printf("func8: %d\n", i);
          }
  }
--- 66,72 ----
  {
          int i;
          for (i=0; i<max; i++) {
!                 if (a[i]) /* { dg-warning "uninitialized" "FIXME: feasibility" { xfail *-*-* } } */
                          printf("func8: %d\n", i);
          }
  }
*************** int main(void)
*** 78,85 ****
          struct test t;  /* { dg-message "region created on stack here" } */
          int num;  /* { dg-message "region created on stack here" } */
          int arry[10];
!         int arry_2[10];  /* { dg-message "region created on stack here" } */
!         int go;  /* { dg-message "region created on stack here" } */
          int color = BLACK;
  
          func1(&t);
--- 78,85 ----
          struct test t;  /* { dg-message "region created on stack here" } */
          int num;  /* { dg-message "region created on stack here" } */
          int arry[10];
!         int arry_2[10];  /* { dg-message "region created on stack here" "FIXME: feasibility" { xfail *-*-* } } */
!         int go;  /* { dg-message "region created on stack here" "FIXME: feasibility" { xfail *-*-* } } */
          int color = BLACK;
  
          func1(&t);
*************** int main(void)
*** 88,94 ****
          func5(arry, 10);
          func6(&num);
  
!         printf("num: %d\n", num);  /* { dg-warning "use of uninitialized value 'num'" } */
          printf("func7: %d\n", func7());
          func8(arry_2, 10);
  
--- 88,94 ----
          func5(arry, 10);
          func6(&num);
  
!         printf("num: %d\n", num);  /* { dg-warning "use of uninitialized value 'num'" "FIXME: feasibility" { xfail *-*-* } } */
          printf("func7: %d\n", func7());
          func8(arry_2, 10);
  
*************** int main(void)
*** 102,108 ****
                  break;
          }
  
!         printf("go :%d\n", go); /* { dg-warning "use of uninitialized value 'go'" } */
  
          return 0;
  }
--- 102,111 ----
                  break;
          }
  
!         printf("go :%d\n", go); /* { dg-warning "use of uninitialized value 'go'" "FIXME: feasibility" { xfail *-*-* } } */
  
          return 0;
  }
+ 
+ /* FIXME: various tests above failing due to bugs in feasibility logic
+    preventing exit from loop in func_4.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr104434-nonconst.c	Sun Dec 14 22:32:10 2025
*************** exit_level_0:
*** 168,173 ****
          info = -1;
          LAPACKE_xerbla( "LAPACKE_cgbbrd_work", info );
      }
!     return info; /* { dg-warning "leak of 'q_t'" "leak of q_t" } */
!     /* { dg-warning "leak of 'pt_t'" "leak of pt_t" { target *-*-* } .-1 } */
  }
--- 168,173 ----
          info = -1;
          LAPACKE_xerbla( "LAPACKE_cgbbrd_work", info );
      }
!     return info; /* { dg-warning "leak of 'q_t'" "leak of q_t" { xfail *-*-* } } */
!     /* { dg-warning "leak of 'pt_t'" "leak of pt_t" { xfail *-*-* } .-1 } */
  }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-signed-char.c	Sun Dec 14 22:32:10 2025
***************
*** 8,14 ****
  /* { dg-require-effective-target int32plus } */
  
  /* TODO (PR analyzer/112528): remove need for this.  */
! /* { dg-additional-options "--param analyzer-max-enodes-per-program-point=40 --param analyzer-bb-explosion-factor=10" } */
  
  /* Minimal replacement of system headers.  */
  
--- 8,14 ----
  /* { dg-require-effective-target int32plus } */
  
  /* TODO (PR analyzer/112528): remove need for this.  */
! /* { dg-additional-options "--param analyzer-max-enodes-per-program-point=200 --param analyzer-bb-explosion-factor=50" } */
  
  /* Minimal replacement of system headers.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93032-mztools-unsigned-char.c	Sun Dec 14 22:32:10 2025
***************
*** 8,14 ****
  /* { dg-require-effective-target int32plus } */
  
  /* TODO (PR analyzer/112528): remove need for this.  */
! /* { dg-additional-options "--param analyzer-max-enodes-per-program-point=40 --param analyzer-bb-explosion-factor=10" } */
  
  /* Minimal replacement of system headers.  */
  
--- 8,14 ----
  /* { dg-require-effective-target int32plus } */
  
  /* TODO (PR analyzer/112528): remove need for this.  */
! /* { dg-additional-options "--param analyzer-max-enodes-per-program-point=200 --param analyzer-bb-explosion-factor=50" } */
  
  /* Minimal replacement of system headers.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias-feasibility-2.c	Sun Dec 14 22:32:10 2025
***************
*** 9,15 ****
  #define PATH_SEPARATOR ':'
  #define LOCALE_ALIAS_PATH "value for LOCALE_ALIAS_PATH"
  
! const char *
  _nl_expand_alias (void)
  {
    static const char *locale_alias_path;
--- 9,15 ----
  #define PATH_SEPARATOR ':'
  #define LOCALE_ALIAS_PATH "value for LOCALE_ALIAS_PATH"
  
! void
  _nl_expand_alias (void)
  {
    static const char *locale_alias_path;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr93355-localealias.c	Sun Dec 14 22:32:10 2025
*************** read_alias_file (fname, fname_len)
*** 298,304 ****
  
  	      if (nmap >= maxmap)
  		if (__builtin_expect (extend_alias_table (), 0))
! 		  return added; /* { dg-warning "leak of FILE 'fp'" } */
  
  	      alias_len = strlen (alias) + 1;
  	      value_len = strlen (value) + 1;
--- 298,304 ----
  
  	      if (nmap >= maxmap)
  		if (__builtin_expect (extend_alias_table (), 0))
! 		  return added; /* { dg-warning "leak of FILE 'fp'" "" { xfail *-*-* } } */
  
  	      alias_len = strlen (alias) + 1;
  	      value_len = strlen (value) + 1;
*************** read_alias_file (fname, fname_len)
*** 311,317 ****
  					? alias_len + value_len : 1024));
  		  char *new_pool = (char *) realloc (string_space, new_size);
  		  if (new_pool == NULL)
! 		    return added;
  
  		  if (__builtin_expect (string_space != new_pool, 0))
  		    {
--- 311,317 ----
  					? alias_len + value_len : 1024));
  		  char *new_pool = (char *) realloc (string_space, new_size);
  		  if (new_pool == NULL)
! 		    return added; /* { dg-warning "leak of FILE 'fp'" } */
  
  		  if (__builtin_expect (string_space != new_pool, 0))
  		    {
*************** read_alias_file (fname, fname_len)
*** 328,334 ****
  		  string_space_max = new_size;
  		}
  
! 	      map[nmap].alias = memcpy (&string_space[string_space_act],
  					alias, alias_len);
  	      string_space_act += alias_len;
  
--- 328,334 ----
  		  string_space_max = new_size;
  		}
  
! 	      map[nmap].alias = memcpy (&string_space[string_space_act], /* { dg-bogus "uninit" "FIXME" { xfail *-*-* } } */
  					alias, alias_len);
  	      string_space_act += alias_len;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr94579.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr94579.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr94579.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr94579.c	Sun Dec 14 22:32:10 2025
*************** struct a *c;
*** 2,8 ****
  struct a {
    int b;
  } d() {
! }
  
  void e()
  
--- 2,8 ----
  struct a {
    int b;
  } d() {
! } /* { dg-warning "use of uninitialized value '<return-value>'" } */
  
  void e()
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr98599-a.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr98599-a.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr98599-a.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr98599-a.c	Sun Dec 14 22:32:10 2025
***************
*** 4,8 ****
  /* { dg-additional-sources pr98599-b.c } */
  
  int b(int x);
! int a() { b(5); }
! int main() { a(); }
--- 4,8 ----
  /* { dg-additional-sources pr98599-b.c } */
  
  int b(int x);
! int a() { return b(5); }
! int main() { return a(); }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr99771-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr99771-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr99771-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr99771-1.c	Sun Dec 14 22:32:10 2025
***************
*** 6,20 ****
  void test_1 (void)
  {
    *(char*)malloc (1024) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(1024\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(1024\\)'" "warning" } */
!   /* { dg-message "'malloc\\(1024\\)' leaks here" "final event" { target *-*-* } .-1 } */
  
  void test_2 (size_t n)
  {
    *(char*)malloc (4 * n) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(n \\* 4\\)'" "warning" } */
    /* { dg-message "'malloc\\(n \\* 4\\)' could be NULL" "final event" { target *-*-* } .-1 } */
! } /* { dg-warning "leak of 'malloc\\(n \\* 4\\)'" "warning" } */
!   /* { dg-message "'malloc\\(n \\* 4\\)' leaks here" "final event" { target *-*-* } .-1 } */
  
  /* A compound example.  */
  
--- 6,20 ----
  void test_1 (void)
  {
    *(char*)malloc (1024) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(1024\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(1024\\)'" "warning" { target *-*-* } .-1 } */
!   /* { dg-message "'malloc\\(1024\\)' leaks here" "final event" { target *-*-* } .-2 } */
  
  void test_2 (size_t n)
  {
    *(char*)malloc (4 * n) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(n \\* 4\\)'" "warning" } */
    /* { dg-message "'malloc\\(n \\* 4\\)' could be NULL" "final event" { target *-*-* } .-1 } */
! } /* { dg-warning "leak of 'malloc\\(n \\* 4\\)'" "warning" { target *-*-* } .-2 } */
!   /* { dg-message "'malloc\\(n \\* 4\\)' leaks here" "final event" { target *-*-* } .-3 } */
  
  /* A compound example.  */
  
*************** void test_3 (size_t a, size_t b, size_t
*** 22,50 ****
  {
    *(char*)malloc (a + (b * c)) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(a \\+ b \\* c\\)'" "warning" } */
    /* { dg-message "'malloc\\(a \\+ b \\* c\\)' could be NULL" "final event" { target *-*-* } .-1 } */
! } /* { dg-warning "leak of 'malloc\\(a \\+ b \\* c\\)'" "warning" } */
!   /* { dg-message "'malloc\\(a \\+ b \\* c\\)' leaks here" "final event" { target *-*-* } .-1 } */
  
  void test_4 (size_t a, size_t b, size_t c)
  {
    *(char *)malloc (a ? b : c) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(<unknown>\\)'" "warning" } */
    /* { dg-message "'malloc\\(<unknown>\\)' could be NULL" "final event" { target *-*-* } .-1 } */
! } /* { dg-warning "leak of 'malloc\\(<unknown>\\)'" "warning" } */
!   /* { dg-message "'malloc\\(<unknown>\\)' leaks here" "final event" { target *-*-* } .-1 } */
  
  /* Unary operators.  */
  
  void test_5 (size_t a)
  {
    *(char*)malloc (-a) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(-a\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(-a\\)'" "warning" } */
!   /* { dg-message "'malloc\\(-a\\)' leaks here" "final event" { target *-*-* } .-1 } */
  
  void test_6 (size_t a)
  {
    *(char*)malloc (~a) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(~a\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(~a\\)'" "warning" } */
!   /* { dg-message "'malloc\\(~a\\)' leaks here" "final event" { target *-*-* } .-1 } */
  
  /* Field access.  */
  
--- 22,50 ----
  {
    *(char*)malloc (a + (b * c)) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(a \\+ b \\* c\\)'" "warning" } */
    /* { dg-message "'malloc\\(a \\+ b \\* c\\)' could be NULL" "final event" { target *-*-* } .-1 } */
! } /* { dg-warning "leak of 'malloc\\(a \\+ b \\* c\\)'" "warning" { target *-*-* } .-2 } */
!   /* { dg-message "'malloc\\(a \\+ b \\* c\\)' leaks here" "final event" { target *-*-* } .-3 } */
  
  void test_4 (size_t a, size_t b, size_t c)
  {
    *(char *)malloc (a ? b : c) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(<unknown>\\)'" "warning" } */
    /* { dg-message "'malloc\\(<unknown>\\)' could be NULL" "final event" { target *-*-* } .-1 } */
! } /* { dg-warning "leak of 'malloc\\(<unknown>\\)'" "warning" { target *-*-* } .-2 } */
!   /* { dg-message "'malloc\\(<unknown>\\)' leaks here" "final event" { target *-*-* } .-3 } */
  
  /* Unary operators.  */
  
  void test_5 (size_t a)
  {
    *(char*)malloc (-a) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(-a\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(-a\\)'" "warning" { target *-*-* } .-1 } */
!   /* { dg-message "'malloc\\(-a\\)' leaks here" "final event" { target *-*-* } .-2 } */
  
  void test_6 (size_t a)
  {
    *(char*)malloc (~a) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(~a\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(~a\\)'" "warning" { target *-*-* } .-1 } */
!   /* { dg-message "'malloc\\(~a\\)' leaks here" "final event" { target *-*-* } .-2 } */
  
  /* Field access.  */
  
*************** struct s7 { size_t sz; };
*** 53,63 ****
  void test_7a(struct s7 s)
  {
    *(char*)malloc (s.sz) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(s\\.sz\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(s\\.sz\\)'" "warning" } */
!   /* { dg-message "'malloc\\(s\\.sz\\)' leaks here" "final event" { target *-*-* } .-1 } */
  
  void test_7b (struct s7 *s)
  {
    *(char*)malloc (s->sz) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(\\*s\\.sz\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(\\*s\\.sz\\)'" "warning" } */
!   /* { dg-message "'malloc\\(\\*s\\.sz\\)' leaks here" "final event" { target *-*-* } .-1 } */
--- 53,63 ----
  void test_7a(struct s7 s)
  {
    *(char*)malloc (s.sz) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(s\\.sz\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(s\\.sz\\)'" "warning" { target *-*-* } .-1 } */
!   /* { dg-message "'malloc\\(s\\.sz\\)' leaks here" "final event" { target *-*-* } .-2 } */
  
  void test_7b (struct s7 *s)
  {
    *(char*)malloc (s->sz) = 42; /* { dg-warning "dereference of possibly-NULL 'malloc\\(\\*s\\.sz\\)'" } */
! } /* { dg-warning "leak of 'malloc\\(\\*s\\.sz\\)'" "warning" { target *-*-* } .-1 } */
!   /* { dg-message "'malloc\\(\\*s\\.sz\\)' leaks here" "final event" { target *-*-* } .-2 } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr99774-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr99774-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/pr99774-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/pr99774-2.c	Sun Dec 14 22:32:10 2025
*************** test_10 (void)
*** 100,107 ****
      return;
    n1->m_next = malloc (sizeof (struct node));
    /* Could free n1->m_next, but not n1.  */
!   const_unknown_fn (n1); /* { dg-warning "leak of 'n1'" } */
! }
  
  void
  test_11 (void)
--- 100,107 ----
      return;
    n1->m_next = malloc (sizeof (struct node));
    /* Could free n1->m_next, but not n1.  */
!   const_unknown_fn (n1);
! } /* { dg-warning "leak of 'n1'" } */
  
  void
  test_11 (void)
*************** test_11 (void)
*** 111,118 ****
      return;
    n1->m_next = malloc (sizeof (struct node));
    /* Could free n1->m_next, but not n1.  */
!   unknown_fn (n1->m_next); /* { dg-warning "leak of 'n1'" } */
! }
  
  void
  test_12a (void)
--- 111,118 ----
      return;
    n1->m_next = malloc (sizeof (struct node));
    /* Could free n1->m_next, but not n1.  */
!   unknown_fn (n1->m_next);
! } /* { dg-warning "leak of 'n1'" } */
  
  void
  test_12a (void)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/sensitive-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/sensitive-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/sensitive-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/sensitive-1.c	Sun Dec 14 22:32:10 2025
***************
*** 13,40 ****
     Don't use a prototype, to avoid const mismatches.  */
  extern char *(getpass) ();
  
! char test_1 (FILE *logfile)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    fprintf (logfile, "got password %s\n", password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" "warning" } */
    /* { dg-message "\\(2\\) sensitive value 'password' written to output file; acquired at \\(1\\)" "event" { target *-*-* } .-1 } */
  }
  
! char test_2 (FILE *logfile, int i)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    fprintf (logfile, "got password[%i]: %s\n", i, password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" } */
    /* { dg-message "\\(2\\) sensitive value 'password' written to output file; acquired at \\(1\\)" "event" { target *-*-* } .-1 } */
  }
  
! char test_3 (FILE *logfile)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    printf ("got password %s\n", password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" "warning" } */
    /* { dg-message "\\(2\\) sensitive value 'password' written to output file; acquired at \\(1\\)" "event" { target *-*-* } .-1 } */
  }
  
! char test_4 (FILE *logfile)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    fwrite (password, strlen (password), 1, logfile); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" "warning" } */
--- 13,40 ----
     Don't use a prototype, to avoid const mismatches.  */
  extern char *(getpass) ();
  
! void test_1 (FILE *logfile)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    fprintf (logfile, "got password %s\n", password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" "warning" } */
    /* { dg-message "\\(2\\) sensitive value 'password' written to output file; acquired at \\(1\\)" "event" { target *-*-* } .-1 } */
  }
  
! void test_2 (FILE *logfile, int i)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    fprintf (logfile, "got password[%i]: %s\n", i, password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" } */
    /* { dg-message "\\(2\\) sensitive value 'password' written to output file; acquired at \\(1\\)" "event" { target *-*-* } .-1 } */
  }
  
! void test_3 (FILE *logfile)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    printf ("got password %s\n", password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" "warning" } */
    /* { dg-message "\\(2\\) sensitive value 'password' written to output file; acquired at \\(1\\)" "event" { target *-*-* } .-1 } */
  }
  
! void test_4 (FILE *logfile)
  {
    char *password = getpass (">"); /* { dg-message "\\(1\\) sensitive value acquired here" } */
    fwrite (password, strlen (password), 1, logfile); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" "warning" } */
*************** static void called_by_test_5 (const char
*** 46,52 ****
    printf ("%s", value); /* { dg-warning "sensitive value 'value' written to output file \\\[CWE-532\\\]" } */
  }
  
! char test_5 (FILE *logfile)
  {
    char *password = getpass (">");
    called_by_test_5 (password); /* { dg-message "passing sensitive value 'password' in call to 'called_by_test_5' from 'test_5'" } */
--- 46,52 ----
    printf ("%s", value); /* { dg-warning "sensitive value 'value' written to output file \\\[CWE-532\\\]" } */
  }
  
! void test_5 (FILE *logfile)
  {
    char *password = getpass (">");
    called_by_test_5 (password); /* { dg-message "passing sensitive value 'password' in call to 'called_by_test_5' from 'test_5'" } */
*************** static char *called_by_test_6 (void)
*** 57,63 ****
    return getpass (">"); /* { dg-message "sensitive value acquired here" } */
  }
  
! char test_6 (FILE *logfile)
  {
    char *password = called_by_test_6 (); /* { dg-message "returning sensitive value to 'test_6' from 'called_by_test_6'" } */
    printf ("%s", password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" } */
--- 57,63 ----
    return getpass (">"); /* { dg-message "sensitive value acquired here" } */
  }
  
! void test_6 (FILE *logfile)
  {
    char *password = called_by_test_6 (); /* { dg-message "returning sensitive value to 'test_6' from 'called_by_test_6'" } */
    printf ("%s", password); /* { dg-warning "sensitive value 'password' written to output file \\\[CWE-532\\\]" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/state-diagram-1-sarif.py gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/state-diagram-1-sarif.py
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/state-diagram-1-sarif.py	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/state-diagram-1-sarif.py	Sun Dec 14 22:32:10 2025
*************** def test_state_graph(sarif):
*** 62,65 ****
      assert get_state_node_name(first) == 'first'
      assert get_state_node_type(first) == 'struct node *'
      
!     assert len(state['edges']) == 3
--- 62,65 ----
      assert get_state_node_name(first) == 'first'
      assert get_state_node_type(first) == 'struct node *'
      
!     assert len(state['edges']) == 4
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c	Sun Dec 14 22:32:10 2025
*************** __analyzer_test_not_enough_args_2_middle
*** 113,119 ****
  
  void test_not_enough_args_2 (void)
  {
!   __analyzer_test_not_enough_args_2_middle (42, "foo");
  }
  
  /* Excess args (not a problem).  */
--- 113,119 ----
  
  void test_not_enough_args_2 (void)
  {
!   __analyzer_test_not_enough_args_2_middle (42, "foo"); /* { dg-message "calling '__analyzer_test_not_enough_args_2_middle' from 'test_not_enough_args_2' with 1 variadic argument" } */
  }
  
  /* Excess args (not a problem).  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/strcmp-1.c	Sun Dec 14 22:32:10 2025
***************
*** 3,30 ****
  #include <string.h>
  #include <stdlib.h>
  
! int test_1 (const char *str, char *ptr)
  {
    if (strcmp (str, "VALUE")) /* { dg-message "following 'true' branch \\(when the strings are non-equal\\)\\.\\.\\." } */
      free (ptr);
    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  }
  
! int test_2 (const char *str, char *ptr)
  {
    if (strcmp (str, "VALUE") == 0) /* { dg-message "following 'true' branch \\(when the strings are equal\\)\\.\\.\\." } */
      free (ptr);
    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  }
  
! int test_3 (const char *str, char *ptr)
  {
    if (!strcmp (str, "VALUE")) /* { dg-message "following 'true' branch \\(when the strings are equal\\)\\.\\.\\." } */
      free (ptr);
    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  }
  
! int test_4 (const char *str, char *ptr)
  {
    if (strcmp (str, "VALUE")) /* { dg-message "following 'false' branch \\(when the strings are equal\\)\\.\\.\\." } */
      {
--- 3,30 ----
  #include <string.h>
  #include <stdlib.h>
  
! void test_1 (const char *str, char *ptr)
  {
    if (strcmp (str, "VALUE")) /* { dg-message "following 'true' branch \\(when the strings are non-equal\\)\\.\\.\\." } */
      free (ptr);
    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  }
  
! void test_2 (const char *str, char *ptr)
  {
    if (strcmp (str, "VALUE") == 0) /* { dg-message "following 'true' branch \\(when the strings are equal\\)\\.\\.\\." } */
      free (ptr);
    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  }
  
! void test_3 (const char *str, char *ptr)
  {
    if (!strcmp (str, "VALUE")) /* { dg-message "following 'true' branch \\(when the strings are equal\\)\\.\\.\\." } */
      free (ptr);
    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  }
  
! void test_4 (const char *str, char *ptr)
  {
    if (strcmp (str, "VALUE")) /* { dg-message "following 'false' branch \\(when the strings are equal\\)\\.\\.\\." } */
      {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/strcpy-1.c	Sun Dec 14 22:32:10 2025
*************** char *test_uninitialized (char *dst)
*** 33,39 ****
  
  extern void external_fn (void *ptr);
  
! char *test_external_fn (void)
  {
    char src[10];
    char dst[10];
--- 33,39 ----
  
  extern void external_fn (void *ptr);
  
! void test_external_fn (void)
  {
    char src[10];
    char dst[10];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/switch-enum-taint-1.c	Sun Dec 14 22:32:10 2025
*************** test_all_values_covered_implicit_default
*** 26,32 ****
        return 1945;
      }
    __analyzer_dump_path (); /* { dg-message "path" } */
! }
  
  int  __attribute__((tainted_args))
  test_all_values_covered_implicit_default_2 (enum e x)
--- 26,32 ----
        return 1945;
      }
    __analyzer_dump_path (); /* { dg-message "path" } */
! } /* { dg-warning "use of uninitialized value '<return-value>'" } */
  
  int  __attribute__((tainted_args))
  test_all_values_covered_implicit_default_2 (enum e x)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/switch.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/switch.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/switch.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/switch.c	Sun Dec 14 22:32:10 2025
*************** int test_7 ()
*** 162,168 ****
  	return 0;
  }
  
! int test_bitmask_1 (int x)
  {
    int flag = 0;
    if (x & 0x80)
--- 162,168 ----
  	return 0;
  }
  
! void test_bitmask_1 (int x)
  {
    int flag = 0;
    if (x & 0x80)
*************** int test_bitmask_1 (int x)
*** 193,199 ****
      }
  }
  
! int test_bitmask_2 (int x)
  {
    int flag = 0;
    if ((x & 0xf80) == 0x80)
--- 193,199 ----
      }
  }
  
! void test_bitmask_2 (int x)
  {
    int flag = 0;
    if ((x & 0xf80) == 0x80)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/taint-assert.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/taint-assert.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/taint-assert.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/taint-assert.c	Sun Dec 14 22:32:10 2025
*************** struct s
*** 336,342 ****
    int y;
  };
  
! int __attribute__((tainted_args))
  test_assert_struct (struct s *p)
  {
    MY_ASSERT_1 (p->x < p->y); /* { dg-warning "-Wanalyzer-tainted-assertion" } */
--- 336,342 ----
    int y;
  };
  
! void __attribute__((tainted_args))
  test_assert_struct (struct s *p)
  {
    MY_ASSERT_1 (p->x < p->y); /* { dg-warning "-Wanalyzer-tainted-assertion" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/taint-write-offset-1.c	Sun Dec 14 22:32:10 2025
*************** char test_1(FILE *f)
*** 27,33 ****
    return 0;
  }
  
! char test_2(struct foo *f)
  {
    /* not a bug: the data is not known to be tainted: */
    *(p + f->offset) = 42;
--- 27,33 ----
    return 0;
  }
  
! void test_2(struct foo *f)
  {
    /* not a bug: the data is not known to be tainted: */
    *(p + f->offset) = 42;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/analyzer-torture.exp	Sun Dec 14 22:32:10 2025
*************** if [info exists DEFAULT_CFLAGS] then {
*** 31,37 ****
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_CFLAGS "-fanalyzer -fdiagnostics-path-format=separate-events -Wanalyzer-too-complex -fanalyzer-call-summaries"
  
  gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] "" $DEFAULT_CFLAGS
  
--- 31,37 ----
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_CFLAGS "-fanalyzer -fdiagnostics-path-format=separate-events -Wanalyzer-too-complex"
  
  gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] "" $DEFAULT_CFLAGS
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/boxed-ptr-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/boxed-ptr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/boxed-ptr-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/boxed-ptr-1.c	Sun Dec 14 22:32:10 2025
*************** boxed_malloc (size_t sz)
*** 14,20 ****
    return result;
  }
  
! boxed_ptr __attribute__((noinline))
  boxed_free (boxed_ptr ptr)
  {
    free (ptr.value);
--- 14,20 ----
    return result;
  }
  
! void __attribute__((noinline))
  boxed_free (boxed_ptr ptr)
  {
    free (ptr.value);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/fold-ptr-arith-pr105784.c	Sun Dec 14 22:32:10 2025
***************
*** 1,5 ****
  /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
! 
  #include "../analyzer-decls.h"
  
  extern _Bool quit_flag;
--- 1,5 ----
  /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
! /* { dg-additional-options "-Wno-analyzer-too-complex" } */
  #include "../analyzer-decls.h"
  
  extern _Bool quit_flag;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/loop-inc-ptr-1.c	Sun Dec 14 22:32:10 2025
***************
*** 1,5 ****
  /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
! 
  #include "../analyzer-decls.h"
  
  void test (int *p)
--- 1,5 ----
  /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
! /* { dg-skip-if "" { *-*-* } { "-O3" } { "" } } */
  #include "../analyzer-decls.h"
  
  void test (int *p)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/pr102225.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/pr102225.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/pr102225.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/pr102225.c	Sun Dec 14 22:32:10 2025
***************
*** 2,6 ****
  
  void bad_realloc(char *s, int n)
  {
!   char *p = __builtin_realloc(s, n);
! } /* { dg-warning "leak" } */
--- 2,5 ----
  
  void bad_realloc(char *s, int n)
  {
!   char *p = __builtin_realloc(s, n); } /* { dg-warning "leak" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/pr93379.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/pr93379.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/pr93379.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/pr93379.c	Sun Dec 14 22:32:10 2025
***************
*** 1,3 ****
--- 1,5 ----
  /* { dg-do compile } */
  /* { dg-additional-options "-std=gnu17" } */
+ /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */
  #include "../../torture/pr57330.c"
+ /* { dg-warning "use of uninitialized value" "" { target *-*-* } 11 } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/torture/stdarg-4.c	Sun Dec 14 22:32:10 2025
*************** void test_3f_caller (int x, int y, int z
*** 326,329 ****
--- 326,330 ----
  {
    int sum = test_3f_callee (0, x, y, z, 0);
    __analyzer_describe (0, sum); /* { dg-message "'UNKNOWN\\(int\\)'" } */
+   /* { dg-message "INIT_VAL\\(x.*\\)\\\+INIT_VAL\\(y.*\\)\\\+INIT_VAL\\(z.*\\)" "" { target *-*-* } .-1 } */
  }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/untracked-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/untracked-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/untracked-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/untracked-1.c	Sun Dec 14 22:32:10 2025
*************** int test_11 (void)
*** 105,111 ****
    return 42;
  }
  
! int test_12 (void (*fnptr) (struct st *))
  {
    static struct st s12 = { __FILE__, __LINE__ }; /* { dg-warning "track 's12': yes" } */
    fnptr (&s12);
--- 105,111 ----
    return 42;
  }
  
! void test_12 (void (*fnptr) (struct st *))
  {
    static struct st s12 = { __FILE__, __LINE__ }; /* { dg-warning "track 's12': yes" } */
    fnptr (&s12);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/use-after-free.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/use-after-free.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/use-after-free.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/use-after-free.c	Sun Dec 14 22:32:10 2025
***************
*** 5,11 ****
  
  struct link { struct link *next; };
  
! int free_a_list_badly (struct link *n)
  {
    while (n) {
      free(n); /* { dg-message "freed here" } */
--- 5,11 ----
  
  struct link { struct link *next; };
  
! void free_a_list_badly (struct link *n)
  {
    while (n) {
      free(n); /* { dg-message "freed here" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/zlib-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/zlib-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/analyzer/zlib-3.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/analyzer/zlib-3.c	Sun Dec 14 22:32:10 2025
*************** static int huft_build(uInt *b, uInt n, u
*** 46,52 ****
    uInt mask;
    register uInt *p;
    inflate_huft *q;
!   struct inflate_huft_s r; /* { dg-message "region created on stack here" } */
    inflate_huft *u[15];
    register int w;
    uInt x[15 + 1];
--- 46,52 ----
    uInt mask;
    register uInt *p;
    inflate_huft *q;
!   struct inflate_huft_s r; /* { dg-message "region created on stack here" "" { xfail *-*-* } } */
    inflate_huft *u[15];
    register int w;
    uInt x[15 + 1];
*************** static int huft_build(uInt *b, uInt n, u
*** 179,190 ****
  
        f = 1 << (k - w);
        for (j = i >> w; j < z; j += f)
!         q[j] = r; /* { dg-warning "use of uninitialized value 'r.base'" } */
  
        mask = (1 << w) - 1;
        /* The analyzer thinks that h can be -1 here.
           This is probably a false positive. */
!       while ((i & mask) !=  x[h]) { /* { dg-bogus "under-read" "" { xfail *-*-* } } */
          h--;
          w -= l;
          mask = (1 << w) - 1;
--- 179,190 ----
  
        f = 1 << (k - w);
        for (j = i >> w; j < z; j += f)
!         q[j] = r; /* { dg-warning "use of uninitialized value 'r.base'" "" { xfail *-*-* } } */
  
        mask = (1 << w) - 1;
        /* The analyzer thinks that h can be -1 here.
           This is probably a false positive. */
!       while ((i & mask) !=  x[h]) { /* { dg-bogus "under-read" } */
          h--;
          w -= l;
          mask = (1 << w) - 1;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c gcc-16-20251214/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/debug/dwarf2/omp-fesdr.c	Sun Dec 14 22:32:10 2025
*************** f7 (void)
*** 14,20 ****
  
    #pragma omp parallel
    {
!     #pragma omp master
      v7o++;
      #pragma omp for private (v7i) firstprivate (v7k) reduction (+:v7l)
      for (v7n = 0; v7n < 3; v7n++)
--- 14,20 ----
  
    #pragma omp parallel
    {
!     #pragma omp masked
      v7o++;
      #pragma omp for private (v7i) firstprivate (v7k) reduction (+:v7l)
      for (v7n = 0; v7n < 3; v7n++)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  #include <stdio.h>
  extern float average (float, float, float);
  void
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdio.h>
  extern float average (float, float, float);
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  #include <stdio.h>
  #include <stdlib.h>
  float
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdio.h>
  #include <stdlib.h>
  float
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,4 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! 
  #include "../../g++.dg/gomp/attrs-1.C"
--- 1,4 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "../../g++.dg/gomp/attrs-1.C"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-12.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-12.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-12.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-12.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! 
  #pragma omp declare target
  #pragma omp declare target
  [[omp::directive (declare target)]];
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  #pragma omp declare target
  [[omp::directive (declare target)]];
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,4 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! 
  #include "../../g++.dg/gomp/attrs-2.C"
--- 1,4 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "../../g++.dg/gomp/attrs-2.C"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-4.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-4.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-4.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! 
  void
  foo (int x)
  {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (int x)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-5.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-5.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-5.c	Sun Dec 14 22:32:11 2025
***************
*** 1,4 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! 
  #include "../../g++.dg/gomp/attrs-5.C"
--- 1,4 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "../../g++.dg/gomp/attrs-5.C"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-9.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-9.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/attrs-9.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/attrs-9.c	Sun Dec 14 22:32:11 2025
***************
*** 1,4 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! 
  #include "../../g++.dg/gomp/attrs-9.C"
--- 1,4 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -std=c23" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "../../g++.dg/gomp/attrs-9.C"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/block-10.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/block-10.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/block-10.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/block-10.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  // { dg-do compile }
! 
  void foo(int i)
  {
    int j;
--- 1,5 ----
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo(int i)
  {
    int j;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/block-5.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/block-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/block-5.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/block-5.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  // { dg-do compile }
! 
  void foo()
  {
    #pragma omp master
--- 1,5 ----
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo()
  {
    #pragma omp master
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/block-9.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/block-9.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/block-9.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/block-9.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  // { dg-do compile }
! 
  void foo(int i)
  {
    int j;
--- 1,5 ----
  // { dg-do compile }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void foo(int i)
  {
    int j;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/clause-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/clause-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/clause-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/clause-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target tls } */
! 
  #define p parallel
  
  extern void bar (void);
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target tls } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define p parallel
  
  extern void bar (void);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/declare-simd-3.c	Sun Dec 14 22:32:11 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare simd linear(p:1) linear(val(q):-1) linear(s:-3)
  int
  f1 (int *p, int *q, short *s)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/deprecate-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/deprecate-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/deprecate-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/deprecate-1.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,96 ----
+ /* { dg-additional-options "-fdiagnostics-show-caret -Wdeprecated-openmp" } */
+ 
+ #pragma omp declare simd linear (val(a) : 1)	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (val(a) : 1)
+                                  ^
+                                   ---- -   -
+                                            val, step (1)
+    { dg-end-multiline-output "" } */
+ #pragma omp declare simd linear (val(b))	/* { dg-warning "specifying the list items as arguments to the modifiers is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare simd linear (val(b))
+                                  ^
+                                   ---- -
+                                         : val
+    { dg-end-multiline-output "" } */
+ int foo (int a, int b);
+ 
+ int v;
+ #pragma omp declare target to (v)		/* { dg-warning "'to' clause with 'declare target' deprecated since OpenMP 5.2, use 'enter'" } */
+ /* { dg-begin-multiline-output "" }
+  #pragma omp declare target to (v)
+                             ^~
+                             enter
+    { dg-end-multiline-output "" } */
+ 
+ void
+ bar ()
+ {
+   int r = 0;
+   #pragma omp parallel reduction (-:r)		/* { dg-warning "'-' operator for reductions deprecated in OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp parallel reduction (-:r)
+                                    ^
+                                    +
+    { dg-end-multiline-output "" } */
+   ++r;
+   #pragma omp for ordered (1)
+   for (int i = 0; i < 64; i++)
+     {
+       #pragma omp ordered depend (sink: i - 1)	/* { dg-warning "'sink' modifier with 'depend' clause deprecated since OpenMP 5.2, use with 'doacross'" } */
+ /* { dg-begin-multiline-output "" }
+        #pragma omp ordered depend (sink: i - 1)
+                                   ^
+                            ------
+                            doacross
+    { dg-end-multiline-output "" } */
+       #pragma omp ordered depend (source)	/* { dg-warning "'source' modifier with 'depend' clause deprecated since OpenMP 5.2, use with 'doacross'" } */
+ /* { dg-begin-multiline-output "" }
+        #pragma omp ordered depend (source)
+                                   ^
+                            ------
+                            doacross
+    { dg-end-multiline-output "" } */
+     }
+   #pragma omp target map (always close present, tofrom: r)	/* { dg-warning "'map' clause modifiers without comma separation is deprecated since OpenMP 5.2" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp target map (always close present, tofrom: r)
+                           ^
+                                   ,
+    #pragma omp target map (always close present, tofrom: r)
+                           ^
+                                         ,
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp parallel proc_bind (master)	/* { dg-warning "'master' affinity deprecated since OpenMP 5.1, use 'primary'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp parallel proc_bind (master)
+                                   ^
+                                    ------
+                                    primary
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp parallel master			/* { dg-warning "'master' construct deprecated since OpenMP 5.1, use 'masked'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp parallel master
+            ^~~
+                         ------
+                         masked
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp master				/* { dg-warning "'master' construct deprecated since OpenMP 5.1, use 'masked'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp master
+            ^~~
+    { dg-end-multiline-output "" } */
+   ;
+   #pragma omp metadirective when (device={arch("blahblah")}: nothing) default (nothing)		/* { dg-warning "'default' clause on metadirectives deprecated since OpenMP 5.2, use 'otherwise'" } */
+ /* { dg-begin-multiline-output "" }
+    #pragma omp metadirective when (device={arch("blahblah")}: nothing) default (nothing)
+            ^~~
+                                                                        -------
+                                                                        otherwise
+    { dg-end-multiline-output "" } */
+   ;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/deprecate-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/deprecate-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/deprecate-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/deprecate-2.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-additional-options "-fdiagnostics-show-caret -Wdeprecated-openmp" } */
+ 
+ typedef enum omp_allocator_handle_t
+ #if __cplusplus >= 201103L
+ : __UINTPTR_TYPE__
+ #endif
+ {
+   __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
+ } omp_allocator_handle_t;
+ 
+ typedef struct omp_alloctrait_t
+ {
+   int key;
+   int value;
+ } omp_alloctrait_t;
+ 
+ 
+ void f()
+ {
+   omp_allocator_handle_t myalloc;
+   const omp_alloctrait_t mytraits[] = {};
+   #pragma omp target uses_allocators(myalloc(mytraits))
+ /* { dg-begin-multiline-output "" }
+    #pragma omp target uses_allocators(myalloc(mytraits))
+                                       ^~~~~~~~~~~~~~~~~
+                                       -------
+                                       traits           : myalloc
+    { dg-end-multiline-output "" } */
+    ;
+ 
+ // { dg-warning "38: the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* }  22 }
+ 
+ 
+   #pragma omp target uses_allocators  (  myalloc  (  mytraits  )  )
+ /* { dg-begin-multiline-output "" }
+    #pragma omp target uses_allocators  (  myalloc  (  mytraits  )  )
+                                           ^~~~~~~~~~~~~~~~~~~~~~~
+                                           -------
+                                           traits                 : myalloc
+    { dg-end-multiline-output "" } */
+    ;
+ 
+ // { dg-warning "42: the specification of arguments to 'uses_allocators' where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* }  34 }
+ }
+ 
+ // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
+ // { dg-excess-errors "sorry, unimplemented: 'uses_allocators' clause" }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/linear-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/linear-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/linear-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/linear-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! 
  int i, j;
  
  void
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int i, j;
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/map-csm-dep.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/map-csm-dep.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/map-csm-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/map-csm-dep.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,30 ----
+ // can't manage to elicit the "illegal comma" but it seems that we're already getting errors for improper syntax.
+ // otherwise, though, the deprecation works as intended.
+ int
+ main()
+   {
+     float B[8];
+     float C[8];
+     // this should be completely fine
+     #pragma omp target teams map(to: B[0:8], C[0:8])
+     {}
+     // this should give us a deprecation warning
+     #pragma omp target teams map(close always present to: B[0:8], C[0:8]) // { dg-warning "'map' clause modifiers without comma separation is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" }
+     {}
+     // this should be completely fine
+     #pragma omp target teams map(close, always, present, to: B[0:8], C[0:8])
+     {}
+     // this should be raising illegal comma.
+     // { dg-error "'close' undeclared" "" { target *-*-* } 19 }
+     #pragma omp target teams map(close always,, present, to: B[0:8], C[0:8])
+     {}
+     // { dg-error "expected '\\)' before 'always'" "" { target *-*-* } 19 }
+ 
+ 
+     #pragma omp target teams map(,close to: B[0:8], C[0:8]) // { dg-error "expected expression before ',' token" }
+     {}
+     // { dg-error "'always' undeclared" "" { target *-*-* } 27 }
+     #pragma omp target teams map(close,,always to: B[0:8] C[0:8]) // { dg-error "expected expression before ',' token" }
+     {}
+     return 0;
+   }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/master-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/master-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/master-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/master-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  extern void bar(int);
  
  void foo (void)
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void bar(int);
  
  void foo (void)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/master-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/master-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/master-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/master-2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  void f1(void)
  {
    #pragma omp master asdf	/* { dg-error "expected" } */
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void f1(void)
  {
    #pragma omp master asdf	/* { dg-error "expected" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/master-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/master-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/master-3.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/master-3.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-ompexp" } */
  
  extern void bar(int);
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -fdump-tree-ompexp -Wno-deprecated-openmp" } */
  
  extern void bar(int);
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/metadirective-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/metadirective-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/metadirective-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/metadirective-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  int main (void)
  {
    int x, y;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/nesting-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/nesting-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/nesting-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/nesting-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-fopenmp" } */
  
  void
  f1 (void)
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -Wno-deprecated-openmp" } */
  
  void
  f1 (void)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr104517.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr104517.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr104517.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr104517.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* PR debug/104517 */
  /* { dg-do compile } */
! /* { dg-options "-O1 -fcompare-debug -fopenmp -fno-tree-ter -save-temps" } */
  
  typedef enum omp_allocator_handle_t
  {
--- 1,6 ----
  /* PR debug/104517 */
  /* { dg-do compile } */
! /* { dg-options "-O1 -fcompare-debug -fopenmp -fno-tree-ter -save-temps -Wno-deprecated-openmp" } */
  
  typedef enum omp_allocator_handle_t
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr104757.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr104757.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr104757.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr104757.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* PR middle-end/104757 */
  /* { dg-do compile } */
  /* { dg-options "-O2 -fopenmp" } */
! 
  #pragma omp declare target
  void
  foo (int x, int y, int *z)
--- 1,7 ----
  /* PR middle-end/104757 */
  /* { dg-do compile } */
  /* { dg-options "-O2 -fopenmp" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  void
  foo (int x, int y, int *z)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr29965-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr29965-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr29965-3.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr29965-3.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* PR middle-end/29965 */
  /* Test that OpenMP construct bodies which never return don't cause ICEs.  */
  /* { dg-do compile } */
! /* { dg-options "-O2 -fopenmp" } */
  
  extern void baz (void) __attribute__ ((noreturn));
  
--- 1,7 ----
  /* PR middle-end/29965 */
  /* Test that OpenMP construct bodies which never return don't cause ICEs.  */
  /* { dg-do compile } */
! /* { dg-options "-O2 -fopenmp -Wno-deprecated-openmp" } */
  
  extern void baz (void) __attribute__ ((noreturn));
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr35818.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr35818.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr35818.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr35818.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* PR middle-end/35818 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp" } */
  
  extern int a[];
  
--- 1,6 ----
  /* PR middle-end/35818 */
  /* { dg-do compile } */
! /* { dg-options "-fopenmp -Wno-deprecated-openmp" } */
  
  extern int a[];
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr91216.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr91216.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/pr91216.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/pr91216.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* PR middle-end/91216 */
! 
  int r;
  
  void
--- 1,5 ----
  /* PR middle-end/91216 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int r;
  
  void
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sharing-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sharing-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sharing-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sharing-2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  void
  foo (void)
  {
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  void
  foo (void)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sink-fold-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sink-fold-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sink-fold-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sink-fold-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-omplower" } */
! 
  /* Test depend(sink) clause folding.  */
  
  int i,j,k, N;
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-omplower" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test depend(sink) clause folding.  */
  
  int i,j,k, N;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sink-fold-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sink-fold-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sink-fold-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sink-fold-2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! 
  int i,j, N;
  
  extern void bar();
--- 1,5 ----
  /* { dg-do compile } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int i,j, N;
  
  extern void bar();
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sink-fold-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sink-fold-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/sink-fold-3.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/sink-fold-3.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-omplower" } */
! 
  /* Test that we fold sink offsets correctly while taking into account
     pointer sizes.  */
  
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-fopenmp -fdump-tree-omplower" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that we fold sink offsets correctly while taking into account
     pointer sizes.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details -fdump-ipa-cgraph" } */
! 
  /* Test that simd clones are generated for functions with "declare target".  */
  
  #pragma omp declare target
--- 1,6 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details -fdump-ipa-cgraph" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that simd clones are generated for functions with "declare target".  */
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fdump-ipa-simdclone-details" } */
! 
! /* Test that host simd clones are not generated for functions with 
     "declare target" by default at -O2.  */
  
  #pragma omp declare target
--- 1,7 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fdump-ipa-simdclone-details" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
! /* Test that host simd clones are not generated for functions with
     "declare target" by default at -O2.  */
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-3.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-3.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-3.c	Sun Dec 14 22:32:11 2025
***************
*** 1,6 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! 
  /* Test that host simd clones are not generated for functions with the nohost
     "declare target" clause.  */
  
--- 1,6 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Test that host simd clones are not generated for functions with the nohost
     "declare target" clause.  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-4.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-4.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-4.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! 
! /* Test that simd clones are not generated for functions with 
     "declare target" but that write memory in the body.  */
  
  extern int save;
--- 1,7 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
! /* Test that simd clones are not generated for functions with
     "declare target" but that write memory in the body.  */
  
  extern int save;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-5.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-5.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-5.c	Sun Dec 14 22:32:11 2025
***************
*** 1,14 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
  
! /* Test that simd clones are not generated for functions with 
     "declare target" but unsuitable arguments.  */
! 
  struct s {
    int a;
    int b;
  };
!   
  #pragma omp declare target
  __attribute__ ((__noinline__)) int addit (struct s x)
  {
--- 1,14 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
  
! /* Test that simd clones are not generated for functions with
     "declare target" but unsuitable arguments.  */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  struct s {
    int a;
    int b;
  };
! 
  #pragma omp declare target
  __attribute__ ((__noinline__)) int addit (struct s x)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-6.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-6.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-6.c	Sun Dec 14 22:32:11 2025
***************
*** 1,8 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! 
! /* Test that simd clones are not generated for functions with 
!    "declare target" but that call possibly side-effecting functions 
     in the body.  */
  
  extern int f (int);
--- 1,8 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
! /* Test that simd clones are not generated for functions with
!    "declare target" but that call possibly side-effecting functions
     in the body.  */
  
  extern int f (int);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-7.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-7.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-7.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-7.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! 
! /* Test that simd clones are not generated for functions with 
     "declare target" that have no callers in the same compilation unit.  */
  
  #pragma omp declare target
--- 1,7 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
! /* Test that simd clones are not generated for functions with
     "declare target" that have no callers in the same compilation unit.  */
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-8.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-8.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/target-simd-clone-8.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/target-simd-clone-8.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! 
! /* Test that simd clones are not generated for functions with 
     "declare target" but that read volatile memory in the body.  */
  
  extern volatile int save;
--- 1,7 ----
  /* { dg-options "-fopenmp -O2" } */
  /* { dg-additional-options "-fopenmp-target-simd-clone=any -fdump-ipa-simdclone-details" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
! /* Test that simd clones are not generated for functions with
     "declare target" but that read volatile memory in the body.  */
  
  extern volatile int save;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-55.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-55.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-55.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-55.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fopenmp -fdump-tree-optimized" } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_doacross_start \[^\n\r]*, (?:2147483648|-2147483648), 0, " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_end " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_doacross_post " 1 "optimized" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-56.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-56.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-56.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-56.c	Sun Dec 14 22:32:11 2025
***************
*** 7,13 ****
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_ull_static_next " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_workshare_task_reduction_unregister \\(0\\)" 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_parallel " 1 "optimized" } } */
! 
  unsigned long long int j;
  void bar (unsigned long long int *);
  
--- 7,13 ----
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_ull_static_next " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_workshare_task_reduction_unregister \\(0\\)" 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_parallel " 1 "optimized" } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  unsigned long long int j;
  void bar (unsigned long long int *);
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-57.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-57.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-57.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-57.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fopenmp -fdump-tree-optimized" } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_ull_doacross_start \[^\n\r]*, (?:2147483650|-2147483646), 1, " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_end " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_doacross_ull_post " 1 "optimized" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-58.c gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-58.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/gomp/workshare-reduction-58.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/gomp/workshare-reduction-58.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -fopenmp -fdump-tree-optimized" } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_doacross_start \[^\n\r]*, (?:2147483651|-2147483645), 1, " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_end " 1 "optimized" } } */
  /* { dg-final { scan-tree-dump-times "__builtin_GOMP_doacross_post " 1 "optimized" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/ifcvt-4.c gcc-16-20251214/gcc/testsuite/gcc.dg/ifcvt-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/ifcvt-4.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/ifcvt-4.c	Sun Dec 14 22:32:11 2025
***************
*** 2,8 ****
  /* { dg-additional-options "-misel" { target { powerpc*-*-* } } } */
  /* { dg-additional-options "-march=z196" { target { s390x-*-* } } } */
  /* { dg-additional-options "-mtune-ctrl=^one_if_conv_insn" { target { i?86-*-* x86_64-*-* } } } */
! /* { dg-skip-if "Multiple set if-conversion not guaranteed on all subtargets" { "arm*-*-* avr-*-* cris-*-* hppa*64*-*-* visium-*-*" riscv*-*-* msp430-*-* pru-*-* } }  */
  /* { dg-skip-if "" { { sparc*-*-* } && { ! sparc_v9 } } }  */
  /* { dg-skip-if "" { "s390x-*-*" } { "-m31" } }  */
  
--- 2,8 ----
  /* { dg-additional-options "-misel" { target { powerpc*-*-* } } } */
  /* { dg-additional-options "-march=z196" { target { s390x-*-* } } } */
  /* { dg-additional-options "-mtune-ctrl=^one_if_conv_insn" { target { i?86-*-* x86_64-*-* } } } */
! /* { dg-skip-if "Multiple set if-conversion not guaranteed on all subtargets" { "arm*-*-* avr-*-* cris-*-* hppa*64*-*-* visium-*-*" riscv*-*-* msp430-*-* pru-*-* loongarch32-*-* } }  */
  /* { dg-skip-if "" { { sparc*-*-* } && { ! sparc_v9 } } }  */
  /* { dg-skip-if "" { "s390x-*-*" } { "-m31" } }  */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/pid_t-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/pid_t-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/pid_t-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/pid_t-1.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Wall" } */
+ /* { dg-require-fork "" } */
+ 
+ /* Compile with -Wall to get a warning if built-in and system pid_t don't
+    match.  */
+ 
+ #include <sys/types.h>
+ 
+ typedef __typeof (__builtin_fork ()) __builtin_pid_t;
+ 
+ __builtin_pid_t __p_t__;
+ pid_t *p_t_p;
+ 
+ void
+ pt (void)
+ {
+   p_t_p = &__p_t__;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc
*** gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/analyzer_cpython_plugin.cc	Sun Dec 14 22:32:11 2025
*************** public:
*** 188,284 ****
    }
  };
  
- /* This is just a copy of leak_stmt_finder for now (subject to change if
-  * necssary)  */
- 
- class refcnt_stmt_finder : public stmt_finder
- {
- public:
-   refcnt_stmt_finder (const exploded_graph &eg, tree var)
-       : m_eg (eg), m_var (var)
-   {
-   }
- 
-   std::unique_ptr<stmt_finder>
-   clone () const final override
-   {
-     return std::make_unique<refcnt_stmt_finder> (m_eg, m_var);
-   }
- 
-   const gimple *
-   find_stmt (const exploded_path &epath) final override
-   {
-     logger *const logger = m_eg.get_logger ();
-     LOG_FUNC (logger);
- 
-     if (m_var && TREE_CODE (m_var) == SSA_NAME)
-       {
- 	/* Locate the final write to this SSA name in the path.  */
- 	const gimple *def_stmt = SSA_NAME_DEF_STMT (m_var);
- 
- 	int idx_of_def_stmt;
- 	bool found = epath.find_stmt_backwards (def_stmt, &idx_of_def_stmt);
- 	if (!found)
- 	  goto not_found;
- 
- 	/* What was the next write to the underlying var
- 	   after the SSA name was set? (if any).  */
- 
- 	for (unsigned idx = idx_of_def_stmt + 1; idx < epath.m_edges.length ();
- 	     ++idx)
- 	  {
- 	    const exploded_edge *eedge = epath.m_edges[idx];
- 	    if (logger)
- 		    logger->log ("eedge[%i]: EN %i -> EN %i", idx,
- 				 eedge->m_src->m_index,
- 				 eedge->m_dest->m_index);
- 	    const exploded_node *dst_node = eedge->m_dest;
- 	    const program_point &dst_point = dst_node->get_point ();
- 	    const gimple *stmt = dst_point.get_stmt ();
- 	    if (!stmt)
- 		    continue;
- 	    if (const gassign *assign = dyn_cast<const gassign *> (stmt))
- 		    {
- 			    tree lhs = gimple_assign_lhs (assign);
- 			    if (TREE_CODE (lhs) == SSA_NAME
- 				&& SSA_NAME_VAR (lhs) == SSA_NAME_VAR (m_var))
- 				    return assign;
- 		    }
- 	  }
-       }
- 
-   not_found:
- 
-     /* Look backwards for the first statement with a location.  */
-     int i;
-     const exploded_edge *eedge;
-     FOR_EACH_VEC_ELT_REVERSE (epath.m_edges, i, eedge)
-     {
-       if (logger)
- 	logger->log ("eedge[%i]: EN %i -> EN %i", i, eedge->m_src->m_index,
- 		     eedge->m_dest->m_index);
-       const exploded_node *dst_node = eedge->m_dest;
-       const program_point &dst_point = dst_node->get_point ();
-       const gimple *stmt = dst_point.get_stmt ();
-       if (stmt)
- 	if (get_pure_location (stmt->location) != UNKNOWN_LOCATION)
- 	  return stmt;
-     }
- 
-     gcc_unreachable ();
-     return NULL;
-   }
- 
-   void update_event_loc_info (event_loc_info &) final override
-   {
-     /* No-op.  */
-   }
- 
- private:
-   const exploded_graph &m_eg;
-   tree m_var;
- };
- 
  class refcnt_mismatch : public pending_diagnostic_subclass<refcnt_mismatch>
  {
  public:
--- 188,193 ----
*************** check_refcnt (const region_model *model,
*** 445,456 ****
  	return;
  
        const auto &eg = ctxt->get_eg ();
-       refcnt_stmt_finder finder (*eg, reg_tree);
        auto pd = std::make_unique<refcnt_mismatch> (curr_region, ob_refcnt_sval,
  						   actual_refcnt_sval,
  						   reg_tree);
        if (pd && eg)
! 	ctxt->warn (std::move (pd), &finder);
      }
  }
  
--- 354,366 ----
  	return;
  
        const auto &eg = ctxt->get_eg ();
        auto pd = std::make_unique<refcnt_mismatch> (curr_region, ob_refcnt_sval,
  						   actual_refcnt_sval,
  						   reg_tree);
        if (pd && eg)
! 	ctxt->warn (std::move (pd),
! 		    make_ploc_fixer_for_epath_for_leak_diagnostic (*eg,
! 								   NULL_TREE));
      }
  }
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc
*** gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/analyzer_gil_plugin.cc	Sun Dec 14 22:32:11 2025
*************** public:
*** 53,71 ****
    bool inherited_state_p () const final override { return false; }
  
    bool on_stmt (sm_context &sm_ctxt,
- 		const supernode *node,
  		const gimple *stmt) const final override;
  
    bool can_purge_p (state_t s) const final override;
  
    void check_for_pyobject_usage_without_gil (sm_context &sm_ctxt,
- 					     const supernode *node,
  					     const gimple *stmt,
  					     tree op) const;
  
   private:
    void check_for_pyobject_in_call (sm_context &sm_ctxt,
- 				   const supernode *node,
  				   const gcall &call,
  				   tree callee_fndecl) const;
  
--- 53,68 ----
*************** gil_state_machine::gil_state_machine (lo
*** 289,302 ****
  struct cb_data
  {
    cb_data (const gil_state_machine &sm, sm_context &sm_ctxt,
! 	   const supernode *snode, const gimple *stmt)
!   : m_sm (sm), m_sm_ctxt (sm_ctxt), m_snode (snode), m_stmt (stmt)
    {
    }
  
    const gil_state_machine &m_sm;
    sm_context &m_sm_ctxt;
-   const supernode *m_snode;
    const gimple *m_stmt;
  };
  
--- 286,298 ----
  struct cb_data
  {
    cb_data (const gil_state_machine &sm, sm_context &sm_ctxt,
! 	   const gimple *stmt)
!   : m_sm (sm), m_sm_ctxt (sm_ctxt), m_stmt (stmt)
    {
    }
  
    const gil_state_machine &m_sm;
    sm_context &m_sm_ctxt;
    const gimple *m_stmt;
  };
  
*************** static bool
*** 304,310 ****
  check_for_pyobject (gimple *, tree op, tree, void *data)
  {
    cb_data *d = (cb_data *)data;
!   d->m_sm.check_for_pyobject_usage_without_gil (d->m_sm_ctxt, d->m_snode,
  						d->m_stmt, op);
    return true;
  }
--- 300,306 ----
  check_for_pyobject (gimple *, tree op, tree, void *data)
  {
    cb_data *d = (cb_data *)data;
!   d->m_sm.check_for_pyobject_usage_without_gil (d->m_sm_ctxt,
  						d->m_stmt, op);
    return true;
  }
*************** check_for_pyobject (gimple *, tree op, t
*** 314,320 ****
  
  void
  gil_state_machine::check_for_pyobject_in_call (sm_context &sm_ctxt,
- 					       const supernode *node,
  					       const gcall &call,
  					       tree callee_fndecl) const
  {
--- 310,315 ----
*************** gil_state_machine::check_for_pyobject_in
*** 326,332 ****
        tree type = TREE_TYPE (TREE_TYPE (arg));
        if (type_based_on_pyobject_p (type))
  	{
! 	  sm_ctxt.warn (node, &call, NULL_TREE,
  			std::make_unique<fncall_without_gil> (*this, call,
  							      callee_fndecl,
  							      i));
--- 321,327 ----
        tree type = TREE_TYPE (TREE_TYPE (arg));
        if (type_based_on_pyobject_p (type))
  	{
! 	  sm_ctxt.warn (NULL_TREE,
  			std::make_unique<fncall_without_gil> (*this, call,
  							      callee_fndecl,
  							      i));
*************** gil_state_machine::check_for_pyobject_in
*** 339,345 ****
  
  bool
  gil_state_machine::on_stmt (sm_context &sm_ctxt,
- 			    const supernode *node,
  			    const gimple *stmt) const
  {
    const state_t global_state = sm_ctxt.get_global_state ();
--- 334,339 ----
*************** gil_state_machine::on_stmt (sm_context &
*** 355,361 ****
  			"PyEval_SaveThread");
  	      if (global_state == m_released_gil)
  		{
! 		  sm_ctxt.warn (node, stmt, NULL_TREE,
  				std::make_unique<double_save_thread> (*this, call));
  		  sm_ctxt.set_global_state (m_stop);
  		}
--- 349,355 ----
  			"PyEval_SaveThread");
  	      if (global_state == m_released_gil)
  		{
! 		  sm_ctxt.warn (NULL_TREE,
  				std::make_unique<double_save_thread> (*this, call));
  		  sm_ctxt.set_global_state (m_stop);
  		}
*************** gil_state_machine::on_stmt (sm_context &
*** 377,393 ****
  	    {
  	      /* Find PyObject * args of calls to fns with unknown bodies.  */
  	      if (!fndecl_has_gimple_body_p (callee_fndecl))
! 		check_for_pyobject_in_call (sm_ctxt, node, call, callee_fndecl);
  	    }
  	}
        else if (global_state == m_released_gil)
! 	check_for_pyobject_in_call (sm_ctxt, node, call, NULL);
      }
    else
      if (global_state == m_released_gil)
        {
  	/* Walk the stmt, finding uses of PyObject (or "subclasses").  */
! 	cb_data d (*this, sm_ctxt, node, stmt);
  	walk_stmt_load_store_addr_ops (const_cast <gimple *> (stmt), &d,
  				       check_for_pyobject,
  				       check_for_pyobject,
--- 371,387 ----
  	    {
  	      /* Find PyObject * args of calls to fns with unknown bodies.  */
  	      if (!fndecl_has_gimple_body_p (callee_fndecl))
! 		check_for_pyobject_in_call (sm_ctxt, call, callee_fndecl);
  	    }
  	}
        else if (global_state == m_released_gil)
! 	check_for_pyobject_in_call (sm_ctxt, call, NULL);
      }
    else
      if (global_state == m_released_gil)
        {
  	/* Walk the stmt, finding uses of PyObject (or "subclasses").  */
! 	cb_data d (*this, sm_ctxt, stmt);
  	walk_stmt_load_store_addr_ops (const_cast <gimple *> (stmt), &d,
  				       check_for_pyobject,
  				       check_for_pyobject,
*************** gil_state_machine::can_purge_p (state_t
*** 404,417 ****
  
  void
  gil_state_machine::check_for_pyobject_usage_without_gil (sm_context &sm_ctxt,
- 							 const supernode *node,
  							 const gimple *stmt,
  							 tree op) const
  {
    tree type = TREE_TYPE (op);
    if (type_based_on_pyobject_p (type))
      {
!       sm_ctxt.warn (node, stmt, NULL_TREE,
  		    std::make_unique<pyobject_usage_without_gil> (*this, op));
        sm_ctxt.set_global_state (m_stop);
      }
--- 398,410 ----
  
  void
  gil_state_machine::check_for_pyobject_usage_without_gil (sm_context &sm_ctxt,
  							 const gimple *stmt,
  							 tree op) const
  {
    tree type = TREE_TYPE (op);
    if (type_based_on_pyobject_p (type))
      {
!       sm_ctxt.warn (NULL_TREE,
  		    std::make_unique<pyobject_usage_without_gil> (*this, op));
        sm_ctxt.set_global_state (m_stop);
      }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-1.c	Sun Dec 14 22:32:11 2025
*************** static int sco_sock_getsockopt_old_broke
*** 107,112 ****
--- 107,114 ----
  			err = -1;
  
  	/* [...snip...] */
+ 
+ 	return 0;
  }
  
  static int sco_sock_getsockopt_fixed(struct socket *sock, int optname, char __user *optval, int __user *optlen)
*************** static int sco_sock_getsockopt_fixed(str
*** 136,139 ****
--- 138,143 ----
  			err = -1;
  
  	/* [...snip...] */
+ 
+ 	return 0;
  }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2011-1078-2.c	Sun Dec 14 22:32:11 2025
*************** struct sco_conninfo {
*** 21,27 ****
  
  /* Adapted from sco_sock_getsockopt_old in net/bluetooth/sco.c.  */
  
! int test_1 (char __user *optval, const struct sco_conninfo *in)
  {
  	struct sco_conninfo cinfo; /* { dg-message "region created on stack here" "where" } */
  				   /* { dg-message "capacity: 6 bytes" "capacity" { target *-*-* } .-1 } */
--- 21,27 ----
  
  /* Adapted from sco_sock_getsockopt_old in net/bluetooth/sco.c.  */
  
! void test_1 (char __user *optval, const struct sco_conninfo *in)
  {
  	struct sco_conninfo cinfo; /* { dg-message "region created on stack here" "where" } */
  				   /* { dg-message "capacity: 6 bytes" "capacity" { target *-*-* } .-1 } */
*************** int test_1 (char __user *optval, const s
*** 34,40 ****
  	/* { dg-message "1 byte is uninitialized" "how much note" { target *-*-* } .-1 } */
  }
  
! int test_2 (char __user *optval, const struct sco_conninfo *in)
  {
  	struct sco_conninfo cinfo;
  	/* Note: 40 bits of fields, padded to 48.  */
--- 34,40 ----
  	/* { dg-message "1 byte is uninitialized" "how much note" { target *-*-* } .-1 } */
  }
  
! void test_2 (char __user *optval, const struct sco_conninfo *in)
  {
  	struct sco_conninfo cinfo;
  	/* Note: 40 bits of fields, padded to 48.  */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/plugin/infoleak-CVE-2017-18549-1.c	Sun Dec 14 22:32:11 2025
*************** struct aac_srb_reply
*** 44,51 ****
  
  /* Adapted from drivers/scsi/aacraid/commctrl.c  */
  
! static int aac_send_raw_srb(/* [...snip...] */
! 			    void __user *user_reply)
  {
  	u32 byte_count = 0;
  
--- 44,51 ----
  
  /* Adapted from drivers/scsi/aacraid/commctrl.c  */
  
! static void aac_send_raw_srb(/* [...snip...] */
! 			     void __user *user_reply)
  {
  	u32 byte_count = 0;
  
*************** static int aac_send_raw_srb(/* [...snip.
*** 74,81 ****
  	/* [...snip...] */
  }
  
! static int aac_send_raw_srb_fixed(/* [...snip...] */
! 				  void __user *user_reply)
  {
  	u32 byte_count = 0;
  
--- 74,81 ----
  	/* [...snip...] */
  }
  
! static void aac_send_raw_srb_fixed(/* [...snip...] */
! 				   void __user *user_reply)
  {
  	u32 byte_count = 0;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/pointer-counted-by-pr122982.c gcc-16-20251214/gcc/testsuite/gcc.dg/pointer-counted-by-pr122982.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/pointer-counted-by-pr122982.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/pointer-counted-by-pr122982.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,19 ----
+ /* PR c/122982 */ 
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ 
+ int* f (int);
+ 
+ struct __bounded_ptr {
+  int k;
+  int *buf __attribute__ ((counted_by (k)));
+ };
+ 
+ int*
+ f1 (int n) { return f (n); }
+ 
+ void h1 (void)
+ { 
+   int *p = (struct __bounded_ptr) {3, f1 (3)}.buf;
+   __builtin_memset (p, 0, 3 * sizeof p);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/pr121852.c gcc-16-20251214/gcc/testsuite/gcc.dg/pr121852.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/pr121852.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/pr121852.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,49 ----
+ /* PR rtl-optimization/121852 */
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fno-gcse" } */
+ 
+ int a[] = { 0 }, d, e, h, i, j, k, l, n[1], *o = n;
+ volatile int m;
+ 
+ int
+ foo (char q)
+ {
+   return a[e ^ (q & 5)];
+ }
+ 
+ int
+ bar (int q[])
+ {
+   int b = 5;
+   for (int g = 0; g < d; ++g)
+     {
+       int c = foo (q[g] >> 6);
+       int f = (c & 4095) ^ a[c & 5];
+       b = f;
+     }
+   return b;
+ }
+ 
+ int
+ baz (volatile int q)
+ {
+   k = 5 % q;
+   int r[] = { h, i, k, j };
+   return bar (r);
+ }
+ 
+ int
+ main ()
+ {
+   int t;
+   do
+     {
+       if (baz (5))
+ 	m = 4;
+       l--;
+       t = l - 1 % m + 1;
+     }
+   while (!baz (5));
+   o[0] = 2 % t;
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/pr123018.c gcc-16-20251214/gcc/testsuite/gcc.dg/pr123018.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/pr123018.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/pr123018.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,17 ----
+ /* PR c/123018 */
+ /* { dg-do compile } */
+ 
+ struct A {
+   int x : 8 __attribute__ ((vector_size (8)));	/* { dg-error "bit-field 'x' has invalid type" } */
+ };
+ struct B {
+   float x : 8;					/* { dg-error "bit-field 'x' has invalid type" } */
+ };
+ struct C {
+   int : 8 __attribute__ ((vector_size (8)));	/* { dg-error "bit-field '\[^\n\r]*anonymous\[^\n\r]*' has invalid type" } */
+   int x;
+ };
+ struct D {
+   float : 8;					/* { dg-error "bit-field '\[^\n\r]*anonymous\[^\n\r]*' has invalid type" } */
+   int x;
+ };
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/rtl/powerpc/test-frame-related.c gcc-16-20251214/gcc/testsuite/gcc.dg/rtl/powerpc/test-frame-related.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/rtl/powerpc/test-frame-related.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/rtl/powerpc/test-frame-related.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do compile { target { powerpc64*-*-linux* } } } */
+ /* { dg-options "-O2 -mregnames" } */
+ 
+ int __RTL (startwith ("cprop_hardreg")) test_frame_related ()
+ {
+ (function "frame_related"
+   (insn-chain
+     (block 2
+       (edge-from entry (flags "FALLTHRU"))
+       (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
+       (cinsn 8 (set (reg:DI %r5)
+                     (reg:DI lr)))
+       (cinsn/f 9 (set (reg:DI %r0)
+                     (reg:DI lr)))
+       (cinsn/f 10 (set (mem/c:DI (plus:DI (reg/f:DI %r1)
+                             (const_int 16 ))[18  S8 A8])
+                     (reg:DI %r0)))
+ 
+       ;; Extra insn to avoid the above being deleted by DCE.
+       (cinsn 18 (use (reg:DI %r5)))
+       (edge-to exit (flags "FALLTHRU"))
+     ) ;; block 2
+   ) ;; insn-chain
+ ) ;; function "main"
+ }
+ 
+ /* { dg-final { scan-assembler {\mmflr %r0\M}  } } */
+ /* { dg-final { scan-assembler {\mmflr %r5\M}  } } */
+ /* { dg-final { scan-assembler {\mstd %r0,16\(%r1\)}  } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/sibcall-12.c gcc-16-20251214/gcc/testsuite/gcc.dg/sibcall-12.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/sibcall-12.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/sibcall-12.c	Sun Dec 14 22:32:11 2025
***************
*** 1,5 ****
--- 1,6 ----
  // Test for sibcall optimization with struct aligned on stack.
  // { dg-options "-O2" }
+ /* { dg-additional-options "-fno-PIE" { target ia32 } } */
  // { dg-final { scan-assembler "jmp" { target i?86-*-* x86_64-*-* } } }
  
  struct A { char a[17]; };
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/stack-usage-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/stack-usage-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/stack-usage-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/stack-usage-1.c	Sun Dec 14 22:32:11 2025
***************
*** 103,109 ****
  #  define SIZE 252
  #elif defined (__CRIS__)
  #  define SIZE 252
! #elif defined (__loongarch_lp64)
  #  define SIZE 240   /* 256 - 8 bytes for $fp, and 8 bytes for a temp value */
  #else
  #  define SIZE 256
--- 103,109 ----
  #  define SIZE 252
  #elif defined (__CRIS__)
  #  define SIZE 252
! #elif defined (__loongarch__)
  #  define SIZE 240   /* 256 - 8 bytes for $fp, and 8 bytes for a temp value */
  #else
  #  define SIZE 256
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tls/data-sections-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/tls/data-sections-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tls/data-sections-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tls/data-sections-1.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target tls_runtime } */
+ /* { dg-options "-fdata-sections" } */
+ /* { dg-add-options tls } */
+ 
+ __thread int i = 1;
+ 
+ int main (void)
+ {
+   if (i != 1)
+     __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tls/struct-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/tls/struct-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tls/struct-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tls/struct-2.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do assemble } */
+ /* { dg-require-effective-target tls } */
+ /* { dg-add-options tls } */
+ 
+ struct pixel
+ {
+   unsigned int r, g, b;
+ };
+ 
+ struct line
+ {
+   unsigned int length;
+   struct pixel data[16];
+ };
+ 
+ __thread struct line L;
+ 
+ unsigned int read_r (unsigned int i)
+ {
+   return i < L.length ? L.data[i].r : 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/torture/pr123027.c gcc-16-20251214/gcc/testsuite/gcc.dg/torture/pr123027.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/torture/pr123027.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/torture/pr123027.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do run } */
+ /* { dg-options "-ffinite-math-only" } */
+ /* { dg-add-options ieee } */
+ 
+ double a = 0.0;
+ double b = -0.0;
+ 
+ int main()
+ {
+   double min1 = a < b ? a : b;
+   double max1 = a > b ? a : b;
+   double min2 = b < a ? b : a;
+   double max2 = b > a ? b : a;
+   if (__builtin_copysign (1., min1) != -1.
+       || __builtin_copysign (1., max1) != -1.
+       || __builtin_copysign (1., min2) != 1.
+       || __builtin_copysign (1., max2) != 1.)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/20030711-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/20030711-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/20030711-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/20030711-1.c	Sun Dec 14 22:32:11 2025
*************** record_component_aliases (type)
*** 44,55 ****
  /* The call to blah can not be eliminated.  */
  /* { dg-final { scan-tree-dump-times "blah \\(\\)" 1 "dom2" } } */
     
! /* There should be three IF conditionals.  */
! /* { dg-final { scan-tree-dump-times "if " 3 "dom2"} } */
                                                                                  
  /* There should be two loads of type.binfo.  */
  /* { dg-final { scan-tree-dump-times "type\\.binfo" 2 "dom2"} } */
   
! /* There should be three loads of vec.length.  */
! /* { dg-final { scan-tree-dump-times "vec.length" 3 "dom2"} } */
  
--- 44,55 ----
  /* The call to blah can not be eliminated.  */
  /* { dg-final { scan-tree-dump-times "blah \\(\\)" 1 "dom2" } } */
     
! /* There should be four IF conditionals.  */
! /* { dg-final { scan-tree-dump-times "if " 4 "dom2"} } */
                                                                                  
  /* There should be two loads of type.binfo.  */
  /* { dg-final { scan-tree-dump-times "type\\.binfo" 2 "dom2"} } */
   
! /* There should be four loads of vec.length.  */
! /* { dg-final { scan-tree-dump-times "vec.length" 4 "dom2"} } */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-10.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-10.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-10.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-10.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-tree-ch-details -fdump-tree-ldist-details" } */
+ 
+ /* PR tree-optimization/122734 */
+ /* We want to duplicate the block after the one containing the condition going to unreachable.
+    Since later on we will be removing the condition going to unreachable anyways. */
+ /* So in the end ldist can generate a memset. */
+ 
+ static inline int size(int *a)
+ {
+   int t = *a;
+   if (t < 0)  __builtin_unreachable();
+   return t;
+ }
+ 
+ void f(int *l, short *d)
+ {
+   for(int i = 0; i < size(l); i++)
+     d[i] = 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "Duplicating bb . is a win" 1 "ch2" } } */
+ /* { dg-final { scan-tree-dump-times "Will duplicate bb" 2 "ch2" } } */
+ /* { dg-final { scan-tree-dump "is now do-while loop" "ch2" } } */
+ /* { dg-final { scan-tree-dump "generated memset zero" "ldist" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-11.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-11.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-11.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-11.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-tree-ch-details -fdump-tree-ldist-details" } */
+ 
+ /* PR tree-optimization/122734 */
+ /* We want to duplicate the block after the one containing the condition going to unreachable.
+    Since later on we will be removing the condition going to unreachable anyways. */
+ /* So in the end ldist can generate a memset. */
+ 
+ static inline int size(int *a)
+ {
+   int t = *a;
+   if (t < 0)  __builtin_trap();
+   return t;
+ }
+ 
+ void f(int *l, short *d)
+ {
+   for(int i = 0; i < size(l); i++)
+     d[i] = 0;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "Duplicating bb . is a win" 1 "ch2" } } */
+ /* { dg-final { scan-tree-dump-times "Will duplicate bb" 2 "ch2" } } */
+ /* { dg-final { scan-tree-dump "is now do-while loop" "ch2" } } */
+ /* { dg-final { scan-tree-dump "generated memset zero" "ldist" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-12.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-12.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-12.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/copy-headers-12.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-tree-ch-details" } */
+ 
+ /* PR tree-optimization/122734 */
+ /* We want to duplicate the block after the one containing the
+    condition since it is not the "true" header. */
+ 
+ static inline int size(int *a)
+ {
+   int t = *a;
+   if (t < 0) __builtin_unreachable();
+   return t;
+ }
+ 
+ void f(int *l, short *d)
+ {
+   for(int i = 0; i < size(l); i++)
+   {
+     if (d[i] < 0)
+       return;
+     d[i]--;
+   }
+   __builtin_abort ();
+ }
+ 
+ /* Not only we duplicate the true header but also duplicate the condition
+    `d[i] < 0` but we should not. This structure does not show up enough to
+    make a difference but we record it just in case we improve the heurstics
+    some more.  */
+ /* { dg-final { scan-tree-dump-times "Duplicating bb . is a win" 1 "ch2" { xfail *-*-* } } } */
+ /* { dg-final { scan-tree-dump-times "Will duplicate bb" 2 "ch2" { xfail *-*-* } } } */
+ /* { dg-final { scan-tree-dump "is now do-while loop" "ch2" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,8 ****
  /* { dg-do run { target vect_cmdline_needed } } */
- /* { dg-do compile { target { loongarch_sx && {! loongarch_sx_hw } } } } */
  /* { dg-options "-O2 -fno-tree-loop-distribute-patterns -ftree-vectorize -fdump-tree-vect-details -fvect-cost-model=dynamic" } */
  /* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */
- /* { dg-additional-options "-mlsx" { target { loongarch*-*-* } } } */
  
  #include <stdlib.h>
  
--- 1,6 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-25.c	Sun Dec 14 22:32:11 2025
***************
*** 1,8 ****
  /* { dg-do run { target vect_cmdline_needed } } */
- /* { dg-do compile { target { loongarch_sx && {! loongarch_sx_hw } } } } */
  /* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details -fvect-cost-model=dynamic" } */
  /* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details -fvect-cost-model=dynamic -mno-sse" { target { i?86-*-* x86_64-*-* } } } */
- /* { dg-additional-options "-mlsx" { target { loongarch*-*-* } } } */
  
  #include <stdlib.h>
  
--- 1,6 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/pr46555.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/pr46555.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/pr46555.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/pr46555.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized-details -fdump-rtl-pro_and_epilogue" } */
+ /* PR tree-optimization/46555 */
+ /* Here should not remove the forwarder block (or rather recreate it and not
+    remove it again). This improves expansion to RTL as there is one less copy
+    (or constant formation) in some cases. In this case we also get the ability
+    to shrink wrap the function.  */
+ 
+ int h(void);
+ int f(int a, int b, int c)
+ {
+   if (a)
+     return 2;
+   h();
+   if (b)
+     return 2;
+   h();
+   if (c)
+     return 2;
+   h();
+   return 4;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "New forwarder block for edge" 1 "optimized" } } */
+ /* Make sure we only have a PHI with 2 arguments here, 2 and 4.  */
+ /* { dg-final { scan-tree-dump "PHI <2..., 4...>|PHI <4..., 2...>" "optimized" } } */
+ /* Make sure we can shrink wrap the function now too. */
+ /* { dg-final { scan-rtl-dump "Performing shrink-wrapping" "pro_and_epilogue" { target { { { i?86-*-* x86_64-*-* } && { ! ia32 } } || { powerpc*-*-* aarch64*-*-* riscv*-*-* arm*-*-* }  } } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/pr83403-1.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/pr83403-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/pr83403-1.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/pr83403-1.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-options "-O3 -funroll-loops -fdump-tree-lim2-details" } */
  /* { dg-additional-options "--param max-completely-peeled-insns=200" { target { s390*-*-* } } } */
! /* { dg-additional-options "--param max-completely-peeled-insns=300" { target { arm*-*-* cris-*-* m68k*-*-* } } } */
  
  #define TYPE unsigned int
  
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O3 -funroll-loops -fdump-tree-lim2-details" } */
  /* { dg-additional-options "--param max-completely-peeled-insns=200" { target { s390*-*-* } } } */
! /* { dg-additional-options "--param max-completely-peeled-insns=300" { target { arm*-*-* cris-*-* loongarch32-*-* m68k*-*-* } } } */
  
  #define TYPE unsigned int
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/pr83403-2.c gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/pr83403-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/tree-ssa/pr83403-2.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/tree-ssa/pr83403-2.c	Sun Dec 14 22:32:11 2025
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-options "-O3 -funroll-loops -fdump-tree-lim2-details" } */
  /* { dg-additional-options "--param max-completely-peeled-insns=200" { target { s390*-*-* } } } */
! /* { dg-additional-options "--param max-completely-peeled-insns=300" { target { arm*-*-* cris-*-* m68k*-*-* } } } */
  
  #define TYPE int
  
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-options "-O3 -funroll-loops -fdump-tree-lim2-details" } */
  /* { dg-additional-options "--param max-completely-peeled-insns=200" { target { s390*-*-* } } } */
! /* { dg-additional-options "--param max-completely-peeled-insns=300" { target { arm*-*-* cris-*-* loongarch32*-*-* m68k*-*-* } } } */
  
  #define TYPE int
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/vect/pr123038.c gcc-16-20251214/gcc/testsuite/gcc.dg/vect/pr123038.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/vect/pr123038.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.dg/vect/pr123038.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ 
+ unsigned char f(int b)
+ {
+   for (int a = 0; a < 10; a += 1)
+     b = __builtin_ffs(b);
+   return b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/vect/vect-121.c gcc-16-20251214/gcc/testsuite/gcc.dg/vect/vect-121.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/vect/vect-121.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/vect/vect-121.c	Sun Dec 14 22:32:11 2025
*************** test (int start, int end)
*** 16,19 ****
  }
  
  /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */
! /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" } } */
--- 16,19 ----
  }
  
  /* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" } } */
! /* { dg-final { scan-tree-dump-not "Invalid sum" "optimized" { xfail ia32 } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c gcc-16-20251214/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c
*** gcc-16-20251207/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c	Sun Dec  7 22:32:12 2025
--- gcc-16-20251214/gcc/testsuite/gcc.dg/vect/vect-simd-clone-15.c	Sun Dec 14 22:32:11 2025
***************
*** 10,16 ****
  
  int array[N];
  
! #pragma omp declare simd linear(val(b):-3), notinbranch
  __attribute__((noinline)) int
  foo (int a, int b)
  {
--- 10,16 ----
  
  int array[N];
  
! #pragma omp declare simd linear(b: val, step (-3)), notinbranch
  __attribute__((noinline)) int
  foo (int a, int b)
  {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/aarch64/pr123026.c gcc-16-20251214/gcc/testsuite/gcc.target/aarch64/pr123026.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/aarch64/pr123026.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/aarch64/pr123026.c	Sun Dec 14 22:32:11 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-O3 -march=armv8-a -std=c99" } */
+ 
+ #include <stdbool.h>
+ 
+ int g;
+ 
+ __attribute__ ((noipa)) void
+ foo(bool a) {
+   for (int i = 0; i < 4; i++)
+     if (!i || a)
+       g += 1;
+ }
+ 
+ int main()
+ {
+   foo(0);
+   if (g != 1)
+     __builtin_abort();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/aarch64/sve/pfalse-store.c gcc-16-20251214/gcc/testsuite/gcc.target/aarch64/sve/pfalse-store.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/aarch64/sve/pfalse-store.c	Sun Dec  7 22:32:13 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/aarch64/sve/pfalse-store.c	Sun Dec 14 22:32:12 2025
*************** ALL_DATA (st2, x2_t)
*** 46,53 ****
  ALL_DATA (st3, x3_t)
  ALL_DATA (st4, x4_t)
  
! /* FIXME: Currently, st1/2/3/4 are not folded with a pfalse
!    predicate, which is the reason for the 48 missing cases below. Once
!    folding is implemented for these intrinsics, the sum should be 60.  */
! /* { dg-final { scan-assembler-times {\t.cfi_startproc\n\tret\n} 12 } } */
  /* { dg-final { scan-assembler-times {\t.cfi_startproc\n} 60 } } */
--- 46,50 ----
  ALL_DATA (st3, x3_t)
  ALL_DATA (st4, x4_t)
  
! /* { dg-final { scan-assembler-times {\t.cfi_startproc\n\tret\n} 60 } } */
  /* { dg-final { scan-assembler-times {\t.cfi_startproc\n} 60 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c	Sun Dec  7 22:32:13 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/avx2-vpcmpgtq-1.c	Sun Dec 14 22:32:12 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-mavx2 -O2" } */
  /* { dg-final { scan-assembler "vpcmpgtq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
  
  #include <immintrin.h>
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-mavx2 -O2 -fno-fuse-ops-with-volatile-access" } */
  /* { dg-final { scan-assembler "vpcmpgtq\[ \\t\]+\[^\n\]*%ymm\[0-9\]" } } */
  
  #include <immintrin.h>
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/lea-3.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/lea-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/lea-3.c	Sun Dec  7 22:32:13 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/lea-3.c	Sun Dec 14 22:32:13 2025
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-O2" } */
  
  int m;
  
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-O2 -fno-PIE" } */
  
  int m;
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/lea-4.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/lea-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/lea-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/lea-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIE" } */
+ /* Same as lea-3.c, but with -fPIE.  On ia32, that requires setting up the PIC
+    register, which requires an addl instruction.  */
+ 
+ int m;
+ 
+ int foo(int y)
+ {
+   return (m+y-1)/y;
+ }
+ 
+ /* { dg-final { scan-assembler "leal" } } */
+ /* { dg-final { scan-assembler-not "addl" { target lp64 } } } */
+ /* { dg-final { scan-assembler-times "addl" 1 { target ia32 } } } */
+ /* { dg-final { scan-assembler-not "subl" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr106060-2.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr106060-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr106060-2.c	Sun Dec  7 22:32:13 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr106060-2.c	Sun Dec 14 22:32:13 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O3 -march=x86-64-v3" } */
+ /* { dg-additional-options "-fno-PIE" { target ia32 } } */
  #include <immintrin.h>
  
  __m256i
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr106060-3.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr106060-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr106060-3.c	Sun Dec  7 22:32:13 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr106060-3.c	Sun Dec 14 22:32:13 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O3 -march=x86-64-v3" } */
+ /* { dg-additional-options "-fno-PIE" { target ia32 } } */
  #include <immintrin.h>
  
  __m256i
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr121230.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr121230.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr121230.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr121230.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile { target ia32 } } */
+ /* { dg-options "-O3 -march=athlon-xp -mfpmath=387 -fexcess-precision=standard" } */
+ 
+ typedef struct {
+     float a;
+     float b;
+ } f32_2;
+ 
+ f32_2 add32_2(f32_2 x, f32_2 y) {
+     return (f32_2){ x.a + y.a, x.b + y.b};
+ }
+ 
+ /* We do not want the vectorizer to vectorize the store and/or the
+    conversion (with IA32 we do not support V2SF add) given that spills
+    FP regs to reload them to XMM.  */
+ /* { dg-final { scan-assembler-not "movss\[ \\t\]+\[0-9\]*\\\(%esp\\\), %xmm" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr123027.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr123027.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/pr123027.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/pr123027.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -msse -mfpmath=sse -ffinite-math-only" } */
+ 
+ float foo (float a, float b)
+ {
+   return a < b ? a : b;
+ }
+ 
+ float bar (float a, float b)
+ {
+   return a > b ? a : b;
+ }
+ 
+ /* { dg-final { scan-assembler-times "minss" 1 } } */
+ /* { dg-final { scan-assembler-times "maxss" 1 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/i386/vect-shiftv4qi.c gcc-16-20251214/gcc/testsuite/gcc.target/i386/vect-shiftv4qi.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/i386/vect-shiftv4qi.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/i386/vect-shiftv4qi.c	Sun Dec 14 22:32:13 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-options "-O2 -msse2 -mno-avx2 -mno-avx512vl" } */
+ /* { dg-additional-options "-fno-PIE" { target ia32 } } */
  
  #define N 4
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/abd-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/abd-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/abd-lasx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/abd-lasx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,67 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx -fdump-rtl-expand-all" } */
- 
- #define ABD(x, y) ((x - y > 0) ? (x - y) : -(x - y))
- #define MAX(x, y) ((x) > (y) ? (x) : (y))
- #define MIN(x, y) ((x) < (y) ? (x) : (y))
- #define N 1024
- 
- #define FUNC1(T)                                                              \
-   void									      \
-   sabd1_##T (signed T *restrict a, signed T *restrict b,                      \
-              signed T *restrict out)                                          \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = ABD (a[i], b[i]);                                              \
-   }                                                                           \
-                                                                               \
-   void									      \
-   uabd1_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
-              unsigned T *restrict out)                                        \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = ABD (a[i], b[i]);                                              \
-   }
- 
- #define FUNC2(T)                                                              \
-   void									      \
-   sabd2_##T (signed T *restrict a, signed T *restrict b,                      \
-              signed T *restrict out)                                          \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
-   }                                                                           \
-                                                                               \
-   void									      \
-   uabd2_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
-              unsigned T *restrict out)                                        \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
-   }
- 
- /* Verify if the expand pass fits standard pattern name.  */
- FUNC1 (char)
- FUNC1 (short)
- FUNC1 (int)
- FUNC1 (long)
- 
- /* Verify if the combiner works well.  */
- FUNC2 (char)
- FUNC2 (short)
- FUNC2 (int)
- FUNC2 (long)
- /* { dg-final { scan-rtl-dump "Function sabd1_char.*ABD.*Function uabd1_char" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function uabd1_char.*ABD.*Function sabd1_short" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function sabd1_short.*ABD.*Function uabd1_short" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function uabd1_short.*ABD.*Function sabd1_int" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function sabd1_int.*ABD.*Function uabd1_int" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function sabd1_long.*ABD.*Function uabd1_long" "expand" } } */
- /* { dg-final { scan-assembler-times "sabd2_char:.*\txvabsd\\.b.*-sabd2_char" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_char:.*\txvabsd\\.bu.*-uabd2_char" 1 } } */
- /* { dg-final { scan-assembler-times "sabd2_short:.*\txvabsd\\.h.*-sabd2_short" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_short:.*\txvabsd\\.hu.*-uabd2_short" 1 } } */
- /* { dg-final { scan-assembler-times "sabd2_int:.*\txvabsd\\.w.*-sabd2_int" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_int:.*\txvabsd\\.wu.*-uabd2_int" 1 } } */
- /* { dg-final { scan-assembler-times "sabd2_long:.*\txvabsd\\.d.*-sabd2_long" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_long:.*\txvabsd\\.du.*-uabd2_long" 1 } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/abd-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/abd-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/abd-lsx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/abd-lsx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,67 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlsx -fdump-rtl-expand-all" } */
- 
- #define ABD(x, y) ((x - y > 0) ? (x - y) : -(x - y))
- #define MAX(x, y) ((x) > (y) ? (x) : (y))
- #define MIN(x, y) ((x) < (y) ? (x) : (y))
- #define N 1024
- 
- #define FUNC1(T)                                                              \
-   void									      \
-   sabd1_##T (signed T *restrict a, signed T *restrict b,                      \
-              signed T *restrict out)                                          \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = ABD (a[i], b[i]);                                              \
-   }                                                                           \
-                                                                               \
-   void									      \
-   uabd1_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
-              unsigned T *restrict out)                                        \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = ABD (a[i], b[i]);                                              \
-   }
- 
- #define FUNC2(T)                                                              \
-   void									      \
-   sabd2_##T (signed T *restrict a, signed T *restrict b,                      \
-              signed T *restrict out)                                          \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
-   }                                                                           \
-                                                                               \
-   void									      \
-   uabd2_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
-              unsigned T *restrict out)                                        \
-   {                                                                           \
-     for (int i = 0; i < N; i++)                                               \
-       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
-   }
- 
- /* Verify if the expand pass fits standard pattern name.  */
- FUNC1 (char)
- FUNC1 (short)
- FUNC1 (int)
- FUNC1 (long)
- 
- /* Verify if the combiner works well.  */
- FUNC2 (char)
- FUNC2 (short)
- FUNC2 (int)
- FUNC2 (long)
- /* { dg-final { scan-rtl-dump "Function sabd1_char.*ABD.*Function uabd1_char" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function uabd1_char.*ABD.*Function sabd1_short" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function sabd1_short.*ABD.*Function uabd1_short" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function uabd1_short.*ABD.*Function sabd1_int" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function sabd1_int.*ABD.*Function uabd1_int" "expand" } } */
- /* { dg-final { scan-rtl-dump "Function sabd1_long.*ABD.*Function uabd1_long" "expand" } } */
- /* { dg-final { scan-assembler-times "sabd2_char:.*\tvabsd\\.b.*-sabd2_char" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_char:.*\tvabsd\\.bu.*-uabd2_char" 1 } } */
- /* { dg-final { scan-assembler-times "sabd2_short:.*\tvabsd\\.h.*-sabd2_short" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_short:.*\tvabsd\\.hu.*-uabd2_short" 1 } } */
- /* { dg-final { scan-assembler-times "sabd2_int:.*\tvabsd\\.w.*-sabd2_int" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_int:.*\tvabsd\\.wu.*-uabd2_int" 1 } } */
- /* { dg-final { scan-assembler-times "sabd2_long:.*\tvabsd\\.d.*-sabd2_long" 1 } } */
- /* { dg-final { scan-assembler-times "uabd2_long:.*\tvabsd\\.du.*-uabd2_long" 1 } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/add-const.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/add-const.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/add-const.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/add-const.c	Thu Jan  1 00:00:00 1970
***************
*** 1,45 ****
- /* { dg-do compile } */
- /* { dg-options "-O -mabi=lp64d" } */
- 
- /* None of these functions should load the const operand into a temp
-    register.  */
- 
- /* { dg-final { scan-assembler-not "add\\.[dw]" } } */
- 
- unsigned long f01 (unsigned long x) { return x + 1; }
- unsigned long f02 (unsigned long x) { return x - 1; }
- unsigned long f03 (unsigned long x) { return x + 2047; }
- unsigned long f04 (unsigned long x) { return x + 4094; }
- unsigned long f05 (unsigned long x) { return x - 2048; }
- unsigned long f06 (unsigned long x) { return x - 4096; }
- unsigned long f07 (unsigned long x) { return x + 0x7fff0000; }
- unsigned long f08 (unsigned long x) { return x - 0x80000000l; }
- unsigned long f09 (unsigned long x) { return x + 0x7fff0000l * 2; }
- unsigned long f10 (unsigned long x) { return x - 0x80000000l * 2; }
- unsigned long f11 (unsigned long x) { return x + 0x7fff0000 + 0x1; }
- unsigned long f12 (unsigned long x) { return x + 0x7fff0000 - 0x1; }
- unsigned long f13 (unsigned long x) { return x + 0x7fff0000 + 0x7ff; }
- unsigned long f14 (unsigned long x) { return x + 0x7fff0000 - 0x800; }
- unsigned long f15 (unsigned long x) { return x - 0x80000000l - 1; }
- unsigned long f16 (unsigned long x) { return x - 0x80000000l + 1; }
- unsigned long f17 (unsigned long x) { return x - 0x80000000l - 0x800; }
- unsigned long f18 (unsigned long x) { return x - 0x80000000l + 0x7ff; }
- 
- unsigned int g01 (unsigned int x) { return x + 1; }
- unsigned int g02 (unsigned int x) { return x - 1; }
- unsigned int g03 (unsigned int x) { return x + 2047; }
- unsigned int g04 (unsigned int x) { return x + 4094; }
- unsigned int g05 (unsigned int x) { return x - 2048; }
- unsigned int g06 (unsigned int x) { return x - 4096; }
- unsigned int g07 (unsigned int x) { return x + 0x7fff0000; }
- unsigned int g08 (unsigned int x) { return x - 0x80000000l; }
- unsigned int g09 (unsigned int x) { return x + 0x7fff0000l * 2; }
- unsigned int g10 (unsigned int x) { return x - 0x80000000l * 2; }
- unsigned int g11 (unsigned int x) { return x + 0x7fff0000 + 0x1; }
- unsigned int g12 (unsigned int x) { return x + 0x7fff0000 - 0x1; }
- unsigned int g13 (unsigned int x) { return x + 0x7fff0000 + 0x7ff; }
- unsigned int g14 (unsigned int x) { return x + 0x7fff0000 - 0x800; }
- unsigned int g15 (unsigned int x) { return x - 0x80000000l - 1; }
- unsigned int g16 (unsigned int x) { return x - 0x80000000l + 1; }
- unsigned int g17 (unsigned int x) { return x - 0x80000000l - 0x800; }
- unsigned int g18 (unsigned int x) { return x - 0x80000000l + 0x7ff; }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/alsl-cost.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/alsl-cost.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/alsl-cost.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/alsl-cost.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mtune=loongarch64" } */
- /* { dg-final { scan-assembler-times "alsl\\\.\[wd\]" 2 } } */
- 
- struct P
- {
-   long a, b;
- };
- 
- struct P
- t (struct P x, long n)
- {
-   return (struct P){.a = x.a + n * 8, .b = x.b + n * 8};
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/alsl_wu.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/alsl_wu.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/alsl_wu.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/alsl_wu.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -O2" } */
- /* { dg-final { scan-assembler "alsl\\.wu" } } */
- 
- unsigned long
- test (unsigned int a, unsigned int b)
- {
-   return (a << 2) + b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/and-large-immediate-opt.c	Thu Jan  1 00:00:00 1970
***************
*** 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;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/arch-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/arch-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/arch-func-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/arch-func-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,20 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mno-lsx -std=gnu11" } */
- 
- extern char a[64];
- extern char b[64];
- 
- #ifndef TEST_TARGET_PRAGMA
- __attribute__ ((target ("arch=la64v1.1")))
- #else
- #pragma GCC target ("arch=la64v1.1")
- #endif
- void
- test (void)
- {
-   for (int i = 0; i < 64; i++)
-     a[i] = b[i];
- }
- 
- 
- /* { dg-final { scan-assembler "vld" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/arch-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/arch-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/arch-pragma-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/arch-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mno-lsx -std=gnu11" } */
- 
- #define TEST_TARGET_PRAGMA 1
- #include "./arch-func-attr-1.c"
- 
- /* { dg-final { scan-assembler "vld" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-mexplicit-relocs -mcmodel=normal -O2" } */
- /* { dg-final { scan-assembler-times "%pc64_hi12" 2 } } */
- 
- #define ATTR_MODEL_TEST
- #include "attr-model-test.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-mexplicit-relocs -mcmodel=extreme -O2" } */
- /* { dg-final { scan-assembler-times "%pc64_hi12" 3 } } */
- 
- #define ATTR_MODEL_TEST
- #include "attr-model-test.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-mexplicit-relocs=auto -mcmodel=normal -O2" } */
- /* { dg-final { scan-assembler-times "%pc64_hi12" 2 } } */
- 
- #define ATTR_MODEL_TEST
- #include "attr-model-test.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-mexplicit-relocs=auto -mcmodel=extreme -O2" } */
- /* { dg-final { scan-assembler-times "%pc64_hi12" 3 } } */
- 
- #define ATTR_MODEL_TEST
- #include "attr-model-test.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-5.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,8 ****
- /* { dg-do compile } */
- /* { dg-options "-mexplicit-relocs=none -mcmodel=extreme -O2 -fno-pic" } */
- /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,x" } } */
- /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,y" } } */
- /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,counter" } } */
- 
- #define ATTR_MODEL_TEST
- #include "attr-model-test.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-diag.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-diag.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-diag.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-diag.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-mexplicit-relocs" } */
- 
- __thread int x __attribute__((model("extreme"))); /* { dg-error "attribute cannot be specified for thread-local variables" } */
- register int y __asm__("tp") __attribute__((model("extreme"))); /* { dg-error "attribute cannot be specified for register variables" } */
- int z __attribute__((model(114))); /* { dg-error "invalid argument" } */
- int t __attribute__((model("good"))); /* { dg-error "invalid argument" } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-test.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-test.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/attr-model-test.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/attr-model-test.c	Thu Jan  1 00:00:00 1970
***************
*** 1,25 ****
- #ifdef ATTR_MODEL_TEST
- int x __attribute__((model("extreme")));
- int y __attribute__((model("normal")));
- int z;
- 
- int
- test(void)
- {
-   return x + y + z;
- }
- 
- /* The following will be used for kernel per-cpu storage implemention. */
- 
- register char *per_cpu_base __asm__("r21");
- static int counter __attribute__((section(".data..percpu"), model("extreme")));
- 
- void
- inc_counter(void)
- {
-   int *ptr = (int *)(per_cpu_base + (long)&counter);
-   (*ptr)++;
- }
- #endif
- 
- int dummy;
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-ceil-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-ceil-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-ceil-lasx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-ceil-lasx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
- /* { dg-final { scan-assembler "xvavgr.b" } } */
- /* { dg-final { scan-assembler "xvavgr.bu" } } */
- /* { dg-final { scan-assembler "xvavgr.hu" } } */
- /* { dg-final { scan-assembler "xvavgr.h" } } */
- 
- #define N 1024
- 
- #define TEST(TYPE, NAME)                                        \
-   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
-   void f_##NAME (void)                                          \
-   {                                                             \
-     int i;                                                      \
-     for (i = 0; i < N; i++)                                     \
-       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i] + 1) >> 1;       \
-   }
- 
- TEST(char, 1);
- TEST(short, 2);
- TEST(unsigned char, 3);
- TEST(unsigned short, 4);
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-ceil-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-ceil-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-ceil-lsx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-ceil-lsx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlsx" } */
- /* { dg-final { scan-assembler "vavgr.b" } } */
- /* { dg-final { scan-assembler "vavgr.bu" } } */
- /* { dg-final { scan-assembler "vavgr.hu" } } */
- /* { dg-final { scan-assembler "vavgr.h" } } */
- 
- #define N 1024
- 
- #define TEST(TYPE, NAME)                                        \
-   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
-   void f_##NAME (void)                                          \
-   {                                                             \
-     int i;                                                      \
-     for (i = 0; i < N; i++)                                     \
-       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i] + 1) >> 1;       \
-   }
- 
- TEST(char, 1);
- TEST(short, 2);
- TEST(unsigned char, 3);
- TEST(unsigned short, 4);
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-floor-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-floor-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-floor-lasx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-floor-lasx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
- /* { dg-final { scan-assembler "xvavg.b" } } */
- /* { dg-final { scan-assembler "xvavg.bu" } } */
- /* { dg-final { scan-assembler "xvavg.hu" } } */
- /* { dg-final { scan-assembler "xvavg.h" } } */
- 
- #define N 1024
- 
- #define TEST(TYPE, NAME)                                        \
-   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
-   void f_##NAME (void)                                          \
-   {                                                             \
-     int i;                                                      \
-     for (i = 0; i < N; i++)                                     \
-       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i]) >> 1;           \
-   }
- 
- TEST(char, 1);
- TEST(short, 2);
- TEST(unsigned char, 3);
- TEST(unsigned short, 4);
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-floor-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-floor-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/avg-floor-lsx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/avg-floor-lsx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlsx" } */
- /* { dg-final { scan-assembler "vavg.b" } } */
- /* { dg-final { scan-assembler "vavg.bu" } } */
- /* { dg-final { scan-assembler "vavg.hu" } } */
- /* { dg-final { scan-assembler "vavg.h" } } */
- 
- #define N 1024
- 
- #define TEST(TYPE, NAME)                                        \
-   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
-   void f_##NAME (void)                                          \
-   {                                                             \
-     int i;                                                      \
-     for (i = 0; i < N; i++)                                     \
-       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i]) >> 1;           \
-   }
- 
- TEST(char, 1);
- TEST(short, 2);
- TEST(unsigned char, 3);
- TEST(unsigned short, 4);
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitint-alignments.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitint-alignments.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitint-alignments.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitint-alignments.c	Thu Jan  1 00:00:00 1970
***************
*** 1,58 ****
- /* { dg-do run { target bitint } } */
- /* { dg-additional-options "-std=c23" } */
- 
- static long unsigned int
- calc_alignof (int n)
- {
-   if (n > 64)
-     return alignof(__int128_t);
-   if (n > 32)
-     return alignof(long long);
-   if (n > 16)
-     return alignof(int);
-   if (n > 8)
-     return alignof(short);
-   else
-     return alignof(char);
- }
- 
- #define CHECK_ALIGNMENT(N) \
-   if (alignof(_BitInt(N)) != calc_alignof(N)) \
-     __builtin_abort ();
- 
- int main (void)
- {
-   CHECK_ALIGNMENT(2);
-   CHECK_ALIGNMENT(3);
-   CHECK_ALIGNMENT(7);
-   CHECK_ALIGNMENT(8);
-   CHECK_ALIGNMENT(9);
-   CHECK_ALIGNMENT(13);
-   CHECK_ALIGNMENT(15);
-   CHECK_ALIGNMENT(16);
-   CHECK_ALIGNMENT(17);
-   CHECK_ALIGNMENT(24);
-   CHECK_ALIGNMENT(31);
-   CHECK_ALIGNMENT(32);
-   CHECK_ALIGNMENT(33);
-   CHECK_ALIGNMENT(42);
-   CHECK_ALIGNMENT(53);
-   CHECK_ALIGNMENT(63);
-   CHECK_ALIGNMENT(64);
-   CHECK_ALIGNMENT(65);
-   CHECK_ALIGNMENT(79);
-   CHECK_ALIGNMENT(96);
-   CHECK_ALIGNMENT(113);
-   CHECK_ALIGNMENT(127);
-   CHECK_ALIGNMENT(128);
-   CHECK_ALIGNMENT(129);
-   CHECK_ALIGNMENT(153);
-   CHECK_ALIGNMENT(255);
-   CHECK_ALIGNMENT(256);
-   CHECK_ALIGNMENT(257);
-   CHECK_ALIGNMENT(353);
-   CHECK_ALIGNMENT(512);
-   CHECK_ALIGNMENT(620);
-   CHECK_ALIGNMENT(1024);
-   CHECK_ALIGNMENT(30000);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitint-args.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitint-args.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitint-args.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitint-args.c	Thu Jan  1 00:00:00 1970
***************
*** 1,81 ****
- /* { dg-do compile { target bitint } } */
- /* { dg-additional-options "-std=c23 -O -fno-stack-clash-protection -g" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- #define CHECK_ARG(N)				\
- void f##N(_BitInt(N) *ptr, _BitInt(N) y)	\
- {						\
-     *ptr = y;					\
- }
- 
- 
- CHECK_ARG(2)
- /*
- ** f2:
- **	st.b	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(8)
- /*
- ** f8:
- **	st.b	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(9)
- /*
- ** f9:
- **	st.h	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(16)
- /*
- ** f16:
- **	st.h	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(19)
- /*
- ** f19:
- **	stptr.w	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(32)
- /*
- ** f32:
- **	stptr.w	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(42)
- /*
- ** f42:
- **	stptr.d	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(64)
- /*
- ** f64:
- **	stptr.d	\$r5,\$r4,0
- **	jr	\$r1
- */
- CHECK_ARG(65)
- /*
- ** f65:
- **	stptr.d	\$r5,\$r4,0
- **	st.d	\$r6,\$r4,8
- **	jr	\$r1
- */
- CHECK_ARG(127)
- /*
- ** f127:
- **	stptr.d	\$r5,\$r4,0
- **	st.d	\$r6,\$r4,8
- **	jr	\$r1
- */
- 
- CHECK_ARG(128)
- /*
- ** f128:
- **	stptr.d	\$r5,\$r4,0
- **	st.d	\$r6,\$r4,8
- **	jr	\$r1
- */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitint-sizes.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitint-sizes.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitint-sizes.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitint-sizes.c	Thu Jan  1 00:00:00 1970
***************
*** 1,60 ****
- /* { dg-do run { target bitint } } */
- /* { dg-additional-options "-std=c23" } */
- 
- static long unsigned int
- calc_size (int n)
- {
-   if (n > 128)
-     return ((n - 1)/128 + 1)  * sizeof(__int128_t);
-   if (n > 64)
-     return sizeof(__int128_t);
-   if (n > 32)
-     return sizeof(long long);
-   if (n > 16)
-     return sizeof(int);
-   if (n > 8)
-     return sizeof(short);
-   else
-     return sizeof(char);
- }
- 
- #define CHECK_SIZE(N) \
-   if (sizeof(_BitInt(N)) != calc_size(N)) \
-     __builtin_abort ();
- 
- int main (void)
- {
-   CHECK_SIZE(2);
-   CHECK_SIZE(3);
-   CHECK_SIZE(7);
-   CHECK_SIZE(8);
-   CHECK_SIZE(9);
-   CHECK_SIZE(13);
-   CHECK_SIZE(15);
-   CHECK_SIZE(16);
-   CHECK_SIZE(17);
-   CHECK_SIZE(24);
-   CHECK_SIZE(31);
-   CHECK_SIZE(32);
-   CHECK_SIZE(33);
-   CHECK_SIZE(42);
-   CHECK_SIZE(53);
-   CHECK_SIZE(63);
-   CHECK_SIZE(64);
-   CHECK_SIZE(65);
-   CHECK_SIZE(79);
-   CHECK_SIZE(96);
-   CHECK_SIZE(113);
-   CHECK_SIZE(127);
-   CHECK_SIZE(128);
-   CHECK_SIZE(129);
-   CHECK_SIZE(153);
-   CHECK_SIZE(255);
-   CHECK_SIZE(256);
-   CHECK_SIZE(257);
-   CHECK_SIZE(353);
-   CHECK_SIZE(512);
-   CHECK_SIZE(620);
-   CHECK_SIZE(1024);
-   CHECK_SIZE(30000);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitwise-shift-reassoc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitwise-shift-reassoc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitwise-shift-reassoc.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitwise-shift-reassoc.c	Thu Jan  1 00:00:00 1970
***************
*** 1,98 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- /*
- **t0:
- **	ori	(\$r[0-9]+),\$r4,257
- **	slli.d	\$r4,\1,11
- **	jr	\$r1
- */
- long
- t0 (long x)
- {
-   return (x | 0x101) << 11;
- }
- 
- /*
- **t1:
- **	xori	(\$r[0-9]+),\$r4,257
- **	alsl.d	\$r4,\1,\$r5,3
- **	jr	\$r1
- */
- long
- t1 (long x, long y)
- {
-   return ((x ^ 0x101) << 3) + y;
- }
- 
- /*
- **t2:
- **	bstrins.d	(\$r[0-9]+),\$r0,15,4
- **	alsl.d	\$r4,\1,\$r5,2
- **	jr	\$r1
- */
- long
- t2 (long x, long y)
- {
-   return ((x & ~0xfff0) << 2) + y;
- }
- 
- /*
- **t3:
- **	ori	(\$r[0-9]+),\$r4,3855
- **	alsl.w	\$r4,\1,\$r5,1
- **	jr	\$r1
- */
- long
- t3 (long x, long y)
- {
-   return (int)(((x | 0xf0f) << 1) + y);
- }
- 
- /*
- **t4:
- **	bstrpick.d	(\$r[0-9]+),\$r4,31,0
- **	slli.d	\$r4,\1,1
- **	jr	\$r1
- */
- unsigned long
- t4 (unsigned long x)
- {
-   return x << 32 >> 31;
- }
- 
- /*
- **t5:
- **	bstrpick.d	(\$r[0-9]+),\$r4,31,0
- **	alsl.d	\$r4,\1,\$r5,2
- **	jr	\$r1
- */
- unsigned long
- t5 (unsigned long x, unsigned long y)
- {
-   return (x << 32 >> 30) + y;
- }
- 
- /*
- **t6:
- **	alsl.w	\$r4,\$r4,\$r5,2
- **	jr	\$r1
- */
- unsigned int
- t6 (unsigned long x, unsigned long y)
- {
-   return (x << 32 >> 30) + y;
- }
- 
- /*
- **t7:
- **	bstrins.d	\$r4,\$r0,47,0
- **	alsl.d	\$r4,\$r4,\$r5,2
- **	jr	\$r1
- */
- unsigned long
- t7 (unsigned long x, unsigned long y)
- {
-   return ((x & 0xffff000000000000) << 2) + y;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitwise_extend.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitwise_extend.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bitwise_extend.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bitwise_extend.c	Thu Jan  1 00:00:00 1970
***************
*** 1,45 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mdiv32" } */
- /* { dg-final { scan-assembler-not "slli\\.w" } } */
- 
- int
- f1 (int a, int b)
- {
-   return (a << b) | b;
- }
- 
- int
- f2 (int a, int b)
- {
-   return (a - b) | b;
- }
- 
- int
- f3 (int a, int b)
- {
-   return (a * b) | b;
- }
- 
- int
- f4 (int a, int b)
- {
-   return (unsigned) a >> b | (unsigned) a << (32 - b) | b;
- }
- 
- int
- f5 (int a, int b)
- {
-   return (unsigned) a << b | (unsigned) a >> (32 - b) | b;
- }
- 
- int
- f6 (int a, int b)
- {
-   return (a % b) | b;
- }
- 
- int
- f7 (int a, int b)
- {
-   return (a + b) | b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "bstrins\\.d\t\\\$r4,\\\$r0,4,0" } } */
- 
- long
- x (long a)
- {
-   return a & -32;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "bstrins\\.d\t\\\$r\[0-9\]+,\\\$r0,4,0" } } */
- 
- struct aligned_buffer {
-   _Alignas(32) char x[1024];
- };
- 
- extern int f(char *);
- int g(void)
- {
-   struct aligned_buffer buf;
-   return f(buf.x);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fdump-rtl-final" } */
- /* { dg-final { scan-rtl-dump-times "insv\[sd\]i" 2 "final" } } */
- 
- struct X {
-   long a, b;
- };
- 
- struct X
- test (long a, long b, long c)
- {
-   c &= 0xfff;
-   a &= ~0xfff;
-   b &= ~0xfff;
-   return (struct X){.a = a | c, .b = b | c}; 
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrins-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrins-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "bstrins\\.d\t\\\$r4,\\\$r0,2,2" } } */
- 
- long
- x (long a)
- {
-   return a & ~4;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrpick_alsl_paired.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrpick_alsl_paired.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bstrpick_alsl_paired.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bstrpick_alsl_paired.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-combine" } */
- /* { dg-final { scan-rtl-dump "{and_shift_reversedi}" "combine" } } */
- /* { dg-final { scan-assembler-not "alsl.d\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,\\\$r0" } } */
- 
- struct SA
- {
-   const char *a;
-   unsigned int b : 16;
-   unsigned int c : 16;
- };
- 
- extern struct SA SAs[];
- 
- void
- test ()
- {
-   unsigned int i;
-   for (i = 0; i < 100; i++)
-     SAs[i].c = i;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bytepick_combine.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bytepick_combine.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bytepick_combine.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bytepick_combine.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
- /* { dg-final { scan-assembler-not "slli\\.d" } } */
- /* { dg-final { scan-assembler-not "srli\\.d" } } */
- /* { dg-final { scan-assembler-times "bytepick\\.d" 1 } } */
- 
- unsigned long
- bytepick_d_n (unsigned long a, unsigned long b)
- {
-   return a >> 56 | b << 8;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bytepick_shift_128.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bytepick_shift_128.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/bytepick_shift_128.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/bytepick_shift_128.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "bytepick\\.d" } } */
- 
- __int128
- test (__int128 a)
- {
-   return a << 16;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
- /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
- /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
- 
- void
- __attribute__ ((target ("lsx")))
- foo (void)
- {}
- 
- void
- bar (void)
- {
-   foo ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
- /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
- /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
- 
- void
- __attribute__ ((target ("lasx")))
- foo (void)
- {}
- 
- void
- __attribute__ ((target ("lsx")))
- bar (void)
- {
-   foo ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
- /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
- /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
- 
- void
- __attribute__ ((target ("arch=la64v1.1")))
- foo (void)
- {}
- 
- void
- __attribute__ ((target ("arch=la64v1.0")))
- bar (void)
- {
-   foo ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
- /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
- /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
- 
- void
- foo (void)
- {}
- 
- void
- __attribute__ ((target ("cmodel=extreme")))
- bar (void)
- {
-   foo ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_5.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
- /* { dg-final { scan-tree-dump {\(inlined\)} "einline" } } */
- 
- void
- __attribute__ ((always_inline))
- inline
- foo (void)
- {}
- 
- void
- __attribute__ ((target ("cmodel=extreme")))
- bar (void)
- {
-   foo ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/can_inline_6.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/can_inline_6.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
- /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
- /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
- 
- void
- __attribute__ ((target ("strict-align")))
- foo (void)
- {}
- 
- void
- bar (void)
- {
-   foo ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=always -fdump-rtl-final -fPIC" } */
- 
- int a;
- extern int b;
- __thread int c __attribute__ ((tls_model ("local-exec")));
- __thread int d __attribute__ ((tls_model ("initial-exec")));
- __thread int e __attribute__ ((tls_model ("local-dynamic")));
- __thread int f __attribute__ ((tls_model ("global-dynamic")));
- 
- void
- test (void)
- {
-   a = b + c + d + e + f;
- }
- 
- /* a, b, d, e, f, and __tls_get_addr.  */
- /* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-extreme-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=auto -fdump-rtl-final -fPIC" } */
- 
- #include "cmodel-extreme-1.c"
- 
- /* a, b, d, e, f, and __tls_get_addr.  */
- /* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-func-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-func-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs=none" } */
- 
- extern char a[8];
- extern char b[8];
- 
- #ifndef TEST_TARGET_PRAGMA
- __attribute__ ((target ("cmodel=extreme")))
- #else
- #pragma GCC target ("cmodel=extreme")
- #endif
- void
- test (void)
- {
-   a[0] = b[1];	
-   a[1] = b[2];	
-   a[2] = b[3];	
-   a[3] = b[4];	
- }
- 
- /* { dg-final { scan-assembler "la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,a" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmodel-pragma-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmodel-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs=none" } */
- 
- #define TEST_TARGET_PRAGMA 1
- #include "./cmodel-func-attr-1.c"
- 
- /* { dg-final { scan-assembler "la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,a" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmov_ii.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmov_ii.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/cmov_ii.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/cmov_ii.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
- /* { dg-final { scan-assembler "test:.*xor.*maskeqz.*masknez.*or.*" } } */
- 
- extern void foo_ii (int *, int *, int *, int *);
- 
- int
- test (void)
- {
-   int a, b;
-   int c, d, out;
-   foo_ii (&a, &b, &c, &d);
-   out = a == b ? c : d;
-   return out;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/compare-both-non-zero.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/compare-both-non-zero.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/compare-both-non-zero.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/compare-both-non-zero.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile { target { loongarch64*-*-* } } } */
- /* { dg-options "-O3" } */
- 
- int
- test (int a, int b)
- {
-   return a && b;
- }
- 
- /* { dg-final { scan-assembler "maskeqz" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,58 ****
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
- /* { dg-final { scan-assembler-not "maskeqz" } } */
- /* { dg-final { scan-assembler-not "masknez" } } */
- 
- extern long lm, ln, lr;
- 
- void
- test_ne ()
- {
-   if (lm != ln)
-     lr += (1 << 16);
-   lr += lm;
- }
- 
- void
- test_eq ()
- {
-   if (lm == ln)
-     lr = lm + (1 << 16);
-   else
-     lr = lm;
-   lr += lm;
- }
- 
- void
- test_lt ()
- {
-   if (lm < ln)
-     lr += (1 << 16);
-   lr += lm;
- }
- 
- void
- test_le ()
- {
-   if (lm <= ln)
-     lr = lm + ((long)1 << 32);
-   else
-     lr = lm;
-   lr += lm;
- }
- 
- void
- test_nez ()
- {
-   if (lm != 0)
-     lr <<= (1 << 4);
-   lr += lm;
- }
- 
- void
- test_eqz ()
- {
-   if (lm == 0)
-     lr >>= (1 << 2);
-   lr += lm;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,42 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 --param max-rtl-if-conversion-insns=1" } */
- /* { dg-final { scan-assembler-not "maskeqz" } } */
- /* { dg-final { scan-assembler-not "masknez" } } */
- 
- /* The relevant optimization is currently only based on noce_try_cmove_arith,
-    so it bypasses noce_convert_multiple_sets by
-    --param max-rtl-if-conversion-insns=1 to execute noce_try_cmove_arith.  */
- 
- extern long lm, ln, lr;
- 
- void
- test_ge ()
- {
-   if (lm >= ln)
-     lr += ((long)1 << 32);
-   lr += lm;
- }
- 
- void
- test_ltz ()
- {
-   if (lm < 0)
-     lr |= (1 << 16);
-   lr += lm;
- }
- 
- void
- test_lez ()
- {
-   if (lm <= 0)
-     lr |= (1 << 16);
-   lr += lm;
- }
- 
- void
- test_gez ()
- {
-   if (lm >= 0)
-     lr ^= (1 << 16);
-   lr += lm;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/conditional-move-opt-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
- /* { dg-final { scan-assembler "maskeqz" } } */
- /* { dg-final { scan-assembler "masknez" } } */
- 
- extern long lm, ln, lr;
- 
- void
- test_and ()
- {
-   if (lm < 0)
-     lr &= (1 << 16);
-   lr += lm;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/const-double-zero-stx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/const-double-zero-stx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/const-double-zero-stx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/const-double-zero-stx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -maddr-reg-reg-cost=1" } */
- /* { dg-final { scan-assembler-times {stx\..\t\$r0} 2 } } */
- 
- extern float arr_f[];
- extern double arr_d[];
- 
- void
- test_f (int base, int index)
- {
-   arr_f[base + index] = 0.0;
- }
- 
- void
- test_d (int base, int index)
- {
-   arr_d[base + index] = 0.0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/crc-sext.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/crc-sext.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/crc-sext.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/crc-sext.c	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- /*
- **my_crc:
- **	crc.w.d.w	\$r4,\$r4,\$r5
- **	jr	\$r1
- */
- int my_crc(long long dword, int crc)
- {
- 	return __builtin_loongarch_crc_w_d_w(dword, crc);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/direct-extern-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/direct-extern-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/direct-extern-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/direct-extern-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-mexplicit-relocs -mdirect-extern-access" } */
- /* { dg-final { scan-assembler-not "got" } } */
- 
- extern int x;
- int f() { return x; }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/div-div32.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/div-div32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/div-div32.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/div-div32.c	Thu Jan  1 00:00:00 1970
***************
*** 1,31 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mdiv32" } */
- /* { dg-final { scan-assembler "div\.w" } } */
- /* { dg-final { scan-assembler "div\.wu" } } */
- /* { dg-final { scan-assembler "mod\.w" } } */
- /* { dg-final { scan-assembler "mod\.wu" } } */
- /* { dg-final { scan-assembler-not "slli\.w.*,0" } } */
- 
- int
- divw (long a, long b)
- {
-   return (int)a / (int)b;
- }
- 
- unsigned int
- divwu (long a, long b)
- {
-   return (unsigned int)a / (unsigned int)b;
- }
- 
- int
- modw (long a, long b)
- {
-   return (int)a % (int)b;
- }
- 
- unsigned int
- modwu (long a, long b)
- {
-   return (unsigned int)a % (unsigned int)b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/div-no-div32.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/div-no-div32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/div-no-div32.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/div-no-div32.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "div\.w" } } */
- /* { dg-final { scan-assembler "div\.wu" } } */
- /* { dg-final { scan-assembler "mod\.w" } } */
- /* { dg-final { scan-assembler "mod\.wu" } } */
- 
- /* -mno-div32 should be implied by -march=loongarch64.  */
- /* { dg-final { scan-assembler-times "slli\.w\[^\n\]*0" 8 } } */
- 
- #include "div-div32.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/divf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/divf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/divf.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/divf.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe -fno-unsafe-math-optimizations" } */
- /* { dg-final { scan-assembler "fdiv.s" } } */
- /* { dg-final { scan-assembler-not "frecipe.s" } } */
- 
- float
- foo(float a, float b)
- {
-   return a / b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-extreme-tls-desc.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mcmodel=extreme -mexplicit-relocs=auto -mtls-dialect=desc" } */
- 
- __thread int a __attribute__((visibility("hidden")));
- extern __thread int b __attribute__((visibility("default")));
- 
- int test() { return a + b; }
- 
- /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\\$r12,\\.LANCHOR0" { target tls_native } } } */
- /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\\$r12,\\.LANCHOR0" { target tls_native } } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-lto.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-lto.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-lto.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-lto.c	Thu Jan  1 00:00:00 1970
***************
*** 1,26 ****
- /* { dg-do link } */
- /* { dg-require-effective-target lto } */
- /* { dg-require-linker-plugin "" } */
- /* { dg-options "-fpic -shared -O2 --save-temps -mexplicit-relocs=auto -flto -fuse-linker-plugin -flto-partition=one" } */
- 
- int pcrel __attribute__ ((visibility ("hidden")));
- int got __attribute__ ((visibility ("default")));
- 
- int
- *addr_pcrel (void)
- {
-   return &pcrel;
- }
- 
- int
- *addr_got (void)
- {
-   return &got;
- }
- 
- /* With linker plugin we should use la.local (it can be relaxed to pcaddi),
-    but not la.global (we are pretty sure the linker cannot relax la.global
-    got).  */
- /* { dg-final { scan-lto-assembler "la.local.*pcrel" } } */
- /* { dg-final { scan-lto-assembler "pcalau12i.*%got_pc_hi20\\\(got\\\)" } } */
- /* { dg-final { scan-lto-assembler "ld.*%got_pc_lo12\\\(got\\\)" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mexplicit-relocs=auto" } */
- 
- float a[8001];
- float
- t (void)
- {
-   return a[0] + a[8000];
- }
- 
- /* { dg-final { scan-assembler-not "la.local" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mexplicit-relocs=auto -fdump-rtl-final" } */
- /* { dg-final { scan-rtl-dump-times "mem/v/c" 2 "final" } } */
- /* { dg-final { scan-assembler-not "la\\.local" } } */
- 
- volatile unsigned long counter;
- 
- unsigned long
- read (void)
- {
-   return counter;
- }
- 
- void
- clear (void)
- {
-   counter = 0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-no-anchor.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-no-anchor.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-no-anchor.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store-no-anchor.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mexplicit-relocs=auto -fno-section-anchors" } */
- 
- #include "explicit-relocs-auto-single-load-store.c"
- 
- /* { dg-final { scan-assembler-not "la.local" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-single-load-store.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mexplicit-relocs=auto" } */
- 
- long a;
- int b;
- unsigned int c;
- 
- long load_a() { return a; }
- long load_b() { return b; }
- long load_c() { return c; }
- void store_a(long x) { a = x; }
- void store_b(int x) { b = x; }
- 
- /* { dg-final { scan-assembler-not "la.local" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-desc.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=desc" } */
- 
- __thread int a __attribute__((visibility("hidden")));
- extern __thread int b __attribute__((visibility("default")));
- 
- int test() { return a + b; }
- 
- /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\.LANCHOR0" { target tls_native } } } */
- /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\.LANCHOR0" { target tls_native } } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=trad" } */
- 
- __thread int a __attribute__((visibility("hidden")));
- extern __thread int b __attribute__((visibility("default")));
- 
- int test() { return a + b; }
- 
- /* { dg-final { scan-assembler "la\\.tls\\.ld" { target tls_native } } } */
- /* { dg-final { scan-assembler "la\\.tls\\.gd" { target tls_native } } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-le-ie.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-le-ie.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-le-ie.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-auto-tls-le-ie.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mexplicit-relocs=auto" } */
- 
- #include "explicit-relocs-auto-tls-ld-gd.c"
- 
- /* { dg-final { scan-assembler-not "la.tls" { target tls_native } } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-auto-tls-ld-gd.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mcmodel=extreme -fno-plt" } */
- /* { dg-final { scan-assembler-not "la.tls.\[lg\]d" { target tls_native } } } */
- 
- #include "./explicit-relocs-auto-tls-ld-gd.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-extreme-tls-desc.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mexplicit-relocs -mtls-dialect=desc -mcmodel=extreme -fno-late-combine-instructions" } */
- 
- __thread int a __attribute__((visibility("hidden")));
- extern __thread int b __attribute__((visibility("default")));
- 
- int test() { return a + b; }
- 
- /* { dg-final { scan-assembler "pcalau12i\t\\\$r4,%desc_pc_hi20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "addi.d\t\\\$r12,\\\$r0,%desc_pc_lo12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "lu32i.d\t\\\$r12,%desc64_pc_lo20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "lu52i.d\t\\\$r12,\\\$r12,%desc64_pc_hi12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "add.d\t\\\$r4,\\\$r4,\\\$r12" { target tls_native } } } */
- /* { dg-final { scan-assembler "ld.d\t\\\$r1,\\\$r4,%desc_ld\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "jirl\t\\\$r1,\\\$r1,%desc_call\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "add.d\t\\\$r12,\\\$r4,\\\$r2" { target tls_native } } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-auto-tls-ld-gd.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mcmodel=medium -fplt" } */
- /* { dg-final { scan-assembler-not "la.global" { target tls_native } } } */
- 
- #include "./explicit-relocs-auto-tls-ld-gd.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-medium-call36-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=trad -mcmodel=medium -fplt" } */
- /* { dg-final { scan-assembler "pcaddu18i\t\\\$r1,%call36\\\(__tls_get_addr\\\)" { target { tls_native && loongarch_call36_support } } } } */
- 
- #include "./explicit-relocs-auto-tls-ld-gd.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/explicit-relocs-tls-desc.c	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fPIC -mexplicit-relocs -mtls-dialect=desc -fno-late-combine-instructions" } */
- 
- __thread int a __attribute__((visibility("hidden")));
- extern __thread int b __attribute__((visibility("default")));
- 
- int test() { return a + b; }
- 
- /* { dg-final { scan-assembler "pcalau12i\t\\\$r4,%desc_pc_hi20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "addi.d\t\\\$r4,\\\$r4,%desc_pc_lo12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "ld.d\t\\\$r1,\\\$r4,%desc_ld\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "jirl\t\\\$r1,\\\$r1,%desc_call\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "add.d\t\\\$r12,\\\$r4,\\\$r2" { target tls_native } } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c	Thu Jan  1 00:00:00 1970
***************
*** 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" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fclass-compile.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fclass-compile.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fclass-compile.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fclass-compile.c	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -fsignaling-nans -march=loongarch64 -mfpu=64 -mabi=lp64d" } */
- /* { dg-final { scan-assembler-times "fclass\\.s" 1 } } */
- /* { dg-final { scan-assembler-times "fclass\\.d" 1 } } */
- /* { dg-final { scan-assembler-not "fcmp" } } */
- 
- __attribute__ ((noipa)) int
- test_fclass_f (float f)
- {
-   return __builtin_isinf (f)
- 	 | __builtin_isnormal (f) << 1
- 	 | __builtin_isfinite (f) << 2
- 	 | __builtin_isnan (f) << 3;
- }
- 
- __attribute__ ((noipa)) int
- test_fclass_d (double d)
- {
-   return __builtin_isinf (d)
- 	 | __builtin_isnormal (d) << 1
- 	 | __builtin_isfinite (d) << 2
- 	 | __builtin_isnan (d) << 3;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fclass-run.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fclass-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fclass-run.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fclass-run.c	Thu Jan  1 00:00:00 1970
***************
*** 1,53 ****
- /* { dg-do run } */
- /* { dg-options "-O2 -fsignaling-nans -D_GNU_SOURCE -std=c23" } */
- /* { dg-require-effective-target fenv_exceptions } */
- 
- #include <fenv.h>
- #include "fclass-compile.c"
- 
- #define ASSERT_EQ(x, y) (void)(x == y || (__builtin_abort (), 1))
- 
- int
- main (void)
- {
-   volatile float f_inf = __builtin_inff ();
-   volatile float f_zero = 0;
-   volatile float f_normal = 114.514;
-   volatile float f_subnormal = 1e-40;
-   volatile float f_qnan = __builtin_nanf ("");
-   volatile float f_snan = __builtin_nansf ("");
-   volatile double d_inf = __builtin_inf ();
-   volatile double d_zero = 0;
-   volatile double d_normal = 1919.810;
-   volatile double d_subnormal = 1e-320;
-   volatile double d_qnan = __builtin_nan ("");
-   volatile double d_snan = __builtin_nans ("");
- 
- #if __loongarch_frlen >= 64
-   /* With fclass.{s/d} we shouldn't signal, even if the input is sNaN.
-      PR 66462.  */
-   feenableexcept (FE_INVALID);
- #endif
- 
-   ASSERT_EQ (test_fclass_f (f_inf), 0b001);
-   ASSERT_EQ (test_fclass_f (-f_inf), 0b001);
-   ASSERT_EQ (test_fclass_f (f_zero), 0b100);
-   ASSERT_EQ (test_fclass_f (-f_zero), 0b100);
-   ASSERT_EQ (test_fclass_f (f_normal), 0b110);
-   ASSERT_EQ (test_fclass_f (-f_normal), 0b110);
-   ASSERT_EQ (test_fclass_f (f_subnormal), 0b100);
-   ASSERT_EQ (test_fclass_f (-f_subnormal), 0b100);
-   ASSERT_EQ (test_fclass_f (f_qnan), 0b1000);
-   ASSERT_EQ (test_fclass_f (f_snan), 0b1000);
- 
-   ASSERT_EQ (test_fclass_d (d_inf), 0b001);
-   ASSERT_EQ (test_fclass_d (-d_inf), 0b001);
-   ASSERT_EQ (test_fclass_d (d_zero), 0b100);
-   ASSERT_EQ (test_fclass_d (-d_zero), 0b100);
-   ASSERT_EQ (test_fclass_d (d_normal), 0b110);
-   ASSERT_EQ (test_fclass_d (-d_normal), 0b110);
-   ASSERT_EQ (test_fclass_d (d_subnormal), 0b100);
-   ASSERT_EQ (test_fclass_d (-d_subnormal), 0b100);
-   ASSERT_EQ (test_fclass_d (d_qnan), 0b1000);
-   ASSERT_EQ (test_fclass_d (d_snan), 0b1000);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/float-load.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/float-load.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/float-load.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/float-load.c	Sun Dec 14 22:32:13 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do compile } */
+ /* { dg-require-effective-target hard_float } */
  /* { dg-options "-O2" } */
  /* { dg-final { scan-assembler "fld\\.s" } } */
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flogb.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flogb.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flogb.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flogb.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-mdouble-float -fno-math-errno" } */
- /* { dg-final { scan-assembler "fabs\\.s" } } */
- /* { dg-final { scan-assembler "fabs\\.d" } } */
- /* { dg-final { scan-assembler "flogb\\.s" } } */
- /* { dg-final { scan-assembler "flogb\\.d" } } */
- 
- double
- my_logb (double a)
- {
-   return __builtin_logb (a);
- }
- 
- float
- my_logbf (float a)
- {
-   return __builtin_logbf (a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -mfpu=64 -march=loongarch64 -O2" } */
- /* { dg-final { scan-assembler "frecip\\.d" } } */
- /* { dg-final { scan-assembler-not "movgr2fr\\.d" } } */
- /* { dg-final { scan-assembler-not "movfr2gr\\.d" } } */
- 
- /* FPU is used for calculation and FPR is used for arguments and return
-    values.  */
- 
- double
- t (double x)
- {
-   return 1.0 / x;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64s -mfpu=64 -march=loongarch64 -O2" } */
- /* { dg-final { scan-assembler "frecip\\.d" } } */
- /* { dg-final { scan-assembler "movgr2fr\\.d" } } */
- /* { dg-final { scan-assembler "movfr2gr\\.d" } } */
- 
- /* FPU is used for calculation but FPR cannot be used for arguments and
-    return values.  */
- 
- #include "flt-abi-isa-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64s -mfpu=none -march=loongarch64 -O2" } */
- /* { dg-final { scan-assembler-not "frecip\\.d" } } */
- /* { dg-final { scan-assembler-not "movgr2fr\\.d" } } */
- /* { dg-final { scan-assembler-not "movfr2gr\\.d" } } */
- 
- /* FPU cannot be used at all.  */
- 
- #include "flt-abi-isa-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/flt-abi-isa-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-msoft-float -march=loongarch64 -O2" } */
- /* { dg-final { scan-assembler-not "frecip\\.d" } } */
- /* { dg-final { scan-assembler-not "movgr2fr\\.d" } } */
- /* { dg-final { scan-assembler-not "movfr2gr\\.d" } } */
- 
- /* -msoft-float implies both -mabi=lp64s and -mfpu=none.
-    FPU cannot be used at all.  */
- 
- #include "flt-abi-isa-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fnmam4-vec.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-Ofast -mlasx -ftree-vectorize" } */
- /* { dg-require-effective-target loongarch_asx } */
- 
- void
- foo (float *u, float x, float *y, float z)
- {
-   int i;
-   for (i = 0; i < 1024; i++)
-     *(u++) = (x - y[i] * z);
- }
- 
- /* { dg-final { scan-assembler-not "\tvori.b"} } */
- /* { dg-final { scan-assembler-not "\txvori.b"} } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/frint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/frint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/frint.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/frint.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-mdouble-float" } */
- /* { dg-final { scan-assembler "frint\\.s" } } */
- /* { dg-final { scan-assembler "frint\\.d" } } */
- 
- double
- my_rint (double a)
- {
-   return __builtin_rint (a);
- }
- 
- float
- my_rintf (float a)
- {
-   return __builtin_rintf (a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fscaleb.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fscaleb.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/fscaleb.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/fscaleb.c	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno" } */
- /* { dg-final { scan-assembler-times "fscaleb\\.s" 3 } } */
- /* { dg-final { scan-assembler-times "fscaleb\\.d" 4 } } */
- /* { dg-final { scan-assembler-times "slli\\.w" 1 } } */
- 
- double
- my_scalbln (double a, long b)
- {
-   return __builtin_scalbln (a, b);
- }
- 
- double
- my_scalbn (double a, int b)
- {
-   return __builtin_scalbn (a, b);
- }
- 
- double
- my_ldexp (double a, int b)
- {
-   return __builtin_ldexp (a, b);
- }
- 
- float
- my_scalblnf (float a, long b)
- {
-   return __builtin_scalblnf (a, b);
- }
- 
- float
- my_scalbnf (float a, int b)
- {
-   return __builtin_scalbnf (a, b);
- }
- 
- float
- my_ldexpf (float a, int b)
- {
-   return __builtin_ldexpf (a, b);
- }
- 
- /* b must be sign-extended */
- double
- my_ldexp_long (double a, long b)
- {
-   return __builtin_ldexp (a, b);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/ftint-no-inexact.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -mdouble-float -fno-math-errno -fno-fp-int-builtin-inexact" } */
- /* { dg-final { scan-assembler "ftint\\.l\\.s" } } */
- /* { dg-final { scan-assembler "ftint\\.l\\.d" } } */
- /* { dg-final { scan-assembler-not "ftintrm\\.l\\.s" } } */
- /* { dg-final { scan-assembler-not "ftintrm\\.l\\.d" } } */
- /* { dg-final { scan-assembler-not "ftintrp\\.l\\.s" } } */
- /* { dg-final { scan-assembler-not "ftintrp\\.l\\.d" } } */
- 
- long
- my_lrint (double a)
- {
-   return __builtin_lrint (a);
- }
- 
- long
- my_lrintf (float a)
- {
-   return __builtin_lrintf (a);
- }
- 
- long
- my_lfloor (double a)
- {
-   return __builtin_lfloor (a);
- }
- 
- long
- my_lfloorf (float a)
- {
-   return __builtin_lfloorf (a);
- }
- 
- long
- my_lceil (double a)
- {
-   return __builtin_lceil (a);
- }
- 
- long
- my_lceilf (float a)
- {
-   return __builtin_lceilf (a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/ftint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/ftint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/ftint.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/ftint.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -mdouble-float -fno-math-errno -ffp-int-builtin-inexact" } */
- /* { dg-final { scan-assembler "ftint\\.l\\.s" } } */
- /* { dg-final { scan-assembler "ftint\\.l\\.d" } } */
- /* { dg-final { scan-assembler "ftintrm\\.l\\.s" } } */
- /* { dg-final { scan-assembler "ftintrm\\.l\\.d" } } */
- /* { dg-final { scan-assembler "ftintrp\\.l\\.s" } } */
- /* { dg-final { scan-assembler "ftintrp\\.l\\.d" } } */
- 
- long
- my_lrint (double a)
- {
-   return __builtin_lrint (a);
- }
- 
- long
- my_lrintf (float a)
- {
-   return __builtin_lrintf (a);
- }
- 
- long
- my_lfloor (double a)
- {
-   return __builtin_lfloor (a);
- }
- 
- long
- my_lfloorf (float a)
- {
-   return __builtin_lfloorf (a);
- }
- 
- long
- my_lceil (double a)
- {
-   return __builtin_lceil (a);
- }
- 
- long
- my_lceilf (float a)
- {
-   return __builtin_lceilf (a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mno-explicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
- /* { dg-final { scan-assembler "test1:.*bl\t%plt\\(f\\)\n" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- extern void g (void);
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mno-explicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
- /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- extern void g (void);
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mno-explicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */
- /* { dg-final { scan-assembler "test1:.*la\.global\t.*f\n\tjirl" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- extern void g (void);
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mno-explicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */
- /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- extern void g (void);
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-5.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,33 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mexplicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
- /* { dg-final { scan-assembler "test1:.*bl\t%plt\\(f\\)\n" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-6.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-6.c	Thu Jan  1 00:00:00 1970
***************
*** 1,33 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mexplicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
- /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-7.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-7.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-7.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-7.c	Thu Jan  1 00:00:00 1970
***************
*** 1,34 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%got_pc_hi20\\(f\\)\n\tld\.d\t.*%got_pc_lo12\\(f\\)\n\tjirl" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-8.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-8.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-8.c	Thu Jan  1 00:00:00 1970
***************
*** 1,33 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=normal" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
- /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
- /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,34 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
- 
- #define NOIPA __attribute__ ((noipa))
- 
- extern void g (void);
- NOIPA void
- f (void)
- {}
- 
- NOIPA static void
- l (void)
- {}
- 
- NOIPA void
- test (void)
- {
-   g ();
- }
- 
- NOIPA void
- test1 (void)
- {
-   f ();
- }
- 
- NOIPA void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
- 
- #include "func-call-extreme-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
- 
- #include "func-call-extreme-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
- 
- #include "func-call-extreme-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs=none -mcmodel=extreme" } */
- /* { dg-final { scan-assembler "test:.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,g" } } */
- /* { dg-final { scan-assembler "test1:.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,f" } } */
- /* { dg-final { scan-assembler "test2:.*la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,l" } } */
- 
- #include "func-call-extreme-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-extreme-6.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs=none -mcmodel=extreme" } */
- /* { dg-final { scan-assembler "test:.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,g" } } */
- /* { dg-final { scan-assembler "test1:.*la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,f" } } */
- /* { dg-final { scan-assembler "test2:.*la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,l" } } */
- 
- #include "func-call-extreme-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,41 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */
- /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */
- /* { dg-final { scan-assembler "test1:.*la\.global\t.*f\n\tjirl" } } */
- /* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */
- /* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */
- 
- extern void g (void);
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
- 
- __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
- 
- void
- test3 (void)
- {
-   a = 10;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,45 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fno-pic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- extern void g (void);
- void __attribute__ ((noipa,noinline))
- f (void)
- {}
- 
- static void __attribute__ ((noipa,noinline))
- l (void)
- {}
- 
- /*
- ** test:
- ** 	la.global	(\$r[0-9]+),g
- ** 	jr	(\$r[0-9]+)
- */
- void
- test (void)
- {
-   g ();
- }
- 
- /*
- ** test1:
- ** 	la.local	(\$r[0-9]+),f
- ** 	jr	(\$r[0-9]+)
- */
- void
- test1 (void)
- {
-   f ();
- }
- 
- /*
- ** test2:
- ** 	la.local	(\$r[0-9]+),l
- ** 	jr	(\$r[0-9]+)
- */
- void
- test2 (void)
- {
-   l ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,54 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- extern void g (void);
- void __attribute__ ((noinline))
- f (void)
- {}
- 
- static void __attribute__ ((noipa,noinline))
- l (void)
- {}
- 
- /*
- ** test:
- ** 	la.global	(\$r[0-9]+),g
- ** 	jr	(\$r[0-9]+)
- */
- void
- test (void)
- {
-   g ();
- }
- 
- /*
- ** test1:
- ** 	la.global	(\$r[0-9]+),f
- ** 	jr	(\$r[0-9]+)
- */
- void
- test1 (void)
- {
-   f ();
- }
- 
- /*
- ** test2:
- ** 	la.local	(\$r[0-9]+),l
- ** 	jr	(\$r[0-9]+)
- */
- void
- test2 (void)
- {
-   l ();
- }
- 
- __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
- 
- void
- test3 (void)
- {
-   a = 10;
- }
- /* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-5.c	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- /* { dg-do compile } */
- /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mexplicit-relocs -mcmodel=medium" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i.*%pc_hi20\\(g\\)\n\tjirl.*pc_lo12\\(g\\)" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
- /* { dg-final { scan-assembler "test3:.*pcalau12i.*%pc_hi20\\(__tls_get_addr\\)\n\t.*\n\tjirl.*%pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
- 
- __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
- 
- void
- test3 (void)
- {
-   a = 10;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-6.c	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- /* { dg-do compile } */
- /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
- /* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mexplicit-relocs -mcmodel=medium" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i.*%pc_hi20\\(g\\)\n\tjirl.*pc_lo12\\(g\\)" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
- /* { dg-final { scan-assembler "test3:.*pcalau12i.*%pc_hi20\\(__tls_get_addr\\)\n\t.*\n\tjirl.*%pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
- 
- __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
- 
- void
- test3 (void)
- {
-   a = 10;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-7.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile } */
- /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
- /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=medium" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%got_pc_hi20\\(f\\)\n\tld\.d\t.*%got_pc_lo12\\(f\\)\n\tjirl" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i\t.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
- /* { dg-final { scan-assembler "test3:.*pcalau12i.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
- 
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
- 
- __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
- 
- void
- test3 (void)
- {
-   a = 10;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-8.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* { dg-do compile } */
- /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
- /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=medium" } */
- /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
- /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */
- /* { dg-final { scan-assembler "test2:.*pcalau12i\t.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
- /* { dg-final { scan-assembler "test3:.*pcalau12i.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
- /* { dg-final { scan-assembler "test3:.*pcalau12i.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
- 
- extern void g (void);
- 
- void
- f (void)
- {}
- 
- static void
- l (void)
- {}
- 
- void
- test (void)
- {
-   g ();
- }
- 
- void
- test1 (void)
- {
-   f ();
- }
- 
- void
- test2 (void)
- {
-   l ();
- }
- 
- __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
- 
- void
- test3 (void)
- {
-   a = 10;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* { dg-do compile } */
- /* { dg-require-effective-target loongarch_call36_support } */
- /* { dg-options "-mcmodel=medium -mexplicit-relocs -fdump-rtl-final -O2" } */
- /* { dg-final { scan-assembler "test:.*pcaddu18i\t\\\$r1,%call36\\(func\\)" } } */
- /* { dg-final { scan-assembler "test_value:.*pcaddu18i\t\\\$r1,%call36\\(func_value\\)" } } */
- 
- extern void func (void);
- int
- test (void)
- {
-   func ();
- }
- 
- 
- extern int func_value (void);
- float
- test_value (void)
- {
-   func_value ();
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/func-call-medium-call36.c	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- /* { dg-do compile } */
- /* { dg-require-effective-target loongarch_call36_support } */
- /* { dg-options "-mcmodel=medium -mexplicit-relocs -fdump-rtl-final -O2" } */
- /* { dg-final { scan-rtl-dump-times "\\(clobber \\(reg:DI 12 \\\$r12\\)\\)" 3 "final" } } */
- /* { dg-final { scan-assembler "test:.*pcaddu18i\t\\\$r12,%call36\\(func\\)" } } */
- /* { dg-final { scan-assembler "test_value:.*pcaddu18i\t\\\$r12,%call36\\(func_value\\)" } } */
- /* { dg-final { scan-assembler "test_multi:.*pcaddu18i\t\\\$r12,%call36\\(func_multi\\)" } } */
- 
- extern void func (void);
- void
- test (void)
- {
-   func();
- }
- 
- 
- extern int func_value (void);
- int
- test_value (void)
- {
-   func_value ();
- }
- 
- struct t {float a; float b;};
- 
- extern struct t func_multi (void);
- struct t
- test_multi (void)
- {
-   func_multi ();
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/imm-load.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/imm-load.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/imm-load.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/imm-load.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-split1" } */
- /* { dg-final { scan-assembler-not "test:.*>>.*test" } } */
- 
- long int
- test (void)
- {
-   return 0x1234567890abcdef;
- }
- /* { dg-final { scan-rtl-dump-times "scanning new insn with uid" 4 "split1" } } */
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/imm-load1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/imm-load1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/imm-load1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/imm-load1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,27 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2" } */
- /* { dg-final { scan-assembler-not "test:.*lu52i\.d.*\n\taddi\.w.*\n\.L2:" } } */
- /* { dg-final { scan-assembler "test:.*lu12i\.w.*\n\tbstrins\.d.*\n\.L2:" } } */
- 
- 
- extern long long b[10];
- static inline long long
- repeat_bytes (void)
- {
-   long long r = 0x0101010101010101;
- 
-   return r;
- }
- 
- static inline long long
- highbit_mask (long long m)
- {
-   return m & repeat_bytes ();
- }
- 
- void test(long long *a)
- {
-   for (int i = 0; i < 10; i++)
-     b[i] = highbit_mask (a[i]);
- 
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/invariant-recip.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/invariant-recip.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/invariant-recip.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/invariant-recip.c	Thu Jan  1 00:00:00 1970
***************
*** 1,33 ****
- /* { dg-do compile } */
- /* { dg-options "-Ofast -march=loongarch64 -mabi=lp64d -mrecip -mfrecipe -fdump-rtl-loop2_invariant " } */
- /* { dg-final { scan-rtl-dump "Decided to move dependent invariant" "loop2_invariant" } } */
- 
- void
- nislfv_rain_plm (int im, int km, float dzl[im][km], float rql[im][km],
-                  float dt)
- {
-   int i, k;
-   float con1, decfl;
-   float dz[km], qn[km], wi[km + 1];
- 
-   for (i = 0; i < im; i++)
-     {
-       for (k = 0; k < km; k++)
-         {
-           dz[k] = dzl[i][k];
-         }
-       con1 = 0.05;
-       for (k = km - 1; k >= 0; k--)
-         {
-           decfl = (wi[k + 1] - wi[k]) * dt / dz[k];
-           if (decfl > con1)
-             {
-               wi[k] = wi[k + 1] - con1 * dz[k] / dt;
-             }
-         }
-       for (k = 0; k < km; k++)
-         {
-           rql[i][k] = qn[k];
-         }
-     }
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/and.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/and.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/and.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/and.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0" } */
+ 
+ #include <stdint.h>
+ uint64_t f(uint64_t a) {
+   a = a & 0xfffffffffffff;
+   return a;
+ } 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/la32.exp gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/la32.exp
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/la32.exp	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/la32.exp	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,40 ----
+ # Copyright (C) 2021-2025 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+ # GCC testsuite that uses the `dg.exp' driver.
+ 
+ # Exit immediately if this isn't a LoongArch target.
+ if ![istarget loongarch32*-*-*] then {
+   return
+ }
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
+ 
+ # If a testcase doesn't have special options, use these.
+ global DEFAULT_CFLAGS
+ if ![info exists DEFAULT_CFLAGS] then {
+     set DEFAULT_CFLAGS " "
+ }
+ 
+ # Initialize `dg'.
+ dg-init
+ 
+ # Main loop.
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
+ 	"" $DEFAULT_CFLAGS
+ # All done.
+ dg-finish
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/memcpy.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/memcpy.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/memcpy.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/memcpy.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wno-stringop-overflow" } */
+ 
+ extern void *memcpy (const void *, const void *, unsigned int);
+ 
+ void
+ test_memcpy (const void *p, const void *q)
+ {
+   memcpy (p, q, 0x80000000);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/trunc_int_for_mode.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/trunc_int_for_mode.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la32/trunc_int_for_mode.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la32/trunc_int_for_mode.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ float
+ __cbrtf (float x)
+ {
+   double r = 13322 * 1111;
+   float ub = r;
+   long long cvt1 = x;
+   long long m0 = cvt1 << 19;
+   long long m1 = m0 >> 63;
+   if ((m0 ^ m1) < (1ULL << 31))
+     {
+       cvt1 = (cvt1 + (1 << 31)) & 0xffffffff00000000;
+       ub = cvt1;
+     }
+   return ub;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/add-const.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/add-const.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/add-const.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/add-const.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O -mabi=lp64d" } */
+ 
+ /* None of these functions should load the const operand into a temp
+    register.  */
+ 
+ /* { dg-final { scan-assembler-not "add\\.[dw]" } } */
+ 
+ unsigned long f01 (unsigned long x) { return x + 1; }
+ unsigned long f02 (unsigned long x) { return x - 1; }
+ unsigned long f03 (unsigned long x) { return x + 2047; }
+ unsigned long f04 (unsigned long x) { return x + 4094; }
+ unsigned long f05 (unsigned long x) { return x - 2048; }
+ unsigned long f06 (unsigned long x) { return x - 4096; }
+ unsigned long f07 (unsigned long x) { return x + 0x7fff0000; }
+ unsigned long f08 (unsigned long x) { return x - 0x80000000l; }
+ unsigned long f09 (unsigned long x) { return x + 0x7fff0000l * 2; }
+ unsigned long f10 (unsigned long x) { return x - 0x80000000l * 2; }
+ unsigned long f11 (unsigned long x) { return x + 0x7fff0000 + 0x1; }
+ unsigned long f12 (unsigned long x) { return x + 0x7fff0000 - 0x1; }
+ unsigned long f13 (unsigned long x) { return x + 0x7fff0000 + 0x7ff; }
+ unsigned long f14 (unsigned long x) { return x + 0x7fff0000 - 0x800; }
+ unsigned long f15 (unsigned long x) { return x - 0x80000000l - 1; }
+ unsigned long f16 (unsigned long x) { return x - 0x80000000l + 1; }
+ unsigned long f17 (unsigned long x) { return x - 0x80000000l - 0x800; }
+ unsigned long f18 (unsigned long x) { return x - 0x80000000l + 0x7ff; }
+ 
+ unsigned int g01 (unsigned int x) { return x + 1; }
+ unsigned int g02 (unsigned int x) { return x - 1; }
+ unsigned int g03 (unsigned int x) { return x + 2047; }
+ unsigned int g04 (unsigned int x) { return x + 4094; }
+ unsigned int g05 (unsigned int x) { return x - 2048; }
+ unsigned int g06 (unsigned int x) { return x - 4096; }
+ unsigned int g07 (unsigned int x) { return x + 0x7fff0000; }
+ unsigned int g08 (unsigned int x) { return x - 0x80000000l; }
+ unsigned int g09 (unsigned int x) { return x + 0x7fff0000l * 2; }
+ unsigned int g10 (unsigned int x) { return x - 0x80000000l * 2; }
+ unsigned int g11 (unsigned int x) { return x + 0x7fff0000 + 0x1; }
+ unsigned int g12 (unsigned int x) { return x + 0x7fff0000 - 0x1; }
+ unsigned int g13 (unsigned int x) { return x + 0x7fff0000 + 0x7ff; }
+ unsigned int g14 (unsigned int x) { return x + 0x7fff0000 - 0x800; }
+ unsigned int g15 (unsigned int x) { return x - 0x80000000l - 1; }
+ unsigned int g16 (unsigned int x) { return x - 0x80000000l + 1; }
+ unsigned int g17 (unsigned int x) { return x - 0x80000000l - 0x800; }
+ unsigned int g18 (unsigned int x) { return x - 0x80000000l + 0x7ff; }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/alsl-cost.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/alsl-cost.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/alsl-cost.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/alsl-cost.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=loongarch64" } */
+ /* { dg-final { scan-assembler-times "alsl\\\.\[wd\]" 2 } } */
+ 
+ struct P
+ {
+   long a, b;
+ };
+ 
+ struct P
+ t (struct P x, long n)
+ {
+   return (struct P){.a = x.a + n * 8, .b = x.b + n * 8};
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/alsl_wu.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/alsl_wu.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/alsl_wu.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/alsl_wu.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler "alsl\\.wu" } } */
+ 
+ unsigned long
+ test (unsigned int a, unsigned int b)
+ {
+   return (a << 2) + b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/and-large-immediate-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/and-large-immediate-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/and-large-immediate-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/and-large-immediate-opt.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/arch-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/arch-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/arch-func-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/arch-func-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mno-lsx -std=gnu11" } */
+ 
+ extern char a[64];
+ extern char b[64];
+ 
+ #ifndef TEST_TARGET_PRAGMA
+ __attribute__ ((target ("arch=la64v1.1")))
+ #else
+ #pragma GCC target ("arch=la64v1.1")
+ #endif
+ void
+ test (void)
+ {
+   for (int i = 0; i < 64; i++)
+     a[i] = b[i];
+ }
+ 
+ 
+ /* { dg-final { scan-assembler "vld" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/arch-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/arch-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/arch-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/arch-pragma-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mno-lsx -std=gnu11" } */
+ 
+ #define TEST_TARGET_PRAGMA 1
+ #include "./arch-func-attr-1.c"
+ 
+ /* { dg-final { scan-assembler "vld" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs -mcmodel=normal -O2" } */
+ /* { dg-final { scan-assembler-times "%pc64_hi12" 2 } } */
+ 
+ #define ATTR_MODEL_TEST
+ #include "attr-model-test.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs -mcmodel=extreme -O2" } */
+ /* { dg-final { scan-assembler-times "%pc64_hi12" 3 } } */
+ 
+ #define ATTR_MODEL_TEST
+ #include "attr-model-test.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs=auto -mcmodel=normal -O2" } */
+ /* { dg-final { scan-assembler-times "%pc64_hi12" 2 } } */
+ 
+ #define ATTR_MODEL_TEST
+ #include "attr-model-test.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs=auto -mcmodel=extreme -O2" } */
+ /* { dg-final { scan-assembler-times "%pc64_hi12" 3 } } */
+ 
+ #define ATTR_MODEL_TEST
+ #include "attr-model-test.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-5.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs=none -mcmodel=extreme -O2 -fno-pic" } */
+ /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,x" } } */
+ /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,y" } } */
+ /* { dg-final { scan-assembler "la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,counter" } } */
+ 
+ #define ATTR_MODEL_TEST
+ #include "attr-model-test.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-diag.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-diag.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-diag.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-diag.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs" } */
+ 
+ __thread int x __attribute__((model("extreme"))); /* { dg-error "attribute cannot be specified for thread-local variables" } */
+ register int y __asm__("tp") __attribute__((model("extreme"))); /* { dg-error "attribute cannot be specified for register variables" } */
+ int z __attribute__((model(114))); /* { dg-error "invalid argument" } */
+ int t __attribute__((model("good"))); /* { dg-error "invalid argument" } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-test.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-test.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/attr-model-test.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/attr-model-test.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ #ifdef ATTR_MODEL_TEST
+ int x __attribute__((model("extreme")));
+ int y __attribute__((model("normal")));
+ int z;
+ 
+ int
+ test(void)
+ {
+   return x + y + z;
+ }
+ 
+ /* The following will be used for kernel per-cpu storage implemention. */
+ 
+ register char *per_cpu_base __asm__("r21");
+ static int counter __attribute__((section(".data..percpu"), model("extreme")));
+ 
+ void
+ inc_counter(void)
+ {
+   int *ptr = (int *)(per_cpu_base + (long)&counter);
+   (*ptr)++;
+ }
+ #endif
+ 
+ int dummy;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitint-alignments.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitint-alignments.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitint-alignments.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitint-alignments.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do run { target bitint } } */
+ /* { dg-additional-options "-std=c23" } */
+ 
+ static long unsigned int
+ calc_alignof (int n)
+ {
+   if (n > 64)
+     return alignof(__int128_t);
+   if (n > 32)
+     return alignof(long long);
+   if (n > 16)
+     return alignof(int);
+   if (n > 8)
+     return alignof(short);
+   else
+     return alignof(char);
+ }
+ 
+ #define CHECK_ALIGNMENT(N) \
+   if (alignof(_BitInt(N)) != calc_alignof(N)) \
+     __builtin_abort ();
+ 
+ int main (void)
+ {
+   CHECK_ALIGNMENT(2);
+   CHECK_ALIGNMENT(3);
+   CHECK_ALIGNMENT(7);
+   CHECK_ALIGNMENT(8);
+   CHECK_ALIGNMENT(9);
+   CHECK_ALIGNMENT(13);
+   CHECK_ALIGNMENT(15);
+   CHECK_ALIGNMENT(16);
+   CHECK_ALIGNMENT(17);
+   CHECK_ALIGNMENT(24);
+   CHECK_ALIGNMENT(31);
+   CHECK_ALIGNMENT(32);
+   CHECK_ALIGNMENT(33);
+   CHECK_ALIGNMENT(42);
+   CHECK_ALIGNMENT(53);
+   CHECK_ALIGNMENT(63);
+   CHECK_ALIGNMENT(64);
+   CHECK_ALIGNMENT(65);
+   CHECK_ALIGNMENT(79);
+   CHECK_ALIGNMENT(96);
+   CHECK_ALIGNMENT(113);
+   CHECK_ALIGNMENT(127);
+   CHECK_ALIGNMENT(128);
+   CHECK_ALIGNMENT(129);
+   CHECK_ALIGNMENT(153);
+   CHECK_ALIGNMENT(255);
+   CHECK_ALIGNMENT(256);
+   CHECK_ALIGNMENT(257);
+   CHECK_ALIGNMENT(353);
+   CHECK_ALIGNMENT(512);
+   CHECK_ALIGNMENT(620);
+   CHECK_ALIGNMENT(1024);
+   CHECK_ALIGNMENT(30000);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitint-args.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitint-args.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitint-args.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitint-args.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,81 ----
+ /* { dg-do compile { target bitint } } */
+ /* { dg-additional-options "-std=c23 -O -fno-stack-clash-protection -g" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #define CHECK_ARG(N)				\
+ void f##N(_BitInt(N) *ptr, _BitInt(N) y)	\
+ {						\
+     *ptr = y;					\
+ }
+ 
+ 
+ CHECK_ARG(2)
+ /*
+ ** f2:
+ **	st.b	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(8)
+ /*
+ ** f8:
+ **	st.b	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(9)
+ /*
+ ** f9:
+ **	st.h	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(16)
+ /*
+ ** f16:
+ **	st.h	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(19)
+ /*
+ ** f19:
+ **	st.w	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(32)
+ /*
+ ** f32:
+ **	st.w	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(42)
+ /*
+ ** f42:
+ **	stptr.d	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(64)
+ /*
+ ** f64:
+ **	stptr.d	\$r5,\$r4,0
+ **	jr	\$r1
+ */
+ CHECK_ARG(65)
+ /*
+ ** f65:
+ **	stptr.d	\$r5,\$r4,0
+ **	st.d	\$r6,\$r4,8
+ **	jr	\$r1
+ */
+ CHECK_ARG(127)
+ /*
+ ** f127:
+ **	stptr.d	\$r5,\$r4,0
+ **	st.d	\$r6,\$r4,8
+ **	jr	\$r1
+ */
+ 
+ CHECK_ARG(128)
+ /*
+ ** f128:
+ **	stptr.d	\$r5,\$r4,0
+ **	st.d	\$r6,\$r4,8
+ **	jr	\$r1
+ */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitint-sizes.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitint-sizes.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitint-sizes.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitint-sizes.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do run { target bitint } } */
+ /* { dg-additional-options "-std=c23" } */
+ 
+ static long unsigned int
+ calc_size (int n)
+ {
+   if (n > 128)
+     return ((n - 1)/128 + 1)  * sizeof(__int128_t);
+   if (n > 64)
+     return sizeof(__int128_t);
+   if (n > 32)
+     return sizeof(long long);
+   if (n > 16)
+     return sizeof(int);
+   if (n > 8)
+     return sizeof(short);
+   else
+     return sizeof(char);
+ }
+ 
+ #define CHECK_SIZE(N) \
+   if (sizeof(_BitInt(N)) != calc_size(N)) \
+     __builtin_abort ();
+ 
+ int main (void)
+ {
+   CHECK_SIZE(2);
+   CHECK_SIZE(3);
+   CHECK_SIZE(7);
+   CHECK_SIZE(8);
+   CHECK_SIZE(9);
+   CHECK_SIZE(13);
+   CHECK_SIZE(15);
+   CHECK_SIZE(16);
+   CHECK_SIZE(17);
+   CHECK_SIZE(24);
+   CHECK_SIZE(31);
+   CHECK_SIZE(32);
+   CHECK_SIZE(33);
+   CHECK_SIZE(42);
+   CHECK_SIZE(53);
+   CHECK_SIZE(63);
+   CHECK_SIZE(64);
+   CHECK_SIZE(65);
+   CHECK_SIZE(79);
+   CHECK_SIZE(96);
+   CHECK_SIZE(113);
+   CHECK_SIZE(127);
+   CHECK_SIZE(128);
+   CHECK_SIZE(129);
+   CHECK_SIZE(153);
+   CHECK_SIZE(255);
+   CHECK_SIZE(256);
+   CHECK_SIZE(257);
+   CHECK_SIZE(353);
+   CHECK_SIZE(512);
+   CHECK_SIZE(620);
+   CHECK_SIZE(1024);
+   CHECK_SIZE(30000);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitwise-shift-reassoc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitwise-shift-reassoc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitwise-shift-reassoc.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitwise-shift-reassoc.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,98 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /*
+ **t0:
+ **	ori	(\$r[0-9]+),\$r4,257
+ **	slli.d	\$r4,\1,11
+ **	jr	\$r1
+ */
+ long
+ t0 (long x)
+ {
+   return (x | 0x101) << 11;
+ }
+ 
+ /*
+ **t1:
+ **	xori	(\$r[0-9]+),\$r4,257
+ **	alsl.d	\$r4,\1,\$r5,3
+ **	jr	\$r1
+ */
+ long
+ t1 (long x, long y)
+ {
+   return ((x ^ 0x101) << 3) + y;
+ }
+ 
+ /*
+ **t2:
+ **	bstrins.d	(\$r[0-9]+),\$r0,15,4
+ **	alsl.d	\$r4,\1,\$r5,2
+ **	jr	\$r1
+ */
+ long
+ t2 (long x, long y)
+ {
+   return ((x & ~0xfff0) << 2) + y;
+ }
+ 
+ /*
+ **t3:
+ **	ori	(\$r[0-9]+),\$r4,3855
+ **	alsl.w	\$r4,\1,\$r5,1
+ **	jr	\$r1
+ */
+ long
+ t3 (long x, long y)
+ {
+   return (int)(((x | 0xf0f) << 1) + y);
+ }
+ 
+ /*
+ **t4:
+ **	bstrpick.d	(\$r[0-9]+),\$r4,31,0
+ **	slli.d	\$r4,\1,1
+ **	jr	\$r1
+ */
+ unsigned long
+ t4 (unsigned long x)
+ {
+   return x << 32 >> 31;
+ }
+ 
+ /*
+ **t5:
+ **	bstrpick.d	(\$r[0-9]+),\$r4,31,0
+ **	alsl.d	\$r4,\1,\$r5,2
+ **	jr	\$r1
+ */
+ unsigned long
+ t5 (unsigned long x, unsigned long y)
+ {
+   return (x << 32 >> 30) + y;
+ }
+ 
+ /*
+ **t6:
+ **	alsl.w	\$r4,\$r4,\$r5,2
+ **	jr	\$r1
+ */
+ unsigned int
+ t6 (unsigned long x, unsigned long y)
+ {
+   return (x << 32 >> 30) + y;
+ }
+ 
+ /*
+ **t7:
+ **	bstrins.d	\$r4,\$r0,47,0
+ **	alsl.d	\$r4,\$r4,\$r5,2
+ **	jr	\$r1
+ */
+ unsigned long
+ t7 (unsigned long x, unsigned long y)
+ {
+   return ((x & 0xffff000000000000) << 2) + y;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitwise_extend.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitwise_extend.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bitwise_extend.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bitwise_extend.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mdiv32" } */
+ /* { dg-final { scan-assembler-not "slli\\.w" } } */
+ 
+ int
+ f1 (int a, int b)
+ {
+   return (a << b) | b;
+ }
+ 
+ int
+ f2 (int a, int b)
+ {
+   return (a - b) | b;
+ }
+ 
+ int
+ f3 (int a, int b)
+ {
+   return (a * b) | b;
+ }
+ 
+ int
+ f4 (int a, int b)
+ {
+   return (unsigned) a >> b | (unsigned) a << (32 - b) | b;
+ }
+ 
+ int
+ f5 (int a, int b)
+ {
+   return (unsigned) a << b | (unsigned) a >> (32 - b) | b;
+ }
+ 
+ int
+ f6 (int a, int b)
+ {
+   return (a % b) | b;
+ }
+ 
+ int
+ f7 (int a, int b)
+ {
+   return (a + b) | b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "bstrins\\.d\t\\\$r4,\\\$r0,4,0" } } */
+ 
+ long
+ x (long a)
+ {
+   return a & -32;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "bstrins\\.d\t\\\$r\[0-9\]+,\\\$r0,4,0" } } */
+ 
+ struct aligned_buffer {
+   _Alignas(32) char x[1024];
+ };
+ 
+ extern int f(char *);
+ int g(void)
+ {
+   struct aligned_buffer buf;
+   return f(buf.x);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-rtl-final" } */
+ /* { dg-final { scan-rtl-dump-times "insv\[sd\]i" 2 "final" } } */
+ 
+ struct X {
+   long a, b;
+ };
+ 
+ struct X
+ test (long a, long b, long c)
+ {
+   c &= 0xfff;
+   a &= ~0xfff;
+   b &= ~0xfff;
+   return (struct X){.a = a | c, .b = b | c}; 
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrins-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrins-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "bstrins\\.d\t\\\$r4,\\\$r0,2,2" } } */
+ 
+ long
+ x (long a)
+ {
+   return a & ~4;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrpick_alsl_paired.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrpick_alsl_paired.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bstrpick_alsl_paired.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bstrpick_alsl_paired.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-combine" } */
+ /* { dg-final { scan-rtl-dump "{and_shift_reversedi}" "combine" } } */
+ /* { dg-final { scan-assembler-not "alsl.d\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,\\\$r0" } } */
+ 
+ struct SA
+ {
+   const char *a;
+   unsigned int b : 16;
+   unsigned int c : 16;
+ };
+ 
+ extern struct SA SAs[];
+ 
+ void
+ test ()
+ {
+   unsigned int i;
+   for (i = 0; i < 100; i++)
+     SAs[i].c = i;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bytepick_combine.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bytepick_combine.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bytepick_combine.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bytepick_combine.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler-not "slli\\.d" } } */
+ /* { dg-final { scan-assembler-not "srli\\.d" } } */
+ /* { dg-final { scan-assembler-times "bytepick\\.d" 1 } } */
+ 
+ unsigned long
+ bytepick_d_n (unsigned long a, unsigned long b)
+ {
+   return a >> 56 | b << 8;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bytepick_shift_128.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bytepick_shift_128.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/bytepick_shift_128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/bytepick_shift_128.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "bytepick\\.d" } } */
+ 
+ __int128
+ test (__int128 a)
+ {
+   return a << 16;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
+ /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
+ /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
+ 
+ void
+ __attribute__ ((target ("lsx")))
+ foo (void)
+ {}
+ 
+ void
+ bar (void)
+ {
+   foo ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
+ /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
+ /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
+ 
+ void
+ __attribute__ ((target ("lasx")))
+ foo (void)
+ {}
+ 
+ void
+ __attribute__ ((target ("lsx")))
+ bar (void)
+ {
+   foo ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
+ /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
+ /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
+ 
+ void
+ __attribute__ ((target ("arch=la64v1.1")))
+ foo (void)
+ {}
+ 
+ void
+ __attribute__ ((target ("arch=la64v1.0")))
+ bar (void)
+ {
+   foo ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
+ /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
+ /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
+ 
+ void
+ foo (void)
+ {}
+ 
+ void
+ __attribute__ ((target ("cmodel=extreme")))
+ bar (void)
+ {
+   foo ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_5.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
+ /* { dg-final { scan-tree-dump {\(inlined\)} "einline" } } */
+ 
+ void
+ __attribute__ ((always_inline))
+ inline
+ foo (void)
+ {}
+ 
+ void
+ __attribute__ ((target ("cmodel=extreme")))
+ bar (void)
+ {
+   foo ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/can_inline_6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/can_inline_6.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -fdump-tree-einline-details -O2" } */
+ /* { dg-final { scan-tree-dump {missed:   not inlinable: bar/\d+ -> foo/\d+, target specific option mismatch} "einline" } } */
+ /* { dg-final { scan-tree-dump-not {\(inlined\)} "einline" } } */
+ 
+ void
+ __attribute__ ((target ("strict-align")))
+ foo (void)
+ {}
+ 
+ void
+ bar (void)
+ {
+   foo ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=always -fdump-rtl-final -fPIC" } */
+ 
+ int a;
+ extern int b;
+ __thread int c __attribute__ ((tls_model ("local-exec")));
+ __thread int d __attribute__ ((tls_model ("initial-exec")));
+ __thread int e __attribute__ ((tls_model ("local-dynamic")));
+ __thread int f __attribute__ ((tls_model ("global-dynamic")));
+ 
+ void
+ test (void)
+ {
+   a = b + c + d + e + f;
+ }
+ 
+ /* a, b, d, e, f, and __tls_get_addr.  */
+ /* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-extreme-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=auto -fdump-rtl-final -fPIC" } */
+ 
+ #include "cmodel-extreme-1.c"
+ 
+ /* a, b, d, e, f, and __tls_get_addr.  */
+ /* { dg-final { scan-rtl-dump-times "la_pcrel64_two_parts" 6 "final" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-func-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-func-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs=none" } */
+ 
+ extern char a[8];
+ extern char b[8];
+ 
+ #ifndef TEST_TARGET_PRAGMA
+ __attribute__ ((target ("cmodel=extreme")))
+ #else
+ #pragma GCC target ("cmodel=extreme")
+ #endif
+ void
+ test (void)
+ {
+   a[0] = b[1];	
+   a[1] = b[2];	
+   a[2] = b[3];	
+   a[3] = b[4];	
+ }
+ 
+ /* { dg-final { scan-assembler "la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,a" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmodel-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmodel-pragma-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs=none" } */
+ 
+ #define TEST_TARGET_PRAGMA 1
+ #include "./cmodel-func-attr-1.c"
+ 
+ /* { dg-final { scan-assembler "la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,a" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmov_ii.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmov_ii.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/cmov_ii.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/cmov_ii.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler "test:.*xor.*maskeqz.*masknez.*or.*" } } */
+ 
+ extern void foo_ii (int *, int *, int *, int *);
+ 
+ int
+ test (void)
+ {
+   int a, b;
+   int c, d, out;
+   foo_ii (&a, &b, &c, &d);
+   out = a == b ? c : d;
+   return out;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/compare-both-non-zero.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/compare-both-non-zero.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/compare-both-non-zero.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/compare-both-non-zero.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3" } */
+ 
+ int
+ test (int a, int b)
+ {
+   return a && b;
+ }
+ 
+ /* { dg-final { scan-assembler "maskeqz" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler-not "maskeqz" } } */
+ /* { dg-final { scan-assembler-not "masknez" } } */
+ 
+ extern long lm, ln, lr;
+ 
+ void
+ test_ne ()
+ {
+   if (lm != ln)
+     lr += (1 << 16);
+   lr += lm;
+ }
+ 
+ void
+ test_eq ()
+ {
+   if (lm == ln)
+     lr = lm + (1 << 16);
+   else
+     lr = lm;
+   lr += lm;
+ }
+ 
+ void
+ test_lt ()
+ {
+   if (lm < ln)
+     lr += (1 << 16);
+   lr += lm;
+ }
+ 
+ void
+ test_le ()
+ {
+   if (lm <= ln)
+     lr = lm + ((long)1 << 32);
+   else
+     lr = lm;
+   lr += lm;
+ }
+ 
+ void
+ test_nez ()
+ {
+   if (lm != 0)
+     lr <<= (1 << 4);
+   lr += lm;
+ }
+ 
+ void
+ test_eqz ()
+ {
+   if (lm == 0)
+     lr >>= (1 << 2);
+   lr += lm;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,42 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 --param max-rtl-if-conversion-insns=1" } */
+ /* { dg-final { scan-assembler-not "maskeqz" } } */
+ /* { dg-final { scan-assembler-not "masknez" } } */
+ 
+ /* The relevant optimization is currently only based on noce_try_cmove_arith,
+    so it bypasses noce_convert_multiple_sets by
+    --param max-rtl-if-conversion-insns=1 to execute noce_try_cmove_arith.  */
+ 
+ extern long lm, ln, lr;
+ 
+ void
+ test_ge ()
+ {
+   if (lm >= ln)
+     lr += ((long)1 << 32);
+   lr += lm;
+ }
+ 
+ void
+ test_ltz ()
+ {
+   if (lm < 0)
+     lr |= (1 << 16);
+   lr += lm;
+ }
+ 
+ void
+ test_lez ()
+ {
+   if (lm <= 0)
+     lr |= (1 << 16);
+   lr += lm;
+ }
+ 
+ void
+ test_gez ()
+ {
+   if (lm >= 0)
+     lr ^= (1 << 16);
+   lr += lm;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/conditional-move-opt-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler "maskeqz" } } */
+ /* { dg-final { scan-assembler "masknez" } } */
+ 
+ extern long lm, ln, lr;
+ 
+ void
+ test_and ()
+ {
+   if (lm < 0)
+     lr &= (1 << 16);
+   lr += lm;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/const-double-zero-stx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/const-double-zero-stx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/const-double-zero-stx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/const-double-zero-stx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -maddr-reg-reg-cost=1" } */
+ /* { dg-final { scan-assembler-times {stx\..\t\$r0} 2 } } */
+ 
+ extern float arr_f[];
+ extern double arr_d[];
+ 
+ void
+ test_f (int base, int index)
+ {
+   arr_f[base + index] = 0.0;
+ }
+ 
+ void
+ test_d (int base, int index)
+ {
+   arr_d[base + index] = 0.0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/crc-sext.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/crc-sext.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/crc-sext.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/crc-sext.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /*
+ **my_crc:
+ **	crc.w.d.w	\$r4,\$r4,\$r5
+ **	jr	\$r1
+ */
+ int my_crc(long long dword, int crc)
+ {
+ 	return __builtin_loongarch_crc_w_d_w(dword, crc);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/direct-extern-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/direct-extern-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/direct-extern-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/direct-extern-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mexplicit-relocs -mdirect-extern-access" } */
+ /* { dg-final { scan-assembler-not "got" } } */
+ 
+ extern int x;
+ int f() { return x; }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/div-div32.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/div-div32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/div-div32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/div-div32.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mdiv32" } */
+ /* { dg-final { scan-assembler "div\.w" } } */
+ /* { dg-final { scan-assembler "div\.wu" } } */
+ /* { dg-final { scan-assembler "mod\.w" } } */
+ /* { dg-final { scan-assembler "mod\.wu" } } */
+ /* { dg-final { scan-assembler-not "slli\.w.*,0" } } */
+ 
+ int
+ divw (long a, long b)
+ {
+   return (int)a / (int)b;
+ }
+ 
+ unsigned int
+ divwu (long a, long b)
+ {
+   return (unsigned int)a / (unsigned int)b;
+ }
+ 
+ int
+ modw (long a, long b)
+ {
+   return (int)a % (int)b;
+ }
+ 
+ unsigned int
+ modwu (long a, long b)
+ {
+   return (unsigned int)a % (unsigned int)b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/div-no-div32.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/div-no-div32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/div-no-div32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/div-no-div32.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "div\.w" } } */
+ /* { dg-final { scan-assembler "div\.wu" } } */
+ /* { dg-final { scan-assembler "mod\.w" } } */
+ /* { dg-final { scan-assembler "mod\.wu" } } */
+ 
+ /* -mno-div32 should be implied by -march=loongarch64.  */
+ /* { dg-final { scan-assembler-times "slli\.w\[^\n\]*0" 8 } } */
+ 
+ #include "div-div32.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/divf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/divf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/divf.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/divf.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe -fno-unsafe-math-optimizations" } */
+ /* { dg-final { scan-assembler "fdiv.s" } } */
+ /* { dg-final { scan-assembler-not "frecipe.s" } } */
+ 
+ float
+ foo(float a, float b)
+ {
+   return a / b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-extreme-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-extreme-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-extreme-tls-desc.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-extreme-tls-desc.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mcmodel=extreme -mexplicit-relocs=auto -mtls-dialect=desc" } */
+ 
+ __thread int a __attribute__((visibility("hidden")));
+ extern __thread int b __attribute__((visibility("default")));
+ 
+ int test() { return a + b; }
+ 
+ /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\\$r12,\\.LANCHOR0" { target tls_native } } } */
+ /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\\$r12,\\.LANCHOR0" { target tls_native } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-lto.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-lto.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-lto.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-lto.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,26 ----
+ /* { dg-do link } */
+ /* { dg-require-effective-target lto } */
+ /* { dg-require-linker-plugin "" } */
+ /* { dg-options "-fpic -shared -O2 --save-temps -mexplicit-relocs=auto -flto -fuse-linker-plugin -flto-partition=one" } */
+ 
+ int pcrel __attribute__ ((visibility ("hidden")));
+ int got __attribute__ ((visibility ("default")));
+ 
+ int
+ *addr_pcrel (void)
+ {
+   return &pcrel;
+ }
+ 
+ int
+ *addr_got (void)
+ {
+   return &got;
+ }
+ 
+ /* With linker plugin we should use la.local (it can be relaxed to pcaddi),
+    but not la.global (we are pretty sure the linker cannot relax la.global
+    got).  */
+ /* { dg-final { scan-lto-assembler "la.local.*pcrel" } } */
+ /* { dg-final { scan-lto-assembler "pcalau12i.*%got_pc_hi20\\\(got\\\)" } } */
+ /* { dg-final { scan-lto-assembler "ld.*%got_pc_lo12\\\(got\\\)" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mexplicit-relocs=auto" } */
+ 
+ float a[8001];
+ float
+ t (void)
+ {
+   return a[0] + a[8000];
+ }
+ 
+ /* { dg-final { scan-assembler-not "la.local" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mexplicit-relocs=auto -fdump-rtl-final" } */
+ /* { dg-final { scan-rtl-dump-times "mem/v/c" 2 "final" } } */
+ /* { dg-final { scan-assembler-not "la\\.local" } } */
+ 
+ volatile unsigned long counter;
+ 
+ unsigned long
+ read (void)
+ {
+   return counter;
+ }
+ 
+ void
+ clear (void)
+ {
+   counter = 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-no-anchor.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-no-anchor.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-no-anchor.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store-no-anchor.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mexplicit-relocs=auto -fno-section-anchors" } */
+ 
+ #include "explicit-relocs-auto-single-load-store.c"
+ 
+ /* { dg-final { scan-assembler-not "la.local" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-single-load-store.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mexplicit-relocs=auto" } */
+ 
+ long a;
+ int b;
+ unsigned int c;
+ 
+ long load_a() { return a; }
+ long load_b() { return b; }
+ long load_c() { return c; }
+ void store_a(long x) { a = x; }
+ void store_b(int x) { b = x; }
+ 
+ /* { dg-final { scan-assembler-not "la.local" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-desc.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-desc.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=desc" } */
+ 
+ __thread int a __attribute__((visibility("hidden")));
+ extern __thread int b __attribute__((visibility("default")));
+ 
+ int test() { return a + b; }
+ 
+ /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\.LANCHOR0" { target tls_native } } } */
+ /* { dg-final { scan-assembler "la\\.tls\\.desc\t\\\$r4,\\.LANCHOR0" { target tls_native } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-ld-gd.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=trad" } */
+ 
+ __thread int a __attribute__((visibility("hidden")));
+ extern __thread int b __attribute__((visibility("default")));
+ 
+ int test() { return a + b; }
+ 
+ /* { dg-final { scan-assembler "la\\.tls\\.ld" { target tls_native } } } */
+ /* { dg-final { scan-assembler "la\\.tls\\.gd" { target tls_native } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-le-ie.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-le-ie.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-le-ie.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-auto-tls-le-ie.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mexplicit-relocs=auto" } */
+ 
+ #include "explicit-relocs-auto-tls-ld-gd.c"
+ 
+ /* { dg-final { scan-assembler-not "la.tls" { target tls_native } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-auto-tls-ld-gd.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mcmodel=extreme -fno-plt" } */
+ /* { dg-final { scan-assembler-not "la.tls.\[lg\]d" { target tls_native } } } */
+ 
+ #include "./explicit-relocs-auto-tls-ld-gd.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-tls-desc.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-extreme-tls-desc.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mexplicit-relocs -mtls-dialect=desc -mcmodel=extreme -fno-late-combine-instructions" } */
+ 
+ __thread int a __attribute__((visibility("hidden")));
+ extern __thread int b __attribute__((visibility("default")));
+ 
+ int test() { return a + b; }
+ 
+ /* { dg-final { scan-assembler "pcalau12i\t\\\$r4,%desc_pc_hi20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "addi.d\t\\\$r12,\\\$r0,%desc_pc_lo12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "lu32i.d\t\\\$r12,%desc64_pc_lo20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "lu52i.d\t\\\$r12,\\\$r12,%desc64_pc_hi12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "add.d\t\\\$r4,\\\$r4,\\\$r12" { target tls_native } } } */
+ /* { dg-final { scan-assembler "ld.d\t\\\$r1,\\\$r4,%desc_ld\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "jirl\t\\\$r1,\\\$r1,%desc_call\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "add.d\t\\\$r12,\\\$r4,\\\$r2" { target tls_native } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-auto-tls-ld-gd.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mcmodel=medium -fplt" } */
+ /* { dg-final { scan-assembler-not "la.global" { target tls_native } } } */
+ 
+ #include "./explicit-relocs-auto-tls-ld-gd.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-call36-auto-tls-ld-gd.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-call36-auto-tls-ld-gd.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-call36-auto-tls-ld-gd.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-medium-call36-auto-tls-ld-gd.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mexplicit-relocs=auto -mtls-dialect=trad -mcmodel=medium -fplt" } */
+ /* { dg-final { scan-assembler "pcaddu18i\t\\\$r1,%call36\\\(__tls_get_addr\\\)" { target { tls_native && loongarch_call36_support } } } } */
+ 
+ #include "./explicit-relocs-auto-tls-ld-gd.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-tls-desc.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-tls-desc.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-tls-desc.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/explicit-relocs-tls-desc.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fPIC -mexplicit-relocs -mtls-dialect=desc -fno-late-combine-instructions" } */
+ 
+ __thread int a __attribute__((visibility("hidden")));
+ extern __thread int b __attribute__((visibility("default")));
+ 
+ int test() { return a + b; }
+ 
+ /* { dg-final { scan-assembler "pcalau12i\t\\\$r4,%desc_pc_hi20\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "addi.d\t\\\$r4,\\\$r4,%desc_pc_lo12\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "ld.d\t\\\$r1,\\\$r4,%desc_ld\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "jirl\t\\\$r1,\\\$r1,%desc_call\\\(\\.LANCHOR0\\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "add.d\t\\\$r12,\\\$r4,\\\$r2" { target tls_native } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/extendsidi2-combine.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/extendsidi2-combine.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/extendsidi2-combine.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/extendsidi2-combine.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/fclass-compile.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/fclass-compile.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/fclass-compile.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/fclass-compile.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fsignaling-nans -march=loongarch64 -mfpu=64 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler-times "fclass\\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "fclass\\.d" 1 } } */
+ /* { dg-final { scan-assembler-not "fcmp" } } */
+ 
+ __attribute__ ((noipa)) int
+ test_fclass_f (float f)
+ {
+   return __builtin_isinf (f)
+ 	 | __builtin_isnormal (f) << 1
+ 	 | __builtin_isfinite (f) << 2
+ 	 | __builtin_isnan (f) << 3;
+ }
+ 
+ __attribute__ ((noipa)) int
+ test_fclass_d (double d)
+ {
+   return __builtin_isinf (d)
+ 	 | __builtin_isnormal (d) << 1
+ 	 | __builtin_isfinite (d) << 2
+ 	 | __builtin_isnan (d) << 3;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/fclass-run.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/fclass-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/fclass-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/fclass-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,53 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -fsignaling-nans -D_GNU_SOURCE -std=c23" } */
+ /* { dg-require-effective-target fenv_exceptions } */
+ 
+ #include <fenv.h>
+ #include "fclass-compile.c"
+ 
+ #define ASSERT_EQ(x, y) (void)(x == y || (__builtin_abort (), 1))
+ 
+ int
+ main (void)
+ {
+   volatile float f_inf = __builtin_inff ();
+   volatile float f_zero = 0;
+   volatile float f_normal = 114.514;
+   volatile float f_subnormal = 1e-40;
+   volatile float f_qnan = __builtin_nanf ("");
+   volatile float f_snan = __builtin_nansf ("");
+   volatile double d_inf = __builtin_inf ();
+   volatile double d_zero = 0;
+   volatile double d_normal = 1919.810;
+   volatile double d_subnormal = 1e-320;
+   volatile double d_qnan = __builtin_nan ("");
+   volatile double d_snan = __builtin_nans ("");
+ 
+ #if __loongarch_frlen >= 64
+   /* With fclass.{s/d} we shouldn't signal, even if the input is sNaN.
+      PR 66462.  */
+   feenableexcept (FE_INVALID);
+ #endif
+ 
+   ASSERT_EQ (test_fclass_f (f_inf), 0b001);
+   ASSERT_EQ (test_fclass_f (-f_inf), 0b001);
+   ASSERT_EQ (test_fclass_f (f_zero), 0b100);
+   ASSERT_EQ (test_fclass_f (-f_zero), 0b100);
+   ASSERT_EQ (test_fclass_f (f_normal), 0b110);
+   ASSERT_EQ (test_fclass_f (-f_normal), 0b110);
+   ASSERT_EQ (test_fclass_f (f_subnormal), 0b100);
+   ASSERT_EQ (test_fclass_f (-f_subnormal), 0b100);
+   ASSERT_EQ (test_fclass_f (f_qnan), 0b1000);
+   ASSERT_EQ (test_fclass_f (f_snan), 0b1000);
+ 
+   ASSERT_EQ (test_fclass_d (d_inf), 0b001);
+   ASSERT_EQ (test_fclass_d (-d_inf), 0b001);
+   ASSERT_EQ (test_fclass_d (d_zero), 0b100);
+   ASSERT_EQ (test_fclass_d (-d_zero), 0b100);
+   ASSERT_EQ (test_fclass_d (d_normal), 0b110);
+   ASSERT_EQ (test_fclass_d (-d_normal), 0b110);
+   ASSERT_EQ (test_fclass_d (d_subnormal), 0b100);
+   ASSERT_EQ (test_fclass_d (-d_subnormal), 0b100);
+   ASSERT_EQ (test_fclass_d (d_qnan), 0b1000);
+   ASSERT_EQ (test_fclass_d (d_snan), 0b1000);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flogb.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flogb.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flogb.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flogb.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdouble-float -fno-math-errno" } */
+ /* { dg-final { scan-assembler "fabs\\.s" } } */
+ /* { dg-final { scan-assembler "fabs\\.d" } } */
+ /* { dg-final { scan-assembler "flogb\\.s" } } */
+ /* { dg-final { scan-assembler "flogb\\.d" } } */
+ 
+ double
+ my_logb (double a)
+ {
+   return __builtin_logb (a);
+ }
+ 
+ float
+ my_logbf (float a)
+ {
+   return __builtin_logbf (a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -mfpu=64 -march=loongarch64 -O2" } */
+ /* { dg-final { scan-assembler "frecip\\.d" } } */
+ /* { dg-final { scan-assembler-not "movgr2fr\\.d" } } */
+ /* { dg-final { scan-assembler-not "movfr2gr\\.d" } } */
+ 
+ /* FPU is used for calculation and FPR is used for arguments and return
+    values.  */
+ 
+ double
+ t (double x)
+ {
+   return 1.0 / x;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64s -mfpu=64 -march=loongarch64 -O2" } */
+ /* { dg-final { scan-assembler "frecip\\.d" } } */
+ /* { dg-final { scan-assembler "movgr2fr\\.d" } } */
+ /* { dg-final { scan-assembler "movfr2gr\\.d" } } */
+ 
+ /* FPU is used for calculation but FPR cannot be used for arguments and
+    return values.  */
+ 
+ #include "flt-abi-isa-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64s -mfpu=none -march=loongarch64 -O2" } */
+ /* { dg-final { scan-assembler-not "frecip\\.d" } } */
+ /* { dg-final { scan-assembler-not "movgr2fr\\.d" } } */
+ /* { dg-final { scan-assembler-not "movfr2gr\\.d" } } */
+ 
+ /* FPU cannot be used at all.  */
+ 
+ #include "flt-abi-isa-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/flt-abi-isa-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-msoft-float -march=loongarch64 -O2" } */
+ /* { dg-final { scan-assembler-not "frecip\\.d" } } */
+ /* { dg-final { scan-assembler-not "movgr2fr\\.d" } } */
+ /* { dg-final { scan-assembler-not "movfr2gr\\.d" } } */
+ 
+ /* -msoft-float implies both -mabi=lp64s and -mfpu=none.
+    FPU cannot be used at all.  */
+ 
+ #include "flt-abi-isa-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/frint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/frint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/frint.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/frint.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdouble-float" } */
+ /* { dg-final { scan-assembler "frint\\.s" } } */
+ /* { dg-final { scan-assembler "frint\\.d" } } */
+ 
+ double
+ my_rint (double a)
+ {
+   return __builtin_rint (a);
+ }
+ 
+ float
+ my_rintf (float a)
+ {
+   return __builtin_rintf (a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/fscaleb.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/fscaleb.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/fscaleb.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/fscaleb.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d -mdouble-float -fno-math-errno" } */
+ /* { dg-final { scan-assembler-times "fscaleb\\.s" 3 } } */
+ /* { dg-final { scan-assembler-times "fscaleb\\.d" 4 } } */
+ /* { dg-final { scan-assembler-times "slli\\.w" 1 } } */
+ 
+ double
+ my_scalbln (double a, long b)
+ {
+   return __builtin_scalbln (a, b);
+ }
+ 
+ double
+ my_scalbn (double a, int b)
+ {
+   return __builtin_scalbn (a, b);
+ }
+ 
+ double
+ my_ldexp (double a, int b)
+ {
+   return __builtin_ldexp (a, b);
+ }
+ 
+ float
+ my_scalblnf (float a, long b)
+ {
+   return __builtin_scalblnf (a, b);
+ }
+ 
+ float
+ my_scalbnf (float a, int b)
+ {
+   return __builtin_scalbnf (a, b);
+ }
+ 
+ float
+ my_ldexpf (float a, int b)
+ {
+   return __builtin_ldexpf (a, b);
+ }
+ 
+ /* b must be sign-extended */
+ double
+ my_ldexp_long (double a, long b)
+ {
+   return __builtin_ldexp (a, b);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/ftint-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/ftint-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/ftint-no-inexact.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/ftint-no-inexact.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,44 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -mdouble-float -fno-math-errno -fno-fp-int-builtin-inexact" } */
+ /* { dg-final { scan-assembler "ftint\\.l\\.s" } } */
+ /* { dg-final { scan-assembler "ftint\\.l\\.d" } } */
+ /* { dg-final { scan-assembler-not "ftintrm\\.l\\.s" } } */
+ /* { dg-final { scan-assembler-not "ftintrm\\.l\\.d" } } */
+ /* { dg-final { scan-assembler-not "ftintrp\\.l\\.s" } } */
+ /* { dg-final { scan-assembler-not "ftintrp\\.l\\.d" } } */
+ 
+ long
+ my_lrint (double a)
+ {
+   return __builtin_lrint (a);
+ }
+ 
+ long
+ my_lrintf (float a)
+ {
+   return __builtin_lrintf (a);
+ }
+ 
+ long
+ my_lfloor (double a)
+ {
+   return __builtin_lfloor (a);
+ }
+ 
+ long
+ my_lfloorf (float a)
+ {
+   return __builtin_lfloorf (a);
+ }
+ 
+ long
+ my_lceil (double a)
+ {
+   return __builtin_lceil (a);
+ }
+ 
+ long
+ my_lceilf (float a)
+ {
+   return __builtin_lceilf (a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/ftint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/ftint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/ftint.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/ftint.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,44 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -mdouble-float -fno-math-errno -ffp-int-builtin-inexact" } */
+ /* { dg-final { scan-assembler "ftint\\.l\\.s" } } */
+ /* { dg-final { scan-assembler "ftint\\.l\\.d" } } */
+ /* { dg-final { scan-assembler "ftintrm\\.l\\.s" } } */
+ /* { dg-final { scan-assembler "ftintrm\\.l\\.d" } } */
+ /* { dg-final { scan-assembler "ftintrp\\.l\\.s" } } */
+ /* { dg-final { scan-assembler "ftintrp\\.l\\.d" } } */
+ 
+ long
+ my_lrint (double a)
+ {
+   return __builtin_lrint (a);
+ }
+ 
+ long
+ my_lrintf (float a)
+ {
+   return __builtin_lrintf (a);
+ }
+ 
+ long
+ my_lfloor (double a)
+ {
+   return __builtin_lfloor (a);
+ }
+ 
+ long
+ my_lfloorf (float a)
+ {
+   return __builtin_lfloorf (a);
+ }
+ 
+ long
+ my_lceil (double a)
+ {
+   return __builtin_lceil (a);
+ }
+ 
+ long
+ my_lceilf (float a)
+ {
+   return __builtin_lceilf (a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mno-explicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
+ /* { dg-final { scan-assembler "test1:.*bl\t%plt\\(f\\)\n" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ extern void g (void);
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mno-explicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
+ /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ extern void g (void);
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mno-explicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test1:.*la\.global\t.*f\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ extern void g (void);
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mno-explicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ extern void g (void);
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-5.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mexplicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
+ /* { dg-final { scan-assembler "test1:.*bl\t%plt\\(f\\)\n" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-6.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mexplicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*bl\t%plt\\(g\\)\n" } } */
+ /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-7.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-7.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-7.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%got_pc_hi20\\(f\\)\n\tld\.d\t.*%got_pc_lo12\\(f\\)\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-8.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-8.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test1:.*bl\tf\n" } } */
+ /* { dg-final { scan-assembler "test2:.*bl\tl\n" } } */
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+ 
+ #define NOIPA __attribute__ ((noipa))
+ 
+ extern void g (void);
+ NOIPA void
+ f (void)
+ {}
+ 
+ NOIPA static void
+ l (void)
+ {}
+ 
+ NOIPA void
+ test (void)
+ {
+   g ();
+ }
+ 
+ NOIPA void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ NOIPA void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs -mcmodel=extreme" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+ 
+ #include "func-call-extreme-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fno-pic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+ 
+ #include "func-call-extreme-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mexplicit-relocs=auto -mcmodel=extreme" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%got_pc_hi20.*\n\taddi\.d.*%got_pc_lo12.*\n\tlu32i\.d.*%got64_pc_lo20.*\n\tlu52i\.d.*%got64_pc_hi12.*\n\tldx\.d" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20.*\n\taddi\.d.*%pc_lo12.*\n\tlu32i\.d.*%pc64_lo20.*\n\tlu52i\.d.*pc64_hi12.*\n\tadd\.d" } } */
+ 
+ #include "func-call-extreme-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-5.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs=none -mcmodel=extreme" } */
+ /* { dg-final { scan-assembler "test:.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,g" } } */
+ /* { dg-final { scan-assembler "test1:.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,f" } } */
+ /* { dg-final { scan-assembler "test2:.*la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,l" } } */
+ 
+ #include "func-call-extreme-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-extreme-6.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs=none -mcmodel=extreme" } */
+ /* { dg-final { scan-assembler "test:.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,g" } } */
+ /* { dg-final { scan-assembler "test1:.*la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,f" } } */
+ /* { dg-final { scan-assembler "test2:.*la.local\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,l" } } */
+ 
+ #include "func-call-extreme-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,41 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */
+ /* { dg-final { scan-assembler "test:.*la\.global\t.*g\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test1:.*la\.global\t.*f\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test2:.*la\.local\t.*l\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */
+ 
+ extern void g (void);
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
+ 
+ __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
+ 
+ void
+ test3 (void)
+ {
+   a = 10;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,45 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fno-pic -fplt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ extern void g (void);
+ void __attribute__ ((noipa,noinline))
+ f (void)
+ {}
+ 
+ static void __attribute__ ((noipa,noinline))
+ l (void)
+ {}
+ 
+ /*
+ ** test:
+ ** 	la.global	(\$r[0-9]+),g
+ ** 	jr	(\$r[0-9]+)
+ */
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ /*
+ ** test1:
+ ** 	la.local	(\$r[0-9]+),f
+ ** 	jr	(\$r[0-9]+)
+ */
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ /*
+ ** test2:
+ ** 	la.local	(\$r[0-9]+),l
+ ** 	jr	(\$r[0-9]+)
+ */
+ void
+ test2 (void)
+ {
+   l ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fpic -fno-plt -mno-explicit-relocs -mtls-dialect=trad -mcmodel=medium" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ extern void g (void);
+ void __attribute__ ((noinline))
+ f (void)
+ {}
+ 
+ static void __attribute__ ((noipa,noinline))
+ l (void)
+ {}
+ 
+ /*
+ ** test:
+ ** 	la.global	(\$r[0-9]+),g
+ ** 	jr	(\$r[0-9]+)
+ */
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ /*
+ ** test1:
+ ** 	la.global	(\$r[0-9]+),f
+ ** 	jr	(\$r[0-9]+)
+ */
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ /*
+ ** test2:
+ ** 	la.local	(\$r[0-9]+),l
+ ** 	jr	(\$r[0-9]+)
+ */
+ void
+ test2 (void)
+ {
+   l ();
+ }
+ 
+ __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
+ 
+ void
+ test3 (void)
+ {
+   a = 10;
+ }
+ /* { dg-final { scan-assembler "test3:.*la\.global\t.*\_\_tls\_get\_addr" { target tls_native } } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-5.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fplt -mexplicit-relocs -mcmodel=medium" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i.*%pc_hi20\\(g\\)\n\tjirl.*pc_lo12\\(g\\)" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
+ /* { dg-final { scan-assembler "test3:.*pcalau12i.*%pc_hi20\\(__tls_get_addr\\)\n\t.*\n\tjirl.*%pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
+ 
+ __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
+ 
+ void
+ test3 (void)
+ {
+   a = 10;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-6.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
+ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fplt -mexplicit-relocs -mcmodel=medium" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i.*%pc_hi20\\(g\\)\n\tjirl.*pc_lo12\\(g\\)" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
+ /* { dg-final { scan-assembler "test3:.*pcalau12i.*%pc_hi20\\(__tls_get_addr\\)\n\t.*\n\tjirl.*%pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
+ 
+ __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
+ 
+ void
+ test3 (void)
+ {
+   a = 10;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-7.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-7.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-7.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,44 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
+ /* { dg-options "-mabi=lp64d -O0 -fpic -fno-plt -mexplicit-relocs -mcmodel=medium" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%got_pc_hi20\\(f\\)\n\tld\.d\t.*%got_pc_lo12\\(f\\)\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i\t.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
+ /* { dg-final { scan-assembler "test3:.*pcalau12i.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
+ 
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
+ 
+ __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
+ 
+ void
+ test3 (void)
+ {
+   a = 10;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-8.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-8.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,44 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "dg-require-effective-target loongarch_call36_support" { *-*-* } } */
+ /* { dg-options "-mabi=lp64d -O0 -fno-pic -fno-plt -mexplicit-relocs -mcmodel=medium" } */
+ /* { dg-final { scan-assembler "test:.*pcalau12i\t.*%got_pc_hi20\\(g\\)\n\tld\.d\t.*%got_pc_lo12\\(g\\)\n\tjirl" } } */
+ /* { dg-final { scan-assembler "test1:.*pcalau12i\t.*%pc_hi20\\(f\\)\n\tjirl.*%pc_lo12\\(f\\)" } } */
+ /* { dg-final { scan-assembler "test2:.*pcalau12i\t.*%pc_hi20\\(l\\)\n\tjirl.*%pc_lo12\\(l\\)" } } */
+ /* { dg-final { scan-assembler "test3:.*pcalau12i.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
+ /* { dg-final { scan-assembler "test3:.*pcalau12i.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
+ 
+ extern void g (void);
+ 
+ void
+ f (void)
+ {}
+ 
+ static void
+ l (void)
+ {}
+ 
+ void
+ test (void)
+ {
+   g ();
+ }
+ 
+ void
+ test1 (void)
+ {
+   f ();
+ }
+ 
+ void
+ test2 (void)
+ {
+   l ();
+ }
+ 
+ __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
+ 
+ void
+ test3 (void)
+ {
+   a = 10;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target loongarch_call36_support } */
+ /* { dg-options "-mcmodel=medium -mexplicit-relocs -fdump-rtl-final -O2" } */
+ /* { dg-final { scan-assembler "test:.*pcaddu18i\t\\\$r1,%call36\\(func\\)" } } */
+ /* { dg-final { scan-assembler "test_value:.*pcaddu18i\t\\\$r1,%call36\\(func_value\\)" } } */
+ 
+ extern void func (void);
+ int
+ test (void)
+ {
+   func ();
+ }
+ 
+ 
+ extern int func_value (void);
+ float
+ test_value (void)
+ {
+   func_value ();
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/func-call-medium-call36.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-require-effective-target loongarch_call36_support } */
+ /* { dg-options "-mcmodel=medium -mexplicit-relocs -fdump-rtl-final -O2" } */
+ /* { dg-final { scan-rtl-dump-times "\\(clobber \\(reg:DI 12 \\\$r12\\)\\)" 3 "final" } } */
+ /* { dg-final { scan-assembler "test:.*pcaddu18i\t\\\$r12,%call36\\(func\\)" } } */
+ /* { dg-final { scan-assembler "test_value:.*pcaddu18i\t\\\$r12,%call36\\(func_value\\)" } } */
+ /* { dg-final { scan-assembler "test_multi:.*pcaddu18i\t\\\$r12,%call36\\(func_multi\\)" } } */
+ 
+ extern void func (void);
+ void
+ test (void)
+ {
+   func();
+ }
+ 
+ 
+ extern int func_value (void);
+ int
+ test_value (void)
+ {
+   func_value ();
+ }
+ 
+ struct t {float a; float b;};
+ 
+ extern struct t func_multi (void);
+ struct t
+ test_multi (void)
+ {
+   func_multi ();
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/imm-load.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/imm-load.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/imm-load.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/imm-load.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-split1" } */
+ /* { dg-final { scan-assembler-not "test:.*>>.*test" } } */
+ 
+ long int
+ test (void)
+ {
+   return 0x1234567890abcdef;
+ }
+ /* { dg-final { scan-rtl-dump-times "scanning new insn with uid" 4 "split1" } } */
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/imm-load1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/imm-load1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/imm-load1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/imm-load1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler-not "test:.*lu52i\.d.*\n\taddi\.w.*\n\.L2:" } } */
+ /* { dg-final { scan-assembler "test:.*lu12i\.w.*\n\tbstrins\.d.*\n\.L2:" } } */
+ 
+ 
+ extern long long b[10];
+ static inline long long
+ repeat_bytes (void)
+ {
+   long long r = 0x0101010101010101;
+ 
+   return r;
+ }
+ 
+ static inline long long
+ highbit_mask (long long m)
+ {
+   return m & repeat_bytes ();
+ }
+ 
+ void test(long long *a)
+ {
+   for (int i = 0; i < 10; i++)
+     b[i] = highbit_mask (a[i]);
+ 
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/invariant-recip.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/invariant-recip.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/invariant-recip.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/invariant-recip.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -march=loongarch64 -mabi=lp64d -mrecip -mfrecipe -fdump-rtl-loop2_invariant " } */
+ /* { dg-final { scan-rtl-dump "Decided to move dependent invariant" "loop2_invariant" } } */
+ 
+ void
+ nislfv_rain_plm (int im, int km, float dzl[im][km], float rql[im][km],
+                  float dt)
+ {
+   int i, k;
+   float con1, decfl;
+   float dz[km], qn[km], wi[km + 1];
+ 
+   for (i = 0; i < im; i++)
+     {
+       for (k = 0; k < km; k++)
+         {
+           dz[k] = dzl[i][k];
+         }
+       con1 = 0.05;
+       for (k = km - 1; k >= 0; k--)
+         {
+           decfl = (wi[k + 1] - wi[k]) * dt / dz[k];
+           if (decfl > con1)
+             {
+               wi[k] = wi[k + 1] - con1 * dz[k] / dt;
+             }
+         }
+       for (k = 0; k < km; k++)
+         {
+           rql[i][k] = qn[k];
+         }
+     }
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/la64.exp gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/la64.exp
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/la64.exp	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/la64.exp	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,40 ----
+ # Copyright (C) 2021-2025 Free Software Foundation, Inc.
+ 
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+ 
+ # GCC testsuite that uses the `dg.exp' driver.
+ 
+ # Exit immediately if this isn't a LoongArch target.
+ if ![istarget loongarch64*-*-*] then {
+   return
+ }
+ 
+ # Load support procs.
+ load_lib gcc-dg.exp
+ 
+ # If a testcase doesn't have special options, use these.
+ global DEFAULT_CFLAGS
+ if ![info exists DEFAULT_CFLAGS] then {
+     set DEFAULT_CFLAGS " "
+ }
+ 
+ # Initialize `dg'.
+ dg-init
+ 
+ # Main loop.
+ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
+ 	"" $DEFAULT_CFLAGS
+ # All done.
+ dg-finish
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-builtin.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-builtin.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-builtin.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-builtin.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,28 ----
+ /* Test builtins for frecipe.{s/d} and frsqrte.{s/d} instructions */
+ /* { dg-do compile } */
+ /* { dg-options "-mfrecipe" } */
+ /* { dg-final { scan-assembler-times "test_frecipe_s:.*frecipe\\.s.*test_frecipe_s" 1 } } */
+ /* { dg-final { scan-assembler-times "test_frecipe_d:.*frecipe\\.d.*test_frecipe_d" 1 } } */
+ /* { dg-final { scan-assembler-times "test_frsqrte_s:.*frsqrte\\.s.*test_frsqrte_s" 1 } } */
+ /* { dg-final { scan-assembler-times "test_frsqrte_d:.*frsqrte\\.d.*test_frsqrte_d" 1 } } */
+ 
+ float
+ test_frecipe_s (float _1)
+ {
+   return __builtin_loongarch_frecipe_s (_1);
+ }
+ double
+ test_frecipe_d (double _1)
+ {
+   return __builtin_loongarch_frecipe_d (_1);
+ }
+ float
+ test_frsqrte_s (float _1)
+ {
+   return __builtin_loongarch_frsqrte_s (_1);
+ }
+ double
+ test_frsqrte_d (double _1)
+ {
+   return __builtin_loongarch_frsqrte_d (_1);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-intrinsic.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-intrinsic.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-intrinsic.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/larch-frecipe-intrinsic.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,30 ----
+ /* Test intrinsics for frecipe.{s/d} and frsqrte.{s/d} instructions */
+ /* { dg-do compile } */
+ /* { dg-options "-mfrecipe -O2" } */
+ /* { dg-final { scan-assembler-times "test_frecipe_s:.*frecipe\\.s.*test_frecipe_s" 1 } } */
+ /* { dg-final { scan-assembler-times "test_frecipe_d:.*frecipe\\.d.*test_frecipe_d" 1 } } */
+ /* { dg-final { scan-assembler-times "test_frsqrte_s:.*frsqrte\\.s.*test_frsqrte_s" 1 } } */
+ /* { dg-final { scan-assembler-times "test_frsqrte_d:.*frsqrte\\.d.*test_frsqrte_d" 1 } } */
+ 
+ #include <larchintrin.h>
+ 
+ float
+ test_frecipe_s (float _1)
+ {
+   return __frecipe_s (_1);
+ }
+ double
+ test_frecipe_d (double _1)
+ {
+   return __frecipe_d (_1);
+ }
+ float
+ test_frsqrte_s (float _1)
+ {
+   return __frsqrte_s (_1);
+ }
+ double
+ test_frsqrte_d (double _1)
+ {
+   return __frsqrte_d (_1);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lasx-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lasx-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lasx-func-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lasx-func-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-lsx" } */
+ 
+ typedef int v8i32 __attribute__ ((vector_size(32), aligned(32)));
+ extern v8i32 a, b, c;
+ 
+ #ifndef TEST_TARGET_PRAGMA
+ __attribute__ ((target ("lasx")))
+ #else
+ #pragma GCC target ("lasx")
+ #endif
+ void
+ test (void)
+ {
+   a = b + c;
+ }
+ 
+ 
+ /* { dg-final { scan-assembler "xvadd.w" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lasx-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lasx-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lasx-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lasx-pragma-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-lsx" } */
+ 
+ #define TEST_TARGET_PRAGMA 1
+ #include "./lasx-func-attr-1.c"
+ 
+ /* { dg-final { scan-assembler "xvadd.w" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lsx-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lsx-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lsx-func-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lsx-func-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-lsx" } */
+ 
+ typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
+ extern v4i32 a, b, c;
+ 
+ #ifndef TEST_TARGET_PRAGMA
+ __attribute__ ((target ("lsx")))
+ #else
+ #pragma GCC target ("lsx")
+ #endif
+ void
+ test (void)
+ {
+   a = b + c;
+ }
+ 
+ 
+ /* { dg-final { scan-assembler "vadd.w" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lsx-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lsx-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/lsx-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/lsx-pragma-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-lsx" } */
+ 
+ #define TEST_TARGET_PRAGMA 1
+ #include "./lsx-func-attr-1.c"
+ 
+ /* { dg-final { scan-assembler "vadd.w" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/math-float-128.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/math-float-128.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/math-float-128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/math-float-128.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,81 ----
+ /* { dg-do compile } */
+ /* { dg-options " -march=loongarch64 -O2 " } */
+ /* { dg-final { scan-assembler-not "my_fabsq2:.*\\bl\t%plt\\(__builtin_fabsq\\).*my_fabsq2" } } */
+ /* { dg-final { scan-assembler-not "my_copysignq2:.*\\bl\t%plt\\(__builtin_copysignq\\).*my_copysignq2" } } */
+ /* { dg-final { scan-assembler-not "my_infq2:.*\\bl\t%plt\\(__builtin_infq\\).*my_infq2" } } */
+ /* { dg-final { scan-assembler-not "my_huge_valq2:.*\\bl\t%plt\\(__builtin_huge_valq\\).*my_huge_valq2" } } */
+ /* { dg-final { scan-assembler-not "my_nanq2:.*\\bl\t%plt\\(__builtin_nanq\\).*my_nanq2" } } */
+ /* { dg-final { scan-assembler-not "my_nansq2:.*\\bl\t%plt\\(__builtin_nansq\\).*my_nansq2" } } */
+ 
+ __float128
+ my_fabsq1 (__float128 a)
+ {
+   return __builtin_fabsq (a);
+ }
+ 
+ _Float128
+ my_fabsq2 (_Float128 a)
+ {
+   return __builtin_fabsq (a);
+ }
+ 
+ __float128
+ my_copysignq1 (__float128 a, __float128 b)
+ {
+   return __builtin_copysignq (a, b);
+ }
+ 
+ _Float128
+ my_copysignq2 (_Float128 a, _Float128 b)
+ {
+   return __builtin_copysignq (a, b);
+ }
+ 
+ __float128
+ my_infq1 (void)
+ {
+   return __builtin_infq ();
+ }
+ 
+ _Float128
+ my_infq2 (void)
+ {
+   return __builtin_infq ();
+ }
+ 
+ __float128
+ my_huge_valq1 (void)
+ {
+   return __builtin_huge_valq ();
+ }
+ 
+ _Float128
+ my_huge_valq2 (void)
+ {
+   return __builtin_huge_valq ();
+ }
+ 
+ __float128
+ my_nanq1 (void)
+ {
+   return __builtin_nanq ("");
+ }
+ 
+ _Float128
+ my_nanq2 (void)
+ {
+   return __builtin_nanq ("");
+ }
+ 
+ __float128
+ my_nansq1 (void)
+ {
+   return __builtin_nansq ("");
+ }
+ 
+ _Float128
+ my_nansq2 (void)
+ {
+   return __builtin_nansq ("");
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mem-and-mask-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mem-and-mask-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mem-and-mask-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mem-and-mask-opt.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d -march=la464 -mno-strict-align" } */
+ /* { dg-final { scan-assembler-times "xvst" 2 } } */
+ /* { dg-final { scan-assembler-times "\tvst" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
+ 
+ extern char a[], b[];
+ void test() { __builtin_memcpy(a, b, 95); }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d -march=la464 -mno-strict-align" } */
+ /* { dg-final { scan-assembler-times "xvst" 2 } } */
+ /* { dg-final { scan-assembler-times "\tvst" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
+ 
+ typedef char __attribute__ ((vector_size (32), aligned (32))) vec;
+ extern vec a[], b[];
+ void test() { __builtin_memcpy(a, b, 95); }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/memcpy-vec-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=la464 -mabi=lp64d -mstrict-align" } */
+ /* { dg-final { scan-assembler-not "vst" } } */
+ 
+ extern char a[], b[];
+ void test() { __builtin_memcpy(a, b, 32); }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mode-tieable-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mode-tieable-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mode-tieable-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mode-tieable-opt.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/mov-zero-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mov-zero-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mov-zero-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mov-zero-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mno-lsx" } */
+ /* { dg-final { scan-assembler-times "movgr2fr" 2 } } */
+ 
+ double
+ get_double_zero ()
+ {
+   return 0;
+ }
+ 
+ float
+ get_float_zero ()
+ {
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr-via-fr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr-via-fr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr-via-fr.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr-via-fr.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mtune=la464 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "movcf2fr\t\\\$f\[0-9\]+,\\\$fcc" } } */
+ /* { dg-final { scan-assembler "movfr2gr\\.s\t\\\$r4" } } */
+ 
+ int
+ t (float a, float b)
+ {
+   return a > b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/movcf2gr.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mtune=la664 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "movcf2gr\t\\\$r4,\\\$fcc" } } */
+ 
+ int
+ t (float a, float b)
+ {
+   return a > b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mul-const-reduction.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mul-const-reduction.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mul-const-reduction.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mul-const-reduction.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=la464" } */
+ /* { dg-final { scan-assembler "alsl\.w" } } */
+ /* { dg-final { scan-assembler "slli\.w" } } */
+ /* { dg-final { scan-assembler-not "mul\.w" } } */
+ 
+ int
+ test (int a)
+ {
+   return a * 68;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mulh_wu.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mulh_wu.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mulh_wu.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mulh_wu.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_w.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_w.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_w.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_w.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "mulw.d.w" } } */
+ 
+ /* This should be optimized to mulw.d.w for LA64.  */
+ __attribute__((noipa, noinline)) long
+ f(long a, long b)
+ {
+   return (long)(int)a * (long)(int)b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_wu.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_wu.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_wu.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/mulw_d_wu.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "mulw.d.wu" } } */
+ 
+ __attribute__((noipa, noinline)) unsigned long
+ f(unsigned long a, unsigned long b)
+ {
+   return (unsigned long)(unsigned int)a * (unsigned long)(unsigned int)b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr109465-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr109465-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr109465-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr109465-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d -mno-strict-align" } */
+ /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
+ 
+ extern char a[], b[];
+ void test() { __builtin_memcpy(a, b, 15); }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr109465-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr109465-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr109465-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr109465-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d -mstrict-align" } */
+ /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
+ /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
+ 
+ extern long a[], b[];
+ void test() { __builtin_memcpy(a, b, 15); }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr109465-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr109465-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr109465-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr109465-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d -mstrict-align" } */
+ 
+ /* Three loop iterations each contains 4 st.b, and 3 st.b after the loop */
+ /* { dg-final { scan-assembler-times "st\\.b" 7 } } */
+ 
+ /* { dg-final { scan-assembler-not "st\\.h" } } */
+ /* { dg-final { scan-assembler-not "st\\.w|stptr\\.w" } } */
+ /* { dg-final { scan-assembler-not "st\\.d|stptr\\.d" } } */
+ 
+ extern char a[], b[];
+ void test() { __builtin_memcpy(a, b, 15); }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr113148.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr113148.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr113148.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr113148.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,44 ----
+ /* PR 113148: ICE caused by infinite reloading */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=la464 -mfpu=64 -mabi=lp64d" } */
+ 
+ struct bound
+ {
+   double max;
+ } drawQuadrant_bound;
+ double w4, innerXfromXY_y, computeBound_right_0;
+ struct arc_def
+ {
+   double w, h;
+   double a0, a1;
+ };
+ static void drawQuadrant (struct arc_def *);
+ static void
+ computeBound (struct arc_def *def, struct bound *bound)
+ {
+   double ellipsex_1, ellipsex_0;
+   bound->max = def->a1 ?: __builtin_sin (w4) * def->h;
+   if (def->a0 == 5 && def->w == def->h)
+     ;
+   else
+     ellipsex_0 = def->a0 == 0.0 ?: __builtin_cos (w4);
+   if (def->a1 == 5 && def->w == def->h)
+     ellipsex_1 = bound->max;
+   __builtin_sqrt (ellipsex_1 * innerXfromXY_y * innerXfromXY_y * w4);
+   computeBound_right_0 = ellipsex_0;
+ }
+ void
+ drawArc ()
+ {
+   struct arc_def foo;
+   for (;;)
+     drawQuadrant (&foo);
+ }
+ void
+ drawQuadrant (struct arc_def *def)
+ {
+   int y, miny;
+   computeBound (def, &drawQuadrant_bound);
+   while (y >= miny)
+     ;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr114861.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr114861.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr114861.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr114861.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,39 ----
+ /* PR114861: ICE building the kernel with -Os
+    Reduced from linux/fs/ntfs3/attrib.c at revision c942a0cd3603.  */
+ /* { dg-do compile } */
+ /* { dg-options "-Os -march=loongarch64 -msoft-float -mabi=lp64s" } */
+ 
+ long evcn, attr_collapse_range_vbo, attr_collapse_range_bytes;
+ unsigned short flags;
+ int attr_collapse_range_ni_0_0;
+ int *attr_collapse_range_mi;
+ unsigned attr_collapse_range_svcn, attr_collapse_range_vcn1;
+ void ni_insert_nonresident (unsigned, unsigned short, int **);
+ int mi_pack_runs (int);
+ int
+ attr_collapse_range (void)
+ {
+   _Bool __trans_tmp_1;
+   int run = attr_collapse_range_ni_0_0;
+   unsigned evcn1, vcn, end;
+   short a_flags = flags;
+   __trans_tmp_1 = flags & (32768 | 1);
+   if (__trans_tmp_1)
+     return 2;
+   vcn = attr_collapse_range_vbo;
+   end = attr_collapse_range_bytes;
+   evcn1 = evcn;
+   for (;;)
+     if (attr_collapse_range_svcn >= end)
+       {
+         unsigned eat, next_svcn = mi_pack_runs (42);
+         attr_collapse_range_vcn1 = (vcn ? vcn : attr_collapse_range_svcn);
+         eat = (0 < end) - attr_collapse_range_vcn1;
+         mi_pack_runs (run - eat);
+         if (next_svcn + eat)
+           ni_insert_nonresident (evcn1 - eat - next_svcn, a_flags,
+                                  &attr_collapse_range_mi);
+       }
+     else
+       return 42;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118561.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118561.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118561.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118561.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* PR target/118561: ICE with -mfpu=none */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mfpu=none" } */
+ 
+ int
+ test (void)
+ {
+   return __builtin_loongarch_movfcsr2gr (0); /* { dg-error "built-in function '__builtin_loongarch_movfcsr2gr' is not enabled" } */
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,30 ----
+ /* { dg-do preprocess } */
+ /* { dg-options "-mno-lsx" } */
+ 
+ #ifdef __loongarch_sx
+ #error LSX should not be available here
+ #endif
+ 
+ #ifdef __loongarch_simd_width
+ #error simd width shuold not be available here
+ #endif
+ 
+ #pragma GCC push_options
+ #pragma GCC target("lsx")
+ #ifndef __loongarch_sx
+ #error LSX should be available here
+ #endif
+ #ifndef __loongarch_simd_width
+ #error simd width should be available here
+ #elif __loongarch_simd_width != 128
+ #error simd width should be 128
+ #endif
+ #pragma GCC pop_options
+ 
+ #ifdef __loongarch_sx
+ #error LSX should become unavailable again
+ #endif
+ 
+ #ifdef __loongarch_simd_width
+ #error simd width shuold become unavailable again
+ #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64" } */
+ /* { dg-final { scan-assembler "t1: loongarch64" } } */
+ /* { dg-final { scan-assembler "t2: la64v1.1" } } */
+ /* { dg-final { scan-assembler "t3: loongarch64" } } */
+ 
+ #ifndef __loongarch_arch
+ #error __loongarch_arch should be available here
+ #endif
+ 
+ void
+ t1 (void)
+ {
+   asm volatile ("# t1: " __loongarch_arch);
+ }
+ 
+ #pragma GCC push_options
+ #pragma GCC target("arch=la64v1.1")
+ 
+ void
+ t2 (void)
+ {
+   asm volatile ("# t2: " __loongarch_arch);
+ }
+ 
+ #pragma GCC pop_options
+ 
+ void
+ t3 (void)
+ {
+   asm volatile ("# t3: " __loongarch_arch);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mtune=la464" } */
+ /* { dg-final { scan-assembler "t1: la464" } } */
+ /* { dg-final { scan-assembler "t2: la664" } } */
+ /* { dg-final { scan-assembler "t3: la464" } } */
+ 
+ #ifndef __loongarch_tune
+ #error __loongarch_tune should be available here
+ #endif
+ 
+ void
+ t1 (void)
+ {
+   asm volatile ("# t1: " __loongarch_tune);
+ }
+ 
+ #pragma GCC push_options
+ #pragma GCC target("tune=la664")
+ 
+ void
+ t2 (void)
+ {
+   asm volatile ("# t2: " __loongarch_tune);
+ }
+ 
+ #pragma GCC pop_options
+ 
+ void
+ t3 (void)
+ {
+   asm volatile ("# t3: " __loongarch_tune);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118828.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118828.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do preprocess } */
+ /* { dg-options "-mno-lasx" } */
+ 
+ #ifdef __loongarch_asx
+ #error LASX should not be available here
+ #endif
+ 
+ #ifdef __loongarch_simd_width
+ #if __loongarch_simd_width == 256
+ #error simd width shuold not be 256
+ #endif
+ #endif
+ 
+ #pragma GCC push_options
+ #pragma GCC target("lasx")
+ #ifndef __loongarch_asx
+ #error LASX should be available here
+ #endif
+ #ifndef __loongarch_simd_width
+ #error simd width should be available here
+ #elif __loongarch_simd_width != 256
+ #error simd width should be 256
+ #endif
+ #pragma GCC pop_options
+ 
+ #ifdef __loongarch_asx
+ #error LASX should become unavailable again
+ #endif
+ 
+ #ifdef __loongarch_simd_width
+ #if __loongarch_simd_width == 256
+ #error simd width shuold not be 256 again
+ #endif
+ #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118843.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118843.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr118843.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr118843.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do preprocess } */
+ /* { dg-options "-mfrecipe -mfpu=none" } */
+ 
+ #ifdef __loongarch_frecipe
+ #error __loongarch_frecipe should not be avaliable here
+ #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr119127.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr119127.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr119127.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr119127.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* PR target/119127: ICE caused by operating DImode const in SImode */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ 
+ int x;
+ struct Type {
+   unsigned SubclassData : 24;
+ } y;
+ 
+ void
+ test (void)
+ {
+   x = y.SubclassData * 37;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr121542.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr121542.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr121542.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr121542.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mrecip=all  -mfrecipe -mabi=lp64d -march=loongarch64 -mfpu=64 -msimd=lasx -Ofast" } */
+ 
+ typedef long unsigned int STRLEN;
+ typedef struct sv SV;
+ struct sv
+ {
+   void *sv_any;
+   unsigned int sv_refcnt;
+   unsigned int sv_flags;
+ };
+ typedef struct xpv XPV;
+ struct xpv
+ {
+   char *xpv_pv;
+   STRLEN xpv_cur;
+   STRLEN xpv_len;
+ };
+ typedef unsigned long UV;
+ extern char *PL_bufend;
+ extern char *d;
+ SV *Perl_newSV (STRLEN len);
+ 
+ char *
+ S_scan_const (char *start)
+ {
+   register char *send = PL_bufend;
+   SV *sv = Perl_newSV (send - start);
+   register char *s = start;
+   UV uv;
+ 
+   while (s < send)
+     {
+       if (!(((UV)(uv)) < 0x80))
+         {
+           int hicount = 0;
+           unsigned char *c;
+           for (c = (unsigned char *)((XPV *)(sv)->sv_any)->xpv_pv;
+                c < (unsigned char *)d; c++)
+             {
+               if (!(((UV)(*c)) < 0x80))
+                 {
+                   hicount++;
+                 }
+             }
+           d += hicount;
+           *d++ = (char)uv;
+         }
+ 
+       s++;
+     }
+ 
+   return s;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr121634.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr121634.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr121634.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr121634.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* PR target/121634: ICE in highway-1.3.0 testsuite */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=la464 -mabi=lp64d" } */
+ 
+ typedef short v8i16 __attribute__ ((vector_size (16)));
+ typedef int v4i32 __attribute__ ((vector_size (16)));
+ typedef long __m128i __attribute__ ((__vector_size__ (16)));
+ __m128i x, y;
+ 
+ __m128i
+ WidenMulPairwiseAdd (__m128i a, __m128i b)
+ {
+   y = (__m128i)__builtin_lsx_vmaddwod_w_h ((v4i32)x, (v8i16){}, (v8i16){});
+   return y;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr121875.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr121875.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/pr121875.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/pr121875.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -O2" } */
+ 
+ [[gnu::always_inline]] inline void f() {}
+ [[gnu::target("lasx")]] int main() {f();}
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/prolog-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/prolog-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/prolog-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/prolog-opt.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* Test that LoongArch backend stack drop operation optimized.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mabi=lp64d -fno-stack-protector" } */
+ /* { dg-final { scan-assembler "addi.d\t\\\$r3,\\\$r3,-16" } } */
+ 
+ extern int printf (char *, ...);
+ 
+ int main()
+ {
+   char buf[1024 * 12];
+   printf ("%p\n", buf);
+   return 0;
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/recip-divf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/recip-divf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/recip-divf.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/recip-divf.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe" } */
+ /* { dg-final { scan-assembler "frecipe.s" } } */
+ 
+ float
+ foo(float a, float b)
+ {
+   return a / b;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/recip-sqrtf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/recip-sqrtf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/recip-sqrtf.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/recip-sqrtf.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe" } */
+ /* { dg-final { scan-assembler-times "frsqrte.s" 3 } } */
+ 
+ extern float sqrtf (float);
+ 
+ float
+ foo1 (float a, float b)
+ {
+   return a/sqrtf(b);
+ }
+ 
+ float
+ foo2 (float a, float b)
+ {
+   return sqrtf(a/b);
+ }
+ 
+ float
+ foo3 (float a)
+ {
+   return sqrtf(a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/relocs-symbol-noaddend.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/relocs-symbol-noaddend.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/relocs-symbol-noaddend.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/relocs-symbol-noaddend.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -mexplicit-relocs -fno-pic -O2 -mcmodel=normal" } */
+ /* { dg-final { scan-assembler "pcalau12i.*%pc_hi20\\(\.LANCHOR0\\)\n" } } */
+ /* { dg-final { scan-assembler "addi\.d.*%pc_lo12\\(\.LANCHOR0\\)\n" } } */
+ /* { dg-final { scan-assembler "ldptr.d\t\\\$r4,.*,0\n" } } */
+ /* { dg-final { scan-assembler "ld.d\t\\\$r5,.*,8\n" } } */
+ /* { dg-final { scan-assembler-not  "\.LANCHOR0+8" } } */
+ 
+ 
+ struct S
+ {
+   char *a;
+   unsigned short int b;
+ };
+ 
+ struct S s1;
+ 
+ void test(struct S);
+ void test1(void)
+ {
+   test(s1);
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/revb.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/revb.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/revb.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/revb.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,61 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ /*
+ **t1:
+ **	revb.2w	\$r4,\$r4
+ **	slli.w	\$r4,\$r4,0
+ **	jr	\$r1
+ */
+ unsigned int
+ t1 (unsigned int x)
+ {
+   return __builtin_bswap32 (x);
+ }
+ 
+ /*
+ **t2:
+ **	revb.d	\$r4,\$r4
+ **	jr	\$r1
+ */
+ unsigned long
+ t2 (unsigned long x)
+ {
+   return __builtin_bswap64 (x);
+ }
+ 
+ /*
+ **t3:
+ **	revb.2h	\$r4,\$r4
+ **	jr	\$r1
+ */
+ unsigned int
+ t3 (unsigned int x)
+ {
+   return (x >> 8) & 0xff00ff | (x << 8) & 0xff00ff00;
+ }
+ 
+ /*
+ **t4:
+ **	revb.2w	\$r4,\$r4
+ **	jr	\$r1
+ */
+ unsigned long
+ t4 (unsigned long x)
+ {
+   x = __builtin_bswap64 (x);
+   return x << 32 | x >> 32;
+ }
+ 
+ /*
+ **t5:
+ **	revb.2h	\$r4,\$r4
+ **	bstrpick.w	\$r4,\$r4,15,0
+ **	jr	\$r1
+ */
+ unsigned short
+ t5 (unsigned short x)
+ {
+   return __builtin_bswap16 (x);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/rotl-with-rotr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/rotl-with-rotr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/rotl-with-rotr.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/rotl-with-rotr.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler "rotr\\.w" } } */
+ 
+ unsigned
+ t (unsigned a, unsigned b)
+ {
+   return a << b | a >> (32 - b);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/rotrw.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/rotrw.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/rotrw.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/rotrw.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ /* { dg-final { scan-assembler "rotr\\.w\t\\\$r4,\\\$r4,\\\$r5" } } */
+ /* { dg-final { scan-assembler "rotri\\.w\t\\\$r4,\\\$r4,5" } } */
+ /* { dg-final { scan-assembler-not "slli\\.w" } } */
+ 
+ unsigned
+ rotr (unsigned a, unsigned b)
+ {
+   return a >> b | a << 32 - b;
+ }
+ 
+ unsigned
+ rotri (unsigned a)
+ {
+   return a >> 5 | a << 27;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler-times "slli.w" 1 } } */
+ 
+ extern int PL_savestack_ix;
+ extern int PL_regsize;
+ extern int PL_savestack_max;
+ void Perl_savestack_grow_cnt (int need);
+ extern void Perl_croak (char *);
+ 
+ int
+ S_regcppush(int parenfloor)
+ {
+   int retval = PL_savestack_ix;
+   int paren_elems_to_push = (PL_regsize - parenfloor) * 4;
+   int p;
+ 
+   if (paren_elems_to_push < 0)
+     Perl_croak ("panic: paren_elems_to_push < 0");
+ 
+   if (PL_savestack_ix + (paren_elems_to_push + 6) > PL_savestack_max)
+     Perl_savestack_grow_cnt (paren_elems_to_push + 6);
+ 
+   return retval;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-expand" } */
+ /* { dg-final { scan-rtl-dump "subreg/s" "expand" } } */
+ /* { dg-final { scan-assembler-not "slli.w\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,0" } } */
+ 
+ #include <stdint.h>
+ #define my_min(x, y) ((x) < (y) ? (x) : (y))
+ 
+ void
+ bt_skip_func (const uint32_t len_limit, const uint32_t pos,
+               const uint8_t *const cur, uint32_t cur_match,
+               uint32_t *const son, const uint32_t cyclic_pos,
+               const uint32_t cyclic_size)
+ {
+   uint32_t *ptr0 = son + (cyclic_pos << 1) + 1;
+   uint32_t *ptr1 = son + (cyclic_pos << 1);
+ 
+   uint32_t len0 = 0;
+   uint32_t len1 = 0;
+ 
+   while (1)
+     {
+       const uint32_t delta = pos - cur_match;
+       uint32_t *pair
+           = son
+             + ((cyclic_pos - delta + (delta > cyclic_pos ? cyclic_size : 0))
+                << 1);
+       const uint8_t *pb = cur - delta;
+       uint32_t len = my_min (len0, len1);
+ 
+       if (pb[len] == cur[len])
+         {
+           while (++len != len_limit)
+             if (pb[len] != cur[len])
+               break;
+ 
+           if (len == len_limit)
+             {
+               *ptr1 = pair[0];
+               *ptr0 = pair[1];
+               return;
+             }
+         }
+ 
+       if (pb[len] < cur[len])
+         {
+           *ptr1 = cur_match;
+           ptr1 = pair + 1;
+           cur_match = *ptr1;
+           len1 = len;
+         }
+       else
+         {
+           *ptr0 = cur_match;
+           ptr0 = pair;
+           cur_match = *ptr0;
+           len0 = len;
+         }
+     }
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-3.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-4.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-5.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-6.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-bitwise.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-bitwise.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-bitwise.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign-extend-bitwise.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler-not "slli.w\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,0" } } */
+ 
+ struct pmop
+ {
+   unsigned int op_pmflags;
+   unsigned int op_pmpermflags;
+ };
+ unsigned int PL_hints;
+ 
+ struct pmop *pmop;
+ void
+ Perl_newPMOP (int type, int flags)
+ {
+   if (PL_hints & 0x00100000)
+     pmop->op_pmpermflags |= 0x0001;
+   if (PL_hints & 0x00000004)
+     pmop->op_pmpermflags |= 0x0800;
+   pmop->op_pmflags = pmop->op_pmpermflags;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign_extend_ashift.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign_extend_ashift.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sign_extend_ashift.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sign_extend_ashift.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3" } */
+ /* { dg-final { scan-assembler "slli\\.w" } } */
+ /* { dg-final { scan-assembler-not "slli\\.d" } } */
+ /* { dg-final { scan-assembler-not "ext\\.w\\.b" } } */
+ 
+ unsigned int
+ test (unsigned int id)
+ {
+   return id << 24;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/slt-sign-extend.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/slt-sign-extend.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/slt-sign-extend.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/slt-sign-extend.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2" } */
+ /* { dg-final { scan-assembler-not "slli.w" } } */
+ 
+ extern int src1, src2, src3;
+ 
+ int
+ test (void)
+ {
+   int data1 = src1 + src2;
+   int data2 = src1 + src3;
+ 
+   return data1 > data2 ? data1 : data2;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/smuldi3_highpart.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/smuldi3_highpart.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/smuldi3_highpart.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/smuldi3_highpart.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-expand-all" } */
+ 
+ typedef int TI __attribute ((mode(TI)));
+ typedef int DI __attribute__((mode(DI)));
+ 
+ DI
+ test (DI x, DI y)
+ {
+   return ((TI)x * y) >> 64;
+ }
+ 
+ /* { dg-final { scan-rtl-dump "highparttmp" "expand" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/spill-less.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/spill-less.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/spill-less.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/spill-less.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/la64/sqrtf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sqrtf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/sqrtf.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/sqrtf.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe -fno-unsafe-math-optimizations" } */
+ /* { dg-final { scan-assembler-times "fsqrt.s" 3 } } */
+ /* { dg-final { scan-assembler-not "frsqrte.s" } } */
+ 
+ extern float sqrtf (float);
+ 
+ float
+ foo1 (float a, float b)
+ {
+   return a/sqrtf(b);
+ }
+ 
+ float
+ foo2 (float a, float b)
+ {
+   return sqrtf(a/b);
+ }
+ 
+ float
+ foo3 (float a)
+ {
+   return sqrtf(a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/switch-qi.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/switch-qi.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/switch-qi.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/switch-qi.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d" } */
+ /* { dg-final { scan-assembler-not "bstrpick" } } */
+ 
+ /* Test for loongarch_extend_comparands patch.  */
+ extern void asdf (int);
+ void
+ foo (signed char x) {
+     switch (x) {
+       case 0: asdf (10); break;
+       case 1: asdf (11); break;
+       case 2: asdf (12); break;
+       case 3: asdf (13); break;
+       case 4: asdf (14); break;
+     }
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-extreme-macro.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-extreme-macro.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-extreme-macro.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-extreme-macro.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,35 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=none -fPIC" } */
+ /* { dg-final { scan-assembler "test_le:.*la.tls.le\t\\\$r\[0-9\]+,c" { target tls_native } } } */
+ /* { dg-final { scan-assembler "test_ie:.*la.tls.ie\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,d" { target tls_native } } } */
+ /* { dg-final { scan-assembler "test_ld:.*la.tls.ld\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,e.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */
+ /* { dg-final { scan-assembler "test_le:.*la.tls.gd\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,f.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */
+ 
+ __thread int c __attribute__ ((tls_model ("local-exec")));
+ __thread int d __attribute__ ((tls_model ("initial-exec")));
+ __thread int e __attribute__ ((tls_model ("local-dynamic")));
+ __thread int f __attribute__ ((tls_model ("global-dynamic")));
+ 
+ int
+ test_le (void)
+ {
+   return c;
+ }
+ 
+ int
+ test_ie (void)
+ {
+   return d;
+ }
+ 
+ int
+ test_ld (void)
+ {
+   return e;
+ }
+ 
+ int
+ test_gd (void)
+ {
+   return f;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-gd-noplt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-gd-noplt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-gd-noplt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-gd-noplt.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O0 -fno-plt -mcmodel=normal -mtls-dialect=trad -mexplicit-relocs -fPIC" } */
+ /* { dg-final { scan-assembler "pcalau12i\t.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
+ 
+ __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
+ 
+ void
+ test (void)
+ {
+   a = 10;
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-extreme.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-extreme.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-extreme.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-extreme.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mcmodel=extreme -mexplicit-relocs=auto -mrelax" } */
+ /* { dg-final { scan-assembler-not "R_LARCH_RELAX" { target tls_native } } } */
+ 
+ #include "tls-ie-relax.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-norelax.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-norelax.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-norelax.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-norelax.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs -mno-relax" } */
+ /* { dg-final { scan-assembler-not "R_LARCH_RELAX" { target tls_native } } } */
+ 
+ #include "tls-ie-relax.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-relax.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-relax.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-relax.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-ie-relax.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs -mrelax" } */
+ /* { dg-final { scan-assembler-times "R_LARCH_RELAX" 2 { target tls_native } } } */
+ 
+ extern __thread int errno;
+ 
+ void
+ unimplemented (void)
+ {
+   errno = -38;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-le-relax.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-le-relax.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/tls-le-relax.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/tls-le-relax.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs" } */
+ /* { dg-final { scan-assembler "%le_add_r" { target tls_le_relax } } } */
+ 
+ __attribute__ ((tls_model ("local-exec"))) __thread int a;
+ 
+ void
+ test (void)
+ {
+   a = 10;
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-signed.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-signed.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-signed.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-signed.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* Verify optimization for mulw.d.w,
+    which can help with the replacement of the high-latency div.w.  */
+ /* { dg-do compile { target { loongarch64*-*-* } } } */
+ /* { dg-options "-O3" } */
+ 
+ int
+ test (int a)
+ {
+   return a / 3;
+ }
+ 
+ /* { dg-final { scan-assembler-not {\tdiv.w\t} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-unsigned.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-unsigned.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-unsigned.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/widen-mul-rtx-cost-unsigned.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* Verify optimization for mulh.wu, which can reduce insns.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O3" } */
+ 
+ int
+ test (unsigned int a)
+ {
+   return a / 3;
+ }
+ 
+ /* { dg-final { scan-assembler {\tmulh.wu\t} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-pass.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-pass.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-pass.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-pass.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,30 ----
+ /* Test that LoongArch backend ignores zero-sized fields of aggregates in
+    argument passing.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mdouble-float -mabi=lp64d" } */
+ /* { dg-final { scan-assembler "\\\$f1" } } */
+ 
+ struct test
+ {
+   int empty1[0];
+   double empty2[0];
+   int : 0;
+   float x;
+   long empty3[0];
+   long : 0;
+   float y;
+   unsigned : 0;
+   char empty4[0];
+ };
+ 
+ extern void callee (struct test);
+ 
+ void
+ caller (void)
+ {
+   struct test test;
+   test.x = 114;
+   test.y = 514;
+   callee (test);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-ret.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-ret.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-ret.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/la64/zero-size-field-ret.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,28 ----
+ /* Test that LoongArch backend ignores zero-sized fields of aggregates in
+    returning.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mdouble-float -mabi=lp64d" } */
+ /* { dg-final { scan-assembler-not "\\\$r4" } } */
+ 
+ struct test
+ {
+   int empty1[0];
+   double empty2[0];
+   int : 0;
+   float x;
+   long empty3[0];
+   long : 0;
+   float y;
+   unsigned : 0;
+   char empty4[0];
+ };
+ 
+ extern struct test callee (void);
+ 
+ float
+ caller (void)
+ {
+   struct test test = callee ();
+   return test.x + test.y;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/larch-builtin.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/larch-builtin.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/larch-builtin.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/larch-builtin.c	Sun Dec 14 22:32:13 2025
***************
*** 2,40 ****
  
  /* { dg-do compile } */
  
! /* { dg-final { scan-assembler-times "test_rdtime_d:.*rdtime\\.d.*\\.size	test_rdtime_d" 1 } } */
  /* { dg-final { scan-assembler-times "test_rdtimeh_w:.*rdtimeh\\.w.*\\.size	test_rdtimeh_w" 1 } } */
  /* { dg-final { scan-assembler-times "test_rdtimel_w:.*rdtimel\\.w.*\\.size	test_rdtimel_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_movfcsr2gr:.*movfcsr2gr.*\\.size	test_movfcsr2gr" 1 } } */
! /* { dg-final { scan-assembler-times "test_movgr2fcsr:.*movgr2fcsr.*\\.size	test_movgr2fcsr" 1 } } */
! /* { dg-final { scan-assembler-times "test_cacop_d:.*cacop.*\\.size	test_cacop_d" 1 } } */
  /* { dg-final { scan-assembler-times "test_cpucfg:.*cpucfg.*\\.size	test_cpucfg" 1 } } */
! /* { dg-final { scan-assembler-times "test_asrtle_d:.*asrtle\\.d.*\\.size	test_asrtle_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_asrtgt_d:.*asrtgt\\.d.*\\.size	test_asrtgt_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_lddir_d:.*lddir.*\\.size	test_lddir_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_ldpte_d:.*ldpte.*\\.size	test_ldpte_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_crc_w_b_w:.*crc\\.w\\.b\\.w.*\\.size	test_crc_w_b_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_crc_w_h_w:.*crc\\.w\\.h\\.w.*\\.size	test_crc_w_h_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_crc_w_w_w:.*crc\\.w\\.w\\.w.*\\.size	test_crc_w_w_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_crc_w_d_w:.*crc\\.w\\.d\\.w.*\\.size	test_crc_w_d_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_b_w:.*crcc\\.w\\.b\\.w.*\\.size	test_crcc_w_b_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_h_w:.*crcc\\.w\\.h\\.w.*\\.size	test_crcc_w_h_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_w_w:.*crcc\\.w\\.w\\.w.*\\.size	test_crcc_w_w_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_d_w:.*crcc\\.w\\.d\\.w.*\\.size	test_crcc_w_d_w" 1 } } */
  /* { dg-final { scan-assembler-times "test_csrrd_w:.*csrrd.*\\.size	test_csrrd_w" 1 } } */
  /* { dg-final { scan-assembler-times "test_csrwr_w:.*csrwr.*\\.size	test_csrwr_w" 1 } } */
  /* { dg-final { scan-assembler-times "test_csrxchg_w:.*csrxchg.*\\.size	test_csrxchg_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_csrrd_d:.*csrrd.*\\.size	test_csrrd_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_csrwr_d:.*csrwr.*\\.size	test_csrwr_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_csrxchg_d:.*csrxchg.*\\.size	test_csrxchg_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_b:.*iocsrrd\\.b.*\\.size	test_iocsrrd_b" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_h:.*iocsrrd\\.h.*\\.size	test_iocsrrd_h" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_w:.*iocsrrd\\.w.*\\.size	test_iocsrrd_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_d:.*iocsrrd\\.d.*\\.size	test_iocsrrd_d" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_b:.*iocsrwr\\.b.*\\.size	test_iocsrwr_b" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_h:.*iocsrwr\\.h.*\\.size	test_iocsrwr_h" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_w:.*iocsrwr\\.w.*\\.size	test_iocsrwr_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_d:.*iocsrwr\\.d.*\\.size	test_iocsrwr_d" 1 } } */
  /* { dg-final { scan-assembler-times "test_dbar:.*dbar.*\\.size	test_dbar" 1 } } */
  /* { dg-final { scan-assembler-times "test_ibar:.*ibar.*\\.size	test_ibar" 1 } } */
  /* { dg-final { scan-assembler-times "test_syscall:.*syscall.*\\.size	test_syscall" 1 } } */
--- 2,40 ----
  
  /* { dg-do compile } */
  
! /* { dg-final { scan-assembler-times "test_rdtime_d:.*rdtime\\.d.*\\.size	test_rdtime_d" 1 { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "test_rdtimeh_w:.*rdtimeh\\.w.*\\.size	test_rdtimeh_w" 1 } } */
  /* { dg-final { scan-assembler-times "test_rdtimel_w:.*rdtimel\\.w.*\\.size	test_rdtimel_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_movfcsr2gr:.*movfcsr2gr.*\\.size	test_movfcsr2gr" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_movgr2fcsr:.*movgr2fcsr.*\\.size	test_movgr2fcsr" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_cacop_d:.*cacop.*\\.size	test_cacop_d" 1 { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "test_cpucfg:.*cpucfg.*\\.size	test_cpucfg" 1 } } */
! /* { dg-final { scan-assembler-times "test_asrtle_d:.*asrtle\\.d.*\\.size	test_asrtle_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_asrtgt_d:.*asrtgt\\.d.*\\.size	test_asrtgt_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_lddir_d:.*lddir.*\\.size	test_lddir_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_ldpte_d:.*ldpte.*\\.size	test_ldpte_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crc_w_b_w:.*crc\\.w\\.b\\.w.*\\.size	test_crc_w_b_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crc_w_h_w:.*crc\\.w\\.h\\.w.*\\.size	test_crc_w_h_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crc_w_w_w:.*crc\\.w\\.w\\.w.*\\.size	test_crc_w_w_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crc_w_d_w:.*crc\\.w\\.d\\.w.*\\.size	test_crc_w_d_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_b_w:.*crcc\\.w\\.b\\.w.*\\.size	test_crcc_w_b_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_h_w:.*crcc\\.w\\.h\\.w.*\\.size	test_crcc_w_h_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_w_w:.*crcc\\.w\\.w\\.w.*\\.size	test_crcc_w_w_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_crcc_w_d_w:.*crcc\\.w\\.d\\.w.*\\.size	test_crcc_w_d_w" 1 { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "test_csrrd_w:.*csrrd.*\\.size	test_csrrd_w" 1 } } */
  /* { dg-final { scan-assembler-times "test_csrwr_w:.*csrwr.*\\.size	test_csrwr_w" 1 } } */
  /* { dg-final { scan-assembler-times "test_csrxchg_w:.*csrxchg.*\\.size	test_csrxchg_w" 1 } } */
! /* { dg-final { scan-assembler-times "test_csrrd_d:.*csrrd.*\\.size	test_csrrd_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_csrwr_d:.*csrwr.*\\.size	test_csrwr_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_csrxchg_d:.*csrxchg.*\\.size	test_csrxchg_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_b:.*iocsrrd\\.b.*\\.size	test_iocsrrd_b" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_h:.*iocsrrd\\.h.*\\.size	test_iocsrrd_h" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_w:.*iocsrrd\\.w.*\\.size	test_iocsrrd_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrrd_d:.*iocsrrd\\.d.*\\.size	test_iocsrrd_d" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_b:.*iocsrwr\\.b.*\\.size	test_iocsrwr_b" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_h:.*iocsrwr\\.h.*\\.size	test_iocsrwr_h" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_w:.*iocsrwr\\.w.*\\.size	test_iocsrwr_w" 1 { target { loongarch64*-*-* } } } } */
! /* { dg-final { scan-assembler-times "test_iocsrwr_d:.*iocsrwr\\.d.*\\.size	test_iocsrwr_d" 1 { target { loongarch64*-*-* } } } } */
  /* { dg-final { scan-assembler-times "test_dbar:.*dbar.*\\.size	test_dbar" 1 } } */
  /* { dg-final { scan-assembler-times "test_ibar:.*ibar.*\\.size	test_ibar" 1 } } */
  /* { dg-final { scan-assembler-times "test_syscall:.*syscall.*\\.size	test_syscall" 1 } } */
***************
*** 42,52 ****
--- 42,54 ----
  
  #include<larchintrin.h>
  
+ #ifdef __loongarch64
  __drdtime_t
  test_rdtime_d ()
  {
    return __rdtime_d ();
  }
+ #endif
  
  __rdtime_t
  test_rdtimeh_w ()
*************** test_rdtimel_w ()
*** 60,65 ****
--- 62,68 ----
    return __rdtimel_w ();
  }
  
+ #ifdef __loongarch_hard_float
  unsigned int
  test_movfcsr2gr ()
  {
*************** test_movgr2fcsr (unsigned int _1)
*** 71,82 ****
--- 74,88 ----
  {
    __movgr2fcsr (1, _1);
  }
+ #endif
  
+ #ifdef __loongarch64
  void
  test_cacop_d (unsigned long int _1)
  {
    __cacop_d (1, _1, 1);
  }
+ #endif
  
  unsigned int
  test_cpucfg (unsigned int _1)
*************** test_cpucfg (unsigned int _1)
*** 84,89 ****
--- 90,96 ----
    return __cpucfg (_1);
  }
  
+ #ifdef __loongarch64
  void
  test_asrtle_d (long int _1, long int _2)
  {
*************** test_crcc_w_d_w (long int _1, int _2)
*** 155,160 ****
--- 162,168 ----
  {
    return __crcc_w_d_w (_1, _2);
  }
+ #endif
  
  unsigned int
  test_csrrd_w ()
*************** test_csrxchg_w (unsigned int _1, unsigne
*** 174,179 ****
--- 182,188 ----
    return __csrxchg_w (_1, _2, 1);
  }
  
+ #ifdef __loongarch64
  unsigned long int
  test_csrrd_d ()
  {
*************** test_csrxchg_d (unsigned long int _1, un
*** 191,197 ****
--- 200,208 ----
  {
    return __csrxchg_d (_1, _2, 1);
  }
+ #endif
  
+ #ifdef __loongarch64
  unsigned char
  test_iocsrrd_b (unsigned int _1)
  {
*************** test_iocsrrd_w (unsigned int _1)
*** 209,221 ****
--- 220,236 ----
  {
    return __iocsrrd_w (_1);
  }
+ #endif
  
+ #ifdef __loongarch64
  unsigned long int
  test_iocsrrd_d (unsigned int _1)
  {
    return __iocsrrd_d (_1);
  }
+ #endif
  
+ #ifdef __loongarch64
  void
  test_iocsrwr_b (unsigned char _1, unsigned int _2)
  {
*************** test_iocsrwr_w (unsigned int _1, unsigne
*** 233,244 ****
--- 248,262 ----
  {
    __iocsrwr_w (_1, _2);
  }
+ #endif
  
+ #ifdef __loongarch64
  void
  test_iocsrwr_d (unsigned long int _1, unsigned int _2)
  {
    __iocsrwr_d (_1, _2);
  }
+ #endif
  
  void
  test_dbar ()
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/larch-frecipe-builtin.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/larch-frecipe-builtin.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/larch-frecipe-builtin.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/larch-frecipe-builtin.c	Thu Jan  1 00:00:00 1970
***************
*** 1,28 ****
- /* Test builtins for frecipe.{s/d} and frsqrte.{s/d} instructions */
- /* { dg-do compile } */
- /* { dg-options "-mfrecipe" } */
- /* { dg-final { scan-assembler-times "test_frecipe_s:.*frecipe\\.s.*test_frecipe_s" 1 } } */
- /* { dg-final { scan-assembler-times "test_frecipe_d:.*frecipe\\.d.*test_frecipe_d" 1 } } */
- /* { dg-final { scan-assembler-times "test_frsqrte_s:.*frsqrte\\.s.*test_frsqrte_s" 1 } } */
- /* { dg-final { scan-assembler-times "test_frsqrte_d:.*frsqrte\\.d.*test_frsqrte_d" 1 } } */
- 
- float
- test_frecipe_s (float _1)
- {
-   return __builtin_loongarch_frecipe_s (_1);
- }
- double
- test_frecipe_d (double _1)
- {
-   return __builtin_loongarch_frecipe_d (_1);
- }
- float
- test_frsqrte_s (float _1)
- {
-   return __builtin_loongarch_frsqrte_s (_1);
- }
- double
- test_frsqrte_d (double _1)
- {
-   return __builtin_loongarch_frsqrte_d (_1);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/larch-frecipe-intrinsic.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/larch-frecipe-intrinsic.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/larch-frecipe-intrinsic.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/larch-frecipe-intrinsic.c	Thu Jan  1 00:00:00 1970
***************
*** 1,30 ****
- /* Test intrinsics for frecipe.{s/d} and frsqrte.{s/d} instructions */
- /* { dg-do compile } */
- /* { dg-options "-mfrecipe -O2" } */
- /* { dg-final { scan-assembler-times "test_frecipe_s:.*frecipe\\.s.*test_frecipe_s" 1 } } */
- /* { dg-final { scan-assembler-times "test_frecipe_d:.*frecipe\\.d.*test_frecipe_d" 1 } } */
- /* { dg-final { scan-assembler-times "test_frsqrte_s:.*frsqrte\\.s.*test_frsqrte_s" 1 } } */
- /* { dg-final { scan-assembler-times "test_frsqrte_d:.*frsqrte\\.d.*test_frsqrte_d" 1 } } */
- 
- #include <larchintrin.h>
- 
- float
- test_frecipe_s (float _1)
- {
-   return __frecipe_s (_1);
- }
- double
- test_frecipe_d (double _1)
- {
-   return __frecipe_d (_1);
- }
- float
- test_frsqrte_s (float _1)
- {
-   return __frsqrte_s (_1);
- }
- double
- test_frsqrte_d (double _1)
- {
-   return __frsqrte_d (_1);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-andn-iorn.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-andn-iorn.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-andn-iorn.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-andn-iorn.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- #define N 8
- 
- #include "./lsx-andn-iorn.c"
- 
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -ftree-vectorize -fdump-tree-optimized" } */
- 
- /* We should produce a BIT_ANDC and BIT_IORC here.  */
- 
- /* { dg-final { scan-tree-dump ".BIT_ANDN " "optimized" } } */
- /* { dg-final { scan-tree-dump ".BIT_IORN " "optimized" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-extract-even_odd-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-extract-even_odd-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-extract-even_odd-opt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-extract-even_odd-opt.c	Thu Jan  1 00:00:00 1970
***************
*** 1,54 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
- /* { dg-final { scan-assembler "xvilvl.d" } } */
- /* { dg-final { scan-assembler "xvilvh.d" } } */
- 
- #define CMUL(a, b, c)                                                         \
-   {                                                                           \
-     (c).ai = (a).ai * (b).ai - (a).bi * (b).bi;                               \
-     (c).bi = (a).ai * (b).bi + (a).bi * (b).ai;                               \
-     (c).ci = (a).ci * (b).ci - (a).di * (b).di;                               \
-     (c).di = (a).ci * (b).di + (a).di * (b).ci;                               \
-   }
- #define CSUM(a, b)                                                            \
-   {                                                                           \
-     (a).ai += (b).ai;                                                         \
-     (a).bi += (b).bi;                                                         \
-     (a).ci += (b).ci;                                                         \
-     (a).di += (b).di;                                                         \
-   }
- 
- typedef struct
- {
-   double ai;
-   double bi;
-   double ci;
-   double di;
- } complex;
- 
- typedef struct
- {
-   complex e[6][6];
- } matrix;
- 
- typedef struct
- {
-   complex c[6];
- } vector;
- 
- void
- mult_adj_mat_vec (matrix *a, vector *b, vector *c)
- {
-   register int i, j;
-   register complex x, y;
-   for (i = 0; i < 6; i++)
-     {
-       x.ai = x.bi = x.ci = x.di = 0.0;
-       for (j = 0; j < 6; j++)
-         {
-           CMUL (a->e[j][i], b->c[j], y);
-           CSUM (x, y);
-         }
-       c->c[i] = x;
-     }
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,19 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mno-lsx" } */
- 
- typedef int v8i32 __attribute__ ((vector_size(32), aligned(32)));
- extern v8i32 a, b, c;
- 
- #ifndef TEST_TARGET_PRAGMA
- __attribute__ ((target ("lasx")))
- #else
- #pragma GCC target ("lasx")
- #endif
- void
- test (void)
- {
-   a = b + c;
- }
- 
- 
- /* { dg-final { scan-assembler "xvadd.w" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-func-attr-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx" } */
- 
- typedef int v8i32 __attribute__ ((vector_size(32), aligned(32)));
- extern v8i32 a, b, c;
- 
- __attribute__ ((target ("no-lasx")))
- void
- test (void)
- {
-   a = __builtin_lasx_xvadd_w (b, c); /* { dg-error "built-in function '__builtin_lasx_xvadd_w' is not enabled" } */
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mno-lsx" } */
- 
- #define TEST_TARGET_PRAGMA 1
- #include "./lasx-func-attr-1.c"
- 
- /* { dg-final { scan-assembler "xvadd.w" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-pragma-attr-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx" } */
- 
- typedef int v8i32 __attribute__ ((vector_size(32), aligned(32)));
- extern v8i32 a, b, c;
- 
- #pragma GCC target ("no-lasx")
- void
- test (void)
- {
-   a = __builtin_lasx_xvadd_w (b, c); /* { dg-error "built-in function '__builtin_lasx_xvadd_w' is not enabled" } */
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-reduc-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -funsafe-math-optimizations -mlasx -fno-unroll-loops -fdump-tree-optimized" } */
- /* { dg-final { scan-tree-dump-times "\.REDUC_PLUS" 4 "optimized" } } */
- 
- #define DEFINE_SUM_FUNCTION(T, FUNC_NAME, SIZE) \
- T FUNC_NAME(const T arr[]) { \
-     arr = __builtin_assume_aligned(arr, 64); \
-     T sum = 0; \
-     for (int i = 0; i < SIZE; i++) \
-         sum += arr[i]; \
-     return sum; \
- }
- 
- DEFINE_SUM_FUNCTION (int, sum_int_1040, 1028)
- DEFINE_SUM_FUNCTION (float, sum_float_1040, 1028)
- DEFINE_SUM_FUNCTION (long, sum_long_1040, 1026)
- DEFINE_SUM_FUNCTION (double, sum_double_1040, 1026)
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lasx-xvpermi_q-opt.c	Thu Jan  1 00:00:00 1970
***************
*** 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 } } */
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-andn-iorn.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-andn-iorn.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-andn-iorn.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-andn-iorn.c	Thu Jan  1 00:00:00 1970
***************
*** 1,28 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -ftree-vectorize -fdump-tree-optimized" } */
- 
- #ifndef N
- #define N 4
- #endif
- 
- extern float a[N], b[N];
- extern int c[N], d[N];
- 
- void
- bar1 (void)
- {
-   for (int i = 0; i < N; i++)
-     d[i] = a[i] > b[i] ? 0 : c[i];
- }
- 
- void
- bar2 (void)
- {
-   for (int i = 0; i < N; i++)
-     d[i] = a[i] > b[i] ? c[i]: -1;
- }
- 
- /* We should produce a BIT_ANDC and BIT_IORC here.  */
- 
- /* { dg-final { scan-tree-dump ".BIT_ANDN " "optimized" } } */
- /* { dg-final { scan-tree-dump ".BIT_IORN " "optimized" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,19 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mno-lsx" } */
- 
- typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
- extern v4i32 a, b, c;
- 
- #ifndef TEST_TARGET_PRAGMA
- __attribute__ ((target ("lsx")))
- #else
- #pragma GCC target ("lsx")
- #endif
- void
- test (void)
- {
-   a = b + c;
- }
- 
- 
- /* { dg-final { scan-assembler "vadd.w" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-func-attr-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx" } */
- 
- typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
- extern v4i32 a, b, c;
- 
- __attribute__ ((target ("no-lsx")))
- void
- test (void)
- {
-   a = __builtin_lsx_vadd_w (b, c); /* { dg-error "built-in function '__builtin_lsx_vadd_w' is not enabled" } */
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mno-lsx" } */
- 
- #define TEST_TARGET_PRAGMA 1
- #include "./lsx-func-attr-1.c"
- 
- /* { dg-final { scan-assembler "vadd.w" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/lsx-pragma-attr-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx" } */
- 
- typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
- extern v4i32 a, b, c;
- 
- #pragma GCC target ("no-lsx")
- void
- test (void)
- {
-   a = __builtin_lsx_vadd_w (b, c); /* { dg-error "built-in function '__builtin_lsx_vadd_w' is not enabled" } */
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/math-float-128.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/math-float-128.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/math-float-128.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/math-float-128.c	Thu Jan  1 00:00:00 1970
***************
*** 1,81 ****
- /* { dg-do compile } */
- /* { dg-options " -march=loongarch64 -O2 " } */
- /* { dg-final { scan-assembler-not "my_fabsq2:.*\\bl\t%plt\\(__builtin_fabsq\\).*my_fabsq2" } } */
- /* { dg-final { scan-assembler-not "my_copysignq2:.*\\bl\t%plt\\(__builtin_copysignq\\).*my_copysignq2" } } */
- /* { dg-final { scan-assembler-not "my_infq2:.*\\bl\t%plt\\(__builtin_infq\\).*my_infq2" } } */
- /* { dg-final { scan-assembler-not "my_huge_valq2:.*\\bl\t%plt\\(__builtin_huge_valq\\).*my_huge_valq2" } } */
- /* { dg-final { scan-assembler-not "my_nanq2:.*\\bl\t%plt\\(__builtin_nanq\\).*my_nanq2" } } */
- /* { dg-final { scan-assembler-not "my_nansq2:.*\\bl\t%plt\\(__builtin_nansq\\).*my_nansq2" } } */
- 
- __float128
- my_fabsq1 (__float128 a)
- {
-   return __builtin_fabsq (a);
- }
- 
- _Float128
- my_fabsq2 (_Float128 a)
- {
-   return __builtin_fabsq (a);
- }
- 
- __float128
- my_copysignq1 (__float128 a, __float128 b)
- {
-   return __builtin_copysignq (a, b);
- }
- 
- _Float128
- my_copysignq2 (_Float128 a, _Float128 b)
- {
-   return __builtin_copysignq (a, b);
- }
- 
- __float128
- my_infq1 (void)
- {
-   return __builtin_infq ();
- }
- 
- _Float128
- my_infq2 (void)
- {
-   return __builtin_infq ();
- }
- 
- __float128
- my_huge_valq1 (void)
- {
-   return __builtin_huge_valq ();
- }
- 
- _Float128
- my_huge_valq2 (void)
- {
-   return __builtin_huge_valq ();
- }
- 
- __float128
- my_nanq1 (void)
- {
-   return __builtin_nanq ("");
- }
- 
- _Float128
- my_nanq2 (void)
- {
-   return __builtin_nanq ("");
- }
- 
- __float128
- my_nansq1 (void)
- {
-   return __builtin_nansq ("");
- }
- 
- _Float128
- my_nansq2 (void)
- {
-   return __builtin_nansq ("");
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mem-and-mask-opt.c	Thu Jan  1 00:00:00 1970
***************
*** 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;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/memcpy-vec-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/memcpy-vec-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/memcpy-vec-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/memcpy-vec-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d -march=la464 -mno-strict-align" } */
- /* { dg-final { scan-assembler-times "xvst" 2 } } */
- /* { dg-final { scan-assembler-times "\tvst" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
- 
- extern char a[], b[];
- void test() { __builtin_memcpy(a, b, 95); }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/memcpy-vec-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/memcpy-vec-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/memcpy-vec-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/memcpy-vec-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d -march=la464 -mno-strict-align" } */
- /* { dg-final { scan-assembler-times "xvst" 2 } } */
- /* { dg-final { scan-assembler-times "\tvst" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
- 
- typedef char __attribute__ ((vector_size (32), aligned (32))) vec;
- extern vec a[], b[];
- void test() { __builtin_memcpy(a, b, 95); }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/memcpy-vec-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/memcpy-vec-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/memcpy-vec-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/memcpy-vec-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=la464 -mabi=lp64d -mstrict-align" } */
- /* { dg-final { scan-assembler-not "vst" } } */
- 
- extern char a[], b[];
- void test() { __builtin_memcpy(a, b, 32); }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mode-tieable-opt.c	Thu Jan  1 00:00:00 1970
***************
*** 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;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mov-zero-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mov-zero-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mov-zero-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mov-zero-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx" } */
- /* { dg-final { scan-assembler-times "vxor\\.v" 2 } } */
- 
- double
- get_double_zero ()
- {
-   return 0;
- }
- 
- float
- get_float_zero ()
- {
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mov-zero-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mov-zero-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mov-zero-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mov-zero-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mno-lsx" } */
- /* { dg-final { scan-assembler-times "movgr2fr" 2 } } */
- 
- double
- get_double_zero ()
- {
-   return 0;
- }
- 
- float
- get_float_zero ()
- {
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/movcf2gr-via-fr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/movcf2gr-via-fr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/movcf2gr-via-fr.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/movcf2gr-via-fr.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mtune=la464 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "movcf2fr\t\\\$f\[0-9\]+,\\\$fcc" } } */
- /* { dg-final { scan-assembler "movfr2gr\\.s\t\\\$r4" } } */
- 
- int
- t (float a, float b)
- {
-   return a > b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/movcf2gr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/movcf2gr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/movcf2gr.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/movcf2gr.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mtune=la664 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "movcf2gr\t\\\$r4,\\\$fcc" } } */
- 
- int
- t (float a, float b)
- {
-   return a > b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mul-const-reduction.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mul-const-reduction.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mul-const-reduction.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mul-const-reduction.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mtune=la464" } */
- /* { dg-final { scan-assembler "alsl\.w" } } */
- /* { dg-final { scan-assembler "slli\.w" } } */
- /* { dg-final { scan-assembler-not "mul\.w" } } */
- 
- int
- test (int a)
- {
-   return a * 68;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mulh_wu.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mulh_wu.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mulh_wu.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mulh_wu.c	Thu Jan  1 00:00:00 1970
***************
*** 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;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mulw_d_w.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mulw_d_w.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mulw_d_w.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mulw_d_w.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "mulw.d.w" } } */
- 
- /* This should be optimized to mulw.d.w for LA64.  */
- __attribute__((noipa, noinline)) long
- f(long a, long b)
- {
-   return (long)(int)a * (long)(int)b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mulw_d_wu.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mulw_d_wu.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/mulw_d_wu.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/mulw_d_wu.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d" } */
- /* { dg-final { scan-assembler "mulw.d.wu" } } */
- 
- __attribute__((noipa, noinline)) unsigned long
- f(unsigned long a, unsigned long b)
- {
-   return (unsigned long)(unsigned int)a * (unsigned long)(unsigned int)b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/popcnt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/popcnt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/popcnt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/popcnt.c	Thu Jan  1 00:00:00 1970
***************
*** 1,41 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx" } */
- /* { dg-final { scan-assembler-not {popcount} } } */
- /* { dg-final { scan-assembler-times "vpcnt.d" 2 { target { loongarch64*-*-* } } } } */
- /* { dg-final { scan-assembler-times "vpcnt.w" 4 { target { loongarch64*-*-* } } } } */
- 
- int
- foo (int x)
- {
-   return __builtin_popcount (x);
- }
- 
- long
- foo1 (long x)
- {
-   return __builtin_popcountl (x);
- }
- 
- long long
- foo2 (long long x)
- {
-   return __builtin_popcountll (x);
- }
- 
- int
- foo3 (int *p)
- {
-   return __builtin_popcount (*p);
- }
- 
- unsigned
- foo4 (int x)
- {
-   return __builtin_popcount (x);
- }
- 
- unsigned long
- foo5 (int x)
- {
-   return __builtin_popcount (x);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/popcount.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/popcount.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/popcount.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/popcount.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fdump-tree-optimized" } */
- /* { dg-final { scan-tree-dump-times "__builtin_popcount|\\.POPCOUNT" 1 "optimized" } } */
- 
- int
- PopCount (long b)
- {
-   int c = 0;
- 
-   while (b)
-     {
-       b &= b - 1;
-       c++;
-     }
- 
-   return c;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr109465-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr109465-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr109465-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr109465-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d -mno-strict-align" } */
- /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
- 
- extern char a[], b[];
- void test() { __builtin_memcpy(a, b, 15); }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr109465-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr109465-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr109465-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr109465-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d -mstrict-align" } */
- /* { dg-final { scan-assembler-times "st\\.d|stptr\\.d" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.w|stptr\\.w" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.h" 1 } } */
- /* { dg-final { scan-assembler-times "st\\.b" 1 } } */
- 
- extern long a[], b[];
- void test() { __builtin_memcpy(a, b, 15); }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr109465-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr109465-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr109465-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr109465-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d -mstrict-align" } */
- 
- /* Three loop iterations each contains 4 st.b, and 3 st.b after the loop */
- /* { dg-final { scan-assembler-times "st\\.b" 7 } } */
- 
- /* { dg-final { scan-assembler-not "st\\.h" } } */
- /* { dg-final { scan-assembler-not "st\\.w|stptr\\.w" } } */
- /* { dg-final { scan-assembler-not "st\\.d|stptr\\.d" } } */
- 
- extern char a[], b[];
- void test() { __builtin_memcpy(a, b, 15); }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /* PR target/112476: ICE with -mlsx */
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mfpu=64 -mabi=lp64d -mlsx" } */
- 
- int foo, bar;
- float baz, res, a;
- 
- void
- apply_adjacent_ternary (float *dst, float *src0)
- {
-   do
-     {
-       __builtin_memcpy (&res, &src0, sizeof (res));
-       *dst = foo ? baz : res;
-       dst++;
-     }
-   while (dst != src0);
- }
- 
- void
- xx (void)
- {
-   apply_adjacent_ternary (&a, &a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* PR target/112476: ICE with -mlasx */
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mfpu=64 -mabi=lp64d -mlasx" } */
- 
- #include "pr112476-1.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,58 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlsx" } */
- 
- #include <stdint.h>
- 
- typedef int8_t orc_int8;
- typedef int16_t orc_int16;
- typedef int32_t orc_int32;
- typedef int64_t orc_int64;
- 
- typedef union
- {
-   orc_int32 i;
-   float f;
-   orc_int16 x2[2];
-   orc_int8 x4[4];
- } orc_union32;
- typedef union
- {
-   orc_int64 i;
-   double f;
-   orc_int32 x2[2];
-   float x2f[2];
-   orc_int16 x4[4];
- } orc_union64;
- 
- void
- audio_orc_s32_to_double (double * restrict d1,
-     const signed int * restrict s1, int n)
- {
-   int i;
-   orc_union64 *restrict ptr0;
-   const orc_union32 *restrict ptr4;
-   orc_union32 var33;
-   orc_union64 var34;
-   orc_union64 var35;
-   orc_union64 var36;
- 
-   ptr0 = (orc_union64 *) d1;
-   ptr4 = (orc_union32 *) s1;
- 
-   var34.i = 0x41e0000000000000UL;
- 
-   for (i = 0; i < n; i++) {
-     var33 = ptr4[i];
-     var36.f = var33.i;
-     {
-       orc_union64 _src1;
-       orc_union64 _src2;
-       orc_union64 _dest1;
-       _src1.i = ((var36.i) & ((((var36.i)&0x7ff0000000000000UL) == 0) ? 0xfff0000000000000UL : 0xffffffffffffffffUL));
-       _src2.i = ((var34.i) & ((((var34.i)&0x7ff0000000000000UL) == 0) ? 0xfff0000000000000UL : 0xffffffffffffffffUL));
-       _dest1.f = _src1.f / _src2.f;
-       var35.i = ((_dest1.i) & ((((_dest1.i)&0x7ff0000000000000UL) == 0) ? 0xfff0000000000000UL : 0xffffffffffffffffUL));
-     }
-     ptr0[i] = var35;
-   }
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr112476-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr112476-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,4 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
-  
- #include "pr112476-3.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr113033.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr113033.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr113033.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr113033.c	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- /* PR target/113033: ICE with vector left rotate */
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx" } */
- 
- typedef unsigned __attribute__ ((vector_size (16))) v4si;
- typedef unsigned __attribute__ ((vector_size (32))) v8si;
- typedef unsigned long long __attribute__ ((vector_size (16))) v2di;
- typedef unsigned long long __attribute__ ((vector_size (32))) v4di;
- 
- #define TEST(tp) \
- extern tp data_##tp; \
- tp \
- test_##tp (int x) \
- { \
-   const int bit = sizeof (data_##tp[0]) * __CHAR_BIT__; \
-   data_##tp = data_##tp << (x & (bit - 1)) \
- 	      | data_##tp >> (bit - x & (bit - 1)); \
- }
- 
- TEST (v4si)
- TEST (v8si)
- TEST (v2di)
- TEST (v4di)
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr113148.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr113148.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr113148.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr113148.c	Thu Jan  1 00:00:00 1970
***************
*** 1,44 ****
- /* PR 113148: ICE caused by infinite reloading */
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=la464 -mfpu=64 -mabi=lp64d" } */
- 
- struct bound
- {
-   double max;
- } drawQuadrant_bound;
- double w4, innerXfromXY_y, computeBound_right_0;
- struct arc_def
- {
-   double w, h;
-   double a0, a1;
- };
- static void drawQuadrant (struct arc_def *);
- static void
- computeBound (struct arc_def *def, struct bound *bound)
- {
-   double ellipsex_1, ellipsex_0;
-   bound->max = def->a1 ?: __builtin_sin (w4) * def->h;
-   if (def->a0 == 5 && def->w == def->h)
-     ;
-   else
-     ellipsex_0 = def->a0 == 0.0 ?: __builtin_cos (w4);
-   if (def->a1 == 5 && def->w == def->h)
-     ellipsex_1 = bound->max;
-   __builtin_sqrt (ellipsex_1 * innerXfromXY_y * innerXfromXY_y * w4);
-   computeBound_right_0 = ellipsex_0;
- }
- void
- drawArc ()
- {
-   struct arc_def foo;
-   for (;;)
-     drawQuadrant (&foo);
- }
- void
- drawQuadrant (struct arc_def *def)
- {
-   int y, miny;
-   computeBound (def, &drawQuadrant_bound);
-   while (y >= miny)
-     ;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr114861.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr114861.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr114861.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr114861.c	Thu Jan  1 00:00:00 1970
***************
*** 1,39 ****
- /* PR114861: ICE building the kernel with -Os
-    Reduced from linux/fs/ntfs3/attrib.c at revision c942a0cd3603.  */
- /* { dg-do compile } */
- /* { dg-options "-Os -march=loongarch64 -msoft-float -mabi=lp64s" } */
- 
- long evcn, attr_collapse_range_vbo, attr_collapse_range_bytes;
- unsigned short flags;
- int attr_collapse_range_ni_0_0;
- int *attr_collapse_range_mi;
- unsigned attr_collapse_range_svcn, attr_collapse_range_vcn1;
- void ni_insert_nonresident (unsigned, unsigned short, int **);
- int mi_pack_runs (int);
- int
- attr_collapse_range (void)
- {
-   _Bool __trans_tmp_1;
-   int run = attr_collapse_range_ni_0_0;
-   unsigned evcn1, vcn, end;
-   short a_flags = flags;
-   __trans_tmp_1 = flags & (32768 | 1);
-   if (__trans_tmp_1)
-     return 2;
-   vcn = attr_collapse_range_vbo;
-   end = attr_collapse_range_bytes;
-   evcn1 = evcn;
-   for (;;)
-     if (attr_collapse_range_svcn >= end)
-       {
-         unsigned eat, next_svcn = mi_pack_runs (42);
-         attr_collapse_range_vcn1 = (vcn ? vcn : attr_collapse_range_svcn);
-         eat = (0 < end) - attr_collapse_range_vcn1;
-         mi_pack_runs (run - eat);
-         if (next_svcn + eat)
-           ni_insert_nonresident (evcn1 - eat - next_svcn, a_flags,
-                                  &attr_collapse_range_mi);
-       }
-     else
-       return 42;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr115752.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr115752.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr115752.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr115752.c	Sun Dec 14 22:32:13 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do compile } */
+ /* { dg-require-effective-target hard_float } */
  
  long double
  test (long double xx)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118561.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118561.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118561.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118561.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* PR target/118561: ICE with -mfpu=none */
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mfpu=none" } */
- 
- int
- test (void)
- {
-   return __builtin_loongarch_movfcsr2gr (0); /* { dg-error "built-in function '__builtin_loongarch_movfcsr2gr' is not enabled" } */
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,30 ****
- /* { dg-do preprocess } */
- /* { dg-options "-mno-lsx" } */
- 
- #ifdef __loongarch_sx
- #error LSX should not be available here
- #endif
- 
- #ifdef __loongarch_simd_width
- #error simd width shuold not be available here
- #endif
- 
- #pragma GCC push_options
- #pragma GCC target("lsx")
- #ifndef __loongarch_sx
- #error LSX should be available here
- #endif
- #ifndef __loongarch_simd_width
- #error simd width should be available here
- #elif __loongarch_simd_width != 128
- #error simd width should be 128
- #endif
- #pragma GCC pop_options
- 
- #ifdef __loongarch_sx
- #error LSX should become unavailable again
- #endif
- 
- #ifdef __loongarch_simd_width
- #error simd width shuold become unavailable again
- #endif
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828-3.c	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64" } */
- /* { dg-final { scan-assembler "t1: loongarch64" } } */
- /* { dg-final { scan-assembler "t2: la64v1.1" } } */
- /* { dg-final { scan-assembler "t3: loongarch64" } } */
- 
- #ifndef __loongarch_arch
- #error __loongarch_arch should be available here
- #endif
- 
- void
- t1 (void)
- {
-   asm volatile ("# t1: " __loongarch_arch);
- }
- 
- #pragma GCC push_options
- #pragma GCC target("arch=la64v1.1")
- 
- void
- t2 (void)
- {
-   asm volatile ("# t2: " __loongarch_arch);
- }
- 
- #pragma GCC pop_options
- 
- void
- t3 (void)
- {
-   asm volatile ("# t3: " __loongarch_arch);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828-4.c	Thu Jan  1 00:00:00 1970
***************
*** 1,32 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mtune=la464" } */
- /* { dg-final { scan-assembler "t1: la464" } } */
- /* { dg-final { scan-assembler "t2: la664" } } */
- /* { dg-final { scan-assembler "t3: la464" } } */
- 
- #ifndef __loongarch_tune
- #error __loongarch_tune should be available here
- #endif
- 
- void
- t1 (void)
- {
-   asm volatile ("# t1: " __loongarch_tune);
- }
- 
- #pragma GCC push_options
- #pragma GCC target("tune=la664")
- 
- void
- t2 (void)
- {
-   asm volatile ("# t2: " __loongarch_tune);
- }
- 
- #pragma GCC pop_options
- 
- void
- t3 (void)
- {
-   asm volatile ("# t3: " __loongarch_tune);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118828.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118828.c	Thu Jan  1 00:00:00 1970
***************
*** 1,34 ****
- /* { dg-do preprocess } */
- /* { dg-options "-mno-lasx" } */
- 
- #ifdef __loongarch_asx
- #error LASX should not be available here
- #endif
- 
- #ifdef __loongarch_simd_width
- #if __loongarch_simd_width == 256
- #error simd width shuold not be 256
- #endif
- #endif
- 
- #pragma GCC push_options
- #pragma GCC target("lasx")
- #ifndef __loongarch_asx
- #error LASX should be available here
- #endif
- #ifndef __loongarch_simd_width
- #error simd width should be available here
- #elif __loongarch_simd_width != 256
- #error simd width should be 256
- #endif
- #pragma GCC pop_options
- 
- #ifdef __loongarch_asx
- #error LASX should become unavailable again
- #endif
- 
- #ifdef __loongarch_simd_width
- #if __loongarch_simd_width == 256
- #error simd width shuold not be 256 again
- #endif
- #endif
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118843.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118843.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr118843.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr118843.c	Thu Jan  1 00:00:00 1970
***************
*** 1,6 ****
- /* { dg-do preprocess } */
- /* { dg-options "-mfrecipe -mfpu=none" } */
- 
- #ifdef __loongarch_frecipe
- #error __loongarch_frecipe should not be avaliable here
- #endif
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr119084.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr119084.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr119084.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr119084.c	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /* { dg-do run } */
- /* { dg-options "-O2 -mlsx" } */
- /* { dg-require-effective-target loongarch_sx_hw } */
- 
- typedef signed char V16QI __attribute__ ((vector_size (16)));
- static char x[128];
- 
- __attribute__ ((noipa)) int
- noopt (int x)
- {
-   return x;
- }
- 
- int
- main (void)
- {
-   int t = noopt (32);
- 
-   x[32] = 1;
- 
-   V16QI y = __builtin_lsx_vldx (x, t);
-   if (y[0] != 1)
-     __builtin_trap ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr119127.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr119127.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr119127.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr119127.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* PR target/119127: ICE caused by operating DImode const in SImode */
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- 
- int x;
- struct Type {
-   unsigned SubclassData : 24;
- } y;
- 
- void
- test (void)
- {
-   x = y.SubclassData * 37;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121064.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121064.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121064.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121064.c	Thu Jan  1 00:00:00 1970
***************
*** 1,38 ****
- /* { dg-require-effective-target loongarch_sx_hw } */
- /* { dg-do run } */
- /* { dg-options "-march=loongarch64 -mfpu=64 -mlsx -O3" } */
- 
- typedef __INT32_TYPE__ int32_t;
- typedef unsigned __INT32_TYPE__ uint32_t;
- 
- __attribute__ ((noipa)) static int32_t
- long_filter_ehigh_3830_1 (int32_t *buffer, int length)
- {
-   int i, j;
-   int32_t dotprod = 0;
-   int32_t delay[4] = { 0 };
-   uint32_t coeffs[4] = { 0 };
- 
-   for (i = 0; i < length; i++)
-     {
-       dotprod = 0;
-       for (j = 3; j >= 0; j--)
-         {
-           dotprod += delay[j] * coeffs[j];
-           coeffs[j] += ((delay[j] >> 31) | 1);
-         }
-       for (j = 3; j > 0; j--)
-         delay[j] = delay[j - 1];
-       delay[0] = buffer[i];
-     }
- 
-   return dotprod;
- }
- 
- int
- main ()
- {
-   int32_t buffer[] = { -1, 1 };
-   if (long_filter_ehigh_3830_1 (buffer, 2) != -1)
-     __builtin_trap ();
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121542.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121542.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121542.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121542.c	Thu Jan  1 00:00:00 1970
***************
*** 1,54 ****
- /* { dg-do compile } */
- /* { dg-options "-mrecip=all  -mfrecipe -mabi=lp64d -march=loongarch64 -mfpu=64 -msimd=lasx -Ofast" } */
- 
- typedef long unsigned int STRLEN;
- typedef struct sv SV;
- struct sv
- {
-   void *sv_any;
-   unsigned int sv_refcnt;
-   unsigned int sv_flags;
- };
- typedef struct xpv XPV;
- struct xpv
- {
-   char *xpv_pv;
-   STRLEN xpv_cur;
-   STRLEN xpv_len;
- };
- typedef unsigned long UV;
- extern char *PL_bufend;
- extern char *d;
- SV *Perl_newSV (STRLEN len);
- 
- char *
- S_scan_const (char *start)
- {
-   register char *send = PL_bufend;
-   SV *sv = Perl_newSV (send - start);
-   register char *s = start;
-   UV uv;
- 
-   while (s < send)
-     {
-       if (!(((UV)(uv)) < 0x80))
-         {
-           int hicount = 0;
-           unsigned char *c;
-           for (c = (unsigned char *)((XPV *)(sv)->sv_any)->xpv_pv;
-                c < (unsigned char *)d; c++)
-             {
-               if (!(((UV)(*c)) < 0x80))
-                 {
-                   hicount++;
-                 }
-             }
-           d += hicount;
-           *d++ = (char)uv;
-         }
- 
-       s++;
-     }
- 
-   return s;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121634.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121634.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121634.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121634.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* PR target/121634: ICE in highway-1.3.0 testsuite */
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=la464 -mabi=lp64d" } */
- 
- typedef short v8i16 __attribute__ ((vector_size (16)));
- typedef int v4i32 __attribute__ ((vector_size (16)));
- typedef long __m128i __attribute__ ((__vector_size__ (16)));
- __m128i x, y;
- 
- __m128i
- WidenMulPairwiseAdd (__m128i a, __m128i b)
- {
-   y = (__m128i)__builtin_lsx_vmaddwod_w_h ((v4i32)x, (v8i16){}, (v8i16){});
-   return y;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121875.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121875.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr121875.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr121875.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -O2" } */
- 
- [[gnu::always_inline]] inline void f() {}
- [[gnu::target("lasx")]] int main() {f();}
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr122097.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr122097.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pr122097.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pr122097.c	Thu Jan  1 00:00:00 1970
***************
*** 1,271 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mabi=lp64d -mlsx" } */
- /* { dg-final { scan-assembler "vbitseti\.d\t\\\$vr\[0-9\]+,\\\$vr\[0-9\]+,63" } } */
- 
- typedef long unsigned int size_t;
- typedef unsigned char simde__mmask8;
- typedef long simde__m128i __attribute__ ((__aligned__ ((16))))
- __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
- typedef union
- {
- 
-   __attribute__ ((__aligned__ ((16)))) long i64
-       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
- } simde__m128i_private;
- typedef double simde_float64;
- typedef simde_float64 simde__m128d __attribute__ ((__aligned__ ((16))))
- __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
- typedef long int int_fast32_t;
- typedef union
- {
- 
-   __attribute__ ((__aligned__ ((16)))) int_fast32_t i32f
-       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
-   __attribute__ ((__aligned__ ((16)))) long i64
-       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
-   __attribute__ ((__aligned__ ((16)))) simde_float64 f64
-       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
- } simde__m128d_private;
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde__m128d_from_private (simde__m128d_private v)
- {
-   simde__m128d r;
-   __builtin_memcpy (&r, &v, sizeof (r));
-   return r;
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_mm_set_pd (simde_float64 e1, simde_float64 e0)
- {
- 
-   simde__m128d_private r_;
-   r_.f64[0] = e0;
-   r_.f64[1] = e1;
- 
-   return simde__m128d_from_private (r_);
- }
- __attribute__ ((__always_inline__)) inline static simde__m128i
- simde_mm_castpd_si128 (simde__m128d a)
- {
-   simde__m128i r;
-   __builtin_memcpy (&r, &a, sizeof (a));
-   return r;
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128i
- simde__m128i_from_private (simde__m128i_private v)
- {
-   simde__m128i r;
-   __builtin_memcpy (&r, &v, sizeof (r));
-   return r;
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128i_private
- simde__m128i_to_private (simde__m128i v)
- {
-   simde__m128i_private r;
-   __builtin_memcpy (&r, &v, sizeof (r));
-   return r;
- }
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_mm_castsi128_pd (simde__m128i a)
- {
-   simde__m128d r;
-   __builtin_memcpy (&r, &a, sizeof (a));
-   return r;
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128i
- simde_mm_mask_mov_epi64 (simde__m128i src, simde__mmask8 k, simde__m128i a)
- {
- 
-   simde__m128i_private src_ = simde__m128i_to_private (src),
-                        a_ = simde__m128i_to_private (a), r_;
- 
-   for (size_t i = 0; i < (sizeof (r_.i64) / sizeof (r_.i64[0])); i++)
-     {
-       r_.i64[i] = ((k >> i) & 1) ? a_.i64[i] : src_.i64[i];
-     }
- 
-   return simde__m128i_from_private (r_);
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_mm_mask_mov_pd (simde__m128d src, simde__mmask8 k, simde__m128d a)
- {
-   return simde_mm_castsi128_pd (simde_mm_mask_mov_epi64 (
-       simde_mm_castpd_si128 (src), k, simde_mm_castpd_si128 (a)));
- }
- 
- static double
- simde_test_f64_precision_to_slop (int precision)
- {
-   return __builtin_expect (!!(precision == 0x7fffffff), 0)
-              ? 0.0
-              : __builtin_pow (10.0, -((double)(precision)));
- }
- __attribute__ ((__always_inline__)) inline static void
- simde_mm_storeu_pd (simde_float64 *mem_addr, simde__m128d a)
- {
- 
-   __builtin_memcpy (mem_addr, &a, sizeof (a));
- }
- int simde_test_equal_f64 (simde_float64 a, simde_float64 b,
-                           simde_float64 slop);
- void simde_test_debug_printf_ (const char *format, ...);
- static int
- simde_assert_equal_vf64_ (size_t vec_len, simde_float64 const a[(vec_len)],
-                           simde_float64 const b[(vec_len)], simde_float64 slop,
-                           const char *filename, int line, const char *astr,
-                           const char *bstr)
- {
-   for (size_t i = 0; i < vec_len; i++)
-     {
-       if (__builtin_expect (!!(!simde_test_equal_f64 (a[i], b[i], slop)), 0))
-         {
-           simde_test_debug_printf_ (
-               "%s:%d: assertion failed: %s[%zu] ~= %s[%zu] (%f ~= %f)\n",
-               filename, line, astr, i, bstr, i, ((double)(a[i])),
-               ((double)(b[i])));
-           return 1;
-         }
-     }
-   return 0;
- }
- static int
- simde_test_x86_assert_equal_f64x2_ (simde__m128d a, simde__m128d b,
-                                     simde_float64 slop, const char *filename,
-                                     int line, const char *astr,
-                                     const char *bstr)
- {
-   simde_float64 a_[sizeof (a) / sizeof (simde_float64)],
-       b_[sizeof (a) / sizeof (simde_float64)];
-   simde_mm_storeu_pd (a_, a);
-   simde_mm_storeu_pd (b_, b);
-   return simde_assert_equal_vf64_ (sizeof (a_) / sizeof (a_[0]), a_, b_, slop,
-                                    filename, line, astr, bstr);
- }
- __attribute__ ((__always_inline__)) inline static simde__m128d_private
- simde__m128d_to_private (simde__m128d v)
- {
-   simde__m128d_private r;
-   __builtin_memcpy (&r, &v, sizeof (r));
-   return r;
- }
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_mm_min_pd (simde__m128d a, simde__m128d b)
- {
- 
-   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
-                            b_ = simde__m128d_to_private (b);
- 
-   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
-     {
-       r_.f64[i] = (a_.f64[i] < b_.f64[i]) ? a_.f64[i] : b_.f64[i];
-     }
- 
-   return simde__m128d_from_private (r_);
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_mm_max_pd (simde__m128d a, simde__m128d b)
- {
- 
-   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
-                            b_ = simde__m128d_to_private (b);
- 
-   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
-     {
-       r_.f64[i] = (a_.f64[i] > b_.f64[i]) ? a_.f64[i] : b_.f64[i];
-     }
- 
-   return simde__m128d_from_private (r_);
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_x_mm_abs_pd (simde__m128d a)
- {
- 
-   simde__m128d_private r_, a_ = simde__m128d_to_private (a);
-   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
-     {
-       r_.f64[i] = __builtin_fabs (a_.f64[i]);
-     }
- 
-   return simde__m128d_from_private (r_);
- }
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_mm_cmple_pd (simde__m128d a, simde__m128d b)
- {
- 
-   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
-                            b_ = simde__m128d_to_private (b);
- 
-   r_.i64 = ((__typeof__ (r_.i64))((a_.f64 <= b_.f64)));
-   return simde__m128d_from_private (r_);
- }
- 
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_x_mm_select_pd (simde__m128d a, simde__m128d b, simde__m128d mask)
- {
-   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
-                            b_ = simde__m128d_to_private (b),
-                            mask_ = simde__m128d_to_private (mask);
- 
-   r_.i64 = a_.i64 ^ ((a_.i64 ^ b_.i64) & mask_.i64);
-   return simde__m128d_from_private (r_);
- }
- simde__m128d simde_mm_cmpge_pd (simde__m128d a, simde__m128d b);
- 
- simde__m128d
- simde_x_mm_copysign_pd (simde__m128d dest, simde__m128d src)
- {
-   simde__m128d_private r_, dest_ = simde__m128d_to_private (dest),
-                            src_ = simde__m128d_to_private (src);
-   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
-     {
-       r_.f64[i] = __builtin_copysign (dest_.f64[i], src_.f64[i]);
-     }
- 
-   return simde__m128d_from_private (r_);
- }
- simde__m128d simde_mm_or_pd (simde__m128d a, simde__m128d b);
- 
- simde__m128d simde_mm_set1_pd (simde_float64 a);
- 
- __attribute__ ((__always_inline__)) inline static simde__m128d
- simde_mm_range_pd (simde__m128d a, simde__m128d b, int imm8)
- {
-   simde__m128d r;
- 
-   r = simde_x_mm_select_pd (
-       b, a, simde_mm_cmple_pd (simde_x_mm_abs_pd (a), simde_x_mm_abs_pd (b)));
- 
-   r = simde_x_mm_copysign_pd (r, a);
- 
-   return r;
- }
- int
- test_simde_mm_mask_range_pd (void)
- {
- 
-   simde__m128d src, a, b, e, r;
- 
-   src = simde_mm_set_pd (-2.92, -85.39);
-   a = simde_mm_set_pd (-47.59, -122.31);
-   b = simde_mm_set_pd (877.42, 69.15);
-   e = simde_mm_set_pd (-47.59, -69.15);
-   r = simde_mm_mask_mov_pd (src, 143, simde_mm_range_pd (a, b, 2));
-   do
-     {
-       if (simde_test_x86_assert_equal_f64x2_ (
-               r, e, simde_test_f64_precision_to_slop (1),
-               "../test/x86/avx512/range.c", 1454, "r", "e"))
-         {
-           return 1;
-         }
-     }
-   while (0);
- 
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pragma-push-pop.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pragma-push-pop.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/pragma-push-pop.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/pragma-push-pop.c	Thu Jan  1 00:00:00 1970
***************
*** 1,22 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx" } */
- /* { dg-final { scan-assembler-not "xvadd\\\.w" } } */
- /* { dg-final { scan-assembler "xvsll\\\.w" } } */
- 
- #include <lasxintrin.h>
- 
- extern v8i32 a, b, c;
- #pragma GCC push_options
- #pragma GCC target ("no-lasx")
- void
- test (void)
- {
-   a = b + c;
- }
- #pragma GCC pop_options
- 
- void
- test1 (void)
- {
-    c = __builtin_lasx_xvsll_w (a, b);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/prolog-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/prolog-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/prolog-opt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/prolog-opt.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* Test that LoongArch backend stack drop operation optimized.  */
- 
- /* { dg-do compile } */
- /* { dg-options "-O2 -mabi=lp64d -fno-stack-protector" } */
- /* { dg-final { scan-assembler "addi.d\t\\\$r3,\\\$r3,-16" } } */
- 
- extern int printf (char *, ...);
- 
- int main()
- {
-   char buf[1024 * 12];
-   printf ("%p\n", buf);
-   return 0;
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/recip-divf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/recip-divf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/recip-divf.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/recip-divf.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe" } */
- /* { dg-final { scan-assembler "frecipe.s" } } */
- 
- float
- foo(float a, float b)
- {
-   return a / b;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/recip-sqrtf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/recip-sqrtf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/recip-sqrtf.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/recip-sqrtf.c	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe" } */
- /* { dg-final { scan-assembler-times "frsqrte.s" 3 } } */
- 
- extern float sqrtf (float);
- 
- float
- foo1 (float a, float b)
- {
-   return a/sqrtf(b);
- }
- 
- float
- foo2 (float a, float b)
- {
-   return sqrtf(a/b);
- }
- 
- float
- foo3 (float a)
- {
-   return sqrtf(a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/relocs-symbol-noaddend.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/relocs-symbol-noaddend.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/relocs-symbol-noaddend.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/relocs-symbol-noaddend.c	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -mexplicit-relocs -fno-pic -O2 -mcmodel=normal" } */
- /* { dg-final { scan-assembler "pcalau12i.*%pc_hi20\\(\.LANCHOR0\\)\n" } } */
- /* { dg-final { scan-assembler "addi\.d.*%pc_lo12\\(\.LANCHOR0\\)\n" } } */
- /* { dg-final { scan-assembler "ldptr.d\t\\\$r4,.*,0\n" } } */
- /* { dg-final { scan-assembler "ld.d\t\\\$r5,.*,8\n" } } */
- /* { dg-final { scan-assembler-not  "\.LANCHOR0+8" } } */
- 
- 
- struct S
- {
-   char *a;
-   unsigned short int b;
- };
- 
- struct S s1;
- 
- void test(struct S);
- void test1(void)
- {
-   test(s1);
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/revb.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/revb.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/revb.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/revb.c	Thu Jan  1 00:00:00 1970
***************
*** 1,61 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- /*
- **t1:
- **	revb.2w	\$r4,\$r4
- **	slli.w	\$r4,\$r4,0
- **	jr	\$r1
- */
- unsigned int
- t1 (unsigned int x)
- {
-   return __builtin_bswap32 (x);
- }
- 
- /*
- **t2:
- **	revb.d	\$r4,\$r4
- **	jr	\$r1
- */
- unsigned long
- t2 (unsigned long x)
- {
-   return __builtin_bswap64 (x);
- }
- 
- /*
- **t3:
- **	revb.2h	\$r4,\$r4
- **	jr	\$r1
- */
- unsigned int
- t3 (unsigned int x)
- {
-   return (x >> 8) & 0xff00ff | (x << 8) & 0xff00ff00;
- }
- 
- /*
- **t4:
- **	revb.2w	\$r4,\$r4
- **	jr	\$r1
- */
- unsigned long
- t4 (unsigned long x)
- {
-   x = __builtin_bswap64 (x);
-   return x << 32 | x >> 32;
- }
- 
- /*
- **t5:
- **	revb.2h	\$r4,\$r4
- **	bstrpick.w	\$r4,\$r4,15,0
- **	jr	\$r1
- */
- unsigned short
- t5 (unsigned short x)
- {
-   return __builtin_bswap16 (x);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-rotr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-rotr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-rotr.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-rotr.c	Thu Jan  1 00:00:00 1970
***************
*** 1,9 ****
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
- /* { dg-final { scan-assembler "rotr\\.w" } } */
- 
- unsigned
- t (unsigned a, unsigned b)
- {
-   return a << b | a >> (32 - b);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-b.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-b.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-b.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-b.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "vrotr\\.b" 2 } } */
- /* { dg-final { scan-assembler-times "vneg\\.b" 1 } } */
- 
- #define TYPE char
- #include "rotl-with-vrotr-w.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-d.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-d.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "vrotr\\.d" 2 } } */
- /* { dg-final { scan-assembler-times "vneg\\.d" 1 } } */
- 
- #define TYPE long long
- #include "rotl-with-vrotr-w.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-h.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-h.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-h.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-h.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "vrotr\\.h" 2 } } */
- /* { dg-final { scan-assembler-times "vneg\\.h" 1 } } */
- 
- #define TYPE short
- #include "rotl-with-vrotr-w.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-w.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-w.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-w.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-vrotr-w.c	Thu Jan  1 00:00:00 1970
***************
*** 1,28 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "vrotr\\.w" 2 } } */
- /* { dg-final { scan-assembler-times "vneg\\.w" 1 } } */
- 
- #ifndef VLEN
- #define VLEN 16
- #endif
- 
- #ifndef TYPE
- #define TYPE int
- #endif
- 
- typedef unsigned TYPE V __attribute__ ((vector_size (VLEN)));
- V a, b, c;
- 
- void
- test (int x)
- {
-   b = a << x | a >> ((int)sizeof (TYPE) * __CHAR_BIT__ - x);
- }
- 
- void
- test2 (void)
- {
-   for (int i = 0; i < VLEN / sizeof (TYPE); i++)
-     c[i] = a[i] << b[i] | a[i] >> ((int)sizeof (TYPE) * __CHAR_BIT__ - b[i]);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-b.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-b.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-b.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-b.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "xvrotr\\.b" 2 } } */
- /* { dg-final { scan-assembler-times "xvneg\\.b" 1 } } */
- 
- #define VLEN 32
- #include "rotl-with-vrotr-b.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-d.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-d.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "xvrotr\\.d" 2 } } */
- /* { dg-final { scan-assembler-times "xvneg\\.d" 1 } } */
- 
- #define VLEN 32
- #include "rotl-with-vrotr-d.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-h.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-h.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-h.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-h.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "xvrotr\\.h" 2 } } */
- /* { dg-final { scan-assembler-times "xvneg\\.h" 1 } } */
- 
- #define VLEN 32
- #include "rotl-with-vrotr-h.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-w.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-w.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-w.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotl-with-xvrotr-w.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
- /* { dg-final { scan-assembler-times "xvrotr\\.w" 2 } } */
- /* { dg-final { scan-assembler-times "xvneg\\.w" 1 } } */
- 
- #define VLEN 32
- #include "rotl-with-vrotr-w.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotrw.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotrw.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/rotrw.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/rotrw.c	Thu Jan  1 00:00:00 1970
***************
*** 1,17 ****
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
- /* { dg-final { scan-assembler "rotr\\.w\t\\\$r4,\\\$r4,\\\$r5" } } */
- /* { dg-final { scan-assembler "rotri\\.w\t\\\$r4,\\\$r4,5" } } */
- /* { dg-final { scan-assembler-not "slli\\.w" } } */
- 
- unsigned
- rotr (unsigned a, unsigned b)
- {
-   return a >> b | a << 32 - b;
- }
- 
- unsigned
- rotri (unsigned a)
- {
-   return a >> 5 | a << 27;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sad-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sad-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sad-lasx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sad-lasx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,20 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
- 
- #define N 1024
- 
- #define TEST(SIGN)                                             \
-   SIGN char a_##SIGN[N], b_##SIGN[N];                          \
-   int f_##SIGN (void)                                          \
-   {                                                            \
-     int i, sum = 0;                                            \
-     for (i = 0; i < N; i++)                                    \
-       sum += __builtin_abs (a_##SIGN[i] - b_##SIGN[i]);;       \
-     return sum;                                                \
-   }
- 
- TEST(signed);
- TEST(unsigned);
- 
- /* { dg-final { scan-assembler {\txvabsd.bu\t} } } */
- /* { dg-final { scan-assembler {\txvabsd.b\t} } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sad-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sad-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sad-lsx.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sad-lsx.c	Thu Jan  1 00:00:00 1970
***************
*** 1,20 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlsx" } */
- 
- #define N 1024
- 
- #define TEST(SIGN)                                             \
-   SIGN char a_##SIGN[N], b_##SIGN[N];                          \
-   int f_##SIGN (void)                                          \
-   {                                                            \
-     int i, sum = 0;                                            \
-     for (i = 0; i < N; i++)                                    \
-       sum += __builtin_abs (a_##SIGN[i] - b_##SIGN[i]);;       \
-     return sum;                                                \
-   }
- 
- TEST(signed);
- TEST(unsigned);
- 
- /* { dg-final { scan-assembler {\tvabsd.bu\t} } } */
- /* { dg-final { scan-assembler {\tvabsd.b\t} } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,25 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2" } */
- /* { dg-final { scan-assembler-times "slli.w" 1 } } */
- 
- extern int PL_savestack_ix;
- extern int PL_regsize;
- extern int PL_savestack_max;
- void Perl_savestack_grow_cnt (int need);
- extern void Perl_croak (char *);
- 
- int
- S_regcppush(int parenfloor)
- {
-   int retval = PL_savestack_ix;
-   int paren_elems_to_push = (PL_regsize - parenfloor) * 4;
-   int p;
- 
-   if (paren_elems_to_push < 0)
-     Perl_croak ("panic: paren_elems_to_push < 0");
- 
-   if (PL_savestack_ix + (paren_elems_to_push + 6) > PL_savestack_max)
-     Perl_savestack_grow_cnt (paren_elems_to_push + 6);
- 
-   return retval;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,60 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-expand" } */
- /* { dg-final { scan-rtl-dump "subreg/s" "expand" } } */
- /* { dg-final { scan-assembler-not "slli.w\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,0" } } */
- 
- #include <stdint.h>
- #define my_min(x, y) ((x) < (y) ? (x) : (y))
- 
- void
- bt_skip_func (const uint32_t len_limit, const uint32_t pos,
-               const uint8_t *const cur, uint32_t cur_match,
-               uint32_t *const son, const uint32_t cyclic_pos,
-               const uint32_t cyclic_size)
- {
-   uint32_t *ptr0 = son + (cyclic_pos << 1) + 1;
-   uint32_t *ptr1 = son + (cyclic_pos << 1);
- 
-   uint32_t len0 = 0;
-   uint32_t len1 = 0;
- 
-   while (1)
-     {
-       const uint32_t delta = pos - cur_match;
-       uint32_t *pair
-           = son
-             + ((cyclic_pos - delta + (delta > cyclic_pos ? cyclic_size : 0))
-                << 1);
-       const uint8_t *pb = cur - delta;
-       uint32_t len = my_min (len0, len1);
- 
-       if (pb[len] == cur[len])
-         {
-           while (++len != len_limit)
-             if (pb[len] != cur[len])
-               break;
- 
-           if (len == len_limit)
-             {
-               *ptr1 = pair[0];
-               *ptr0 = pair[1];
-               return;
-             }
-         }
- 
-       if (pb[len] < cur[len])
-         {
-           *ptr1 = cur_match;
-           ptr1 = pair + 1;
-           cur_match = *ptr1;
-           len1 = len;
-         }
-       else
-         {
-           *ptr0 = cur_match;
-           ptr0 = pair;
-           cur_match = *ptr0;
-           len0 = len;
-         }
-     }
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-3.c	Thu Jan  1 00:00:00 1970
***************
*** 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);
-     }
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-4.c	Thu Jan  1 00:00:00 1970
***************
*** 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;
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-5.c	Thu Jan  1 00:00:00 1970
***************
*** 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;
-     }
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-6.c	Thu Jan  1 00:00:00 1970
***************
*** 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;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-bitwise.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-bitwise.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign-extend-bitwise.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign-extend-bitwise.c	Thu Jan  1 00:00:00 1970
***************
*** 1,21 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2" } */
- /* { dg-final { scan-assembler-not "slli.w\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,0" } } */
- 
- struct pmop
- {
-   unsigned int op_pmflags;
-   unsigned int op_pmpermflags;
- };
- unsigned int PL_hints;
- 
- struct pmop *pmop;
- void
- Perl_newPMOP (int type, int flags)
- {
-   if (PL_hints & 0x00100000)
-     pmop->op_pmpermflags |= 0x0001;
-   if (PL_hints & 0x00000004)
-     pmop->op_pmpermflags |= 0x0800;
-   pmop->op_pmflags = pmop->op_pmpermflags;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign_extend_ashift.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign_extend_ashift.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sign_extend_ashift.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sign_extend_ashift.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile { target { loongarch64*-*-* } } } */
- /* { dg-options "-O3" } */
- /* { dg-final { scan-assembler "slli\\.w" } } */
- /* { dg-final { scan-assembler-not "slli\\.d" } } */
- /* { dg-final { scan-assembler-not "ext\\.w\\.b" } } */
- 
- unsigned int
- test (unsigned int id)
- {
-   return id << 24;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/slt-sign-extend.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/slt-sign-extend.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/slt-sign-extend.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/slt-sign-extend.c	Thu Jan  1 00:00:00 1970
***************
*** 1,14 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2" } */
- /* { dg-final { scan-assembler-not "slli.w" } } */
- 
- extern int src1, src2, src3;
- 
- int
- test (void)
- {
-   int data1 = src1 + src2;
-   int data2 = src1 + src3;
- 
-   return data1 > data2 ? data1 : data2;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/smuldi3_highpart.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/smuldi3_highpart.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/smuldi3_highpart.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/smuldi3_highpart.c	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- /* { dg-do compile } */
- /* { dg-options "-mabi=lp64d -O2 -fdump-rtl-expand-all" } */
- 
- typedef int TI __attribute ((mode(TI)));
- typedef int DI __attribute__((mode(DI)));
- 
- DI
- test (DI x, DI y)
- {
-   return ((TI)x * y) >> 64;
- }
- 
- /* { dg-final { scan-rtl-dump "highparttmp" "expand" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/spill-less.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/spill-less.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/spill-less.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/spill-less.c	Thu Jan  1 00:00:00 1970
***************
*** 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" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sqrtf.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sqrtf.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/sqrtf.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/sqrtf.c	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -ffast-math -mrecip -mfrecipe -fno-unsafe-math-optimizations" } */
- /* { dg-final { scan-assembler-times "fsqrt.s" 3 } } */
- /* { dg-final { scan-assembler-not "frsqrte.s" } } */
- 
- extern float sqrtf (float);
- 
- float
- foo1 (float a, float b)
- {
-   return a/sqrtf(b);
- }
- 
- float
- foo2 (float a, float b)
- {
-   return sqrtf(a/b);
- }
- 
- float
- foo3 (float a)
- {
-   return sqrtf(a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/strict-align.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/strict-align.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/strict-align.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/strict-align.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-Ofast -mstrict-align -mlasx" } */
- /* { dg-final { scan-assembler-not "vfadd.s" } } */
- 
- void
- foo (float *restrict x, float *restrict y)
- {
-   x[0] = x[0] + y[0];
-   x[1] = x[1] + y[1];
-   x[2] = x[2] + y[2];
-   x[3] = x[3] + y[3];
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/switch-qi.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/switch-qi.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/switch-qi.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/switch-qi.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d" } */
- /* { dg-final { scan-assembler-not "bstrpick" } } */
- 
- /* Test for loongarch_extend_comparands patch.  */
- extern void asdf (int);
- void
- foo (signed char x) {
-     switch (x) {
-       case 0: asdf (10); break;
-       case 1: asdf (11); break;
-       case 2: asdf (12); break;
-       case 3: asdf (13); break;
-       case 4: asdf (14); break;
-     }
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-extreme-macro.c	Thu Jan  1 00:00:00 1970
***************
*** 1,35 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -O2 -mcmodel=extreme -mtls-dialect=trad -fno-plt -mexplicit-relocs=none -fPIC" } */
- /* { dg-final { scan-assembler "test_le:.*la.tls.le\t\\\$r\[0-9\]+,c" { target tls_native } } } */
- /* { dg-final { scan-assembler "test_ie:.*la.tls.ie\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,d" { target tls_native } } } */
- /* { dg-final { scan-assembler "test_ld:.*la.tls.ld\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,e.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */
- /* { dg-final { scan-assembler "test_le:.*la.tls.gd\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,f.*la.global\t\\\$r\[0-9\]+,\\\$r\[0-9\]+,__tls_get_addr" { target tls_native } } } */
- 
- __thread int c __attribute__ ((tls_model ("local-exec")));
- __thread int d __attribute__ ((tls_model ("initial-exec")));
- __thread int e __attribute__ ((tls_model ("local-dynamic")));
- __thread int f __attribute__ ((tls_model ("global-dynamic")));
- 
- int
- test_le (void)
- {
-   return c;
- }
- 
- int
- test_ie (void)
- {
-   return d;
- }
- 
- int
- test_ld (void)
- {
-   return e;
- }
- 
- int
- test_gd (void)
- {
-   return f;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-gd-noplt.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O0 -fno-plt -mcmodel=normal -mtls-dialect=trad -mexplicit-relocs -fPIC" } */
- /* { dg-final { scan-assembler "pcalau12i\t.*%got_pc_hi20\\(__tls_get_addr\\)\n\tld\.d.*%got_pc_lo12\\(__tls_get_addr\\)" { target tls_native } } } */
- 
- __attribute__ ((tls_model ("global-dynamic"))) __thread int a;
- 
- void
- test (void)
- {
-   a = 10;
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-ie-extreme.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-ie-extreme.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-ie-extreme.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-ie-extreme.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mabi=lp64d -mcmodel=extreme -mexplicit-relocs=auto -mrelax" } */
- /* { dg-final { scan-assembler-not "R_LARCH_RELAX" { target tls_native } } } */
- 
- #include "tls-ie-relax.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-ie-norelax.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-ie-norelax.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-ie-norelax.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-ie-norelax.c	Thu Jan  1 00:00:00 1970
***************
*** 1,5 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs -mno-relax" } */
- /* { dg-final { scan-assembler-not "R_LARCH_RELAX" { target tls_native } } } */
- 
- #include "tls-ie-relax.c"
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-ie-relax.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-ie-relax.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-ie-relax.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-ie-relax.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs -mrelax" } */
- /* { dg-final { scan-assembler-times "R_LARCH_RELAX" 2 { target tls_native } } } */
- 
- extern __thread int errno;
- 
- void
- unimplemented (void)
- {
-   errno = -38;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-le-relax.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-le-relax.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/tls-le-relax.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/tls-le-relax.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mcmodel=normal -mexplicit-relocs" } */
- /* { dg-final { scan-assembler "%le_add_r" { target tls_le_relax } } } */
- 
- __attribute__ ((tls_model ("local-exec"))) __thread int a;
- 
- void
- test (void)
- {
-   a = 10;
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_128.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_128.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_128.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_128.c	Thu Jan  1 00:00:00 1970
***************
*** 1,120 ****
- /* { dg-do compile } */
- /* { dg-options "-mlsx -O3" } */
- 
- #define N 128
- 
- char c[N];
- short int h[N];
- int s[N];
- long l[N];
- float f[N];
- double d[N];
- unsigned char uc[N];
- unsigned short int uh[N];
- unsigned int us[N];
- unsigned long ul[N];
- 
- /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v2df:.*\tvftintrz\\.l\\.d.*-test_vec_pack_sfix_trunc_v2df\n" } } */
- /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v2df:.*\tvpickev\\.w.*-test_vec_pack_sfix_trunc_v2df\n" } } */
- /* { dg-final { scan-assembler "test_vec_pack_sfix_trunc_v2df:.*\tvftintrz\\.w\\.d.*-test_vec_pack_sfix_trunc_v2df\n" } } */
- void
- test_vec_pack_sfix_trunc_v2df (void)
- {
-   for (int i = 0; i < N; i++)
-     s[i] = d[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_packs_float_v2di:.*\tmovgr2fr\\.d.*-test_vec_packs_float_v2di" } } */
- /* { dg-final { scan-assembler "test_vec_packs_float_v2di:.*\tvffint\\.s\\.l.*-test_vec_packs_float_v2di" } } */
- void
- test_vec_packs_float_v2di (void)
- {
-   for (int i = 0; i < N; i++)
-     f[i] = l[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpack_sfix_trunc_hi_lo_v4sf:.*\tftintrz\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v4sf" } } */
- /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v4sf:.*\tvftintrzh\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v4sf" } } */
- /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v4sf:.*\tvftintrzl\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v4sf" } } */
- void
- test_vec_unpack_sfix_trunc_hi_lo_v4sf (void)
- {
-   for (int i = 0; i < N; i++)
-     l[i] = f[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvslti\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
- /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvilvl\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
- /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvilvh\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
- /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvffint\\.d\\.l.*-test_vec_unpacks_float_hi_lo_v4si" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v4si:.*\tvffinth\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v4si:.*\tvffintl\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
- void
- test_vec_unpacks_float_hi_lo_v4si (void)
- {
-   for (int i = 0; i < N; i++)
-     d[i] = s[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v4si:.*\tvilvh\\.w.*-test_vec_unpacks_hi_lo_v4si" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v4si:.*\tvexth\\.d\\.w.*-test_vec_unpacks_hi_lo_v4si" } } */
- void
- test_vec_unpacks_hi_lo_v4si (void)
- {
-   for (int i = 0; i < N; i++)
-     l[i] = s[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v8hi:.*\tvilvh\\.h.*-test_vec_unpacks_hi_lo_v8hi" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8hi:.*\tvexth\\.w\\.h.*-test_vec_unpacks_hi_lo_v8hi" } } */
- void
- test_vec_unpacks_hi_lo_v8hi (void)
- {
-   for (int i = 0; i < N; i++)
-     s[i] = h[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v16qi:.*\tvilvh\\.b.*-test_vec_unpacks_hi_lo_v16qi" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v16qi:.*\tvexth\\.h\\.b.*-test_vec_unpacks_hi_lo_v16qi" } } */
- void
- test_vec_unpacks_hi_lo_v16qi (void)
- {
-   for (int i = 0; i < N; i++)
-     h[i] = c[i];
- }
- 
- /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v4sf:.*\tvfcvtl\\.d\\.s.*-test_vec_unpacks_hi_lo_v4sf" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v4sf:.*\tvfcvth\\.d\\.s.*-test_vec_unpacks_hi_lo_v4sf" } } */
- void
- test_vec_unpacks_hi_lo_v4sf (void)
- {
-   for (int i = 0; i < N; i++)
-     d[i] = f[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v4si:.*\tvilvh\\.w.*-test_vec_unpacku_hi_lo_v4si" } } */
- /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v4si:.*\tvexth\\.du\\.wu.*-test_vec_unpacku_hi_lo_v4si" } } */
- void
- test_vec_unpacku_hi_lo_v4si (void)
- {
-   for (int i = 0; i < N; i++)
-     ul[i] = us[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v8hi:.*\tvilvh\\.h.*-test_vec_unpacku_hi_lo_v8hi" } } */
- /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v8hi:.*\tvexth\\.wu\\.hu.*-test_vec_unpacku_hi_lo_v8hi" } } */
- void
- test_vec_unpacku_hi_lo_v8hi (void)
- {
-   for (int i = 0; i < N; i++)
-     us[i] = uh[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v16qi:.*\tvilvh\\.b.*-test_vec_unpacku_hi_lo_v16qi" } } */
- /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v16qi:.*\tvexth\\.hu\\.bu.*-test_vec_unpacku_hi_lo_v16qi" } } */
- void
- test_vec_unpacku_hi_lo_v16qi (void)
- {
-   for (int i = 0; i < N; i++)
-     uh[i] = uc[i];
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vec_pack_unpack_256.c	Thu Jan  1 00:00:00 1970
***************
*** 1,124 ****
- /* { dg-do compile } */
- /* { dg-options "-mlasx -O3" } */
- 
- #define N 128
- 
- char c[N];
- short int h[N];
- int s[N];
- long l[N];
- float f[N];
- double d[N];
- unsigned char uc[N];
- unsigned short int uh[N];
- unsigned int us[N];
- unsigned long ul[N];
- 
- /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v4df:.*\txvftintrz\\.l\\.d.*-test_vec_pack_sfix_trunc_v4df\n" } } */
- /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v4df:.*\txvpickev\\.w.*-test_vec_pack_sfix_trunc_v4df\n" } } */
- /* { dg-final { scan-assembler "test_vec_pack_sfix_trunc_v4df:.*\txvftintrz\\.w\\.d.*-test_vec_pack_sfix_trunc_v4df\n" } } */
- void
- test_vec_pack_sfix_trunc_v4df (void)
- {
-   for (int i = 0; i < N; i++)
-     s[i] = d[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_packs_float_v4di:.*\tmovgr2fr\\.d.*-test_vec_packs_float_v4di" } } */
- /* { dg-final { scan-assembler "test_vec_packs_float_v4di:.*\txvffint\\.s\\.l.*-test_vec_packs_float_v4di" } } */
- void
- test_vec_packs_float_v4di (void)
- {
-   for (int i = 0; i < N; i++)
-     f[i] = l[i];
- }
- 
- /* { dg-final { scan-assembler-not "test_vec_unpack_sfix_trunc_hi_lo_v8sf:.*\tftintrz\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v8sf" } } */
- /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v8sf:.*\txvftintrzh\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v8sf" } } */
- /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v8sf:.*\txvftintrzl\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v8sf" } } */
- void
- test_vec_unpack_sfix_trunc_hi_lo_v8sf (void)
- {
-   for (int i = 0; i < N; i++)
-     l[i] = f[i];
- }
- 
- /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\txvpermi\\.d.*-test_vec_unpacks_float_hi_lo_v8si" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\tvext2xv\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v8si" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\txvffint\\.d\\.l.*-test_vec_unpacks_float_hi_lo_v8si" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\txvffinth\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v8si" } } */
- void
- test_vec_unpacks_float_hi_lo_v8si (void)
- {
-   for (int i = 0; i < N; i++)
-     d[i] = s[i];
- }
- 
- /* { 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)
- {
-   for (int i = 0; i < N; i++)
-     l[i] = s[i];
- }
- 
- /* { 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)
- {
-   for (int i = 0; i < N; i++)
-     s[i] = h[i];
- }
- 
- /* { 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)
- {
-   for (int i = 0; i < N; i++)
-     h[i] = c[i];
- }
- 
- /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8sf:.*\txvfcvtl\\.d\\.s.*-test_vec_unpacks_hi_lo_v8sf" } } */
- /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8sf:.*\txvpermi\\.d.*-test_vec_unpacks_hi_lo_v8sf" } } */
- void
- test_vec_unpacks_hi_lo_v8sf (void)
- {
-   for (int i = 0; i < N; i++)
-     d[i] = f[i];
- }
- 
- /* { 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)
- {
-   for (int i = 0; i < N; i++)
-     ul[i] = us[i];
- }
- 
- /* { 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)
- {
-   for (int i = 0; i < N; i++)
-     us[i] = uh[i];
- }
- 
- /* { 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)
- {
-   for (int i = 0; i < N; i++)
-     uh[i] = uc[i];
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vec_reduc_half.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vec_reduc_half.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vec_reduc_half.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vec_reduc_half.c	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -ffast-math -mlasx" } */
- 
- double
- foo_1 (double *a, double *b)
- {
-   return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
- }
- 
- /* { dg-final { scan-assembler-times "xvpermi.d" 1} } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-extract.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-extract.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-extract.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-extract.c	Thu Jan  1 00:00:00 1970
***************
*** 1,20 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -ffast-math -mlasx -fno-vect-cost-model -fno-unroll-loops" } */
- /* { dg-final { scan-assembler-not "xvpickve.w" } } */
- /* { dg-final { scan-assembler-not "xvpickve.d" } } */
- 
- float
- sum_float (float *a, int n) {
-   float res = 0.0;
-   for (int i = 0; i < n; i++)
-     res += a[i];
-   return res;
- }
- 
- double
- sum_double (double *a, int n) {
-   double res = 0.0;
-   for (int i = 0; i < n; i++)
-     res += a[i];
-   return res;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint-no-inexact.c	Thu Jan  1 00:00:00 1970
***************
*** 1,48 ****
- /* { 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"
- 
- /* ceil */
- /* { dg-final { scan-assembler "bl\t%plt\\(ceil\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(ceilf\\)" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrp\.s" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrp\.d" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrp\.s" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrp\.d" } } */
- 
- /* floor */
- /* { dg-final { scan-assembler "bl\t%plt\\(floor\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(floorf\\)" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrm\.s" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrm\.d" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrm\.s" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrm\.d" } } */
- 
- /* nearbyint + rint: Only rint is allowed */
- /* { dg-final { scan-assembler "bl\t%plt\\(nearbyint\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(nearbyintf\\)" } } */
- /* { dg-final { scan-assembler-times "\tvfrint\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\tvfrint\.d" 1 } } */
- /* { dg-final { scan-assembler-times "\txvfrint\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\txvfrint\.d" 1 } } */
- 
- /* round: we don't have a corresponding instruction */
- /* { dg-final { scan-assembler "bl\t%plt\\(round\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
- 
- /* roundeven */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundeven\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundevenf\\)" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrne\.s" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrne\.d" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrne\.s" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrne\.d" } } */
- 
- /* trunc */
- /* { dg-final { scan-assembler "bl\t%plt\\(trunc\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(truncf\\)" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrz\.s" } } */
- /* { dg-final { scan-assembler-not "\tvfrintrz\.d" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrz\.s" } } */
- /* { dg-final { scan-assembler-not "\txvfrintrz\.d" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar-no-inexact.c	Thu Jan  1 00:00:00 1970
***************
*** 1,23 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fno-fp-int-builtin-inexact -mcmodel=normal" } */
- 
- #include "vect-frint-scalar.c"
- 
- /* cannot use LSX for these with -fno-fp-int-builtin-inexact,
-    call library function.  */
- /* { dg-final { scan-assembler "\tb\t%plt\\(ceil\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(ceilf\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(floor\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(floorf\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(trunc\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(truncf\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(roundeven\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(roundevenf\\)" } } */
- 
- /* nearbyint is not allowed to rasie FE_INEXACT for decades */
- /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyint\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyintf\\)" } } */
- 
- /* rint should just use basic FP operation */
- /* { dg-final { scan-assembler "\tfrint\.s" } } */
- /* { dg-final { scan-assembler "\tfrint\.d" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint-scalar.c	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -ffp-int-builtin-inexact -mcmodel=normal" } */
- 
- #define test(func, suffix) \
- __typeof__ (1.##suffix) \
- _##func##suffix (__typeof__ (1.##suffix) x) \
- { \
-   return __builtin_##func##suffix (x); \
- }
- 
- test (ceil, f)
- test (ceil, )
- test (floor, f)
- test (floor, )
- test (trunc, f)
- test (trunc, )
- test (roundeven, f)
- test (roundeven, )
- test (nearbyint, f)
- test (nearbyint, )
- test (rint, f)
- test (rint, )
- 
- /* { dg-final { scan-assembler "\tvfrintrp\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrm\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrz\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrne\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrp\.d" } } */
- /* { dg-final { scan-assembler "\tvfrintrm\.d" } } */
- /* { dg-final { scan-assembler "\tvfrintrz\.d" } } */
- /* { dg-final { scan-assembler "\tvfrintrne\.d" } } */
- 
- /* must do vreplvei first */
- /* { dg-final { scan-assembler-times "\tvreplvei\.w\t\\\$vr0,\\\$vr0,0" 4 } } */
- /* { dg-final { scan-assembler-times "\tvreplvei\.d\t\\\$vr0,\\\$vr0,0" 4 } } */
- 
- /* nearbyint is not allowed to rasie FE_INEXACT for decades */
- /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyint\\)" } } */
- /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyintf\\)" } } */
- 
- /* rint should just use basic FP operation */
- /* { dg-final { scan-assembler "\tfrint\.s" } } */
- /* { dg-final { scan-assembler "\tfrint\.d" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-frint.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-frint.c	Thu Jan  1 00:00:00 1970
***************
*** 1,85 ****
- /* { 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];
- 
- float x[8];
- double y[4];
- 
- #define TEST(op, N, func) \
- void \
- test_##op##_##N##_##func () \
- { \
-   for (int i = 0; i < N; i++) \
-     out_##op[i] = __builtin_##func (op[i]); \
- }
- 
- TEST(x, 4, ceilf);
- TEST(x, 4, floorf);
- TEST(x, 4, nearbyintf);
- TEST(x, 4, rintf);
- TEST(x, 4, roundf);
- TEST(x, 4, roundevenf);
- TEST(x, 4, truncf);
- 
- TEST(x, 8, ceilf);
- TEST(x, 8, floorf);
- TEST(x, 8, nearbyintf);
- TEST(x, 8, rintf);
- TEST(x, 8, roundf);
- TEST(x, 8, roundevenf);
- TEST(x, 8, truncf);
- 
- TEST(y, 2, ceil);
- TEST(y, 2, floor);
- TEST(y, 2, nearbyint);
- TEST(y, 2, rint);
- TEST(y, 2, round);
- TEST(y, 2, roundeven);
- TEST(y, 2, trunc);
- 
- TEST(y, 4, ceil);
- TEST(y, 4, floor);
- TEST(y, 4, nearbyint);
- TEST(y, 4, rint);
- TEST(y, 4, round);
- TEST(y, 4, roundeven);
- TEST(y, 4, trunc);
- 
- /* ceil */
- /* { dg-final { scan-assembler "\tvfrintrp\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrp\.d" } } */
- /* { dg-final { scan-assembler "\txvfrintrp\.s" } } */
- /* { dg-final { scan-assembler "\txvfrintrp\.d" } } */
- 
- /* floor */
- /* { dg-final { scan-assembler "\tvfrintrm\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrm\.d" } } */
- /* { dg-final { scan-assembler "\txvfrintrm\.s" } } */
- /* { dg-final { scan-assembler "\txvfrintrm\.d" } } */
- 
- /* rint and nearbyint
-    nearbyint has been disallowed to raise FE_INEXACT for decades.  */
- /* { dg-final { scan-assembler-times "\tvfrint\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\tvfrint\.d" 1 } } */
- /* { dg-final { scan-assembler-times "\txvfrint\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\txvfrint\.d" 1 } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(nearbyint\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(nearbyintf\\)" } } */
- 
- /* round: we don't have a corresponding instruction */
- /* { dg-final { scan-assembler "bl\t%plt\\(round\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
- 
- /* roundeven */
- /* { dg-final { scan-assembler "\tvfrintrne\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrne\.d" } } */
- /* { dg-final { scan-assembler "\txvfrintrne\.s" } } */
- /* { dg-final { scan-assembler "\txvfrintrne\.d" } } */
- 
- /* trunc */
- /* { dg-final { scan-assembler "\tvfrintrz\.s" } } */
- /* { dg-final { scan-assembler "\tvfrintrz\.d" } } */
- /* { dg-final { scan-assembler "\txvfrintrz\.s" } } */
- /* { dg-final { scan-assembler "\txvfrintrz\.d" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-ftint-no-inexact.c	Thu Jan  1 00:00:00 1970
***************
*** 1,43 ****
- /* { 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"
- 
- /* ceil */
- /* { dg-final { scan-assembler "bl\t%plt\\(ceil\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(ceilf\\)" } } */
- /* { dg-final { scan-assembler-not "\tvftintrp\.w\.s" } } */
- /* { dg-final { scan-assembler-not "\tvftintrp\.l\.d" } } */
- /* { dg-final { scan-assembler-not "\txvftintrp\.w\.s" } } */
- /* { dg-final { scan-assembler-not "\txvftintrp\.l\.d" } } */
- 
- /* floor */
- /* { dg-final { scan-assembler "bl\t%plt\\(floor\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(floorf\\)" } } */
- /* { dg-final { scan-assembler-not "\tvftintrm\.w\.s" } } */
- /* { dg-final { scan-assembler-not "\tvftintrm\.l\.d" } } */
- /* { dg-final { scan-assembler-not "\txvftintrm\.w\.s" } } */
- /* { dg-final { scan-assembler-not "\txvftintrm\.l\.d" } } */
- 
- /* nearbyint + rint */
- /* { dg-final { scan-assembler "bl\t%plt\\(floor\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(floorf\\)" } } */
- /* { dg-final { scan-assembler-times "\tvftint\.w\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\tvftint\.l\.d" 1 } } */
- /* { dg-final { scan-assembler-times "\txvftint\.w\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\txvftint\.l\.d" 1 } } */
- 
- /* round: we don't have a corresponding instruction */
- /* { dg-final { scan-assembler "bl\t%plt\\(lround\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
- 
- /* roundeven */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundeven\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundevenf\\)" } } */
- /* { dg-final { scan-assembler-not "\tvftintrne\.w\.s" } } */
- /* { dg-final { scan-assembler-not "\tvftintrne\.l\.d" } } */
- /* { dg-final { scan-assembler-not "\txvftintrne\.w\.s" } } */
- /* { dg-final { scan-assembler-not "\txvftintrne\.l\.d" } } */
- 
- /* { dg-final { scan-assembler "bl\t%plt\\(trunc\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(truncf\\)" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-ftint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-ftint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-ftint.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-ftint.c	Thu Jan  1 00:00:00 1970
***************
*** 1,83 ****
- /* { 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];
- 
- float x[8];
- double y[4];
- 
- #define TEST(op, N, func) \
- void \
- test_##op##_##N##_##func () \
- { \
-   for (int i = 0; i < N; i++) \
-     out_##op[i] = __builtin_##func (op[i]); \
- }
- 
- TEST(x, 4, ceilf);
- TEST(x, 4, floorf);
- TEST(x, 4, nearbyintf);
- TEST(x, 4, rintf);
- TEST(x, 4, roundf);
- TEST(x, 4, roundevenf);
- TEST(x, 4, truncf);
- 
- TEST(x, 8, ceilf);
- TEST(x, 8, floorf);
- TEST(x, 8, nearbyintf);
- TEST(x, 8, rintf);
- TEST(x, 8, roundf);
- TEST(x, 8, roundevenf);
- TEST(x, 8, truncf);
- 
- TEST(y, 2, ceil);
- TEST(y, 2, floor);
- TEST(y, 2, nearbyint);
- TEST(y, 2, rint);
- TEST(y, 2, round);
- TEST(y, 2, roundeven);
- TEST(y, 2, trunc);
- 
- TEST(y, 4, ceil);
- TEST(y, 4, floor);
- TEST(y, 4, nearbyint);
- TEST(y, 4, rint);
- TEST(y, 4, round);
- TEST(y, 4, roundeven);
- TEST(y, 4, trunc);
- 
- /* ceil */
- /* { dg-final { scan-assembler "\tvftintrp\.w\.s" } } */
- /* { dg-final { scan-assembler "\tvftintrp\.l\.d" } } */
- /* { dg-final { scan-assembler "\txvftintrp\.w\.s" } } */
- /* { dg-final { scan-assembler "\txvftintrp\.l\.d" } } */
- 
- /* floor */
- /* { dg-final { scan-assembler "\tvftintrm\.w\.s" } } */
- /* { dg-final { scan-assembler "\tvftintrm\.l\.d" } } */
- /* { dg-final { scan-assembler "\txvftintrm\.w\.s" } } */
- /* { dg-final { scan-assembler "\txvftintrm\.l\.d" } } */
- 
- /* rint and nearbyint
-    nearbyint has been disallowed to raise FE_INEXACT for decades.  */
- /* { dg-final { scan-assembler-times "\tvftint\.w\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\tvftint\.l\.d" 1 } } */
- /* { dg-final { scan-assembler-times "\txvftint\.w\.s" 1 } } */
- /* { dg-final { scan-assembler-times "\txvftint\.l\.d" 1 } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(nearbyint\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(nearbyintf\\)" } } */
- 
- /* round: we don't have a corresponding instruction */
- /* { dg-final { scan-assembler "bl\t%plt\\(lround\\)" } } */
- /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
- 
- /* roundeven */
- /* { dg-final { scan-assembler "\tvftintrne\.w\.s" } } */
- /* { dg-final { scan-assembler "\tvftintrne\.l\.d" } } */
- /* { dg-final { scan-assembler "\txvftintrne\.w\.s" } } */
- /* { dg-final { scan-assembler "\txvftintrne\.l\.d" } } */
- 
- /* trunc */
- /* { dg-final { scan-assembler-not "bl\t%plt\\(trunc\\)" } } */
- /* { dg-final { scan-assembler-not "bl\t%plt\\(truncf\\)" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-ld-st-imm12.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-ld-st-imm12.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-ld-st-imm12.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-ld-st-imm12.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-march=loongarch64 -mabi=lp64d -mlasx -O2" } */
- /* { dg-final { scan-assembler-not "addi.d" } } */
- 
- extern short a[1000];
- extern short b[1000];
- extern short c[1000];
- 
- void
- test (void)
- {
-   for (int i = 501; i < 517; i++)
-     ((int *)(c + 1))[i] = ((int *)(a + 1))[i] + ((int *)(b + 1))[i];
- }
- 
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-muh.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-muh.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-muh.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-muh.c	Thu Jan  1 00:00:00 1970
***************
*** 1,36 ****
- /* { dg-do compile } */
- /* { dg-options "-mlasx -O3" } */
- /* { dg-final { scan-assembler "\tvmuh\.w\t" } } */
- /* { dg-final { scan-assembler "\tvmuh\.wu\t" } } */
- /* { dg-final { scan-assembler "\txvmuh\.w\t" } } */
- /* { dg-final { scan-assembler "\txvmuh\.wu\t" } } */
- 
- int a[8], b[8], c[8];
- 
- void
- test1 (void)
- {
-   for (int i = 0; i < 4; i++)
-     c[i] = ((long)a[i] * (long)b[i]) >> 32;
- }
- 
- void
- test2 (void)
- {
-   for (int i = 0; i < 4; i++)
-     c[i] = ((long)(unsigned)a[i] * (long)(unsigned)b[i]) >> 32;
- }
- 
- void
- test3 (void)
- {
-   for (int i = 0; i < 8; i++)
-     c[i] = ((long)a[i] * (long)b[i]) >> 32;
- }
- 
- void
- test4 (void)
- {
-   for (int i = 0; i < 8; i++)
-     c[i] = ((long)(unsigned)a[i] * (long)(unsigned)b[i]) >> 32;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-rotr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-rotr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-rotr.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-rotr.c	Thu Jan  1 00:00:00 1970
***************
*** 1,36 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx" } */
- /* { dg-final { scan-assembler "\tvrotr\.w\t" } } */
- /* { dg-final { scan-assembler "\txvrotr\.w\t" } } */
- /* { dg-final { scan-assembler "\tvrotri\.w\t\[^\n\]*7\n" } } */
- /* { dg-final { scan-assembler "\txvrotri\.w\t\[^\n\]*7\n" } } */
- 
- unsigned int a[8], b[8];
- 
- void
- test1 (void)
- {
-   for (int i = 0; i < 4; i++)
-     a[i] = a[i] >> b[i] | a[i] << (32 - b[i]);
- }
- 
- void
- test2 (void)
- {
-   for (int i = 0; i < 8; i++)
-     a[i] = a[i] >> b[i] | a[i] << (32 - b[i]);
- }
- 
- void
- test3 (void)
- {
-   for (int i = 0; i < 4; i++)
-     a[i] = a[i] >> 7 | a[i] << 25;
- }
- 
- void
- test4 (void)
- {
-   for (int i = 0; i < 8; i++)
-     a[i] = a[i] >> 7 | a[i] << 25;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-shift-imm-round.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-shift-imm-round.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-shift-imm-round.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-shift-imm-round.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -march=loongarch64 -mlsx" } */
- /* { dg-final { scan-assembler "vsrari\\.w\t\\\$vr\[0-9\]+,\\\$vr\[0-9\]+,15" } } */
- 
- int x __attribute__ ((vector_size (16)));
- 
- void
- f (void)
- {
-   x = (x + (1 << 14)) >> 15;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-shuf-fp.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-shuf-fp.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-shuf-fp.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-shuf-fp.c	Thu Jan  1 00:00:00 1970
***************
*** 1,16 ****
- /* { dg-do compile } */
- /* { dg-options "-mlasx -O3" } */
- /* { dg-final { scan-assembler "vshuf\.w" } } */
- 
- #define V __attribute__ ((vector_size (16)))
- 
- int a V;
- float b V;
- float c V;
- float d V;
- 
- void
- test (void)
- {
-   d = __builtin_shuffle (b, c, a);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-slp-two-operator.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-slp-two-operator.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-slp-two-operator.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-slp-two-operator.c	Thu Jan  1 00:00:00 1970
***************
*** 1,38 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -ftree-vectorize -fdump-tree-vect -fdump-tree-vect-details" } */
- 
- typedef unsigned char uint8_t;
- typedef unsigned int uint32_t;
- 
- #define HADAMARD4(d0, d1, d2, d3, s0, s1, s2, s3)                             \
-   {                                                                           \
-     int t0 = s0 + s1;                                                         \
-     int t1 = s0 - s1;                                                         \
-     int t2 = s2 + s3;                                                         \
-     int t3 = s2 - s3;                                                         \
-     d0 = t0 + t2;                                                             \
-     d1 = t1 + t3;                                                             \
-     d2 = t0 - t2;                                                             \
-     d3 = t1 - t3;                                                             \
-   }
- 
- void sink (uint32_t tmp[4][4]);
- 
- void
- x264_pixel_satd_8x4 (uint8_t *pix1, int i_pix1, uint8_t *pix2, int i_pix2)
- {
-   uint32_t tmp[4][4];
-   int sum = 0;
-   for (int i = 0; i < 4; i++, pix1 += i_pix1, pix2 += i_pix2)
-     {
-       uint32_t a0 = (pix1[0] - pix2[0]) + ((pix1[4] - pix2[4]) << 16);
-       uint32_t a1 = (pix1[1] - pix2[1]) + ((pix1[5] - pix2[5]) << 16);
-       uint32_t a2 = (pix1[2] - pix2[2]) + ((pix1[6] - pix2[6]) << 16);
-       uint32_t a3 = (pix1[3] - pix2[3]) + ((pix1[7] - pix2[7]) << 16);
-       HADAMARD4 (tmp[i][0], tmp[i][1], tmp[i][2], tmp[i][3], a0, a1, a2, a3);
-     }
-   sink (tmp);
- }
- 
- /* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" } } */
- /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-widen-add.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-widen-add.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-widen-add.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-widen-add.c	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
- /* { dg-final { scan-assembler "xvaddwev.w.h"  } } */
- /* { dg-final { scan-assembler "xvaddwod.w.h"  } } */
- /* { dg-final { scan-assembler "xvaddwev.w.hu"  } } */
- /* { dg-final { scan-assembler "xvaddwod.w.hu"  } } */
- 
- #include <stdint.h>
- 
- #define SIZE 1024
- 
- void
- wide_uadd (uint32_t *foo, uint16_t *a, uint16_t *b)
- {
-   for ( int i = 0; i < SIZE; i++)
-     foo[i]   = a[i] + b[i];
- }
- 
- void
- wide_sadd (int32_t *foo, int16_t *a, int16_t *b)
- {
-   for ( int i = 0; i < SIZE; i++)
-     foo[i]   = a[i] + b[i];
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-widen-mul.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-widen-mul.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-widen-mul.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-widen-mul.c	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
- /* { dg-final { scan-assembler "xvmulwev.w.h"  } } */
- /* { dg-final { scan-assembler "xvmulwod.w.h"  } } */
- /* { dg-final { scan-assembler "xvmulwev.w.hu"  } } */
- /* { dg-final { scan-assembler "xvmulwod.w.hu"  } } */
- 
- #include <stdint.h>
- 
- #define SIZE 1024
- 
- void
- wide_umul (uint32_t *foo, uint16_t *a, uint16_t *b)
- {
-   for ( int i = 0; i < SIZE; i++)
-     foo[i] = a[i] * b[i];
- }
- 
- void
- wide_smul (int32_t *foo, int16_t *a, int16_t *b)
- {
-   for ( int i = 0; i < SIZE; i++)
-     foo[i]   = a[i] * b[i];
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-widen-sub.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-widen-sub.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vect-widen-sub.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vect-widen-sub.c	Thu Jan  1 00:00:00 1970
***************
*** 1,24 ****
- /* { dg-do compile } */
- /* { dg-options "-O3 -mlasx" } */
- /* { dg-final { scan-assembler "xvsubwev.w.h"  } } */
- /* { dg-final { scan-assembler "xvsubwod.w.h"  } } */
- /* { dg-final { scan-assembler "xvsubwev.w.hu"  } } */
- /* { dg-final { scan-assembler "xvsubwod.w.hu"  } } */
- 
- #include <stdint.h>
- 
- #define SIZE 1024
- 
- void
- wide_usub (uint32_t *foo, uint16_t *a, uint16_t *b)
- {
-   for ( int i = 0; i < SIZE; i++)
-     foo[i]   = a[i] - b[i];
- }
- 
- void
- wide_ssub (int32_t *foo, int16_t *a, int16_t *b)
- {
-   for ( int i = 0; i < SIZE; i++)
-     foo[i]   = a[i] - b[i];
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/abd-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/abd-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/abd-lasx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/abd-lasx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,67 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx -fdump-rtl-expand-all" } */
+ 
+ #define ABD(x, y) ((x - y > 0) ? (x - y) : -(x - y))
+ #define MAX(x, y) ((x) > (y) ? (x) : (y))
+ #define MIN(x, y) ((x) < (y) ? (x) : (y))
+ #define N 1024
+ 
+ #define FUNC1(T)                                                              \
+   void									      \
+   sabd1_##T (signed T *restrict a, signed T *restrict b,                      \
+              signed T *restrict out)                                          \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = ABD (a[i], b[i]);                                              \
+   }                                                                           \
+                                                                               \
+   void									      \
+   uabd1_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
+              unsigned T *restrict out)                                        \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = ABD (a[i], b[i]);                                              \
+   }
+ 
+ #define FUNC2(T)                                                              \
+   void									      \
+   sabd2_##T (signed T *restrict a, signed T *restrict b,                      \
+              signed T *restrict out)                                          \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
+   }                                                                           \
+                                                                               \
+   void									      \
+   uabd2_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
+              unsigned T *restrict out)                                        \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
+   }
+ 
+ /* Verify if the expand pass fits standard pattern name.  */
+ FUNC1 (char)
+ FUNC1 (short)
+ FUNC1 (int)
+ FUNC1 (long)
+ 
+ /* Verify if the combiner works well.  */
+ FUNC2 (char)
+ FUNC2 (short)
+ FUNC2 (int)
+ FUNC2 (long)
+ /* { dg-final { scan-rtl-dump "Function sabd1_char.*ABD.*Function uabd1_char" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function uabd1_char.*ABD.*Function sabd1_short" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function sabd1_short.*ABD.*Function uabd1_short" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function uabd1_short.*ABD.*Function sabd1_int" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function sabd1_int.*ABD.*Function uabd1_int" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function sabd1_long.*ABD.*Function uabd1_long" "expand" } } */
+ /* { dg-final { scan-assembler-times "sabd2_char:.*\txvabsd\\.b.*-sabd2_char" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_char:.*\txvabsd\\.bu.*-uabd2_char" 1 } } */
+ /* { dg-final { scan-assembler-times "sabd2_short:.*\txvabsd\\.h.*-sabd2_short" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_short:.*\txvabsd\\.hu.*-uabd2_short" 1 } } */
+ /* { dg-final { scan-assembler-times "sabd2_int:.*\txvabsd\\.w.*-sabd2_int" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_int:.*\txvabsd\\.wu.*-uabd2_int" 1 } } */
+ /* { dg-final { scan-assembler-times "sabd2_long:.*\txvabsd\\.d.*-sabd2_long" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_long:.*\txvabsd\\.du.*-uabd2_long" 1 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-ceil-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-ceil-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-ceil-lasx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-ceil-lasx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ /* { dg-final { scan-assembler "xvavgr.b" } } */
+ /* { dg-final { scan-assembler "xvavgr.bu" } } */
+ /* { dg-final { scan-assembler "xvavgr.hu" } } */
+ /* { dg-final { scan-assembler "xvavgr.h" } } */
+ 
+ #define N 1024
+ 
+ #define TEST(TYPE, NAME)                                        \
+   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
+   void f_##NAME (void)                                          \
+   {                                                             \
+     int i;                                                      \
+     for (i = 0; i < N; i++)                                     \
+       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i] + 1) >> 1;       \
+   }
+ 
+ TEST(char, 1);
+ TEST(short, 2);
+ TEST(unsigned char, 3);
+ TEST(unsigned short, 4);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-floor-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-floor-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-floor-lasx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/avg-floor-lasx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ /* { dg-final { scan-assembler "xvavg.b" } } */
+ /* { dg-final { scan-assembler "xvavg.bu" } } */
+ /* { dg-final { scan-assembler "xvavg.hu" } } */
+ /* { dg-final { scan-assembler "xvavg.h" } } */
+ 
+ #define N 1024
+ 
+ #define TEST(TYPE, NAME)                                        \
+   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
+   void f_##NAME (void)                                          \
+   {                                                             \
+     int i;                                                      \
+     for (i = 0; i < N; i++)                                     \
+       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i]) >> 1;           \
+   }
+ 
+ TEST(char, 1);
+ TEST(short, 2);
+ TEST(unsigned char, 3);
+ TEST(unsigned short, 4);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/fnmam4-vec.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/fnmam4-vec.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/fnmam4-vec.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/fnmam4-vec.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mlasx -ftree-vectorize" } */
+ /* { dg-require-effective-target loongarch_asx } */
+ 
+ void
+ foo (float *u, float x, float *y, float z)
+ {
+   int i;
+   for (i = 0; i < 1024; i++)
+     *(u++) = (x - y[i] * z);
+ }
+ 
+ /* { dg-final { scan-assembler-not "\tvori.b"} } */
+ /* { dg-final { scan-assembler-not "\txvori.b"} } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-andn-iorn.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-andn-iorn.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-andn-iorn.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-andn-iorn.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ #define N 8
+ 
+ #include "../lsx/lsx-andn-iorn.c"
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ /* We should produce a BIT_ANDC and BIT_IORC here.  */
+ 
+ /* { dg-final { scan-tree-dump ".BIT_ANDN " "optimized" } } */
+ /* { dg-final { scan-tree-dump ".BIT_IORN " "optimized" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-extract-even_odd-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-extract-even_odd-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-extract-even_odd-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-extract-even_odd-opt.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ /* { dg-final { scan-assembler "xvilvl.d" } } */
+ /* { dg-final { scan-assembler "xvilvh.d" } } */
+ 
+ #define CMUL(a, b, c)                                                         \
+   {                                                                           \
+     (c).ai = (a).ai * (b).ai - (a).bi * (b).bi;                               \
+     (c).bi = (a).ai * (b).bi + (a).bi * (b).ai;                               \
+     (c).ci = (a).ci * (b).ci - (a).di * (b).di;                               \
+     (c).di = (a).ci * (b).di + (a).di * (b).ci;                               \
+   }
+ #define CSUM(a, b)                                                            \
+   {                                                                           \
+     (a).ai += (b).ai;                                                         \
+     (a).bi += (b).bi;                                                         \
+     (a).ci += (b).ci;                                                         \
+     (a).di += (b).di;                                                         \
+   }
+ 
+ typedef struct
+ {
+   double ai;
+   double bi;
+   double ci;
+   double di;
+ } complex;
+ 
+ typedef struct
+ {
+   complex e[6][6];
+ } matrix;
+ 
+ typedef struct
+ {
+   complex c[6];
+ } vector;
+ 
+ void
+ mult_adj_mat_vec (matrix *a, vector *b, vector *c)
+ {
+   register int i, j;
+   register complex x, y;
+   for (i = 0; i < 6; i++)
+     {
+       x.ai = x.bi = x.ci = x.di = 0.0;
+       for (j = 0; j < 6; j++)
+         {
+           CMUL (a->e[j][i], b->c[j], y);
+           CSUM (x, y);
+         }
+       c->c[i] = x;
+     }
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-func-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-func-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-func-attr-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-func-attr-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx" } */
+ 
+ typedef int v8i32 __attribute__ ((vector_size(32), aligned(32)));
+ extern v8i32 a, b, c;
+ 
+ __attribute__ ((target ("no-lasx")))
+ void
+ test (void)
+ {
+   a = __builtin_lasx_xvadd_w (b, c); /* { dg-error "built-in function '__builtin_lasx_xvadd_w' is not enabled" } */
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-pragma-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-pragma-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-pragma-attr-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-pragma-attr-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx" } */
+ 
+ typedef int v8i32 __attribute__ ((vector_size(32), aligned(32)));
+ extern v8i32 a, b, c;
+ 
+ #pragma GCC target ("no-lasx")
+ void
+ test (void)
+ {
+   a = __builtin_lasx_xvadd_w (b, c); /* { dg-error "built-in function '__builtin_lasx_xvadd_w' is not enabled" } */
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-reduc-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-reduc-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-reduc-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-reduc-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -funsafe-math-optimizations -mlasx -fno-unroll-loops -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-times "\.REDUC_PLUS" 4 "optimized" } } */
+ 
+ #define DEFINE_SUM_FUNCTION(T, FUNC_NAME, SIZE) \
+ T FUNC_NAME(const T arr[]) { \
+     arr = __builtin_assume_aligned(arr, 64); \
+     T sum = 0; \
+     for (int i = 0; i < SIZE; i++) \
+         sum += arr[i]; \
+     return sum; \
+ }
+ 
+ DEFINE_SUM_FUNCTION (int, sum_int_1040, 1028)
+ DEFINE_SUM_FUNCTION (float, sum_float_1040, 1028)
+ DEFINE_SUM_FUNCTION (long, sum_long_1040, 1026)
+ DEFINE_SUM_FUNCTION (double, sum_double_1040, 1026)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q-opt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q-opt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q-opt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/lasx-xvpermi_q-opt.c	Sun Dec 14 22:32:13 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-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,5 ----
+ /* PR target/112476: ICE with -mlasx */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mfpu=64 -mabi=lp64d -mlasx" } */
+ 
+ #include "../lsx/pr112476-1.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-4.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr112476-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,4 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+  
+ #include "../lsx/pr112476-3.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr113033.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr113033.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr113033.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pr113033.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,23 ----
+ /* PR target/113033: ICE with vector left rotate */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx" } */
+ 
+ typedef unsigned __attribute__ ((vector_size (16))) v4si;
+ typedef unsigned __attribute__ ((vector_size (32))) v8si;
+ typedef unsigned long long __attribute__ ((vector_size (16))) v2di;
+ typedef unsigned long long __attribute__ ((vector_size (32))) v4di;
+ 
+ #define TEST(tp) \
+ extern tp data_##tp; \
+ tp \
+ test_##tp (int x) \
+ { \
+   const int bit = sizeof (data_##tp[0]) * __CHAR_BIT__; \
+   data_##tp = data_##tp << (x & (bit - 1)) \
+ 	      | data_##tp >> (bit - x & (bit - 1)); \
+ }
+ 
+ TEST (v4si)
+ TEST (v8si)
+ TEST (v2di)
+ TEST (v4di)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pragma-push-pop.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pragma-push-pop.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/pragma-push-pop.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/pragma-push-pop.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx" } */
+ /* { dg-final { scan-assembler-not "xvadd\\\.w" } } */
+ /* { dg-final { scan-assembler "xvsll\\\.w" } } */
+ 
+ #include <lasxintrin.h>
+ 
+ extern v8i32 a, b, c;
+ #pragma GCC push_options
+ #pragma GCC target ("no-lasx")
+ void
+ test (void)
+ {
+   a = b + c;
+ }
+ #pragma GCC pop_options
+ 
+ void
+ test1 (void)
+ {
+    c = __builtin_lasx_xvsll_w (a, b);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-b.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-b.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-b.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "xvrotr\\.b" 2 } } */
+ /* { dg-final { scan-assembler-times "xvneg\\.b" 1 } } */
+ 
+ #define VLEN 32
+ #include "../lsx/rotl-with-vrotr-b.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-d.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "xvrotr\\.d" 2 } } */
+ /* { dg-final { scan-assembler-times "xvneg\\.d" 1 } } */
+ 
+ #define VLEN 32
+ #include "../lsx/rotl-with-vrotr-d.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-h.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-h.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-h.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-h.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "xvrotr\\.h" 2 } } */
+ /* { dg-final { scan-assembler-times "xvneg\\.h" 1 } } */
+ 
+ #define VLEN 32
+ #include "../lsx/rotl-with-vrotr-h.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-w.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-w.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-w.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/rotl-with-xvrotr-w.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "xvrotr\\.w" 2 } } */
+ /* { dg-final { scan-assembler-times "xvneg\\.w" 1 } } */
+ 
+ #define VLEN 32
+ #include "../lsx/rotl-with-vrotr-w.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/sad-lasx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/sad-lasx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/sad-lasx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/sad-lasx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ 
+ #define N 1024
+ 
+ #define TEST(SIGN)                                             \
+   SIGN char a_##SIGN[N], b_##SIGN[N];                          \
+   int f_##SIGN (void)                                          \
+   {                                                            \
+     int i, sum = 0;                                            \
+     for (i = 0; i < N; i++)                                    \
+       sum += __builtin_abs (a_##SIGN[i] - b_##SIGN[i]);;       \
+     return sum;                                                \
+   }
+ 
+ TEST(signed);
+ TEST(unsigned);
+ 
+ /* { dg-final { scan-assembler {\txvabsd.bu\t} } } */
+ /* { dg-final { scan-assembler {\txvabsd.b\t} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/strict-align.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/strict-align.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/strict-align.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/strict-align.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mstrict-align -mlasx" } */
+ /* { dg-final { scan-assembler-not "vfadd.s" } } */
+ 
+ void
+ foo (float *restrict x, float *restrict y)
+ {
+   x[0] = x[0] + y[0];
+   x[1] = x[1] + y[1];
+   x[2] = x[2] + y[2];
+   x[3] = x[3] + y[3];
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_pack_unpack_256.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_pack_unpack_256.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_pack_unpack_256.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_pack_unpack_256.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,124 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mlasx -O3" } */
+ 
+ #define N 128
+ 
+ char c[N];
+ short int h[N];
+ int s[N];
+ long l[N];
+ float f[N];
+ double d[N];
+ unsigned char uc[N];
+ unsigned short int uh[N];
+ unsigned int us[N];
+ unsigned long ul[N];
+ 
+ /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v4df:.*\txvftintrz\\.l\\.d.*-test_vec_pack_sfix_trunc_v4df\n" } } */
+ /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v4df:.*\txvpickev\\.w.*-test_vec_pack_sfix_trunc_v4df\n" } } */
+ /* { dg-final { scan-assembler "test_vec_pack_sfix_trunc_v4df:.*\txvftintrz\\.w\\.d.*-test_vec_pack_sfix_trunc_v4df\n" } } */
+ void
+ test_vec_pack_sfix_trunc_v4df (void)
+ {
+   for (int i = 0; i < N; i++)
+     s[i] = d[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_packs_float_v4di:.*\tmovgr2fr\\.d.*-test_vec_packs_float_v4di" } } */
+ /* { dg-final { scan-assembler "test_vec_packs_float_v4di:.*\txvffint\\.s\\.l.*-test_vec_packs_float_v4di" } } */
+ void
+ test_vec_packs_float_v4di (void)
+ {
+   for (int i = 0; i < N; i++)
+     f[i] = l[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpack_sfix_trunc_hi_lo_v8sf:.*\tftintrz\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v8sf" } } */
+ /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v8sf:.*\txvftintrzh\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v8sf" } } */
+ /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v8sf:.*\txvftintrzl\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v8sf" } } */
+ void
+ test_vec_unpack_sfix_trunc_hi_lo_v8sf (void)
+ {
+   for (int i = 0; i < N; i++)
+     l[i] = f[i];
+ }
+ 
+ /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\txvpermi\\.d.*-test_vec_unpacks_float_hi_lo_v8si" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\tvext2xv\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v8si" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\txvffint\\.d\\.l.*-test_vec_unpacks_float_hi_lo_v8si" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v8si:.*\txvffinth\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v8si" } } */
+ void
+ test_vec_unpacks_float_hi_lo_v8si (void)
+ {
+   for (int i = 0; i < N; i++)
+     d[i] = s[i];
+ }
+ 
+ /* { 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)
+ {
+   for (int i = 0; i < N; i++)
+     l[i] = s[i];
+ }
+ 
+ /* { 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)
+ {
+   for (int i = 0; i < N; i++)
+     s[i] = h[i];
+ }
+ 
+ /* { 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)
+ {
+   for (int i = 0; i < N; i++)
+     h[i] = c[i];
+ }
+ 
+ /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8sf:.*\txvfcvtl\\.d\\.s.*-test_vec_unpacks_hi_lo_v8sf" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8sf:.*\txvpermi\\.d.*-test_vec_unpacks_hi_lo_v8sf" } } */
+ void
+ test_vec_unpacks_hi_lo_v8sf (void)
+ {
+   for (int i = 0; i < N; i++)
+     d[i] = f[i];
+ }
+ 
+ /* { 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)
+ {
+   for (int i = 0; i < N; i++)
+     ul[i] = us[i];
+ }
+ 
+ /* { 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)
+ {
+   for (int i = 0; i < N; i++)
+     us[i] = uh[i];
+ }
+ 
+ /* { 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)
+ {
+   for (int i = 0; i < N; i++)
+     uh[i] = uc[i];
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_reduc_half.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_reduc_half.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_reduc_half.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vec_reduc_half.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -mlasx" } */
+ 
+ double
+ foo_1 (double *a, double *b)
+ {
+   return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
+ }
+ 
+ /* { dg-final { scan-assembler-times "xvpermi.d" 1} } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-extract.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ffast-math -mlasx -fno-vect-cost-model -fno-unroll-loops" } */
+ /* { dg-final { scan-assembler-not "xvpickve.w" } } */
+ /* { dg-final { scan-assembler-not "xvpickve.d" } } */
+ 
+ float
+ sum_float (float *a, int n) {
+   float res = 0.0;
+   for (int i = 0; i < n; i++)
+     res += a[i];
+   return res;
+ }
+ 
+ double
+ sum_double (double *a, int n) {
+   double res = 0.0;
+   for (int i = 0; i < n; i++)
+     res += a[i];
+   return res;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint-no-inexact.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint-no-inexact.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,48 ----
+ /* { 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"
+ 
+ /* ceil */
+ /* { dg-final { scan-assembler "bl\t%plt\\(ceil\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(ceilf\\)" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrp\.s" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrp\.d" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrp\.s" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrp\.d" } } */
+ 
+ /* floor */
+ /* { dg-final { scan-assembler "bl\t%plt\\(floor\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(floorf\\)" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrm\.s" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrm\.d" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrm\.s" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrm\.d" } } */
+ 
+ /* nearbyint + rint: Only rint is allowed */
+ /* { dg-final { scan-assembler "bl\t%plt\\(nearbyint\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(nearbyintf\\)" } } */
+ /* { dg-final { scan-assembler-times "\tvfrint\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\tvfrint\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvfrint\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvfrint\.d" 1 } } */
+ 
+ /* round: we don't have a corresponding instruction */
+ /* { dg-final { scan-assembler "bl\t%plt\\(round\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
+ 
+ /* roundeven */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundeven\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundevenf\\)" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrne\.s" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrne\.d" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrne\.s" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrne\.d" } } */
+ 
+ /* trunc */
+ /* { dg-final { scan-assembler "bl\t%plt\\(trunc\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(truncf\\)" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrz\.s" } } */
+ /* { dg-final { scan-assembler-not "\tvfrintrz\.d" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrz\.s" } } */
+ /* { dg-final { scan-assembler-not "\txvfrintrz\.d" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-frint.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,85 ----
+ /* { 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];
+ 
+ float x[8];
+ double y[4];
+ 
+ #define TEST(op, N, func) \
+ void \
+ test_##op##_##N##_##func () \
+ { \
+   for (int i = 0; i < N; i++) \
+     out_##op[i] = __builtin_##func (op[i]); \
+ }
+ 
+ TEST(x, 4, ceilf);
+ TEST(x, 4, floorf);
+ TEST(x, 4, nearbyintf);
+ TEST(x, 4, rintf);
+ TEST(x, 4, roundf);
+ TEST(x, 4, roundevenf);
+ TEST(x, 4, truncf);
+ 
+ TEST(x, 8, ceilf);
+ TEST(x, 8, floorf);
+ TEST(x, 8, nearbyintf);
+ TEST(x, 8, rintf);
+ TEST(x, 8, roundf);
+ TEST(x, 8, roundevenf);
+ TEST(x, 8, truncf);
+ 
+ TEST(y, 2, ceil);
+ TEST(y, 2, floor);
+ TEST(y, 2, nearbyint);
+ TEST(y, 2, rint);
+ TEST(y, 2, round);
+ TEST(y, 2, roundeven);
+ TEST(y, 2, trunc);
+ 
+ TEST(y, 4, ceil);
+ TEST(y, 4, floor);
+ TEST(y, 4, nearbyint);
+ TEST(y, 4, rint);
+ TEST(y, 4, round);
+ TEST(y, 4, roundeven);
+ TEST(y, 4, trunc);
+ 
+ /* ceil */
+ /* { dg-final { scan-assembler "\tvfrintrp\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrp\.d" } } */
+ /* { dg-final { scan-assembler "\txvfrintrp\.s" } } */
+ /* { dg-final { scan-assembler "\txvfrintrp\.d" } } */
+ 
+ /* floor */
+ /* { dg-final { scan-assembler "\tvfrintrm\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrm\.d" } } */
+ /* { dg-final { scan-assembler "\txvfrintrm\.s" } } */
+ /* { dg-final { scan-assembler "\txvfrintrm\.d" } } */
+ 
+ /* rint and nearbyint
+    nearbyint has been disallowed to raise FE_INEXACT for decades.  */
+ /* { dg-final { scan-assembler-times "\tvfrint\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\tvfrint\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvfrint\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvfrint\.d" 1 } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(nearbyint\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(nearbyintf\\)" } } */
+ 
+ /* round: we don't have a corresponding instruction */
+ /* { dg-final { scan-assembler "bl\t%plt\\(round\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
+ 
+ /* roundeven */
+ /* { dg-final { scan-assembler "\tvfrintrne\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrne\.d" } } */
+ /* { dg-final { scan-assembler "\txvfrintrne\.s" } } */
+ /* { dg-final { scan-assembler "\txvfrintrne\.d" } } */
+ 
+ /* trunc */
+ /* { dg-final { scan-assembler "\tvfrintrz\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrz\.d" } } */
+ /* { dg-final { scan-assembler "\txvfrintrz\.s" } } */
+ /* { dg-final { scan-assembler "\txvfrintrz\.d" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint-no-inexact.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint-no-inexact.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,43 ----
+ /* { 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"
+ 
+ /* ceil */
+ /* { dg-final { scan-assembler "bl\t%plt\\(ceil\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(ceilf\\)" } } */
+ /* { dg-final { scan-assembler-not "\tvftintrp\.w\.s" } } */
+ /* { dg-final { scan-assembler-not "\tvftintrp\.l\.d" } } */
+ /* { dg-final { scan-assembler-not "\txvftintrp\.w\.s" } } */
+ /* { dg-final { scan-assembler-not "\txvftintrp\.l\.d" } } */
+ 
+ /* floor */
+ /* { dg-final { scan-assembler "bl\t%plt\\(floor\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(floorf\\)" } } */
+ /* { dg-final { scan-assembler-not "\tvftintrm\.w\.s" } } */
+ /* { dg-final { scan-assembler-not "\tvftintrm\.l\.d" } } */
+ /* { dg-final { scan-assembler-not "\txvftintrm\.w\.s" } } */
+ /* { dg-final { scan-assembler-not "\txvftintrm\.l\.d" } } */
+ 
+ /* nearbyint + rint */
+ /* { dg-final { scan-assembler "bl\t%plt\\(floor\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(floorf\\)" } } */
+ /* { dg-final { scan-assembler-times "\tvftint\.w\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\tvftint\.l\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvftint\.w\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvftint\.l\.d" 1 } } */
+ 
+ /* round: we don't have a corresponding instruction */
+ /* { dg-final { scan-assembler "bl\t%plt\\(lround\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
+ 
+ /* roundeven */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundeven\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundevenf\\)" } } */
+ /* { dg-final { scan-assembler-not "\tvftintrne\.w\.s" } } */
+ /* { dg-final { scan-assembler-not "\tvftintrne\.l\.d" } } */
+ /* { dg-final { scan-assembler-not "\txvftintrne\.w\.s" } } */
+ /* { dg-final { scan-assembler-not "\txvftintrne\.l\.d" } } */
+ 
+ /* { dg-final { scan-assembler "bl\t%plt\\(trunc\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(truncf\\)" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ftint.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,83 ----
+ /* { 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];
+ 
+ float x[8];
+ double y[4];
+ 
+ #define TEST(op, N, func) \
+ void \
+ test_##op##_##N##_##func () \
+ { \
+   for (int i = 0; i < N; i++) \
+     out_##op[i] = __builtin_##func (op[i]); \
+ }
+ 
+ TEST(x, 4, ceilf);
+ TEST(x, 4, floorf);
+ TEST(x, 4, nearbyintf);
+ TEST(x, 4, rintf);
+ TEST(x, 4, roundf);
+ TEST(x, 4, roundevenf);
+ TEST(x, 4, truncf);
+ 
+ TEST(x, 8, ceilf);
+ TEST(x, 8, floorf);
+ TEST(x, 8, nearbyintf);
+ TEST(x, 8, rintf);
+ TEST(x, 8, roundf);
+ TEST(x, 8, roundevenf);
+ TEST(x, 8, truncf);
+ 
+ TEST(y, 2, ceil);
+ TEST(y, 2, floor);
+ TEST(y, 2, nearbyint);
+ TEST(y, 2, rint);
+ TEST(y, 2, round);
+ TEST(y, 2, roundeven);
+ TEST(y, 2, trunc);
+ 
+ TEST(y, 4, ceil);
+ TEST(y, 4, floor);
+ TEST(y, 4, nearbyint);
+ TEST(y, 4, rint);
+ TEST(y, 4, round);
+ TEST(y, 4, roundeven);
+ TEST(y, 4, trunc);
+ 
+ /* ceil */
+ /* { dg-final { scan-assembler "\tvftintrp\.w\.s" } } */
+ /* { dg-final { scan-assembler "\tvftintrp\.l\.d" } } */
+ /* { dg-final { scan-assembler "\txvftintrp\.w\.s" } } */
+ /* { dg-final { scan-assembler "\txvftintrp\.l\.d" } } */
+ 
+ /* floor */
+ /* { dg-final { scan-assembler "\tvftintrm\.w\.s" } } */
+ /* { dg-final { scan-assembler "\tvftintrm\.l\.d" } } */
+ /* { dg-final { scan-assembler "\txvftintrm\.w\.s" } } */
+ /* { dg-final { scan-assembler "\txvftintrm\.l\.d" } } */
+ 
+ /* rint and nearbyint
+    nearbyint has been disallowed to raise FE_INEXACT for decades.  */
+ /* { dg-final { scan-assembler-times "\tvftint\.w\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\tvftint\.l\.d" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvftint\.w\.s" 1 } } */
+ /* { dg-final { scan-assembler-times "\txvftint\.l\.d" 1 } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(nearbyint\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(nearbyintf\\)" } } */
+ 
+ /* round: we don't have a corresponding instruction */
+ /* { dg-final { scan-assembler "bl\t%plt\\(lround\\)" } } */
+ /* { dg-final { scan-assembler "bl\t%plt\\(roundf\\)" } } */
+ 
+ /* roundeven */
+ /* { dg-final { scan-assembler "\tvftintrne\.w\.s" } } */
+ /* { dg-final { scan-assembler "\tvftintrne\.l\.d" } } */
+ /* { dg-final { scan-assembler "\txvftintrne\.w\.s" } } */
+ /* { dg-final { scan-assembler "\txvftintrne\.l\.d" } } */
+ 
+ /* trunc */
+ /* { dg-final { scan-assembler-not "bl\t%plt\\(trunc\\)" } } */
+ /* { dg-final { scan-assembler-not "bl\t%plt\\(truncf\\)" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ld-st-imm12.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ld-st-imm12.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ld-st-imm12.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-ld-st-imm12.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=loongarch64 -mabi=lp64d -mlasx -O2" } */
+ /* { dg-final { scan-assembler-not "addi.d" } } */
+ 
+ extern short a[1000];
+ extern short b[1000];
+ extern short c[1000];
+ 
+ void
+ test (void)
+ {
+   for (int i = 501; i < 517; i++)
+     ((int *)(c + 1))[i] = ((int *)(a + 1))[i] + ((int *)(b + 1))[i];
+ }
+ 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-muh.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-muh.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-muh.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-muh.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mlasx -O3" } */
+ /* { dg-final { scan-assembler "\tvmuh\.w\t" } } */
+ /* { dg-final { scan-assembler "\tvmuh\.wu\t" } } */
+ /* { dg-final { scan-assembler "\txvmuh\.w\t" } } */
+ /* { dg-final { scan-assembler "\txvmuh\.wu\t" } } */
+ 
+ int a[8], b[8], c[8];
+ 
+ void
+ test1 (void)
+ {
+   for (int i = 0; i < 4; i++)
+     c[i] = ((long)a[i] * (long)b[i]) >> 32;
+ }
+ 
+ void
+ test2 (void)
+ {
+   for (int i = 0; i < 4; i++)
+     c[i] = ((long)(unsigned)a[i] * (long)(unsigned)b[i]) >> 32;
+ }
+ 
+ void
+ test3 (void)
+ {
+   for (int i = 0; i < 8; i++)
+     c[i] = ((long)a[i] * (long)b[i]) >> 32;
+ }
+ 
+ void
+ test4 (void)
+ {
+   for (int i = 0; i < 8; i++)
+     c[i] = ((long)(unsigned)a[i] * (long)(unsigned)b[i]) >> 32;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-rotr.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-rotr.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-rotr.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-rotr.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,36 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx" } */
+ /* { dg-final { scan-assembler "\tvrotr\.w\t" } } */
+ /* { dg-final { scan-assembler "\txvrotr\.w\t" } } */
+ /* { dg-final { scan-assembler "\tvrotri\.w\t\[^\n\]*7\n" } } */
+ /* { dg-final { scan-assembler "\txvrotri\.w\t\[^\n\]*7\n" } } */
+ 
+ unsigned int a[8], b[8];
+ 
+ void
+ test1 (void)
+ {
+   for (int i = 0; i < 4; i++)
+     a[i] = a[i] >> b[i] | a[i] << (32 - b[i]);
+ }
+ 
+ void
+ test2 (void)
+ {
+   for (int i = 0; i < 8; i++)
+     a[i] = a[i] >> b[i] | a[i] << (32 - b[i]);
+ }
+ 
+ void
+ test3 (void)
+ {
+   for (int i = 0; i < 4; i++)
+     a[i] = a[i] >> 7 | a[i] << 25;
+ }
+ 
+ void
+ test4 (void)
+ {
+   for (int i = 0; i < 8; i++)
+     a[i] = a[i] >> 7 | a[i] << 25;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-shuf-fp.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-shuf-fp.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-shuf-fp.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-shuf-fp.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mlasx -O3" } */
+ /* { dg-final { scan-assembler "vshuf\.w" } } */
+ 
+ #define V __attribute__ ((vector_size (16)))
+ 
+ int a V;
+ float b V;
+ float c V;
+ float d V;
+ 
+ void
+ test (void)
+ {
+   d = __builtin_shuffle (b, c, a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-slp-two-operator.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-slp-two-operator.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-slp-two-operator.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-slp-two-operator.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -ftree-vectorize -fdump-tree-vect -fdump-tree-vect-details" } */
+ 
+ typedef unsigned char uint8_t;
+ typedef unsigned int uint32_t;
+ 
+ #define HADAMARD4(d0, d1, d2, d3, s0, s1, s2, s3)                             \
+   {                                                                           \
+     int t0 = s0 + s1;                                                         \
+     int t1 = s0 - s1;                                                         \
+     int t2 = s2 + s3;                                                         \
+     int t3 = s2 - s3;                                                         \
+     d0 = t0 + t2;                                                             \
+     d1 = t1 + t3;                                                             \
+     d2 = t0 - t2;                                                             \
+     d3 = t1 - t3;                                                             \
+   }
+ 
+ void sink (uint32_t tmp[4][4]);
+ 
+ void
+ x264_pixel_satd_8x4 (uint8_t *pix1, int i_pix1, uint8_t *pix2, int i_pix2)
+ {
+   uint32_t tmp[4][4];
+   int sum = 0;
+   for (int i = 0; i < 4; i++, pix1 += i_pix1, pix2 += i_pix2)
+     {
+       uint32_t a0 = (pix1[0] - pix2[0]) + ((pix1[4] - pix2[4]) << 16);
+       uint32_t a1 = (pix1[1] - pix2[1]) + ((pix1[5] - pix2[5]) << 16);
+       uint32_t a2 = (pix1[2] - pix2[2]) + ((pix1[6] - pix2[6]) << 16);
+       uint32_t a3 = (pix1[3] - pix2[3]) + ((pix1[7] - pix2[7]) << 16);
+       HADAMARD4 (tmp[i][0], tmp[i][1], tmp[i][2], tmp[i][3], a0, a1, a2, a3);
+     }
+   sink (tmp);
+ }
+ 
+ /* { dg-final { scan-tree-dump "vectorizing stmts using SLP" "vect" } } */
+ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-add.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-add.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-add.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-add.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ /* { dg-final { scan-assembler "xvaddwev.w.h"  } } */
+ /* { dg-final { scan-assembler "xvaddwod.w.h"  } } */
+ /* { dg-final { scan-assembler "xvaddwev.w.hu"  } } */
+ /* { dg-final { scan-assembler "xvaddwod.w.hu"  } } */
+ 
+ #include <stdint.h>
+ 
+ #define SIZE 1024
+ 
+ void
+ wide_uadd (uint32_t *foo, uint16_t *a, uint16_t *b)
+ {
+   for ( int i = 0; i < SIZE; i++)
+     foo[i]   = a[i] + b[i];
+ }
+ 
+ void
+ wide_sadd (int32_t *foo, int16_t *a, int16_t *b)
+ {
+   for ( int i = 0; i < SIZE; i++)
+     foo[i]   = a[i] + b[i];
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-mul.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-mul.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-mul.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-mul.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ /* { dg-final { scan-assembler "xvmulwev.w.h"  } } */
+ /* { dg-final { scan-assembler "xvmulwod.w.h"  } } */
+ /* { dg-final { scan-assembler "xvmulwev.w.hu"  } } */
+ /* { dg-final { scan-assembler "xvmulwod.w.hu"  } } */
+ 
+ #include <stdint.h>
+ 
+ #define SIZE 1024
+ 
+ void
+ wide_umul (uint32_t *foo, uint16_t *a, uint16_t *b)
+ {
+   for ( int i = 0; i < SIZE; i++)
+     foo[i] = a[i] * b[i];
+ }
+ 
+ void
+ wide_smul (int32_t *foo, int16_t *a, int16_t *b)
+ {
+   for ( int i = 0; i < SIZE; i++)
+     foo[i]   = a[i] * b[i];
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-sub.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-sub.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-sub.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vect-widen-sub.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlasx" } */
+ /* { dg-final { scan-assembler "xvsubwev.w.h"  } } */
+ /* { dg-final { scan-assembler "xvsubwod.w.h"  } } */
+ /* { dg-final { scan-assembler "xvsubwev.w.hu"  } } */
+ /* { dg-final { scan-assembler "xvsubwod.w.hu"  } } */
+ 
+ #include <stdint.h>
+ 
+ #define SIZE 1024
+ 
+ void
+ wide_usub (uint32_t *foo, uint16_t *a, uint16_t *b)
+ {
+   for ( int i = 0; i < SIZE; i++)
+     foo[i]   = a[i] - b[i];
+ }
+ 
+ void
+ wide_ssub (int32_t *foo, int16_t *a, int16_t *b)
+ {
+   for ( int i = 0; i < SIZE; i++)
+     foo[i]   = a[i] - b[i];
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vfmax-vfmin.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vfmax-vfmin.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vfmax-vfmin.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vfmax-vfmin.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune=la464 -mlasx" } */
+ /* { dg-final { scan-assembler "\tvfmin\\.d" } } */
+ /* { dg-final { scan-assembler "\tvfmax\\.d" } } */
+ /* { dg-final { scan-assembler "\txvfmin\\.d" } } */
+ /* { dg-final { scan-assembler "\txvfmax\\.d" } } */
+ /* { dg-final { scan-assembler "\tvfmin\\.s" } } */
+ /* { dg-final { scan-assembler "\tvfmax\\.s" } } */
+ /* { dg-final { scan-assembler "\txvfmin\\.s" } } */
+ /* { dg-final { scan-assembler "\txvfmax\\.s" } } */
+ 
+ #define T(OP) __typeof__ (__builtin_##OP (0, 0))
+ 
+ #define TEST(OP, LEN) \
+ void \
+ test_##OP##LEN (T (OP) *restrict dest, \
+ 		const T (OP) *restrict src1, \
+ 		const T (OP) *restrict src2) \
+ { \
+   for (int i = 0; i < LEN / sizeof (T(OP)); i++) \
+     dest[i] = __builtin_##OP (src1[i], src2[i]); \
+ }
+ 
+ TEST(fmin, 16)
+ TEST(fmax, 16)
+ TEST(fmin, 32)
+ TEST(fmax, 32)
+ TEST(fminf, 16)
+ TEST(fmaxf, 16)
+ TEST(fminf, 32)
+ TEST(fmaxf, 32)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vrepli.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vrepli.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/vrepli.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/vrepli.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx" } */
+ /* { dg-final { scan-assembler "\tvldi\t\\\$vr\[0-9\]+,221" } } */
+ /* { dg-final { scan-assembler "\txvldi\t\\\$xr\[0-9\]+,221" } } */
+ 
+ int f __attribute__((vector_size (16)));
+ int g __attribute__((vector_size (32)));
+ 
+ void
+ test (void)
+ {
+   constexpr int x = (int) 0xdddddddd;
+   f = (typeof(f)){x, x, x, x};
+   g = (typeof(g)){x, x, x, x, x, x, x, x};
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump "WIDEN_MULT_EVEN_EXPR" "optimized" } } */
+ /* { dg-final { scan-tree-dump "WIDEN_MULT_ODD_EXPR" "optimized" } } */
+ 
+ typedef __INT32_TYPE__ i32;
+ typedef __INT64_TYPE__ i64;
+ 
+ i32 x[8], y[8];
+ 
+ i64
+ test (void)
+ {
+   i64 ret = 0;
+   for (int i = 0; i < 8; i++)
+     ret ^= (i64) x[i] * y[i];
+   return ret;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/wide-mul-reduc-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fdump-tree-optimized" } */
+ /* { dg-final { scan-assembler "xvmaddw(ev|od)\\.d\\.w" } } */
+ /* { dg-final { scan-tree-dump "DOT_PROD_EXPR" "optimized" } } */
+ 
+ typedef __INT32_TYPE__ i32;
+ typedef __INT64_TYPE__ i64;
+ 
+ i32 x[8], y[8];
+ 
+ i64
+ test (void)
+ {
+   i64 ret = 0;
+   for (int i = 0; i < 8; i++)
+     ret += (i64) x[i] * y[i];
+   return ret;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-d.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,189 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #define F double
+ #define I long long
+ #define VL 32
+ 
+ #include "../lsx/vfcmp-f.c"
+ 
+ /*
+ ** compare_quiet_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.ceq.d	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cune.d	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.slt.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sle.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.slt.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sle.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sule.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sult.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sule.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sult.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.clt.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cle.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.clt.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cle.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cule.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cult.d	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cule.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cult.d	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cun.d	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_ordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cor.d	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-f.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-f.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-f.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lasx/xvfcmp-f.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,189 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #define F float
+ #define I int
+ #define VL 32
+ 
+ #include "../lsx/vfcmp-f.c"
+ 
+ /*
+ ** compare_quiet_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.ceq.s	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cune.s	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.slt.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sle.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.slt.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sle.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sule.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sult.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sule.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.sult.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.clt.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cle.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.clt.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_equal:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cle.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_less:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cule.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cult.s	(\$xr[0-9]+),\2,\1
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_greater:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cule.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cult.s	(\$xr[0-9]+),\1,\2
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_unordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cun.s	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_ordered:
+ ** 	xvld	(\$xr[0-9]+),\$r4,0
+ ** 	xvld	(\$xr[0-9]+),\$r5,0
+ ** 	xvfcmp.cor.s	(\$xr[0-9]+),(\1,\2|\2,\1)
+ **	xvst	\3,\$r6,0
+ **	jr	\$r1
+ */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/loongarch-vector.exp	Sun Dec 14 22:32:13 2025
*************** dg-init
*** 36,45 ****
  # If the target hardware supports LSX, the default action is "run", otherwise
  # just "compile".
  set saved-dg-do-what-default ${dg-do-what-default}
! if {[check_effective_target_loongarch_sx_hw]} then {
!   set dg-do-what-default run
  } else {
!   set dg-do-what-default compile
  }
  
  #Main loop.
--- 36,49 ----
  # If the target hardware supports LSX, the default action is "run", otherwise
  # just "compile".
  set saved-dg-do-what-default ${dg-do-what-default}
! if [check_effective_target_loongarch_sx] { # If compiler support vector
!   if {[check_effective_target_loongarch_sx_hw]} then { # If hardware support vector
!     set dg-do-what-default run
!   } else {
!     set dg-do-what-default compile
!   }
  } else {
!   return 0
  }
  
  #Main loop.
*************** dg-init
*** 54,63 ****
  # just "compile".
  
  set saved-dg-do-what-default ${dg-do-what-default}
! if {[check_effective_target_loongarch_asx_hw]} then {
!   set dg-do-what-default run
  } else {
!   set dg-do-what-default compile
  }
  
  dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/lasx/*.\[cS\]]] \
--- 58,71 ----
  # just "compile".
  
  set saved-dg-do-what-default ${dg-do-what-default}
! if [check_effective_target_loongarch_asx] { # If compiler support vector
!   if {[check_effective_target_loongarch_asx_hw]} then { # If hardware support vector
!     set dg-do-what-default run
!   } else {
!     set dg-do-what-default compile
!   }
  } else {
!   return 0
  }
  
  dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/lasx/*.\[cS\]]] \
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/abd-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/abd-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/abd-lsx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/abd-lsx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,67 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlsx -fdump-rtl-expand-all" } */
+ 
+ #define ABD(x, y) ((x - y > 0) ? (x - y) : -(x - y))
+ #define MAX(x, y) ((x) > (y) ? (x) : (y))
+ #define MIN(x, y) ((x) < (y) ? (x) : (y))
+ #define N 1024
+ 
+ #define FUNC1(T)                                                              \
+   void									      \
+   sabd1_##T (signed T *restrict a, signed T *restrict b,                      \
+              signed T *restrict out)                                          \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = ABD (a[i], b[i]);                                              \
+   }                                                                           \
+                                                                               \
+   void									      \
+   uabd1_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
+              unsigned T *restrict out)                                        \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = ABD (a[i], b[i]);                                              \
+   }
+ 
+ #define FUNC2(T)                                                              \
+   void									      \
+   sabd2_##T (signed T *restrict a, signed T *restrict b,                      \
+              signed T *restrict out)                                          \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
+   }                                                                           \
+                                                                               \
+   void									      \
+   uabd2_##T (unsigned T *restrict a, unsigned T *restrict b,                  \
+              unsigned T *restrict out)                                        \
+   {                                                                           \
+     for (int i = 0; i < N; i++)                                               \
+       out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]);                           \
+   }
+ 
+ /* Verify if the expand pass fits standard pattern name.  */
+ FUNC1 (char)
+ FUNC1 (short)
+ FUNC1 (int)
+ FUNC1 (long)
+ 
+ /* Verify if the combiner works well.  */
+ FUNC2 (char)
+ FUNC2 (short)
+ FUNC2 (int)
+ FUNC2 (long)
+ /* { dg-final { scan-rtl-dump "Function sabd1_char.*ABD.*Function uabd1_char" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function uabd1_char.*ABD.*Function sabd1_short" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function sabd1_short.*ABD.*Function uabd1_short" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function uabd1_short.*ABD.*Function sabd1_int" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function sabd1_int.*ABD.*Function uabd1_int" "expand" } } */
+ /* { dg-final { scan-rtl-dump "Function sabd1_long.*ABD.*Function uabd1_long" "expand" } } */
+ /* { dg-final { scan-assembler-times "sabd2_char:.*\tvabsd\\.b.*-sabd2_char" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_char:.*\tvabsd\\.bu.*-uabd2_char" 1 } } */
+ /* { dg-final { scan-assembler-times "sabd2_short:.*\tvabsd\\.h.*-sabd2_short" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_short:.*\tvabsd\\.hu.*-uabd2_short" 1 } } */
+ /* { dg-final { scan-assembler-times "sabd2_int:.*\tvabsd\\.w.*-sabd2_int" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_int:.*\tvabsd\\.wu.*-uabd2_int" 1 } } */
+ /* { dg-final { scan-assembler-times "sabd2_long:.*\tvabsd\\.d.*-sabd2_long" 1 } } */
+ /* { dg-final { scan-assembler-times "uabd2_long:.*\tvabsd\\.du.*-uabd2_long" 1 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-ceil-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-ceil-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-ceil-lsx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-ceil-lsx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlsx" } */
+ /* { dg-final { scan-assembler "vavgr.b" } } */
+ /* { dg-final { scan-assembler "vavgr.bu" } } */
+ /* { dg-final { scan-assembler "vavgr.hu" } } */
+ /* { dg-final { scan-assembler "vavgr.h" } } */
+ 
+ #define N 1024
+ 
+ #define TEST(TYPE, NAME)                                        \
+   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
+   void f_##NAME (void)                                          \
+   {                                                             \
+     int i;                                                      \
+     for (i = 0; i < N; i++)                                     \
+       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i] + 1) >> 1;       \
+   }
+ 
+ TEST(char, 1);
+ TEST(short, 2);
+ TEST(unsigned char, 3);
+ TEST(unsigned short, 4);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-floor-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-floor-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-floor-lsx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/avg-floor-lsx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlsx" } */
+ /* { dg-final { scan-assembler "vavg.b" } } */
+ /* { dg-final { scan-assembler "vavg.bu" } } */
+ /* { dg-final { scan-assembler "vavg.hu" } } */
+ /* { dg-final { scan-assembler "vavg.h" } } */
+ 
+ #define N 1024
+ 
+ #define TEST(TYPE, NAME)                                        \
+   TYPE a_##NAME[N], b_##NAME[N], c_##NAME[N];                   \
+   void f_##NAME (void)                                          \
+   {                                                             \
+     int i;                                                      \
+     for (i = 0; i < N; i++)                                     \
+       a_##NAME[i] = (b_##NAME[i] + c_##NAME[i]) >> 1;           \
+   }
+ 
+ TEST(char, 1);
+ TEST(short, 2);
+ TEST(unsigned char, 3);
+ TEST(unsigned short, 4);
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-andn-iorn.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-andn-iorn.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-andn-iorn.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-andn-iorn.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -ftree-vectorize -fdump-tree-optimized" } */
+ 
+ #ifndef N
+ #define N 4
+ #endif
+ 
+ extern float a[N], b[N];
+ extern int c[N], d[N];
+ 
+ void
+ bar1 (void)
+ {
+   for (int i = 0; i < N; i++)
+     d[i] = a[i] > b[i] ? 0 : c[i];
+ }
+ 
+ void
+ bar2 (void)
+ {
+   for (int i = 0; i < N; i++)
+     d[i] = a[i] > b[i] ? c[i]: -1;
+ }
+ 
+ /* We should produce a BIT_ANDC and BIT_IORC here.  */
+ 
+ /* { dg-final { scan-tree-dump ".BIT_ANDN " "optimized" } } */
+ /* { dg-final { scan-tree-dump ".BIT_IORN " "optimized" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-func-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-func-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-func-attr-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-func-attr-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx" } */
+ 
+ typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
+ extern v4i32 a, b, c;
+ 
+ __attribute__ ((target ("no-lsx")))
+ void
+ test (void)
+ {
+   a = __builtin_lsx_vadd_w (b, c); /* { dg-error "built-in function '__builtin_lsx_vadd_w' is not enabled" } */
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-pragma-attr-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-pragma-attr-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-pragma-attr-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-pragma-attr-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx" } */
+ 
+ typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
+ extern v4i32 a, b, c;
+ 
+ #pragma GCC target ("no-lsx")
+ void
+ test (void)
+ {
+   a = __builtin_lsx_vadd_w (b, c); /* { dg-error "built-in function '__builtin_lsx_vadd_w' is not enabled" } */
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/mov-zero-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/mov-zero-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/mov-zero-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/mov-zero-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx" } */
+ /* { dg-final { scan-assembler-times "vxor\\.v" 2 } } */
+ 
+ double
+ get_double_zero ()
+ {
+   return 0;
+ }
+ 
+ float
+ get_float_zero ()
+ {
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcnt.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcnt.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcnt.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcnt.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,41 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx" } */
+ /* { dg-final { scan-assembler-not {popcount} } } */
+ /* { dg-final { scan-assembler-times "vpcnt.d" 2 { target { loongarch64*-*-* } } } } */
+ /* { dg-final { scan-assembler-times "vpcnt.w" 4 { target { loongarch64*-*-* } } } } */
+ 
+ int
+ foo (int x)
+ {
+   return __builtin_popcount (x);
+ }
+ 
+ long
+ foo1 (long x)
+ {
+   return __builtin_popcountl (x);
+ }
+ 
+ long long
+ foo2 (long long x)
+ {
+   return __builtin_popcountll (x);
+ }
+ 
+ int
+ foo3 (int *p)
+ {
+   return __builtin_popcount (*p);
+ }
+ 
+ unsigned
+ foo4 (int x)
+ {
+   return __builtin_popcount (x);
+ }
+ 
+ unsigned long
+ foo5 (int x)
+ {
+   return __builtin_popcount (x);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcount.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcount.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcount.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/popcount.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-times "__builtin_popcount|\\.POPCOUNT" 1 "optimized" } } */
+ 
+ int
+ PopCount (long b)
+ {
+   int c = 0;
+ 
+   while (b)
+     {
+       b &= b - 1;
+       c++;
+     }
+ 
+   return c;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,24 ----
+ /* PR target/112476: ICE with -mlsx */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mfpu=64 -mabi=lp64d -mlsx" } */
+ 
+ int foo, bar;
+ float baz, res, a;
+ 
+ void
+ apply_adjacent_ternary (float *dst, float *src0)
+ {
+   do
+     {
+       __builtin_memcpy (&res, &src0, sizeof (res));
+       *dst = foo ? baz : res;
+       dst++;
+     }
+   while (dst != src0);
+ }
+ 
+ void
+ xx (void)
+ {
+   apply_adjacent_ternary (&a, &a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-3.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr112476-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlsx" } */
+ 
+ #include <stdint.h>
+ 
+ typedef int8_t orc_int8;
+ typedef int16_t orc_int16;
+ typedef int32_t orc_int32;
+ typedef int64_t orc_int64;
+ 
+ typedef union
+ {
+   orc_int32 i;
+   float f;
+   orc_int16 x2[2];
+   orc_int8 x4[4];
+ } orc_union32;
+ typedef union
+ {
+   orc_int64 i;
+   double f;
+   orc_int32 x2[2];
+   float x2f[2];
+   orc_int16 x4[4];
+ } orc_union64;
+ 
+ void
+ audio_orc_s32_to_double (double * restrict d1,
+     const signed int * restrict s1, int n)
+ {
+   int i;
+   orc_union64 *restrict ptr0;
+   const orc_union32 *restrict ptr4;
+   orc_union32 var33;
+   orc_union64 var34;
+   orc_union64 var35;
+   orc_union64 var36;
+ 
+   ptr0 = (orc_union64 *) d1;
+   ptr4 = (orc_union32 *) s1;
+ 
+   var34.i = 0x41e0000000000000UL;
+ 
+   for (i = 0; i < n; i++) {
+     var33 = ptr4[i];
+     var36.f = var33.i;
+     {
+       orc_union64 _src1;
+       orc_union64 _src2;
+       orc_union64 _dest1;
+       _src1.i = ((var36.i) & ((((var36.i)&0x7ff0000000000000UL) == 0) ? 0xfff0000000000000UL : 0xffffffffffffffffUL));
+       _src2.i = ((var34.i) & ((((var34.i)&0x7ff0000000000000UL) == 0) ? 0xfff0000000000000UL : 0xffffffffffffffffUL));
+       _dest1.f = _src1.f / _src2.f;
+       var35.i = ((_dest1.i) & ((((_dest1.i)&0x7ff0000000000000UL) == 0) ? 0xfff0000000000000UL : 0xffffffffffffffffUL));
+     }
+     ptr0[i] = var35;
+   }
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr119084.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr119084.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr119084.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr119084.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -mlsx" } */
+ /* { dg-require-effective-target loongarch_sx_hw } */
+ 
+ typedef signed char V16QI __attribute__ ((vector_size (16)));
+ static char x[128];
+ 
+ __attribute__ ((noipa)) int
+ noopt (int x)
+ {
+   return x;
+ }
+ 
+ int
+ main (void)
+ {
+   int t = noopt (32);
+ 
+   x[32] = 1;
+ 
+   V16QI y = __builtin_lsx_vldx (x, t);
+   if (y[0] != 1)
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr121064.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr121064.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr121064.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr121064.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-require-effective-target loongarch_sx_hw } */
+ /* { dg-do run } */
+ /* { dg-options "-march=loongarch64 -mfpu=64 -mlsx -O3" } */
+ 
+ typedef __INT32_TYPE__ int32_t;
+ typedef unsigned __INT32_TYPE__ uint32_t;
+ 
+ __attribute__ ((noipa)) static int32_t
+ long_filter_ehigh_3830_1 (int32_t *buffer, int length)
+ {
+   int i, j;
+   int32_t dotprod = 0;
+   int32_t delay[4] = { 0 };
+   uint32_t coeffs[4] = { 0 };
+ 
+   for (i = 0; i < length; i++)
+     {
+       dotprod = 0;
+       for (j = 3; j >= 0; j--)
+         {
+           dotprod += delay[j] * coeffs[j];
+           coeffs[j] += ((delay[j] >> 31) | 1);
+         }
+       for (j = 3; j > 0; j--)
+         delay[j] = delay[j - 1];
+       delay[0] = buffer[i];
+     }
+ 
+   return dotprod;
+ }
+ 
+ int
+ main ()
+ {
+   int32_t buffer[] = { -1, 1 };
+   if (long_filter_ehigh_3830_1 (buffer, 2) != -1)
+     __builtin_trap ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr122097.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr122097.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr122097.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/pr122097.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,271 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mabi=lp64d -mlsx" } */
+ /* { dg-final { scan-assembler "vbitseti\.d\t\\\$vr\[0-9\]+,\\\$vr\[0-9\]+,63" } } */
+ 
+ typedef long unsigned int size_t;
+ typedef unsigned char simde__mmask8;
+ typedef long simde__m128i __attribute__ ((__aligned__ ((16))))
+ __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ typedef union
+ {
+ 
+   __attribute__ ((__aligned__ ((16)))) long i64
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ } simde__m128i_private;
+ typedef double simde_float64;
+ typedef simde_float64 simde__m128d __attribute__ ((__aligned__ ((16))))
+ __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ typedef long int int_fast32_t;
+ typedef union
+ {
+ 
+   __attribute__ ((__aligned__ ((16)))) int_fast32_t i32f
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+   __attribute__ ((__aligned__ ((16)))) long i64
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+   __attribute__ ((__aligned__ ((16)))) simde_float64 f64
+       __attribute__ ((__vector_size__ (16))) __attribute__ ((__may_alias__));
+ } simde__m128d_private;
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde__m128d_from_private (simde__m128d_private v)
+ {
+   simde__m128d r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_set_pd (simde_float64 e1, simde_float64 e0)
+ {
+ 
+   simde__m128d_private r_;
+   r_.f64[0] = e0;
+   r_.f64[1] = e1;
+ 
+   return simde__m128d_from_private (r_);
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128i
+ simde_mm_castpd_si128 (simde__m128d a)
+ {
+   simde__m128i r;
+   __builtin_memcpy (&r, &a, sizeof (a));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128i
+ simde__m128i_from_private (simde__m128i_private v)
+ {
+   simde__m128i r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128i_private
+ simde__m128i_to_private (simde__m128i v)
+ {
+   simde__m128i_private r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_castsi128_pd (simde__m128i a)
+ {
+   simde__m128d r;
+   __builtin_memcpy (&r, &a, sizeof (a));
+   return r;
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128i
+ simde_mm_mask_mov_epi64 (simde__m128i src, simde__mmask8 k, simde__m128i a)
+ {
+ 
+   simde__m128i_private src_ = simde__m128i_to_private (src),
+                        a_ = simde__m128i_to_private (a), r_;
+ 
+   for (size_t i = 0; i < (sizeof (r_.i64) / sizeof (r_.i64[0])); i++)
+     {
+       r_.i64[i] = ((k >> i) & 1) ? a_.i64[i] : src_.i64[i];
+     }
+ 
+   return simde__m128i_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_mask_mov_pd (simde__m128d src, simde__mmask8 k, simde__m128d a)
+ {
+   return simde_mm_castsi128_pd (simde_mm_mask_mov_epi64 (
+       simde_mm_castpd_si128 (src), k, simde_mm_castpd_si128 (a)));
+ }
+ 
+ static double
+ simde_test_f64_precision_to_slop (int precision)
+ {
+   return __builtin_expect (!!(precision == 0x7fffffff), 0)
+              ? 0.0
+              : __builtin_pow (10.0, -((double)(precision)));
+ }
+ __attribute__ ((__always_inline__)) inline static void
+ simde_mm_storeu_pd (simde_float64 *mem_addr, simde__m128d a)
+ {
+ 
+   __builtin_memcpy (mem_addr, &a, sizeof (a));
+ }
+ int simde_test_equal_f64 (simde_float64 a, simde_float64 b,
+                           simde_float64 slop);
+ void simde_test_debug_printf_ (const char *format, ...);
+ static int
+ simde_assert_equal_vf64_ (size_t vec_len, simde_float64 const a[(vec_len)],
+                           simde_float64 const b[(vec_len)], simde_float64 slop,
+                           const char *filename, int line, const char *astr,
+                           const char *bstr)
+ {
+   for (size_t i = 0; i < vec_len; i++)
+     {
+       if (__builtin_expect (!!(!simde_test_equal_f64 (a[i], b[i], slop)), 0))
+         {
+           simde_test_debug_printf_ (
+               "%s:%d: assertion failed: %s[%zu] ~= %s[%zu] (%f ~= %f)\n",
+               filename, line, astr, i, bstr, i, ((double)(a[i])),
+               ((double)(b[i])));
+           return 1;
+         }
+     }
+   return 0;
+ }
+ static int
+ simde_test_x86_assert_equal_f64x2_ (simde__m128d a, simde__m128d b,
+                                     simde_float64 slop, const char *filename,
+                                     int line, const char *astr,
+                                     const char *bstr)
+ {
+   simde_float64 a_[sizeof (a) / sizeof (simde_float64)],
+       b_[sizeof (a) / sizeof (simde_float64)];
+   simde_mm_storeu_pd (a_, a);
+   simde_mm_storeu_pd (b_, b);
+   return simde_assert_equal_vf64_ (sizeof (a_) / sizeof (a_[0]), a_, b_, slop,
+                                    filename, line, astr, bstr);
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d_private
+ simde__m128d_to_private (simde__m128d v)
+ {
+   simde__m128d_private r;
+   __builtin_memcpy (&r, &v, sizeof (r));
+   return r;
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_min_pd (simde__m128d a, simde__m128d b)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b);
+ 
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = (a_.f64[i] < b_.f64[i]) ? a_.f64[i] : b_.f64[i];
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_max_pd (simde__m128d a, simde__m128d b)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b);
+ 
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = (a_.f64[i] > b_.f64[i]) ? a_.f64[i] : b_.f64[i];
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_x_mm_abs_pd (simde__m128d a)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a);
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = __builtin_fabs (a_.f64[i]);
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_cmple_pd (simde__m128d a, simde__m128d b)
+ {
+ 
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b);
+ 
+   r_.i64 = ((__typeof__ (r_.i64))((a_.f64 <= b_.f64)));
+   return simde__m128d_from_private (r_);
+ }
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_x_mm_select_pd (simde__m128d a, simde__m128d b, simde__m128d mask)
+ {
+   simde__m128d_private r_, a_ = simde__m128d_to_private (a),
+                            b_ = simde__m128d_to_private (b),
+                            mask_ = simde__m128d_to_private (mask);
+ 
+   r_.i64 = a_.i64 ^ ((a_.i64 ^ b_.i64) & mask_.i64);
+   return simde__m128d_from_private (r_);
+ }
+ simde__m128d simde_mm_cmpge_pd (simde__m128d a, simde__m128d b);
+ 
+ simde__m128d
+ simde_x_mm_copysign_pd (simde__m128d dest, simde__m128d src)
+ {
+   simde__m128d_private r_, dest_ = simde__m128d_to_private (dest),
+                            src_ = simde__m128d_to_private (src);
+   for (size_t i = 0; i < (sizeof (r_.f64) / sizeof (r_.f64[0])); i++)
+     {
+       r_.f64[i] = __builtin_copysign (dest_.f64[i], src_.f64[i]);
+     }
+ 
+   return simde__m128d_from_private (r_);
+ }
+ simde__m128d simde_mm_or_pd (simde__m128d a, simde__m128d b);
+ 
+ simde__m128d simde_mm_set1_pd (simde_float64 a);
+ 
+ __attribute__ ((__always_inline__)) inline static simde__m128d
+ simde_mm_range_pd (simde__m128d a, simde__m128d b, int imm8)
+ {
+   simde__m128d r;
+ 
+   r = simde_x_mm_select_pd (
+       b, a, simde_mm_cmple_pd (simde_x_mm_abs_pd (a), simde_x_mm_abs_pd (b)));
+ 
+   r = simde_x_mm_copysign_pd (r, a);
+ 
+   return r;
+ }
+ int
+ test_simde_mm_mask_range_pd (void)
+ {
+ 
+   simde__m128d src, a, b, e, r;
+ 
+   src = simde_mm_set_pd (-2.92, -85.39);
+   a = simde_mm_set_pd (-47.59, -122.31);
+   b = simde_mm_set_pd (877.42, 69.15);
+   e = simde_mm_set_pd (-47.59, -69.15);
+   r = simde_mm_mask_mov_pd (src, 143, simde_mm_range_pd (a, b, 2));
+   do
+     {
+       if (simde_test_x86_assert_equal_f64x2_ (
+               r, e, simde_test_f64_precision_to_slop (1),
+               "../test/x86/avx512/range.c", 1454, "r", "e"))
+         {
+           return 1;
+         }
+     }
+   while (0);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-b.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-b.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-b.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-b.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "vrotr\\.b" 2 } } */
+ /* { dg-final { scan-assembler-times "vneg\\.b" 1 } } */
+ 
+ #define TYPE char
+ #include "rotl-with-vrotr-w.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-d.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "vrotr\\.d" 2 } } */
+ /* { dg-final { scan-assembler-times "vneg\\.d" 1 } } */
+ 
+ #define TYPE long long
+ #include "rotl-with-vrotr-w.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-h.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-h.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-h.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-h.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "vrotr\\.h" 2 } } */
+ /* { dg-final { scan-assembler-times "vneg\\.h" 1 } } */
+ 
+ #define TYPE short
+ #include "rotl-with-vrotr-w.c"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-w.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-w.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-w.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/rotl-with-vrotr-w.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,28 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
+ /* { dg-final { scan-assembler-times "vrotr\\.w" 2 } } */
+ /* { dg-final { scan-assembler-times "vneg\\.w" 1 } } */
+ 
+ #ifndef VLEN
+ #define VLEN 16
+ #endif
+ 
+ #ifndef TYPE
+ #define TYPE int
+ #endif
+ 
+ typedef unsigned TYPE V __attribute__ ((vector_size (VLEN)));
+ V a, b, c;
+ 
+ void
+ test (int x)
+ {
+   b = a << x | a >> ((int)sizeof (TYPE) * __CHAR_BIT__ - x);
+ }
+ 
+ void
+ test2 (void)
+ {
+   for (int i = 0; i < VLEN / sizeof (TYPE); i++)
+     c[i] = a[i] << b[i] | a[i] >> ((int)sizeof (TYPE) * __CHAR_BIT__ - b[i]);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/sad-lsx.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/sad-lsx.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/sad-lsx.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/sad-lsx.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mlsx" } */
+ 
+ #define N 1024
+ 
+ #define TEST(SIGN)                                             \
+   SIGN char a_##SIGN[N], b_##SIGN[N];                          \
+   int f_##SIGN (void)                                          \
+   {                                                            \
+     int i, sum = 0;                                            \
+     for (i = 0; i < N; i++)                                    \
+       sum += __builtin_abs (a_##SIGN[i] - b_##SIGN[i]);;       \
+     return sum;                                                \
+   }
+ 
+ TEST(signed);
+ TEST(unsigned);
+ 
+ /* { dg-final { scan-assembler {\tvabsd.bu\t} } } */
+ /* { dg-final { scan-assembler {\tvabsd.b\t} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vec_pack_unpack_128.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vec_pack_unpack_128.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vec_pack_unpack_128.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vec_pack_unpack_128.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,120 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mlsx -O3" } */
+ 
+ #define N 128
+ 
+ char c[N];
+ short int h[N];
+ int s[N];
+ long l[N];
+ float f[N];
+ double d[N];
+ unsigned char uc[N];
+ unsigned short int uh[N];
+ unsigned int us[N];
+ unsigned long ul[N];
+ 
+ /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v2df:.*\tvftintrz\\.l\\.d.*-test_vec_pack_sfix_trunc_v2df\n" } } */
+ /* { dg-final { scan-assembler-not "test_vec_pack_sfix_trunc_v2df:.*\tvpickev\\.w.*-test_vec_pack_sfix_trunc_v2df\n" } } */
+ /* { dg-final { scan-assembler "test_vec_pack_sfix_trunc_v2df:.*\tvftintrz\\.w\\.d.*-test_vec_pack_sfix_trunc_v2df\n" } } */
+ void
+ test_vec_pack_sfix_trunc_v2df (void)
+ {
+   for (int i = 0; i < N; i++)
+     s[i] = d[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_packs_float_v2di:.*\tmovgr2fr\\.d.*-test_vec_packs_float_v2di" } } */
+ /* { dg-final { scan-assembler "test_vec_packs_float_v2di:.*\tvffint\\.s\\.l.*-test_vec_packs_float_v2di" } } */
+ void
+ test_vec_packs_float_v2di (void)
+ {
+   for (int i = 0; i < N; i++)
+     f[i] = l[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpack_sfix_trunc_hi_lo_v4sf:.*\tftintrz\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v4sf" } } */
+ /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v4sf:.*\tvftintrzh\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v4sf" } } */
+ /* { dg-final { scan-assembler "test_vec_unpack_sfix_trunc_hi_lo_v4sf:.*\tvftintrzl\\.l\\.s.*-test_vec_unpack_sfix_trunc_hi_lo_v4sf" } } */
+ void
+ test_vec_unpack_sfix_trunc_hi_lo_v4sf (void)
+ {
+   for (int i = 0; i < N; i++)
+     l[i] = f[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvslti\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
+ /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvilvl\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
+ /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvilvh\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
+ /* { dg-final { scan-assembler-not "test_vec_unpacks_float_hi_lo_v4si:.*\tvffint\\.d\\.l.*-test_vec_unpacks_float_hi_lo_v4si" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v4si:.*\tvffinth\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_float_hi_lo_v4si:.*\tvffintl\\.d\\.w.*-test_vec_unpacks_float_hi_lo_v4si" } } */
+ void
+ test_vec_unpacks_float_hi_lo_v4si (void)
+ {
+   for (int i = 0; i < N; i++)
+     d[i] = s[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v4si:.*\tvilvh\\.w.*-test_vec_unpacks_hi_lo_v4si" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v4si:.*\tvexth\\.d\\.w.*-test_vec_unpacks_hi_lo_v4si" } } */
+ void
+ test_vec_unpacks_hi_lo_v4si (void)
+ {
+   for (int i = 0; i < N; i++)
+     l[i] = s[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v8hi:.*\tvilvh\\.h.*-test_vec_unpacks_hi_lo_v8hi" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v8hi:.*\tvexth\\.w\\.h.*-test_vec_unpacks_hi_lo_v8hi" } } */
+ void
+ test_vec_unpacks_hi_lo_v8hi (void)
+ {
+   for (int i = 0; i < N; i++)
+     s[i] = h[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpacks_hi_lo_v16qi:.*\tvilvh\\.b.*-test_vec_unpacks_hi_lo_v16qi" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v16qi:.*\tvexth\\.h\\.b.*-test_vec_unpacks_hi_lo_v16qi" } } */
+ void
+ test_vec_unpacks_hi_lo_v16qi (void)
+ {
+   for (int i = 0; i < N; i++)
+     h[i] = c[i];
+ }
+ 
+ /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v4sf:.*\tvfcvtl\\.d\\.s.*-test_vec_unpacks_hi_lo_v4sf" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacks_hi_lo_v4sf:.*\tvfcvth\\.d\\.s.*-test_vec_unpacks_hi_lo_v4sf" } } */
+ void
+ test_vec_unpacks_hi_lo_v4sf (void)
+ {
+   for (int i = 0; i < N; i++)
+     d[i] = f[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v4si:.*\tvilvh\\.w.*-test_vec_unpacku_hi_lo_v4si" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v4si:.*\tvexth\\.du\\.wu.*-test_vec_unpacku_hi_lo_v4si" } } */
+ void
+ test_vec_unpacku_hi_lo_v4si (void)
+ {
+   for (int i = 0; i < N; i++)
+     ul[i] = us[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v8hi:.*\tvilvh\\.h.*-test_vec_unpacku_hi_lo_v8hi" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v8hi:.*\tvexth\\.wu\\.hu.*-test_vec_unpacku_hi_lo_v8hi" } } */
+ void
+ test_vec_unpacku_hi_lo_v8hi (void)
+ {
+   for (int i = 0; i < N; i++)
+     us[i] = uh[i];
+ }
+ 
+ /* { dg-final { scan-assembler-not "test_vec_unpacku_hi_lo_v16qi:.*\tvilvh\\.b.*-test_vec_unpacku_hi_lo_v16qi" } } */
+ /* { dg-final { scan-assembler "test_vec_unpacku_hi_lo_v16qi:.*\tvexth\\.hu\\.bu.*-test_vec_unpacku_hi_lo_v16qi" } } */
+ void
+ test_vec_unpacku_hi_lo_v16qi (void)
+ {
+   for (int i = 0; i < N; i++)
+     uh[i] = uc[i];
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar-no-inexact.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar-no-inexact.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar-no-inexact.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar-no-inexact.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,23 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fno-fp-int-builtin-inexact -mcmodel=normal" } */
+ 
+ #include "vect-frint-scalar.c"
+ 
+ /* cannot use LSX for these with -fno-fp-int-builtin-inexact,
+    call library function.  */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(ceil\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(ceilf\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(floor\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(floorf\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(trunc\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(truncf\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(roundeven\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(roundevenf\\)" } } */
+ 
+ /* nearbyint is not allowed to rasie FE_INEXACT for decades */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyint\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyintf\\)" } } */
+ 
+ /* rint should just use basic FP operation */
+ /* { dg-final { scan-assembler "\tfrint\.s" } } */
+ /* { dg-final { scan-assembler "\tfrint\.d" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-frint-scalar.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -ffp-int-builtin-inexact -mcmodel=normal" } */
+ 
+ #define test(func, suffix) \
+ __typeof__ (1.##suffix) \
+ _##func##suffix (__typeof__ (1.##suffix) x) \
+ { \
+   return __builtin_##func##suffix (x); \
+ }
+ 
+ test (ceil, f)
+ test (ceil, )
+ test (floor, f)
+ test (floor, )
+ test (trunc, f)
+ test (trunc, )
+ test (roundeven, f)
+ test (roundeven, )
+ test (nearbyint, f)
+ test (nearbyint, )
+ test (rint, f)
+ test (rint, )
+ 
+ /* { dg-final { scan-assembler "\tvfrintrp\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrm\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrz\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrne\.s" } } */
+ /* { dg-final { scan-assembler "\tvfrintrp\.d" } } */
+ /* { dg-final { scan-assembler "\tvfrintrm\.d" } } */
+ /* { dg-final { scan-assembler "\tvfrintrz\.d" } } */
+ /* { dg-final { scan-assembler "\tvfrintrne\.d" } } */
+ 
+ /* must do vreplvei first */
+ /* { dg-final { scan-assembler-times "\tvreplvei\.w\t\\\$vr0,\\\$vr0,0" 4 } } */
+ /* { dg-final { scan-assembler-times "\tvreplvei\.d\t\\\$vr0,\\\$vr0,0" 4 } } */
+ 
+ /* nearbyint is not allowed to rasie FE_INEXACT for decades */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyint\\)" } } */
+ /* { dg-final { scan-assembler "\tb\t%plt\\(nearbyintf\\)" } } */
+ 
+ /* rint should just use basic FP operation */
+ /* { dg-final { scan-assembler "\tfrint\.s" } } */
+ /* { dg-final { scan-assembler "\tfrint\.d" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-shift-imm-round.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-shift-imm-round.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-shift-imm-round.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vect-shift-imm-round.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=loongarch64 -mlsx" } */
+ /* { dg-final { scan-assembler "vsrari\\.w\t\\\$vr\[0-9\]+,\\\$vr\[0-9\]+,15" } } */
+ 
+ int x __attribute__ ((vector_size (16)));
+ 
+ void
+ f (void)
+ {
+   x = (x + (1 << 14)) >> 15;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-func-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-func-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx" } */
+ 
+ typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
+ extern v4i32 a, b, c;
+ 
+ #ifndef TEST_TARGET_PRAGMA
+ __attribute__ ((target ("no-lasx")))
+ #else
+ #pragma GCC target ("no-lasx")
+ #endif
+ void
+ test (void)
+ {
+   a = b + c;
+ }
+ 
+ 
+ /* { dg-final { scan-assembler "vadd.w" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vector-pragma-attr-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx" } */
+ 
+ #define TEST_TARGET_PRAGMA 1
+ #include "./vector-func-attr-1.c"
+ 
+ /* { dg-final { scan-assembler "vadd.w" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-d.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-d.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,188 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #define F double
+ #define I long long
+ 
+ #include "vfcmp-f.c"
+ 
+ /*
+ ** compare_quiet_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.ceq.d	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cune.d	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.slt.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sle.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.slt.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sle.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sule.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sult.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sule.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sult.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.clt.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cle.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.clt.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cle.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cule.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cult.d	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cule.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cult.d	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cun.d	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_ordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cor.d	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-f.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-f.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-f.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/vfcmp-f.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,373 ----
+ /* Test mapping IEC 60559 operations to SIMD instructions.
+    For details read C23 Annex F.3 and LoongArch Vol. 1 section 3.2.2.1.  */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
+ /* { dg-final { check-function-bodies "**" "" } } */
+ 
+ #ifndef F
+ #define F float
+ #endif
+ 
+ #ifndef I
+ #define I int
+ #endif
+ 
+ #ifndef VL
+ #define VL 16
+ #endif
+ 
+ typedef F VF __attribute__ ((vector_size (VL)));
+ typedef I VI __attribute__ ((vector_size (VL)));
+ 
+ #define ARGS const VF *a, const VF *b, VI *c
+ 
+ void
+ compare_quiet_equal (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = (_a == *b);
+ }
+ 
+ void
+ compare_quiet_not_equal (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = (_a != *b);
+ }
+ 
+ void
+ compare_signaling_greater (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = (_a > *b);
+ }
+ 
+ void
+ compare_signaling_greater_equal (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = (_a >= *b);
+ }
+ 
+ void
+ compare_signaling_less (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = (_a < *b);
+ }
+ 
+ void
+ compare_signaling_less_equal (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = (_a <= *b);
+ }
+ 
+ void
+ compare_signaling_not_greater (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = ~(_a > *b);
+ }
+ 
+ void
+ compare_signaling_less_unordered (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = ~(_a >= *b);
+ }
+ 
+ void
+ compare_signaling_not_less (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = ~(_a < *b);
+ }
+ 
+ void
+ compare_signaling_greater_unordered (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   *c = ~(_a <= *b);
+ }
+ 
+ void
+ compare_quiet_less (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isless (_a[i], (*b)[i]) ? -1 : 0;
+ }
+ 
+ void
+ compare_quiet_less_equal (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_islessequal (_a[i], (*b)[i]) ? -1 : 0;
+ }
+ 
+ void
+ compare_quiet_greater (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isgreater (_a[i], (*b)[i]) ? -1 : 0;
+ }
+ 
+ void
+ compare_quiet_greater_equal (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isgreaterequal (_a[i], (*b)[i]) ? -1 : 0;
+ }
+ 
+ void
+ compare_quiet_not_less (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isless (_a[i], (*b)[i]) ? 0 : -1;
+ }
+ 
+ void
+ compare_quiet_greater_unordered (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_islessequal (_a[i], (*b)[i]) ? 0 : -1;
+ }
+ 
+ void
+ compare_quiet_not_greater (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isgreater (_a[i], (*b)[i]) ? 0 : -1;
+ }
+ 
+ void
+ compare_quiet_less_unordered (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isgreaterequal (_a[i], (*b)[i]) ? 0 : -1;
+ }
+ 
+ void
+ compare_quiet_unordered (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isunordered (_a[i], (*b)[i]) ? -1 : 0;
+ }
+ 
+ void
+ compare_quiet_ordered (ARGS)
+ {
+   VF _a = *a;
+   asm("" ::: "memory");
+   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
+     (*c)[i] = __builtin_isunordered (_a[i], (*b)[i]) ? 0 : -1;
+ }
+ 
+ /*
+ ** compare_quiet_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.ceq.s	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cune.s	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.slt.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sle.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.slt.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sle.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sule.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_less_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sult.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_not_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sule.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_signaling_greater_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.sult.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.clt.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cle.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.clt.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_equal:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cle.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_less:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cule.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_greater_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cult.s	(\$vr[0-9]+),\2,\1
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_not_greater:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cule.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_less_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cult.s	(\$vr[0-9]+),\1,\2
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_unordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cun.s	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
+ 
+ /*
+ ** compare_quiet_ordered:
+ ** 	vld	(\$vr[0-9]+),\$r4,0
+ ** 	vld	(\$vr[0-9]+),\$r5,0
+ ** 	vfcmp.cor.s	(\$vr[0-9]+),(\1,\2|\2,\1)
+ **	vst	\3,\$r6,0
+ **	jr	\$r1
+ */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign-run.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -mlsx" } */
+ /* { dg-require-effective-target loongarch_sx_hw } */
+ 
+ extern void abort(void);
+ 
+ static double x = 2.0;
+ static float  y = 2.0;
+ 
+ int main()
+ {
+   if ((2.5 * __builtin_copysign(1.0d, x)) != 2.5)
+      abort();
+ 
+   if ((2.5 * __builtin_copysign(1.0f, y)) != 2.5)
+      abort();
+ 
+   if ((2.5 * __builtin_copysignf(1.0d, -x)) != -2.5)
+      abort();
+ 
+   if ((2.5 * __builtin_copysignf(1.0f, -y)) != -2.5)
+      abort();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector/lsx/xorsign.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mlsx" } */
+ /* { dg-final { scan-assembler "vand\\.v" } } */
+ /* { dg-final { scan-assembler "vxor\\.v" } } */
+ /* { dg-final { scan-assembler-not "fcopysign" } } */
+ /* { dg-final { scan-assembler-not "fmul" } } */
+ 
+ double
+ my_xorsign (double a, double b)
+ {
+   return a * __builtin_copysign (1.0d, b);
+ }
+ 
+ float
+ my_xorsignf (float a, float b)
+ {
+   return a * __builtin_copysignf (1.0f, b);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector-func-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector-func-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector-func-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector-func-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,19 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx" } */
- 
- typedef int v4i32 __attribute__ ((vector_size(16), aligned(16)));
- extern v4i32 a, b, c;
- 
- #ifndef TEST_TARGET_PRAGMA
- __attribute__ ((target ("no-lasx")))
- #else
- #pragma GCC target ("no-lasx")
- #endif
- void
- test (void)
- {
-   a = b + c;
- }
- 
- 
- /* { dg-final { scan-assembler "vadd.w" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector-pragma-attr-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector-pragma-attr-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vector-pragma-attr-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vector-pragma-attr-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,7 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx" } */
- 
- #define TEST_TARGET_PRAGMA 1
- #include "./vector-func-attr-1.c"
- 
- /* { dg-final { scan-assembler "vadd.w" } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vfcmp-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vfcmp-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vfcmp-d.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vfcmp-d.c	Thu Jan  1 00:00:00 1970
***************
*** 1,188 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- #define F double
- #define I long long
- 
- #include "vfcmp-f.c"
- 
- /*
- ** compare_quiet_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.ceq.d	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cune.d	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.slt.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sle.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.slt.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sle.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sule.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sult.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sule.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sult.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.clt.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cle.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.clt.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cle.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cule.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cult.d	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cule.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cult.d	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cun.d	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_ordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cor.d	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vfcmp-f.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vfcmp-f.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vfcmp-f.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vfcmp-f.c	Thu Jan  1 00:00:00 1970
***************
*** 1,373 ****
- /* Test mapping IEC 60559 operations to SIMD instructions.
-    For details read C23 Annex F.3 and LoongArch Vol. 1 section 3.2.2.1.  */
- 
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx -fno-vect-cost-model" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- #ifndef F
- #define F float
- #endif
- 
- #ifndef I
- #define I int
- #endif
- 
- #ifndef VL
- #define VL 16
- #endif
- 
- typedef F VF __attribute__ ((vector_size (VL)));
- typedef I VI __attribute__ ((vector_size (VL)));
- 
- #define ARGS const VF *a, const VF *b, VI *c
- 
- void
- compare_quiet_equal (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = (_a == *b);
- }
- 
- void
- compare_quiet_not_equal (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = (_a != *b);
- }
- 
- void
- compare_signaling_greater (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = (_a > *b);
- }
- 
- void
- compare_signaling_greater_equal (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = (_a >= *b);
- }
- 
- void
- compare_signaling_less (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = (_a < *b);
- }
- 
- void
- compare_signaling_less_equal (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = (_a <= *b);
- }
- 
- void
- compare_signaling_not_greater (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = ~(_a > *b);
- }
- 
- void
- compare_signaling_less_unordered (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = ~(_a >= *b);
- }
- 
- void
- compare_signaling_not_less (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = ~(_a < *b);
- }
- 
- void
- compare_signaling_greater_unordered (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   *c = ~(_a <= *b);
- }
- 
- void
- compare_quiet_less (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isless (_a[i], (*b)[i]) ? -1 : 0;
- }
- 
- void
- compare_quiet_less_equal (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_islessequal (_a[i], (*b)[i]) ? -1 : 0;
- }
- 
- void
- compare_quiet_greater (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isgreater (_a[i], (*b)[i]) ? -1 : 0;
- }
- 
- void
- compare_quiet_greater_equal (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isgreaterequal (_a[i], (*b)[i]) ? -1 : 0;
- }
- 
- void
- compare_quiet_not_less (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isless (_a[i], (*b)[i]) ? 0 : -1;
- }
- 
- void
- compare_quiet_greater_unordered (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_islessequal (_a[i], (*b)[i]) ? 0 : -1;
- }
- 
- void
- compare_quiet_not_greater (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isgreater (_a[i], (*b)[i]) ? 0 : -1;
- }
- 
- void
- compare_quiet_less_unordered (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isgreaterequal (_a[i], (*b)[i]) ? 0 : -1;
- }
- 
- void
- compare_quiet_unordered (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isunordered (_a[i], (*b)[i]) ? -1 : 0;
- }
- 
- void
- compare_quiet_ordered (ARGS)
- {
-   VF _a = *a;
-   asm("" ::: "memory");
-   for (int i = 0; i < sizeof (*c) / sizeof ((*c)[0]); i++)
-     (*c)[i] = __builtin_isunordered (_a[i], (*b)[i]) ? 0 : -1;
- }
- 
- /*
- ** compare_quiet_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.ceq.s	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cune.s	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.slt.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sle.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.slt.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sle.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sule.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sult.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sule.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.sult.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.clt.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cle.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.clt.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_equal:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cle.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_less:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cule.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cult.s	(\$vr[0-9]+),\2,\1
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_greater:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cule.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cult.s	(\$vr[0-9]+),\1,\2
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_unordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cun.s	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_ordered:
- ** 	vld	(\$vr[0-9]+),\$r4,0
- ** 	vld	(\$vr[0-9]+),\$r5,0
- ** 	vfcmp.cor.s	(\$vr[0-9]+),(\1,\2|\2,\1)
- **	vst	\3,\$r6,0
- **	jr	\$r1
- */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vfmax-vfmin.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vfmax-vfmin.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vfmax-vfmin.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vfmax-vfmin.c	Thu Jan  1 00:00:00 1970
***************
*** 1,31 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mtune=la464 -mlasx" } */
- /* { dg-final { scan-assembler "\tvfmin\\.d" } } */
- /* { dg-final { scan-assembler "\tvfmax\\.d" } } */
- /* { dg-final { scan-assembler "\txvfmin\\.d" } } */
- /* { dg-final { scan-assembler "\txvfmax\\.d" } } */
- /* { dg-final { scan-assembler "\tvfmin\\.s" } } */
- /* { dg-final { scan-assembler "\tvfmax\\.s" } } */
- /* { dg-final { scan-assembler "\txvfmin\\.s" } } */
- /* { dg-final { scan-assembler "\txvfmax\\.s" } } */
- 
- #define T(OP) __typeof__ (__builtin_##OP (0, 0))
- 
- #define TEST(OP, LEN) \
- void \
- test_##OP##LEN (T (OP) *restrict dest, \
- 		const T (OP) *restrict src1, \
- 		const T (OP) *restrict src2) \
- { \
-   for (int i = 0; i < LEN / sizeof (T(OP)); i++) \
-     dest[i] = __builtin_##OP (src1[i], src2[i]); \
- }
- 
- TEST(fmin, 16)
- TEST(fmax, 16)
- TEST(fmin, 32)
- TEST(fmax, 32)
- TEST(fminf, 16)
- TEST(fmaxf, 16)
- TEST(fminf, 32)
- TEST(fmaxf, 32)
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vrepli.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vrepli.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/vrepli.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/vrepli.c	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx" } */
- /* { dg-final { scan-assembler "\tvldi\t\\\$vr\[0-9\]+,221" } } */
- /* { dg-final { scan-assembler "\txvldi\t\\\$xr\[0-9\]+,221" } } */
- 
- int f __attribute__((vector_size (16)));
- int g __attribute__((vector_size (32)));
- 
- void
- test (void)
- {
-   constexpr int x = (int) 0xdddddddd;
-   f = (typeof(f)){x, x, x, x};
-   g = (typeof(g)){x, x, x, x, x, x, x, x};
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-1.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-1.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-1.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fdump-tree-optimized" } */
- /* { dg-final { scan-tree-dump "WIDEN_MULT_EVEN_EXPR" "optimized" } } */
- /* { dg-final { scan-tree-dump "WIDEN_MULT_ODD_EXPR" "optimized" } } */
- 
- typedef __INT32_TYPE__ i32;
- typedef __INT64_TYPE__ i64;
- 
- i32 x[8], y[8];
- 
- i64
- test (void)
- {
-   i64 ret = 0;
-   for (int i = 0; i < 8; i++)
-     ret ^= (i64) x[i] * y[i];
-   return ret;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-2.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-2.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/wide-mul-reduc-2.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fdump-tree-optimized" } */
- /* { dg-final { scan-assembler "xvmaddw(ev|od)\\.d\\.w" } } */
- /* { dg-final { scan-tree-dump "DOT_PROD_EXPR" "optimized" } } */
- 
- typedef __INT32_TYPE__ i32;
- typedef __INT64_TYPE__ i64;
- 
- i32 x[8], y[8];
- 
- i64
- test (void)
- {
-   i64 ret = 0;
-   for (int i = 0; i < 8; i++)
-     ret += (i64) x[i] * y[i];
-   return ret;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-signed.c	Thu Jan  1 00:00:00 1970
***************
*** 1,12 ****
- /* Verify optimization for mulw.d.w,
-    which can help with the replacement of the high-latency div.w.  */
- /* { dg-do compile { target { loongarch64*-*-* } } } */
- /* { dg-options "-O3" } */
- 
- int
- test (int a)
- {
-   return a / 3;
- }
- 
- /* { dg-final { scan-assembler-not {\tdiv.w\t} } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-unsigned.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-unsigned.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-unsigned.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/widen-mul-rtx-cost-unsigned.c	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- /* Verify optimization for mulh.wu, which can reduce insns.  */
- /* { dg-do compile } */
- /* { dg-options "-O3" } */
- 
- int
- test (unsigned int a)
- {
-   return a / 3;
- }
- 
- /* { dg-final { scan-assembler {\tmulh.wu\t} } } */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xorsign-run.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xorsign-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xorsign-run.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xorsign-run.c	Thu Jan  1 00:00:00 1970
***************
*** 1,25 ****
- /* { dg-do run } */
- /* { dg-options "-O2 -mlsx" } */
- /* { dg-require-effective-target loongarch_sx_hw } */
- 
- extern void abort(void);
- 
- static double x = 2.0;
- static float  y = 2.0;
- 
- int main()
- {
-   if ((2.5 * __builtin_copysign(1.0d, x)) != 2.5)
-      abort();
- 
-   if ((2.5 * __builtin_copysign(1.0f, y)) != 2.5)
-      abort();
- 
-   if ((2.5 * __builtin_copysignf(1.0d, -x)) != -2.5)
-      abort();
- 
-   if ((2.5 * __builtin_copysignf(1.0f, -y)) != -2.5)
-      abort();
- 
-   return 0;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xorsign.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xorsign.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xorsign.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xorsign.c	Thu Jan  1 00:00:00 1970
***************
*** 1,18 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlsx" } */
- /* { dg-final { scan-assembler "vand\\.v" } } */
- /* { dg-final { scan-assembler "vxor\\.v" } } */
- /* { dg-final { scan-assembler-not "fcopysign" } } */
- /* { dg-final { scan-assembler-not "fmul" } } */
- 
- double
- my_xorsign (double a, double b)
- {
-   return a * __builtin_copysign (1.0d, b);
- }
- 
- float
- my_xorsignf (float a, float b)
- {
-   return a * __builtin_copysignf (1.0f, b);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xvfcmp-d.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xvfcmp-d.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xvfcmp-d.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xvfcmp-d.c	Thu Jan  1 00:00:00 1970
***************
*** 1,189 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- #define F double
- #define I long long
- #define VL 32
- 
- #include "vfcmp-f.c"
- 
- /*
- ** compare_quiet_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.ceq.d	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cune.d	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.slt.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sle.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.slt.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sle.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sule.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sult.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sule.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sult.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.clt.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cle.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.clt.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cle.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cule.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cult.d	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cule.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cult.d	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cun.d	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_ordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cor.d	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xvfcmp-f.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xvfcmp-f.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/xvfcmp-f.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/xvfcmp-f.c	Thu Jan  1 00:00:00 1970
***************
*** 1,189 ****
- /* { dg-do compile } */
- /* { dg-options "-O2 -mlasx -fno-vect-cost-model" } */
- /* { dg-final { check-function-bodies "**" "" } } */
- 
- #define F float
- #define I int
- #define VL 32
- 
- #include "vfcmp-f.c"
- 
- /*
- ** compare_quiet_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.ceq.s	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cune.s	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.slt.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sle.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.slt.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sle.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sule.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_less_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sult.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_not_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sule.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_signaling_greater_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.sult.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.clt.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cle.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.clt.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_equal:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cle.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_less:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cule.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_greater_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cult.s	(\$xr[0-9]+),\2,\1
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_not_greater:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cule.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_less_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cult.s	(\$xr[0-9]+),\1,\2
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_unordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cun.s	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
- 
- /*
- ** compare_quiet_ordered:
- ** 	xvld	(\$xr[0-9]+),\$r4,0
- ** 	xvld	(\$xr[0-9]+),\$r5,0
- ** 	xvfcmp.cor.s	(\$xr[0-9]+),(\1,\2|\2,\1)
- **	xvst	\3,\$r6,0
- **	jr	\$r1
- */
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/zero-size-field-pass.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/zero-size-field-pass.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/zero-size-field-pass.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/zero-size-field-pass.c	Thu Jan  1 00:00:00 1970
***************
*** 1,30 ****
- /* Test that LoongArch backend ignores zero-sized fields of aggregates in
-    argument passing.  */
- 
- /* { dg-do compile } */
- /* { dg-options "-O2 -mdouble-float -mabi=lp64d" } */
- /* { dg-final { scan-assembler "\\\$f1" } } */
- 
- struct test
- {
-   int empty1[0];
-   double empty2[0];
-   int : 0;
-   float x;
-   long empty3[0];
-   long : 0;
-   float y;
-   unsigned : 0;
-   char empty4[0];
- };
- 
- extern void callee (struct test);
- 
- void
- caller (void)
- {
-   struct test test;
-   test.x = 114;
-   test.y = 514;
-   callee (test);
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/zero-size-field-ret.c gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/zero-size-field-ret.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/loongarch/zero-size-field-ret.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/loongarch/zero-size-field-ret.c	Thu Jan  1 00:00:00 1970
***************
*** 1,28 ****
- /* Test that LoongArch backend ignores zero-sized fields of aggregates in
-    returning.  */
- 
- /* { dg-do compile } */
- /* { dg-options "-O2 -mdouble-float -mabi=lp64d" } */
- /* { dg-final { scan-assembler-not "\\\$r4" } } */
- 
- struct test
- {
-   int empty1[0];
-   double empty2[0];
-   int : 0;
-   float x;
-   long empty3[0];
-   long : 0;
-   float y;
-   unsigned : 0;
-   char empty4[0];
- };
- 
- extern struct test callee (void);
- 
- float
- caller (void)
- {
-   struct test test = callee ();
-   return test.x + test.y;
- }
--- 0 ----
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c gcc-16-20251214/gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/powerpc/p9-vec-length-epil-8.c	Sun Dec 14 22:32:13 2025
***************
*** 13,17 ****
  
  #include "p9-vec-length-8.h"
  
! /* { dg-final { scan-assembler-times {\mlxvl\M} 16 } } */
  /* { dg-final { scan-assembler-times {\mstxvl\M} 7 } } */
--- 13,17 ----
  
  #include "p9-vec-length-8.h"
  
! /* { dg-final { scan-assembler-times {\mlxvl\M} 14 } } */
  /* { dg-final { scan-assembler-times {\mstxvl\M} 7 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/pragma-target-1.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/pragma-target-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/pragma-target-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/pragma-target-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,59 ----
+ /* Test for #pragma GCC target and push/pop options support in RISC-V */
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -O2" } */
+ 
+ /* Default compilation options - no vector */
+ void default_func(void) {
+ #ifdef __riscv_vector
+   __builtin_abort();  /* Should not have vector by default */
+ #endif
+ }
+ 
+ /* Change target to enable vector */
+ #pragma GCC push_options
+ #pragma GCC target("arch=rv64gcv")
+ void vector_func(void) {
+ #ifndef __riscv_vector
+   __builtin_abort();  /* Should have vector here */
+ #endif
+ }
+ #pragma GCC pop_options
+ 
+ /* Back to default - no vector */
+ void after_pop_func(void) {
+ #ifdef __riscv_vector
+   __builtin_abort();  /* Should not have vector after pop */
+ #endif
+ }
+ 
+ /* Test multiple push/pop levels */
+ #pragma GCC push_options
+ #pragma GCC target("arch=rv64gc")
+ void base_func(void) {
+ #ifdef __riscv_vector
+   __builtin_abort();  /* Should not have vector */
+ #endif
+ }
+ 
+ #pragma GCC push_options
+ #pragma GCC target("arch=rv64gcv")
+ void nested_vector_func(void) {
+ #ifndef __riscv_vector
+   __builtin_abort();  /* Should have vector here */
+ #endif
+ }
+ #pragma GCC pop_options
+ 
+ void after_nested_pop_func(void) {
+ #ifdef __riscv_vector
+   __builtin_abort();  /* Should not have vector after nested pop */
+ #endif
+ }
+ #pragma GCC pop_options
+ 
+ /* Final function should be back to original default */
+ void final_func(void) {
+ #ifdef __riscv_vector
+   __builtin_abort();  /* Should not have vector */
+ #endif
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/pragma-target-2.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/pragma-target-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/pragma-target-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/pragma-target-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,26 ----
+ /* Test for #pragma GCC target with tune parameter */
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -mtune=rocket -O2" } */
+ 
+ void default_tune(void) {
+   /* Default tune is rocket */
+ }
+ 
+ #pragma GCC push_options
+ #pragma GCC target("tune=sifive-7-series")
+ void sifive_tune(void) {
+   /* Tune should be sifive-7-series */
+ }
+ #pragma GCC pop_options
+ 
+ void back_to_rocket(void) {
+   /* Tune should be back to rocket */
+ }
+ 
+ #pragma GCC target("arch=rv64gcv;tune=generic")
+ void combined_options(void) {
+ #ifndef __riscv_vector
+   __builtin_abort();  /* Should have vector */
+ #endif
+   /* Tune should be generic */
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-1.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ void __attribute__ (( target ("max-vectorization")))
+ foo (char *restrict a, int *restrict b, short *restrict c,
+      int *restrict d, int stride)
+ {
+   if (stride <= 1)
+     return;
+ 
+   for (int i = 0; i < 3; i++)
+     {
+       int res = c[i];
+       int t = b[d[i]];
+       if (a[c[i]] != 0)
+         res = t * b[d[i]];
+       c[i] = res;
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-2.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/max-vect-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d -mmax-vectorization -fdump-tree-vect-details" } */
+ 
+ void
+ foo (char *restrict a, int *restrict b, short *restrict c,
+      int *restrict d, int stride)
+ {
+   if (stride <= 1)
+     return;
+ 
+   for (int i = 0; i < 3; i++)
+     {
+       int res = c[i];
+       int t = b[d[i]];
+       if (a[c[i]] != 0)
+         res = t * b[d[i]];
+       c[i] = res;
+     }
+ }
+ 
+ /* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-1.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv64gcv_zvl256b -mabi=lp64d -mrvv-vector-bits=zvl -mno-autovec-segment" } */
+ 
+ typedef struct {
+   int a[6];
+   float b[3];
+ } c;
+ 
+ int d(c *e) {
+   int f =0;
+   for (; f < 3; f++) {
+     e->a[2 * f] = e->b[f];
+     e->a[2 * f + 1] = -e->a[2 * f];
+     e->a[2 * f] = f + 3 * e->a[2 * f];
+     e->a[2 * f + 1] = f + 3 * e->a[2 * f + 1];
+   }
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-not "vsetivli.*zero,0" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-2.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr122635-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,18 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv64gcv_zvl256b -mabi=lp64d -mrvv-vector-bits=zvl -mno-autovec-segment" } */
+ 
+ typedef struct {
+   int A[6];
+   float b[];
+ } a;
+ 
+ int b(a *a) {
+   int b = 0;
+   for (; b < 3; b++) {
+     a->A[2 * b] = a->b[b] - b + a->A[2 * b];
+     a->A[2 * b + 1] = b * a->A[2 * b + 1];
+   }
+   return 0;
+ }
+ 
+ /* { dg-final { scan-assembler-not "vsetivli.*zero,0" } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022-2.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -march=rv64gcv_zvl512b -mabi=lp64d -mrvv-vector-bits=zvl -fsigned-char" } */
+ 
+ #include "pr123022.c"
+ 
+ /* { dg-final { scan-assembler-not "vset.*zero,1," } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr123022.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,21 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target rvv_zvl512b_ok } */
+ /* { dg-options "-O3 -march=rv64gcv_zvl512b -mabi=lp64d -mrvv-vector-bits=zvl -fsigned-char" } */
+ unsigned e[2][2];
+ long a;
+ char c[2];
+ 
+ int
+ main ()
+ {
+   long long b;
+   c[1] = 3;
+   for (unsigned h = 0; h < 2; h++)
+     for (int i = c[0]; i < 5; i += 5)
+       for (int j = 0; j < 219; j++)
+ 	a = c[h] ? e[h][h] + 3326195747 : 0;
+ 
+   b = a;
+   if (b != 3326195747)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ char p[128];
+ 
+ bool __attribute__((noipa))
+ fand (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fand (n))
+       __builtin_abort ();
+ 
+   p[0] = 0;
+   for (int n = 1; n < 77; ++n)
+     if (fand (n))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fior (n))
+       __builtin_abort ();
+ 
+   p[0] = 1;
+   for (int n = 1; n < 77; ++n)
+     if (!fior (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ char p[128];
+ 
+ bool __attribute__((noipa))
+ fand (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ short p[128];
+ 
+ bool __attribute__((noipa))
+ fand (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fand (n))
+       __builtin_abort ();
+ 
+   p[0] = 0;
+   for (int n = 1; n < 77; ++n)
+     if (fand (n))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fior (n))
+       __builtin_abort ();
+ 
+   p[0] = 1;
+   for (int n = 1; n < 77; ++n)
+     if (!fior (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-2.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ short p[128];
+ 
+ bool __attribute__((noipa))
+ fand ()
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior ()
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ int p[128];
+ 
+ bool __attribute__((noipa))
+ fand (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fand (n))
+       __builtin_abort ();
+ 
+   p[0] = 0;
+   for (int n = 1; n < 77; ++n)
+     if (fand (n))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fior (n))
+       __builtin_abort ();
+ 
+   p[0] = 1;
+   for (int n = 1; n < 77; ++n)
+     if (!fior (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-3.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ int p[128];
+ 
+ bool __attribute__((noipa))
+ fand ()
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior ()
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ long long p[128];
+ 
+ bool __attribute__((noipa))
+ fand (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fand (n))
+       __builtin_abort ();
+ 
+   p[0] = 0;
+   for (int n = 1; n < 77; ++n)
+     if (fand (n))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fior (n))
+       __builtin_abort ();
+ 
+   p[0] = 1;
+   for (int n = 1; n < 77; ++n)
+     if (!fior (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-4.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ long long p[128];
+ 
+ bool __attribute__((noipa))
+ fand ()
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r &= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fior ()
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r |= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ char p[128];
+ 
+ bool __attribute__((noipa))
+ fxort (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxort (n) != !(n & 1))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n) != (n & 1))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fxort (n))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-5.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ char p[128];
+ 
+ bool __attribute__((noipa))
+ fxort ()
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf ()
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ short p[128];
+ 
+ bool __attribute__((noipa))
+ fxort (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxort (n) != !(n & 1))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n) != (n & 1))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fxort (n))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-6.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ short p[128];
+ 
+ bool __attribute__((noipa))
+ fxort ()
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf ()
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ int p[128];
+ 
+ bool __attribute__((noipa))
+ fxort (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxort (n) != !(n & 1))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n) != (n & 1))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fxort (n))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-7.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ int p[128];
+ 
+ bool __attribute__((noipa))
+ fxort ()
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf ()
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8-run.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8-run.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8-run.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8-run.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do run } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ 
+ long long p[128];
+ 
+ bool __attribute__((noipa))
+ fxort (int n)
+ {
+   bool r = true;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf (int n)
+ {
+   bool r = false;
+   for (int i = 0; i < n; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ int main()
+ {
+   __builtin_memset (p, 1, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxort (n) != !(n & 1))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n) != (n & 1))
+       __builtin_abort ();
+ 
+   __builtin_memset (p, 0, sizeof(p));
+ 
+   for (int n = 0; n < 77; ++n)
+     if (!fxort (n))
+       __builtin_abort ();
+ 
+   for (int n = 0; n < 77; ++n)
+     if (fxorf (n))
+       __builtin_abort ();
+ 
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/reduc/reduc-bool-8.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,25 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -fdump-tree-vect-details" } */
+ 
+ long long p[128];
+ 
+ bool __attribute__((noipa))
+ fxort ()
+ {
+   bool r = true;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ bool __attribute__((noipa))
+ fxorf ()
+ {
+   bool r = false;
+   for (int i = 0; i < 16; ++i)
+     r ^= (p[i] != 0);
+   return r;
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "optimized: loop vectorized" 2 "vect" } } */
+ /* { dg-final { scan-assembler-times {vcpop\.m\s+[atx][0-9]+,\s*v[0-9]+} 2 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmseq.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsne.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vmslt.vx} 1 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmseq.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsne.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vmslt.vx} 1 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 32,34 ****
--- 32,35 ----
  /* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmseq.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsne.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vmslt.vx} 1 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-times {vnmsub.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmseq.vx} 1 } } */
  /* { dg-final { scan-assembler-times {vmsne.vx} 1 } } */
+ /* { dg-final { scan-assembler-times {vmslt.vx} 1 } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i16.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i32.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i64.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-2-i8.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i16.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i32.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 28,31 ****
--- 28,32 ----
  /* { dg-final { scan-assembler-not {vmadd.vx} } } */
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i64.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-3-i8.c	Sun Dec 14 22:32:13 2025
*************** TEST_TERNARY_VX_SIGNED_0(T)
*** 29,31 ****
--- 29,32 ----
  /* { dg-final { scan-assembler-not {vnmsub.vx} } } */
  /* { dg-final { scan-assembler-not {vmseq.vx} } } */
  /* { dg-final { scan-assembler-not {vmsne.vx} } } */
+ /* { dg-final { scan-assembler-not {vmslt.vx} } } */
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h	Sun Dec 14 22:32:13 2025
*************** DEF_AVG_CEIL(int32_t, int64_t)
*** 404,409 ****
--- 404,410 ----
    DEF_VX_BINARY_CASE_0_WRAP(T, %, rem)                            \
    DEF_VX_BINARY_CASE_0_WRAP(T, ==, eq)                            \
    DEF_VX_BINARY_CASE_0_WRAP(T, !=, ne)                            \
+   DEF_VX_BINARY_CASE_0_WRAP(T, <, lt)                             \
    DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_0_WARP(T), max)           \
    DEF_VX_BINARY_CASE_2_WRAP(T, MAX_FUNC_1_WARP(T), max)           \
    DEF_VX_BINARY_CASE_2_WRAP(T, MIN_FUNC_0_WARP(T), min)           \
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h	Sun Dec 14 22:32:13 2025
*************** uint64_t TEST_BINARY_DATA(uint64_t, ltu)
*** 6566,6569 ****
--- 6566,6705 ----
    },
  };
  
+ int8_t TEST_BINARY_DATA(int8_t, lt)[][3][N] =
+ {
+   {
+     { 127 },
+     {
+          0,    0,    0,    0,
+         -1,   -1,   -1,   -1,
+        127,  127,  127,  127,
+       -128, -128, -128, -128,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+         1,   1,   1,   1,
+     },
+   },
+   {
+     { -1 },
+     {
+          0,    0,    0,    0,
+          1,    1,    1,    1,
+         -2,   -2,   -2,   -2,
+       -128, -128, -128, -128,
+     },
+     {
+          0,   0,   0,   0,
+          0,   0,   0,   0,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
+ int16_t TEST_BINARY_DATA(int16_t, lt)[][3][N] =
+ {
+   {
+     { 32767 },
+     {
+            0,      0,      0,      0,
+           -1,     -1,     -1,     -1,
+        32767,  32767,  32767,  32767,
+       -32768, -32768, -32768, -32768,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+         1,   1,   1,   1,
+     },
+   },
+   {
+     { -1 },
+     {
+            0,      0,      0,      0,
+            1,      1,      1,      1,
+           -2,     -2,     -2,     -2,
+       -32768, -32768, -32768, -32768,
+     },
+     {
+          0,   0,   0,   0,
+          0,   0,   0,   0,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
+ int32_t TEST_BINARY_DATA(int32_t, lt)[][3][N] =
+ {
+   {
+     { 2147483647 },
+     {
+                 0,           0,           0,           0,
+                -1,          -1,          -1,          -1,
+        2147483647,  2147483647,  2147483647,  2147483647,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+         1,   1,   1,   1,
+     },
+   },
+   {
+     { -1 },
+     {
+                 0,           0,           0,           0,
+                 1,           1,           1,           1,
+                -2,          -2,          -2,          -2,
+       -2147483648, -2147483648, -2147483648, -2147483648,
+     },
+     {
+          0,   0,   0,   0,
+          0,   0,   0,   0,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
+ int64_t TEST_BINARY_DATA(int64_t, lt)[][3][N] =
+ {
+   {
+     { 9223372036854775807ll },
+     {
+                             0,                       0,                       0,                       0,
+                            -1,                      -1,                      -1,                      -1,
+         9223372036854775807ll,   9223372036854775807ll,   9223372036854775807ll,   9223372036854775807ll,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+     },
+     {
+         1,   1,   1,   1,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+         1,   1,   1,   1,
+     },
+   },
+   {
+     { -1 },
+     {
+                             0,                       0,                       0,                       0,
+                             1,                       1,                       1,                       1,
+                            -2,                      -2,                      -2,                      -2,
+       -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull,
+     },
+     {
+          0,   0,   0,   0,
+          0,   0,   0,   0,
+          1,   1,   1,   1,
+          1,   1,   1,   1,
+     },
+   },
+ };
+ 
  #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i16.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i16.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i16.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i16.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    int16_t
+ #define NAME lt
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i32.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i32.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i32.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i32.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,16 ----
+ 
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    int32_t
+ #define NAME lt
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i64.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i64.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i64.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i64.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    int64_t
+ #define NAME lt
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i8.c gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i8.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i8.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vmslt-run-1-i8.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run { target { riscv_v } } } */
+ /* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+ 
+ #include "vx_binary.h"
+ #include "vx_binary_data.h"
+ 
+ #define T    int8_t
+ #define NAME lt
+ 
+ DEF_VX_BINARY_CASE_0_WRAP(T, <, NAME)
+ 
+ #define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+ #define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n)
+ 
+ #include "vx_binary_run.h"
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gcc.target/s390/builtin-array-arg-1.c gcc-16-20251214/gcc/testsuite/gcc.target/s390/builtin-array-arg-1.c
*** gcc-16-20251207/gcc/testsuite/gcc.target/s390/builtin-array-arg-1.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gcc.target/s390/builtin-array-arg-1.c	Sun Dec 14 22:32:13 2025
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=z13 -mzarch" } */
+ /* { dg-final { scan-assembler-times {\tlarl\t(%r1),.LANCHOR0\n\tvllezf\t%v24,0\(\1\)\n\tbr\t%r14} 2 } } */
+ /* { dg-final { scan-assembler-times {\tlarl\t(%r1),.LANCHOR0\n\tvl\t%v24,4\(\1\)\n\tbr\t%r14} 1 } } */
+ 
+ /* Accept array arguments which are converted to pointers in the end.  */
+ 
+ typedef unsigned int __attribute__ ((vector_size (16))) UV4SI;
+ unsigned int a[42];
+ 
+ /* Overloaded builtin.  */
+ 
+ UV4SI
+ test_vec_insert_and_zero (void)
+ {
+   return __builtin_s390_vec_insert_and_zero (a);
+ }
+ 
+ /* Non-overloaded builtin.  */
+ 
+ UV4SI
+ test_vllezf (void)
+ {
+   return __builtin_s390_vllezf (a);
+ }
+ 
+ /* Directly expanded overloaded builtin.  */
+ 
+ UV4SI
+ test_vec_xl (void)
+ {
+   return __builtin_s390_vec_xl (4, a);
+ }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gdc.dg/analyzer/analyzer.exp gcc-16-20251214/gcc/testsuite/gdc.dg/analyzer/analyzer.exp
*** gcc-16-20251207/gcc/testsuite/gdc.dg/analyzer/analyzer.exp	Sun Dec  7 22:32:14 2025
--- gcc-16-20251214/gcc/testsuite/gdc.dg/analyzer/analyzer.exp	Sun Dec 14 22:32:14 2025
*************** if [info exists DEFAULT_DFLAGS] then {
*** 32,38 ****
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_DFLAGS "-fanalyzer -Wanalyzer-too-complex -fanalyzer-call-summaries"
  
  # Initialize `dg'.
  dg-init
--- 32,38 ----
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_DFLAGS "-fanalyzer -Wanalyzer-too-complex"
  
  # Initialize `dg'.
  dg-init
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/analyzer/analyzer.exp gcc-16-20251214/gcc/testsuite/gfortran.dg/analyzer/analyzer.exp
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/analyzer/analyzer.exp	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/analyzer/analyzer.exp	Sun Dec 14 22:32:14 2025
*************** if [info exists DEFAULT_FFLAGS] then {
*** 33,39 ****
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_FFLAGS "-fanalyzer -Wanalyzer-too-complex -fanalyzer-call-summaries"
  
  # Initialize `dg'.
  dg-init
--- 33,39 ----
  }
  
  # If a testcase doesn't have special options, use these.
! set DEFAULT_FFLAGS "-fanalyzer -Wanalyzer-too-complex"
  
  # Initialize `dg'.
  dg-init
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/analyzer/uninit-pr63311.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/analyzer/uninit-pr63311.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/analyzer/uninit-pr63311.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/analyzer/uninit-pr63311.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-additional-options "-O0" }
+ ! { dg-additional-options "-Wno-analyzer-too-complex" }
  
  MODULE M1
    IMPLICIT NONE
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/assumed_charlen_dummy.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do compile }
+ ! { dg-options " " }
  ! Test the fix for PR fortran/39893.
  ! Original testcase provided by Deji Akingunola.
  ! Reduced testcase provided by Dominique d'Humieres.
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/automatic_char_len_1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/automatic_char_len_1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/automatic_char_len_1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/automatic_char_len_1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do compile }
+ ! { dg-options " " }
  ! PR18082 - Compiler would get stuck in loop, whilst treating
  ! the assignments.
  ! Test is one of PR cases.
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/coarray_lock_3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/coarray_lock_3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/coarray_lock_3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/coarray_lock_3.f90	Sun Dec 14 22:32:14 2025
*************** end module m
*** 24,30 ****
  module m2
    use iso_fortran_env
    type t2
!     type(lock_type), allocatable :: x ! { dg-error "Allocatable component x at .1. of type LOCK_TYPE must have a codimension" }
    end type t2
  end module m2
  
--- 24,30 ----
  module m2
    use iso_fortran_env
    type t2
!     type(lock_type), allocatable :: x
    end type t2
  end module m2
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/coarray_lock_4.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/coarray_lock_4.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/coarray_lock_4.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/coarray_lock_4.f90	Sun Dec 14 22:32:14 2025
*************** subroutine more_tests
*** 49,55 ****
    type(t1) :: x1 ! OK
  
    type t2
!     type(lock_type), allocatable :: c1(:) ! { dg-error "Allocatable component c1 at .1. of type LOCK_TYPE must have a codimension" }
    end type t2
  
    type t3
--- 49,55 ----
    type(t1) :: x1 ! OK
  
    type t2
!     type(lock_type), allocatable :: c1(:)
    end type t2
  
    type t3
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/coarray_lock_5.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/coarray_lock_5.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/coarray_lock_5.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/coarray_lock_5.f90	Sun Dec 14 22:32:14 2025
*************** subroutine test2()
*** 32,38 ****
    use iso_fortran_env
    implicit none
    type t
!     type(lock_type), allocatable :: lock ! { dg-error "Allocatable component lock at .1. of type LOCK_TYPE must have a codimension" }
    end type t
    type t2
      type(lock_type) :: lock
--- 32,38 ----
    use iso_fortran_env
    implicit none
    type t
!     type(lock_type), allocatable :: lock
    end type t
    type t2
      type(lock_type) :: lock
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/entry_23.f gcc-16-20251214/gcc/testsuite/gfortran.dg/entry_23.f
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/entry_23.f	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/entry_23.f	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-options " " }
  ! PR 97799 - this used to segfault intermittently.
  ! Test case by George Hockney.
        PROGRAM MAIN
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/finalize_59.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/finalize_59.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/finalize_59.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/finalize_59.f90	Sun Dec 14 22:32:14 2025
*************** Program Cds_Principal
*** 187,193 ****
     Type(Uef_Vector)                                    :: Cds_Mod_Les_materiaux
     Type (Cds_Materiau_Acier_EC)                        :: acier_ec
     Class (Cds_Materiau), pointer                       :: pt_materiau
!    Character *(8)                                      :: nom_materiau
  !-------------------------------------------------------------------------------------------------
        CaLL  Cds_Mod_Les_materiaux%Add (acier_ec)
        nom_materiau = "12345678"
--- 187,193 ----
     Type(Uef_Vector)                                    :: Cds_Mod_Les_materiaux
     Type (Cds_Materiau_Acier_EC)                        :: acier_ec
     Class (Cds_Materiau), pointer                       :: pt_materiau
!    Character(len=8)                                    :: nom_materiau
  !-------------------------------------------------------------------------------------------------
        CaLL  Cds_Mod_Les_materiaux%Add (acier_ec)
        nom_materiau = "12345678"
*************** Function Get_Pt_Materiau_nom (vecteur, n
*** 199,205 ****
      !   Fonction :
      !--------------------
       ! Parametres en entree
!     Character *(8), Intent (in)        :: nom_materiau
      Type (Uef_Vector)          , Intent (inout)     :: vecteur
  
      ! Parametres en sortie
--- 199,205 ----
      !   Fonction :
      !--------------------
       ! Parametres en entree
!     Character(len=8), Intent (in)        :: nom_materiau
      Type (Uef_Vector)          , Intent (inout)     :: vecteur
  
      ! Parametres en sortie
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-bit.f gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-bit.f
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-bit.f	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-bit.f	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  c { dg-do run }
+ c { dg-options " " }
  c  f90-intrinsic-bit.f
  c
  c Test Fortran 90 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-mathematical.f gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-mathematical.f
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-mathematical.f	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-mathematical.f	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  c { dg-do run }
+ c { dg-options " " }
  c  f90-intrinsic-mathematical.f
  c
  c Test Fortran 90 intrinsic mathematical functions - Section 13.10.3 and
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-numeric.f gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-numeric.f
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-numeric.f	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/f90-intrinsic-numeric.f	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  c { dg-do run }
+ c { dg-options " " }
  c  f90-intrinsic-numeric.f
  c
  c Test Fortran 90 intrinsic numeric functions - Section 13.10.2 and 13.13 
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-bessel.f gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-bessel.f
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-bessel.f	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-bessel.f	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  c { dg-do run }
+ c { dg-options " " }
  c  intrinsic-unix-bessel.f
  c
  c Test Bessel function intrinsics.  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-erf.f gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-erf.f
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-erf.f	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/g77/intrinsic-unix-erf.f	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  c { dg-do run }
+ c { dg-options " " }
  c  intrinsic-unix-erf.f
  c
  c Test Bessel function intrinsics.  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/goacc/pr93329.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/goacc/pr93329.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/goacc/pr93329.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/goacc/pr93329.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! PR fortran/93329
  ! { dg-do compile { target fopenmp } }
! ! { dg-additional-options "-fopenmp" }
  
    integer :: x, y, z
    integer :: a(32)
--- 1,6 ----
  ! PR fortran/93329
  ! { dg-do compile { target fopenmp } }
! ! { dg-additional-options "-fopenmp -Wno-deprecated-openmp" }
  
    integer :: x, y, z
    integer :: a(32)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/goacc-gomp/pr102330-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 3,9 ****
  ! { dg-additional-options --param=openacc-privatization=noisy }
  
  subroutine r1
!   !$omp master taskloop simd
    do i = 1, 8
    end do
    !$acc parallel loop ! { dg-line l_compute1 }
--- 3,9 ----
  ! { dg-additional-options --param=openacc-privatization=noisy }
  
  subroutine r1
!   !$omp masked taskloop simd
    do i = 1, 8
    end do
    !$acc parallel loop ! { dg-line l_compute1 }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/52-deps.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/52-deps.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/52-deps.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/52-deps.f90	Sun Dec 14 22:32:14 2025
***************
*** 0 ****
--- 1,44 ----
+ ! { dg-error ".* at \\(1\\) requires '-fopenmp-allocators'" "" { target *-*-* } 24 }
+ ! { dg-warning "All files that might deallocate such a variable must be compiled with '-fopenmp-allocators'" "" { target *-*-* } 24 }
+ program test_deprecations
+   integer :: i
+   integer :: j
+   integer, allocatable :: a(:)
+   integer :: x(10)
+   integer :: y, z
+ 
+   ! { dg-warning "'to' clause with 'declare target' at \\(1\\) deprecated since OpenMP 5.2, use 'enter' \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* } 11 }
+   !$omp declare target to(i)
+   !$omp do ordered(1)
+     do i = 1,10
+       ! { dg-warning "'source' modifier with 'depend' clause at \\(1\\) deprecated since OpenMP 5.2, use with 'doacross' \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* } 15 }
+       !$omp ordered depend(source)
+         j = i
+       ! { dg-warning "'sink' modifier with 'depend' clause at \\(1\\) deprecated since OpenMP 5.2, use with 'doacross' \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* } 18 }
+       !$omp ordered depend(sink : i)
+         j = i
+     end do
+   !$omp end do
+ 
+   ! { dg-warning "The use of one or more 'allocate' directives with an associated 'allocate' statement at \\(1\\) is deprecated since OpenMP 5.2, use an 'allocators' directive \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* } 24 }
+   !$omp allocate(a)
+     allocate(a(100))
+     do i = 1,100
+       a(i) = i
+     end do
+     deallocate(a)
+ 
+ 
+   ! { dg-warning "The specification of modifiers without comma separators for the 'map' clause at \\(1\\) has been deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* } 33 }
+   !$omp target map(close to: x)
+     x = 1
+   !$omp end target
+ 
+   z = 1
+   ! { dg-warning "'-' operator at \\(1\\) for reductions deprecated in OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* } 39 }
+   !$omp parallel do reduction(-:z)
+   do y = 1,10
+       z = z - y
+   end do
+ 
+ end program
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/adjust-args-10.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/adjust-args-10.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/adjust-args-10.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/adjust-args-10.f90	Sun Dec 14 22:32:14 2025
*************** program main
*** 85,91 ****
  
    ! Note: We don't add  'use_device_addr(B)' here;
    ! if we do, it will fail with an illegal memory access (why?).
!   !$omp target data use_device_ptr(p)
      call sub(p, B)
      call sub(C, B)  ! C is not mapped -> 'from' ptr == NULL
    !$omp end target data
--- 85,91 ----
  
    ! Note: We don't add  'use_device_addr(B)' here;
    ! if we do, it will fail with an illegal memory access (why?).
!   !$omp target data use_device_ptr(p) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use USE_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
      call sub(p, B)
      call sub(C, B)  ! C is not mapped -> 'from' ptr == NULL
    !$omp end target data
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
!   integer :: i, j
!   integer, dimension (10, 10) :: a
  !$omp parallel do default(none)proc_bind(master)shared(a)
    do i = 1, 10
      j = 4
--- 1,7 ----
! ! { dg-additional-options "-Wno-deprecated-openmp" }
! 
! integer :: i, j
! integer, dimension (10, 10) :: a
  !$omp parallel do default(none)proc_bind(master)shared(a)
    do i = 1, 10
      j = 4
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-14.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-14.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-14.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-14.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-additional-options "-fcoarray=single -fcray-pointer" }
! 
  module m
  use iso_c_binding
  integer, parameter :: omp_allocator_handle_kind = c_intptr_t
--- 1,5 ----
  ! { dg-additional-options "-fcoarray=single -fcray-pointer" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
  use iso_c_binding
  integer, parameter :: omp_allocator_handle_kind = c_intptr_t
*************** subroutine coarrays(x)
*** 38,44 ****
    !$omp allocate(z) ! { dg-error "18:Unexpected coarray 'z' in 'allocate' at .1." }
      allocate(z(5)[*])
    x = 5
! end 
  
  
  integer function f() result(res)
--- 38,44 ----
    !$omp allocate(z) ! { dg-error "18:Unexpected coarray 'z' in 'allocate' at .1." }
      allocate(z(5)[*])
    x = 5
! end
  
  
  integer function f() result(res)
*************** subroutine coarray_3
*** 114,120 ****
    integer :: x
    integer, allocatable :: a, b, c[:], d
    x = 5 ! executable stmt
!   !$omp allocators allocate(align(16): a,b) allocate(align(32) : d) 
    allocate(a,b,c[*],d)  ! OK - Fortran allocator used for 'C'
  end
  
--- 114,120 ----
    integer :: x
    integer, allocatable :: a, b, c[:], d
    x = 5 ! executable stmt
!   !$omp allocators allocate(align(16): a,b) allocate(align(32) : d)
    allocate(a,b,c[*],d)  ! OK - Fortran allocator used for 'C'
  end
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-16.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  integer, pointer :: ptr
  
  !$omp flush
*************** integer, pointer :: ptr
*** 5,10 ****
  allocate(ptr)
  end
  
! ! { dg-error "'!.OMP ALLOCATE' at .1. requires '-fopenmp-allocators'" "" { target *-*-* } 4 }
! ! { dg-warning "All files that might deallocate such a variable must be compiled with '-fopenmp-allocators'" "" { target *-*-* } 4 }
  ! { dg-note "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, INTENT\\(OUT\\) for allocatable dummy arguments, and reallocation of allocatable components allocated with an OpenMP allocator" "" { target *-*-* } 0 }
--- 6,11 ----
  allocate(ptr)
  end
  
! ! { dg-error "'!\\\$OMP ALLOCATE' at .1. requires '-fopenmp-allocators'" "" { target *-*-* } .-4 }
! ! { dg-warning "All files that might deallocate such a variable must be compiled with '-fopenmp-allocators'" "" { target *-*-* } .-5 }
  ! { dg-note "This includes explicit DEALLOCATE, reallocation on intrinsic assignment, INTENT\\(OUT\\) for allocatable dummy arguments, and reallocation of allocatable components allocated with an OpenMP allocator" "" { target *-*-* } 0 }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-5.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-5.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-5.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-5.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-additional-options "-fopenmp-allocators" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module my_omp_lib
    use iso_c_binding, only: c_intptr_t
    !use omp_lib
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-6.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-6.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-6.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-6.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module my_omp_lib
    use iso_c_binding, only: c_intptr_t
    !use omp_lib
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-7.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-7.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-7.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-7.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-additional-options "-fmax-errors=1000" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module my_omp_lib
    use iso_c_binding, only: c_intptr_t
    !use omp_lib
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-clause.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-clause.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocate-clause.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocate-clause.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module omp_lib_kinds
    use iso_c_binding, only: c_int, c_intptr_t
    implicit none
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocators-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocators-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/allocators-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/allocators-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine f
    integer, allocatable :: A1, A2, B(:), C
    !$omp declare target
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.12.1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.12.1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.12.1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.12.1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do compile }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
        SUBROUTINE A12( X, XOLD, N, TOL )
        REAL X(*), XOLD(*), TOL
        INTEGER N
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.33.2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
        REAL FUNCTION READ_NEXT()
          REAL, POINTER :: TMP
  !$OMP SINGLE
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
        REAL FUNCTION READ_NEXT()
          REAL, POINTER :: TMP
  !$OMP SINGLE
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_20.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_20.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_20.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_20.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
! !
! ! This failed to compile the declare variant directive due to the C_PTR 
  ! arguments to foo being recognised as INTEGER(8)
  
  program adjust_args
--- 1,6 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
! ! This failed to compile the declare variant directive due to the C_PTR
  ! arguments to foo being recognised as INTEGER(8)
  
  program adjust_args
*************** program adjust_args
*** 17,23 ****
        call foo(c_loc(cv), c_loc(av), N)
        !$omp end parallel
    !$omp end target data
!     
  contains
    subroutine foo_variant(c_d_bv, c_d_av, n)
      use iso_c_binding, only: c_ptr, c_f_pointer
--- 17,23 ----
        call foo(c_loc(cv), c_loc(av), N)
        !$omp end parallel
    !$omp end target data
! 
  contains
    subroutine foo_variant(c_d_bv, c_d_av, n)
      use iso_c_binding, only: c_ptr, c_f_pointer
*************** contains
*** 26,32 ****
      real, pointer :: f_d_bv(:)
      real, pointer :: f_d_av(:)
      integer :: i
!   
      call c_f_pointer(c_d_bv, f_d_bv, [n])
      call c_f_pointer(c_d_av, f_d_av, [n])
      !$omp target teams loop is_device_ptr(f_d_bv, f_d_av)
--- 26,32 ----
      real, pointer :: f_d_bv(:)
      real, pointer :: f_d_av(:)
      integer :: i
! 
      call c_f_pointer(c_d_bv, f_d_bv, [n])
      call c_f_pointer(c_d_av, f_d_av, [n])
      !$omp target teams loop is_device_ptr(f_d_bv, f_d_av)
*************** contains
*** 34,41 ****
        f_d_bv(i) = f_d_av(i) * i
      end do
    end subroutine
!   
!   
    subroutine foo(c_bv, c_av, n)
      use iso_c_binding, only: c_ptr, c_f_pointer
      type(c_ptr), intent(in) :: c_bv, c_av
--- 34,41 ----
        f_d_bv(i) = f_d_av(i) * i
      end do
    end subroutine
! 
! 
    subroutine foo(c_bv, c_av, n)
      use iso_c_binding, only: c_ptr, c_f_pointer
      type(c_ptr), intent(in) :: c_bv, c_av
*************** contains
*** 44,51 ****
      real, pointer :: f_av(:)
      integer :: i
      !$omp declare variant(foo_variant)          &
!     !$omp         match(construct={parallel})       
!   
      call c_f_pointer(c_bv, f_bv, [n])
      call c_f_pointer(c_av, f_av, [n])
      !$omp parallel loop
--- 44,51 ----
      real, pointer :: f_av(:)
      integer :: i
      !$omp declare variant(foo_variant)          &
!     !$omp         match(construct={parallel})
! 
      call c_f_pointer(c_bv, f_bv, [n])
      call c_f_pointer(c_av, f_av, [n])
      !$omp parallel loop
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_21.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_21.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_21.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/c_ptr_tests_21.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
! !
! ! Ensure that C_PTR and C_FUNPTR are reported as incompatible types in variant 
  ! argument lists
  
  program adjust_args
--- 1,6 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
! ! Ensure that C_PTR and C_FUNPTR are reported as incompatible types in variant
  ! argument lists
  
  program adjust_args
*************** program adjust_args
*** 17,23 ****
        call foo(c_loc(cv), c_loc(av), N)
        !$omp end parallel
    !$omp end target data
!     
  contains
    subroutine foo_variant(c_d_bv, c_d_av, n)
      use iso_c_binding, only: c_funptr, c_f_pointer
--- 17,23 ----
        call foo(c_loc(cv), c_loc(av), N)
        !$omp end parallel
    !$omp end target data
! 
  contains
    subroutine foo_variant(c_d_bv, c_d_av, n)
      use iso_c_binding, only: c_funptr, c_f_pointer
*************** contains
*** 26,32 ****
      real, pointer :: f_d_bv(:)
      real, pointer :: f_d_av(:)
      integer :: i
!   
  !     call c_f_pointer(c_d_bv, f_d_bv, [n])
  !     call c_f_pointer(c_d_av, f_d_av, [n])
      !$omp target teams loop is_device_ptr(f_d_bv, f_d_av)
--- 26,32 ----
      real, pointer :: f_d_bv(:)
      real, pointer :: f_d_av(:)
      integer :: i
! 
  !     call c_f_pointer(c_d_bv, f_d_bv, [n])
  !     call c_f_pointer(c_d_av, f_d_av, [n])
      !$omp target teams loop is_device_ptr(f_d_bv, f_d_av)
*************** contains
*** 34,41 ****
        f_d_bv(i) = f_d_av(i) * i
      end do
    end subroutine
!   
!   
    subroutine foo(c_bv, c_av, n)
      use iso_c_binding, only: c_ptr, c_f_pointer
      type(c_ptr), intent(in) :: c_bv, c_av
--- 34,41 ----
        f_d_bv(i) = f_d_av(i) * i
      end do
    end subroutine
! 
! 
    subroutine foo(c_bv, c_av, n)
      use iso_c_binding, only: c_ptr, c_f_pointer
      type(c_ptr), intent(in) :: c_bv, c_av
*************** contains
*** 44,51 ****
      real, pointer :: f_av(:)
      integer :: i
      !$omp declare variant(foo_variant)          & ! { dg-error "variant 'foo_variant' and base 'foo' at .1. have incompatible types: Type mismatch in argument 'c_bv' .TYPE.c_ptr./TYPE.c_funptr.." }
!     !$omp         match(construct={parallel})       
!   
      call c_f_pointer(c_bv, f_bv, [n])
      call c_f_pointer(c_av, f_av, [n])
      !$omp parallel loop
--- 44,51 ----
      real, pointer :: f_av(:)
      integer :: i
      !$omp declare variant(foo_variant)          & ! { dg-error "variant 'foo_variant' and base 'foo' at .1. have incompatible types: Type mismatch in argument 'c_bv' .TYPE.c_ptr./TYPE.c_funptr.." }
!     !$omp         match(construct={parallel})
! 
      call c_f_pointer(c_bv, f_bv, [n])
      call c_f_pointer(c_av, f_av, [n])
      !$omp parallel loop
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/cancel-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/cancel-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/cancel-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/cancel-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-additional-options "-cpp" }
! 
  subroutine f1
    !$omp cancel parallel			! { dg-error "orphaned" }
    !$omp cancel do			! { dg-error "orphaned" }
--- 1,5 ----
  ! { dg-additional-options "-cpp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine f1
    !$omp cancel parallel			! { dg-error "orphaned" }
    !$omp cancel do			! { dg-error "orphaned" }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/clauses-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/clauses-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/clauses-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/clauses-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  module m
    use iso_c_binding, only: c_intptr_t
    implicit none (external, type)
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    use iso_c_binding, only: c_intptr_t
    implicit none (external, type)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-simd-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  function f1 (a, b, c, d, e, f)
    integer, value :: a, b, c
    integer :: d, e, f, f1
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  function f1 (a, b, c, d, e, f)
    integer, value :: a, b, c
    integer :: d, e, f, f1
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-simd-6.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-simd-6.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-simd-6.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-simd-6.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-additional-options "-fdump-tree-gimple" }
! !
  ! PR fortran/106566
  !
  ! { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare simd \\(linear\\(ref\\(0\\):4\\) simdlen\\(8\\)\\)\\)\\)" 2 "gimple" } }
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-additional-options "-fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! PR fortran/106566
  !
  ! { dg-final { scan-tree-dump-times "__attribute__\\(\\(omp declare simd \\(linear\\(ref\\(0\\):4\\) simdlen\\(8\\)\\)\\)\\)" 2 "gimple" } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  module declare_target_1
    !$omp declare target to (var_1, var_4) link (var_2, var_3) &
    !$omp & link (var_5) to (var_6)
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module declare_target_1
    !$omp declare target to (var_1, var_4) link (var_2, var_3) &
    !$omp & link (var_5) to (var_6)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  module declare_target_2
    !$omp declare target to (a) link (a)	! { dg-error "mentioned multiple times in clauses of the same OMP DECLARE TARGET directive" }
    !$omp declare target (b)
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module declare_target_2
    !$omp declare target to (a) link (a)	! { dg-error "mentioned multiple times in clauses of the same OMP DECLARE TARGET directive" }
    !$omp declare target (b)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-4.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-additional-options "-fdump-tree-original" }
! 
  subroutine f1
    !$omp declare target device_type (any)  ! { dg-warning "OMP DECLARE TARGET directive at .1. with only DEVICE_TYPE or INDIRECT clauses is ignored" }
  end subroutine
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-additional-options "-fdump-tree-original" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine f1
    !$omp declare target device_type (any)  ! { dg-warning "OMP DECLARE TARGET directive at .1. with only DEVICE_TYPE or INDIRECT clauses is ignored" }
  end subroutine
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-5.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo()
    !$omp declare target  to(foo) device_type(bar)  ! { dg-error "Expected HOST, NOHOST or ANY" }
  end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  module m
    integer :: a
    integer, parameter :: X = 1
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    integer :: a
    integer, parameter :: X = 1
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-target-indirect-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
  contains
    subroutine sub1
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
  contains
    subroutine sub1
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-variant-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-variant-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-variant-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-variant-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module main
    implicit none
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-variant-10.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-variant-10.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-variant-10.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-variant-10.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! { dg-do compile }
  ! { dg-additional-options "-cpp -foffload=disable -fdump-tree-gimple" }
  ! { dg-additional-options "-mavx512bw" { target { i?86-*-* x86_64-*-* } } }
! 
  #undef i386
  
  program main
--- 1,7 ----
  ! { dg-do compile }
  ! { dg-additional-options "-cpp -foffload=disable -fdump-tree-gimple" }
  ! { dg-additional-options "-mavx512bw" { target { i?86-*-* x86_64-*-* } } }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  #undef i386
  
  program main
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-variant-8.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-variant-8.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/declare-variant-8.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/declare-variant-8.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-additional-options "-fdump-tree-gimple" }
! 
  program main
    !$omp requires atomic_default_mem_order(seq_cst)
    !$omp declare target to (test3)
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-additional-options "-fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  program main
    !$omp requires atomic_default_mem_order(seq_cst)
    !$omp declare target to (test3)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/depend-iterator-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/depend-iterator-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/depend-iterator-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/depend-iterator-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  module mymod
    implicit none (type, external)
    integer, target :: var(0:5) = [0,1,2,3,4,5]
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module mymod
    implicit none (type, external)
    integer, target :: var(0:5) = [0,1,2,3,4,5]
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/depend-iterator-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/depend-iterator-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/depend-iterator-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/depend-iterator-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  module mymod
    implicit none (type, external)
    integer, target :: var(0:5) = [0,1,2,3,4,5]
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module mymod
    implicit none (type, external)
    integer, target :: var(0:5) = [0,1,2,3,4,5]
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/groupprivate-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,5 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  module m
   implicit none
   integer :: ii
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/groupprivate-5.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,5 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  module m
   implicit none
   integer :: ii
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/implicit-save.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/implicit-save.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/implicit-save.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/implicit-save.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,11 ****
  subroutine foo
    integer :: n = 5, m = 7
!   !$omp declare target to(n)
    !$omp threadprivate (m)
  end
  
  program main
    integer :: i, j
!   !$omp declare target to(i)
    !$omp threadprivate (j)
  end
--- 1,11 ----
  subroutine foo
    integer :: n = 5, m = 7
!   !$omp declare target to(n) ! { dg-warning "'to' clause with 'declare target' at \\(1\\) deprecated since OpenMP 5.2, use 'enter' \\\[-Wdeprecated-openmp\\\]" }
    !$omp threadprivate (m)
  end
  
  program main
    integer :: i, j
!   !$omp declare target to(i) ! { dg-warning "'to' clause with 'declare target' at \\(1\\) deprecated since OpenMP 5.2, use 'enter' \\\[-Wdeprecated-openmp\\\]" }
    !$omp threadprivate (j)
  end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-1.f90	Sun Dec 14 22:32:14 2025
*************** subroutine test(b,c,d)
*** 7,27 ****
  
    integer, target :: a(5)
  
!   !$omp target is_device_ptr(a) ! Valid since OpenMP 5.1
    !$omp end target
  
!   !$omp target is_device_ptr(b) ! Valid since OpenMP 5.1
    !$omp end target
  
!   !$omp target is_device_ptr(c) ! Valid since OpenMP 5.1
    !$omp end target
  
!   !$omp target is_device_ptr(d) ! Valid since OpenMP 5.1
    !$omp end target
  
    !$omp target data map(a) use_device_addr(a)  ! Should be okay
    !$omp end target data
  
!   !$omp target data map(c) use_device_ptr(c)  ! Should be okay
    !$omp end target data
  end subroutine test
--- 7,28 ----
  
    integer, target :: a(5)
  
!   !$omp target is_device_ptr(a) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use HAS_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
! 
    !$omp end target
  
!   !$omp target is_device_ptr(b) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use HAS_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
    !$omp end target
  
!   !$omp target is_device_ptr(c) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use HAS_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
    !$omp end target
  
!   !$omp target is_device_ptr(d) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use HAS_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
    !$omp end target
  
    !$omp target data map(a) use_device_addr(a)  ! Should be okay
    !$omp end target data
  
!   !$omp target data map(c) use_device_ptr(c)  ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use USE_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
    !$omp end target data
  end subroutine test
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-2.f90	Sun Dec 14 22:32:14 2025
*************** subroutine abc(cc)
*** 7,14 ****
  
      !$omp target enter data map(to: cc, dd)
  
!     !$omp target data use_device_addr(cc) use_device_ptr(dd)
!       !$omp target is_device_ptr(cc, dd)  ! Valid since OpenMP 5.1
          if (cc /= 131 .or. dd /= 484) stop 1
          cc = 44
          dd = 45
--- 7,14 ----
  
      !$omp target enter data map(to: cc, dd)
  
!     !$omp target data use_device_addr(cc) use_device_ptr(dd) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use USE_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
!       !$omp target is_device_ptr(cc, dd) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use HAS_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
          if (cc /= 131 .or. dd /= 484) stop 1
          cc = 44
          dd = 45
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/is_device_ptr-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 2,8 ****
  
  ! { dg-do compile }
  ! { dg-additional-options "-fdump-tree-gimple" }
- 
  program main
    use iso_c_binding
    implicit none
--- 2,7 ----
*************** contains
*** 14,21 ****
    subroutine foo (a, b)
      integer, target :: a, b
  
!     !$omp target data map(a, b) use_device_ptr(a, b)
!       !$omp target is_device_ptr(a, b)
          a = 42
        !$omp end target
      !$omp end target data
--- 13,20 ----
    subroutine foo (a, b)
      integer, target :: a, b
  
!     !$omp target data map(a, b) use_device_ptr(a, b) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use USE_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
!       !$omp target is_device_ptr(a, b) ! { dg-warning "Non-C_PTR type argument at \\(1\\) is deprecated, use HAS_DEVICE_ADDR \\\[-Wdeprecated-openmp\\\]" }
          a = 42
        !$omp end target
      !$omp end target data
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/lastprivate-conditional-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo (p)
    implicit none
    logical :: p(:)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo (x, y)
    integer :: i, x, y
    common /i/ i
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-original" }
! 
  module m
    implicit none (type, external)
  
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-original" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none (type, external)
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  module m2
    implicit none (type, external)
  
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m2
    implicit none (type, external)
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-4.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-4.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-4.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-4.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  module m
  implicit none
  
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
  implicit none
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-6.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-6.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/linear-6.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/linear-6.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  module m
  implicit none
  integer, parameter :: val = 1
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
  implicit none
  integer, parameter :: val = 1
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/loop-4.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/loop-4.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/loop-4.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/loop-4.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    use iso_c_binding, only: c_loc
    implicit none (type, external)
*************** subroutine f2 (a)
*** 36,42 ****
        do j = 0, 63
          a(64 * i + j) = i + j
        end do
!     end do    
  end
  
  subroutine f3 (a)
--- 37,43 ----
        do j = 0, 63
          a(64 * i + j) = i + j
        end do
!     end do
  end
  
  subroutine f3 (a)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/loop-exit.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/loop-exit.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/loop-exit.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/loop-exit.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine sub1
  !$omp do
  outer: do i = 1, 5
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-12.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-12.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-12.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-12.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-additional-options "-fdump-tree-omplower -fdump-tree-original" }
! 
  subroutine foo
    implicit none
    integer :: a, b, b1
--- 1,5 ----
  ! { dg-additional-options "-fdump-tree-omplower -fdump-tree-original" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo
    implicit none
    integer :: a, b, b1
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
! ! { dg-additional-options "-fdump-tree-original" }
  
  subroutine bar
  integer, target :: x, x2
--- 1,4 ----
! ! { dg-additional-options "-fdump-tree-original -Wno-deprecated-openmp" }
  
  subroutine bar
  integer, target :: x, x2
*************** call foo3(y)
*** 25,33 ****
  !$omp end target data
  
  !$omp target data map(z) use_device_ptr(z)
  call foo3(z)
  !$omp end target data
! end 
  
  ! { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(to:x\\)" 1 "original" } }
  ! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(always,to:x\\)" 1 "original" } }
--- 25,34 ----
  !$omp end target data
  
  !$omp target data map(z) use_device_ptr(z)
+ 
  call foo3(z)
  !$omp end target data
! end
  
  ! { dg-final { scan-tree-dump-times "#pragma omp target enter data map\\(to:x\\)" 1 "original" } }
  ! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(always,to:x\\)" 1 "original" } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-6.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-6.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-6.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-6.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-additional-options "-fdump-tree-original" }
! 
  implicit none
  
  integer :: a, b, b1, b2, b3, b4, b5, b6
--- 1,5 ----
  ! { dg-additional-options "-fdump-tree-original" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  implicit none
  
  integer :: a, b, b1, b2, b3, b4, b5, b6
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-7.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-7.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-7.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-7.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-additional-options "-fdump-tree-original" }
! 
  implicit none
  
  integer :: a, b, close, always, to, present
--- 1,5 ----
  ! { dg-additional-options "-fdump-tree-original" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  implicit none
  
  integer :: a, b, close, always, to, present
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-8.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-8.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/map-8.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/map-8.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  implicit none
  
  integer :: a
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/master-construct-dep.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/master-construct-dep.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/master-construct-dep.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/master-construct-dep.f90	Sun Dec 14 22:32:14 2025
***************
*** 0 ****
--- 1,18 ----
+ ! { dg-additional-options "-Wno-openmp" }
+ PROGRAM master_construct_dep
+   INTEGER X
+   INTEGER Y
+   X = 0
+   Y = 8
+ !$OMP PARALLEL
+     DO WHILE( Y > 0 )
+ !$OMP SINGLE
+       Y = Y - 1
+ !$OMP END SINGLE
+ !$OMP MASTER ! { dg-warning "'master' construct at \\(1\\) deprecated since OpenMP 5.1, use 'masked' \\\[-Wdeprecated-openmp\\\]" }
+       X = X + 1
+ !$OMP END MASTER
+ !$OMP BARRIER
+     ENDDO
+ !$OMP END PARALLEL
+ END PROGRAM
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nesting-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nesting-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nesting-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nesting-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo
    integer :: i, j
    !$omp taskloop
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nesting-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nesting-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nesting-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nesting-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine f1
    integer i, j
    !$omp do
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nowait-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nowait-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nowait-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nowait-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Cross check that it is accepted without nowait
  subroutine bar()
  implicit none
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nowait-4.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nowait-4.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nowait-4.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nowait-4.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! invalid nowait
  
  subroutine foo
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nowait-5.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nowait-5.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/nowait-5.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/nowait-5.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Cross check that it is accepted without nowait
  subroutine bar()
  implicit none
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fopenmp-simd -fdump-tree-original -O2" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  
  include 'openmp-simd-1.f90'
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fno-openmp-simd -fdump-tree-original -O2" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  
  include 'openmp-simd-1.f90'
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/order-8.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/order-8.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/order-8.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/order-8.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine f1 (a)
    integer :: a(*)
    integer i
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/parallel-master-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,9 ****
! ! { dg-additional-options "-fdump-tree-original" }
    implicit none
    integer :: k, p, s, r, nth, t, f
    logical(kind=2) l2
    !$omp threadprivate (t)
!   
    external bar
    !$omp parallel master default(none) private (k)
      call bar (k)
--- 1,9 ----
! ! { dg-additional-options "-fdump-tree-original -Wno-deprecated-openmp" }
    implicit none
    integer :: k, p, s, r, nth, t, f
    logical(kind=2) l2
    !$omp threadprivate (t)
! 
    external bar
    !$omp parallel master default(none) private (k)
      call bar (k)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/parallel-master-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
    use iso_c_binding, only: c_intptr_t
    implicit none (external, type)
    integer, parameter :: omp_event_handle_kind = c_intptr_t
***************
*** 6,9 ****
      !$omp task detach (x) ! { dg-error "'x' not specified in enclosing 'parallel'" }
      !$omp end task
    !$omp end parallel master
! end 
--- 7,10 ----
      !$omp task detach (x) ! { dg-error "'x' not specified in enclosing 'parallel'" }
      !$omp end task
    !$omp end parallel master
! end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr107214-8.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr107214-8.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr107214-8.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr107214-8.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  integer, allocatable :: x
  integer, pointer :: y
  
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  integer, allocatable :: x
  integer, pointer :: y
  
*************** integer, pointer :: y
*** 13,18 ****
--- 13,19 ----
  !$omp end target
  
  !$omp target firstprivate(y) is_device_ptr(y)  ! { dg-error "Symbol 'y' present on multiple clauses" }
+ 
  !$omp end target
  
  end
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr48117.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr48117.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr48117.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr48117.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR fortran/48117
  ! { dg-do compile }
  ! { dg-options "-O2 -fopenmp" }
! 
  subroutine foo(x)
    character(len=*), optional :: x
    character(len=80) :: v
--- 1,7 ----
  ! PR fortran/48117
  ! { dg-do compile }
  ! { dg-options "-O2 -fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo(x)
    character(len=*), optional :: x
    character(len=80) :: v
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr83977.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr83977.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr83977.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr83977.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! PR middle-end/83977
  ! { dg-do compile }
! 
  integer function foo (a, b)
     integer :: a, b
  !$omp declare simd uniform(b) linear(ref(a):b)
--- 1,6 ----
  ! PR middle-end/83977
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  integer function foo (a, b)
     integer :: a, b
  !$omp declare simd uniform(b) linear(ref(a):b)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr94672.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr94672.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr94672.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr94672.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  SUBROUTINE foo(n,array)
      IMPLICIT NONE
      INTEGER, INTENT (IN) :: n
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  SUBROUTINE foo(n,array)
      IMPLICIT NONE
      INTEGER, INTENT (IN) :: n
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: f00, f01, f02, f03, f04, f05, f06, f07, f08, f09
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: f00, f01, f02, f03, f04, f05, f06, f07, f08, f09
*************** contains
*** 13,27 ****
  subroutine foo ()
    integer :: i
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*firstprivate\\(f00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f00\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f00\\)" "gimple" } } ! FIXME. 
    !$omp distribute parallel do firstprivate (f00) default(none)
    do i = 1, 64
      f00 = f00 + 1
    end do
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*firstprivate\\(f01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f01\\)" "gimple" } }
    !$omp distribute parallel do simd firstprivate (f01) default(none)
    do i = 1, 64
--- 13,27 ----
  subroutine foo ()
    integer :: i
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*firstprivate\\(f00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f00\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f00\\)" "gimple" } } ! FIXME.
    !$omp distribute parallel do firstprivate (f00) default(none)
    do i = 1, 64
      f00 = f00 + 1
    end do
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*firstprivate\\(f01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f01\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f01\\)" "gimple" } }
    !$omp distribute parallel do simd firstprivate (f01) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 58,71 ****
    do i = 1, 64
      f05 = f05 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f06\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f06\\)" "gimple" } } ! FIXME. 
    !$omp parallel do firstprivate (f06) default(none)
    do i = 1, 64
      f06 = f06 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f07\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f07\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f07\\)" "gimple" } }
    !$omp parallel do simd firstprivate (f07) default(none)
    do i = 1, 64
--- 58,71 ----
    do i = 1, 64
      f05 = f05 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f06\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f06\\)" "gimple" } } ! FIXME.
    !$omp parallel do firstprivate (f06) default(none)
    do i = 1, 64
      f06 = f06 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f07\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f07\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f07\\)" "gimple" } }
    !$omp parallel do simd firstprivate (f07) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 112,126 ****
    f13 = f13 + 1
    !$omp end target parallel
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f14\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f14\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f14\\)" "gimple" } } ! FIXME. 
    !$omp target parallel do firstprivate (f14) default(none) defaultmap(none)
    do i = 1, 64
      f14 = f14 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f15\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f15\\)" "gimple" } }
    !$omp target parallel do simd firstprivate (f15) default(none) defaultmap(none)
    do i = 1, 64
--- 112,126 ----
    f13 = f13 + 1
    !$omp end target parallel
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f14\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f14\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f14\\)" "gimple" } } ! FIXME.
    !$omp target parallel do firstprivate (f14) default(none) defaultmap(none)
    do i = 1, 64
      f14 = f14 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f15\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f15\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f15\\)" "gimple" } }
    !$omp target parallel do simd firstprivate (f15) default(none) defaultmap(none)
    do i = 1, 64
*************** subroutine bar ()
*** 140,173 ****
    f17 = f17 + 1
    !$omp end target teams
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f18\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f18\\)" "gimple" } } ! FIXME: This should be on distribute instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f18\\)" "gimple" } } ! FIXME. 
    !$omp target teams distribute firstprivate (f18) default(none) defaultmap(none)
    do i = 1, 64
      f18 = f18 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f19\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME: This should be on distribute instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME. 
    !$omp target teams distribute parallel do firstprivate (f19) default(none) defaultmap(none)
    do i = 1, 64
      f19 = f19 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f20\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f20\\)" "gimple" } }
    !$omp target teams distribute parallel do simd firstprivate (f20) default(none) defaultmap(none)
    do i = 1, 64
      f20 = f20 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f21\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f21\\)" "gimple" } }
    !$omp target teams distribute simd firstprivate (f21) default(none) defaultmap(none)
    do i = 1, 64
--- 140,173 ----
    f17 = f17 + 1
    !$omp end target teams
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f18\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f18\\)" "gimple" } } ! FIXME: This should be on distribute instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f18\\)" "gimple" } } ! FIXME.
    !$omp target teams distribute firstprivate (f18) default(none) defaultmap(none)
    do i = 1, 64
      f18 = f18 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f19\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME: This should be on distribute instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f19\\)" "gimple" } } ! FIXME.
    !$omp target teams distribute parallel do firstprivate (f19) default(none) defaultmap(none)
    do i = 1, 64
      f19 = f19 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f20\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f20\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f20\\)" "gimple" } }
    !$omp target teams distribute parallel do simd firstprivate (f20) default(none) defaultmap(none)
    do i = 1, 64
      f20 = f20 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f21\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f21\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f21\\)" "gimple" } }
    !$omp target teams distribute simd firstprivate (f21) default(none) defaultmap(none)
    do i = 1, 64
*************** subroutine bar ()
*** 176,182 ****
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f22\\)" "gimple" } } ! NOTE: This is an implementation detail. 
    ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    !$omp target teams loop firstprivate (f22) default(none) defaultmap(none)
--- 176,182 ----
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f22\\)" "gimple" } } ! NOTE: This is an implementation detail.
    ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f22\\)" "gimple" } }
    !$omp target teams loop firstprivate (f22) default(none) defaultmap(none)
*************** subroutine bar ()
*** 196,226 ****
    do i = 1, 64
      f24 = f24 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f25\\)" "gimple" } } ! FIXME: This should be on distribute instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f25\\)" "gimple" } } ! FIXME. 
    !$omp teams distribute firstprivate (f25) default(none)
    do i = 1, 64
      f25 = f25 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME: This should be on distribute instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME. 
    !$omp teams distribute parallel do firstprivate (f26) default(none)
    do i = 1, 64
      f26 = f26 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f27\\)" "gimple" } }
    !$omp teams distribute parallel do simd firstprivate (f27) default(none)
    do i = 1, 64
      f27 = f27 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f28\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f28\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f28\\)" "gimple" } }
    !$omp teams distribute simd firstprivate (f28) default(none)
    do i = 1, 64
--- 196,226 ----
    do i = 1, 64
      f24 = f24 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f25\\)" "gimple" } } ! FIXME: This should be on distribute instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f25\\)" "gimple" } } ! FIXME.
    !$omp teams distribute firstprivate (f25) default(none)
    do i = 1, 64
      f25 = f25 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME: This should be on distribute instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f26\\)" "gimple" } } ! FIXME.
    !$omp teams distribute parallel do firstprivate (f26) default(none)
    do i = 1, 64
      f26 = f26 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f27\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f27\\)" "gimple" } }
    !$omp teams distribute parallel do simd firstprivate (f27) default(none)
    do i = 1, 64
      f27 = f27 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f28\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f28\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f28\\)" "gimple" } }
    !$omp teams distribute simd firstprivate (f28) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 228,234 ****
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f29\\)" "gimple" } } ! NOTE: This is an implementation detail. 
    ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
    !$omp teams loop firstprivate (f29) default(none)
--- 228,234 ----
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(f29\\)" "gimple" } } ! NOTE: This is an implementation detail.
    ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(f29\\)" "gimple" } }
    !$omp teams loop firstprivate (f29) default(none)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-11.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: r00, r01, r02
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: r00, r01, r02
*************** subroutine bar ()
*** 30,35 ****
      r02 = r02 + 1
    end do
    ! FIXME: We don't support in_reduction clause on target yet, once we do, should
!   ! add testcase coverage for all combined/composite constructs with target as leaf construct. 
  end
  end module m
--- 30,35 ----
      r02 = r02 + 1
    end do
    ! FIXME: We don't support in_reduction clause on target yet, once we do, should
!   ! add testcase coverage for all combined/composite constructs with target as leaf construct.
  end
  end module m
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: l00, l01, l02, l03, l04, l05, l06, l07
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: l00, l01, l02, l03, l04, l05, l06, l07
*************** contains
*** 12,26 ****
  subroutine foo ()
    integer :: i
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l00\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l00\\)" "gimple" } } ! FIXME. 
    !$omp distribute parallel do lastprivate (l00) default(none)
    do i = 1, 64
      l00 = i
    end do
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l01\\)" "gimple" } }
    !$omp distribute parallel do simd lastprivate (l01) default(none)
    do i = 1, 64
--- 12,26 ----
  subroutine foo ()
    integer :: i
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l00\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l00\\)" "gimple" } } ! FIXME.
    !$omp distribute parallel do lastprivate (l00) default(none)
    do i = 1, 64
      l00 = i
    end do
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l01\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l01\\)" "gimple" } }
    !$omp distribute parallel do simd lastprivate (l01) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 46,87 ****
      l03 = i
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l04\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l04\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l04\\)" "gimple" } }
    !$omp master taskloop lastprivate (l04) default(none)
    do i = 1, 64
      l04 = i
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l05\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l05\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l05\\)" "gimple" } }
    !$omp master taskloop simd lastprivate (l05) default(none)
    do i = 1, 64
      l05 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME. 
    !$omp parallel do lastprivate (l06) default(none)
    do i = 1, 64
      l06 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l07\\)" "gimple" } }
    !$omp parallel do simd lastprivate (l07) default(none)
    do i = 1, 64
      l07 = i
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp parallel loop lastprivate (j00) default(none)
    do j00 = 1, 64
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l08\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l08\\)" "gimple" } }
    !$omp parallel master taskloop lastprivate (l08) default(none)
    do i = 1, 64
--- 46,87 ----
      l03 = i
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l04\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l04\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l04\\)" "gimple" } }
    !$omp master taskloop lastprivate (l04) default(none)
    do i = 1, 64
      l04 = i
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l05\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l05\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l05\\)" "gimple" } }
    !$omp master taskloop simd lastprivate (l05) default(none)
    do i = 1, 64
      l05 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME.
    !$omp parallel do lastprivate (l06) default(none)
    do i = 1, 64
      l06 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l07\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l07\\)" "gimple" } }
    !$omp parallel do simd lastprivate (l07) default(none)
    do i = 1, 64
      l07 = i
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp parallel loop lastprivate (j00) default(none)
    do j00 = 1, 64
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l08\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l08\\)" "gimple" } }
    !$omp parallel master taskloop lastprivate (l08) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 89,103 ****
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l09\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l09\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
    !$omp parallel master taskloop simd lastprivate (l09) default(none)
    do i = 1, 64
      l09 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l10\\)" "gimple" } } ! FIXME: This should be on sections instead. 
!   ! { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*lastprivate\\(l10\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp section \[^\n\r]*lastprivate\\(l10\\)" "gimple" } }
    !$omp parallel sections lastprivate (l10) default(none)
      l10 = 1
--- 89,103 ----
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(l09\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l09\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
    !$omp parallel master taskloop simd lastprivate (l09) default(none)
    do i = 1, 64
      l09 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l10\\)" "gimple" } } ! FIXME: This should be on sections instead.
!   ! { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*lastprivate\\(l10\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp section \[^\n\r]*lastprivate\\(l10\\)" "gimple" } }
    !$omp parallel sections lastprivate (l10) default(none)
      l10 = 1
*************** subroutine bar ()
*** 106,121 ****
    !$omp end parallel sections
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l11" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l11\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } ! FIXME. 
    !$omp target parallel do lastprivate (l11) default(none) defaultmap(none)
    do i = 1, 64
      l11 = i
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l12" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l12\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l12\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l12\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l12\\)" "gimple" } }
    !$omp target parallel do simd lastprivate (l12) default(none) defaultmap(none)
    do i = 1, 64
--- 106,121 ----
    !$omp end parallel sections
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l11" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l11\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l11\\)" "gimple" } } ! FIXME.
    !$omp target parallel do lastprivate (l11) default(none) defaultmap(none)
    do i = 1, 64
      l11 = i
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l12" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l12\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l12\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l12\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l12\\)" "gimple" } }
    !$omp target parallel do simd lastprivate (l12) default(none) defaultmap(none)
    do i = 1, 64
*************** subroutine bar ()
*** 124,131 ****
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j01" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j01\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp target parallel loop lastprivate (j01) default(none) defaultmap(none)
    do j01 = 0, 64
    end do
--- 124,131 ----
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j01" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j01\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j01\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp target parallel loop lastprivate (j01) default(none) defaultmap(none)
    do j01 = 0, 64
    end do
*************** subroutine bar ()
*** 141,148 ****
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l14\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l14\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l14\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l14\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l14\\)" "gimple" } } ! FIXME. 
    !$omp target teams distribute parallel do lastprivate (l14) default(none) defaultmap(none)
    do i = 1, 64
      l14 = i
--- 141,148 ----
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l14\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l14\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l14\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l14\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l14\\)" "gimple" } } ! FIXME.
    !$omp target teams distribute parallel do lastprivate (l14) default(none) defaultmap(none)
    do i = 1, 64
      l14 = i
*************** subroutine bar ()
*** 151,158 ****
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l15\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l15\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l15\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l15\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l15\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l15\\)" "gimple" } }
    !$omp target teams distribute parallel do simd lastprivate (l15) default(none) defaultmap(none)
    do i = 1, 64
--- 151,158 ----
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l15\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l15\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l15\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l15\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l15\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l15\\)" "gimple" } }
    !$omp target teams distribute parallel do simd lastprivate (l15) default(none) defaultmap(none)
    do i = 1, 64
*************** subroutine bar ()
*** 170,179 ****
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j02" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j02\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j02\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp target teams loop lastprivate (j02) default(none) defaultmap(none)
    do j02 = 0, 64
    end do
--- 170,179 ----
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j02" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j02\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j02\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j02\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp target teams loop lastprivate (j02) default(none) defaultmap(none)
    do j02 = 0, 64
    end do
*************** subroutine bar ()
*** 184,190 ****
    do i = 1, 64
      l17 = i
    end do
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l18\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l18\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l18\\)" "gimple" } }
    !$omp taskloop simd lastprivate (l18) default(none)
--- 184,190 ----
    do i = 1, 64
      l17 = i
    end do
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(l18\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(l18\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l18\\)" "gimple" } }
    !$omp taskloop simd lastprivate (l18) default(none)
*************** subroutine bar ()
*** 199,214 ****
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l20\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l20\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l20\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l20\\)" "gimple" } } ! FIXME. 
   !$omp teams distribute parallel do lastprivate (l20) default(none)
    do i = 1, 64
      l20 = i
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l21\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l21\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l21\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l21\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l21\\)" "gimple" } }
   !$omp teams distribute parallel do simd lastprivate (l21) default(none)
    do i = 1, 64
--- 199,214 ----
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l20\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l20\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l20\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l20\\)" "gimple" } } ! FIXME.
   !$omp teams distribute parallel do lastprivate (l20) default(none)
    do i = 1, 64
      l20 = i
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(l21\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(l21\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l21\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l21\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l21\\)" "gimple" } }
   !$omp teams distribute parallel do simd lastprivate (l21) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 222,231 ****
      l22 = i
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j03\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp teams loop lastprivate (j03) default(none)
    do j03 = 1, 64
    end do
--- 222,231 ----
      l22 = i
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j03\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp teams loop lastprivate (j03) default(none)
    do j03 = 1, 64
    end do
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: l00, l01, l02, l03, l04, l07, l08, l09
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: l00, l01, l02, l03, l04, l07, l08, l09
*************** subroutine bar ()
*** 39,57 ****
    do i = 1, 64
      l02 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME. 
    !$omp parallel do firstprivate (l03) lastprivate (l03) default(none)
    do i = 1, 64
      l03 = i
    end do
    !$omp end parallel do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l04\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l04\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l04\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l04\\)" "gimple" } }
    !$omp parallel do simd firstprivate (l04) lastprivate (l04) default(none)
--- 39,57 ----
    do i = 1, 64
      l02 = i
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME.
    !$omp parallel do firstprivate (l03) lastprivate (l03) default(none)
    do i = 1, 64
      l03 = i
    end do
    !$omp end parallel do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l04\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l04\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l04\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l04\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l04\\)" "gimple" } }
    !$omp parallel do simd firstprivate (l04) lastprivate (l04) default(none)
*************** subroutine bar ()
*** 83,89 ****
    ! FIXME: OpenMP 5.0/5.1 broken here, conceptually it should be shared on parallel and
    ! firstprivate+lastprivate on sections, in GCC implementation we put firstprivate+lastprivate
    ! on parallel for historic reasons, but OpenMP 5.0/5.1 mistakenly say firstprivate
!   ! should be on parallel and lastprivate on sections. 
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l07\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l07\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*firstprivate\\(l07\\)" "gimple" } }
--- 83,89 ----
    ! FIXME: OpenMP 5.0/5.1 broken here, conceptually it should be shared on parallel and
    ! firstprivate+lastprivate on sections, in GCC implementation we put firstprivate+lastprivate
    ! on parallel for historic reasons, but OpenMP 5.0/5.1 mistakenly say firstprivate
!   ! should be on parallel and lastprivate on sections.
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l07\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l07\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*firstprivate\\(l07\\)" "gimple" } }
*************** subroutine bar ()
*** 97,106 ****
    !$omp end parallel sections
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l08" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l08\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l08\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } ! FIXME. 
    !$omp target parallel do firstprivate (l08) lastprivate (l08) default(none) defaultmap(none)
    do i = 1, 64
      l08 = i
--- 97,106 ----
    !$omp end parallel sections
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l08" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l08\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l08\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l08\\)" "gimple" } } ! FIXME.
    !$omp target parallel do firstprivate (l08) lastprivate (l08) default(none) defaultmap(none)
    do i = 1, 64
      l08 = i
*************** subroutine bar ()
*** 108,117 ****
    !$omp end target parallel do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l09" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l09\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l09\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l09\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l09\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
    !$omp target parallel do simd firstprivate (l09) lastprivate (l09) default(none) defaultmap(none)
--- 108,117 ----
    !$omp end target parallel do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l09" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l09\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l09\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l09\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l09\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp simd\[^\n\r]*firstprivate\\(l09\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*lastprivate\\(l09\\)" "gimple" } }
    !$omp target parallel do simd firstprivate (l09) lastprivate (l09) default(none) defaultmap(none)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-4.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-4.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-4.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-4.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: l00, l01, l05, l06, l07, l08
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: l00, l01, l05, l06, l07, l08
*************** subroutine bar ()
*** 34,43 ****
    do i = 1, 64
      l02 = l02 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l03:1\\)" "gimple" } }
    !$omp parallel do simd linear (l03) default(none)
    do i = 1, 64
--- 34,43 ----
    do i = 1, 64
      l02 = l02 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l03\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l03\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l03:1\\)" "gimple" } }
    !$omp parallel do simd linear (l03) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 63,72 ****
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l06" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l06\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l06\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l06\\)" "gimple" } } ! FIXME. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l06:1\\)" "gimple" } }
    !$omp target parallel do simd linear (l06) default(none) defaultmap(none)
    do i = 1, 64
--- 63,72 ----
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:l06" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(l06\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*firstprivate\\(l06\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*firstprivate\\(l06\\)" "gimple" } } ! FIXME.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(l06\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(l06:1\\)" "gimple" } }
    !$omp target parallel do simd linear (l06) default(none) defaultmap(none)
    do i = 1, 64
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-5.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-5.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-5.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-5.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: j00, j01, j02, j03, j04, j06, j07, j08, j09
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: j00, j01, j02, j03, j04, j06, j07, j08, j09
*************** contains
*** 11,18 ****
  
  subroutine foo ()
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j00:1\\)" "gimple" } }
    !$omp distribute parallel do simd linear (j00) default(none)
    do j00 = 1, 64
--- 11,18 ----
  
  subroutine foo ()
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j00:1\\)" "gimple" } }
    !$omp distribute parallel do simd linear (j00) default(none)
    do j00 = 1, 64
*************** subroutine bar ()
*** 32,52 ****
    do j02 = 1, 64
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j03:1\\)" "gimple" } }
    !$omp master taskloop simd linear (j03) default(none)
    do j03 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j04:1\\)" "gimple" } }
    !$omp parallel do simd linear (j04) default(none)
    do j04 = 1, 64
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j05:1\\)" "gimple" } }
    !$omp parallel master taskloop simd linear (j05) default(none)
--- 32,52 ----
    do j02 = 1, 64
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j03:1\\)" "gimple" } }
    !$omp master taskloop simd linear (j03) default(none)
    do j03 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j04:1\\)" "gimple" } }
    !$omp parallel do simd linear (j04) default(none)
    do j04 = 1, 64
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j05:1\\)" "gimple" } }
    !$omp parallel master taskloop simd linear (j05) default(none)
*************** subroutine bar ()
*** 54,61 ****
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } }
    !$omp target parallel do simd linear (j06) default(none) defaultmap(none)
    do j06 = 1, 64
--- 54,61 ----
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } }
    !$omp target parallel do simd linear (j06) default(none) defaultmap(none)
    do j06 = 1, 64
*************** subroutine bar ()
*** 70,77 ****
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j08:1\\)" "gimple" } }
    !$omp target teams distribute parallel do simd linear (j08) default(none) defaultmap(none)
    do j08 = 1, 64
--- 70,77 ----
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j08:1\\)" "gimple" } }
    !$omp target teams distribute parallel do simd linear (j08) default(none) defaultmap(none)
    do j08 = 1, 64
*************** subroutine bar ()
*** 84,90 ****
    !$omp target teams distribute simd linear (j09) default(none) defaultmap(none)
    do j09 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j10:1\\)" "gimple" } }
    !$omp taskloop simd linear (j10) default(none)
--- 84,90 ----
    !$omp target teams distribute simd linear (j09) default(none) defaultmap(none)
    do j09 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j10:1\\)" "gimple" } }
    !$omp taskloop simd linear (j10) default(none)
*************** subroutine bar ()
*** 92,99 ****
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j11:1\\)" "gimple" } }
    !$omp teams distribute parallel do simd linear (j11) default(none)
    do j11 = 1, 64
--- 92,99 ----
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j11:1\\)" "gimple" } }
    !$omp teams distribute parallel do simd linear (j11) default(none)
    do j11 = 1, 64
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-6.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-6.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-6.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-6.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: j00, j01, j02, j03, j04, j06, j07, j08, j09
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: j00, j01, j02, j03, j04, j06, j07, j08, j09
*************** contains
*** 11,18 ****
  
  subroutine foo ()
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j00:1\\)" "gimple" } }
    !$omp distribute parallel do simd default(none)
    do j00 = 1, 64
--- 11,18 ----
  
  subroutine foo ()
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j00\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j00:1\\)" "gimple" } }
    !$omp distribute parallel do simd default(none)
    do j00 = 1, 64
*************** subroutine bar ()
*** 32,52 ****
    do j02 = 1, 64
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j03:1\\)" "gimple" } }
    !$omp master taskloop simd default(none)
    do j03 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j04:1\\)" "gimple" } }
    !$omp parallel do simd default(none)
    do j04 = 1, 64
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j05:1\\)" "gimple" } }
    !$omp parallel master taskloop simd default(none)
--- 32,52 ----
    do j02 = 1, 64
    end do
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j03\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j03\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j03:1\\)" "gimple" } }
    !$omp master taskloop simd default(none)
    do j03 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j04\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j04:1\\)" "gimple" } }
    !$omp parallel do simd default(none)
    do j04 = 1, 64
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp master\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j05\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j05\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j05:1\\)" "gimple" } }
    !$omp parallel master taskloop simd default(none)
*************** subroutine bar ()
*** 54,61 ****
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } }
    !$omp target parallel do simd default(none) defaultmap(none)
    do j06 = 1, 64
--- 54,61 ----
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:j06" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j06\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j06\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j06:1\\)" "gimple" } }
    !$omp target parallel do simd default(none) defaultmap(none)
    do j06 = 1, 64
*************** subroutine bar ()
*** 70,77 ****
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j08:1\\)" "gimple" } }
    !$omp target teams distribute parallel do simd default(none) defaultmap(none)
    do j08 = 1, 64
--- 70,77 ----
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j08\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j08\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j08:1\\)" "gimple" } }
    !$omp target teams distribute parallel do simd default(none) defaultmap(none)
    do j08 = 1, 64
*************** subroutine bar ()
*** 84,90 ****
    !$omp target teams distribute simd default(none) defaultmap(none)
    do j09 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10\\)" "gimple" } } ! NOTE: This is implementation detail. 
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j10:1\\)" "gimple" } }
    !$omp taskloop simd default(none)
--- 84,90 ----
    !$omp target teams distribute simd default(none) defaultmap(none)
    do j09 = 1, 64
    end do
!   ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*shared\\(j10\\)" "gimple" } } ! NOTE: This is implementation detail.
    ! { dg-final { scan-tree-dump "omp taskloop\[^\n\r]*lastprivate\\(j10\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j10:1\\)" "gimple" } }
    !$omp taskloop simd default(none)
*************** subroutine bar ()
*** 92,99 ****
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j11:1\\)" "gimple" } }
    !$omp teams distribute parallel do simd default(none)
    do j11 = 1, 64
--- 92,99 ----
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(j11\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*lastprivate\\(j11\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*lastprivate\\(j11\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*linear\\(j11:1\\)" "gimple" } }
    !$omp teams distribute parallel do simd default(none)
    do j11 = 1, 64
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-8.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-8.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/pr99928-8.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/pr99928-8.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! 
  module m
    implicit none
    integer :: r00, r01, r02, r03, r04, r05
--- 1,7 ----
  ! PR middle-end/99928
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fdump-tree-gimple" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: r00, r01, r02, r03, r04, r05
*************** contains
*** 13,27 ****
  subroutine foo ()
    integer :: i
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } } ! FIXME. 
    !$omp distribute parallel do reduction(+:r00) default(none)
    do i = 1, 64
      r00 = r00 + 1
    end do
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } }
    !$omp distribute parallel do simd reduction(+:r01) default(none)
    do i = 1, 64
--- 13,27 ----
  subroutine foo ()
    integer :: i
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r00\\)" "gimple" } } ! FIXME.
    !$omp distribute parallel do reduction(+:r00) default(none)
    do i = 1, 64
      r00 = r00 + 1
    end do
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r01\\)" "gimple" } }
    !$omp distribute parallel do simd reduction(+:r01) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 62,83 ****
    do i = 1, 64
      r05 = r05 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r06\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r06\\)" "gimple" } } ! FIXME. 
    !$omp parallel do reduction(+:r06) default(none)
    do i = 1, 64
      r06 = r06 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } }
    !$omp parallel do simd reduction(+:r07) default(none)
    do i = 1, 64
      r07 = r07 + 1
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r08\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r08\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp parallel loop reduction(+:r08) default(none)
    do i = 1, 64
      r08 = r08 + 1
--- 62,83 ----
    do i = 1, 64
      r05 = r05 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r06\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r06\\)" "gimple" } } ! FIXME.
    !$omp parallel do reduction(+:r06) default(none)
    do i = 1, 64
      r06 = r06 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r07\\)" "gimple" } }
    !$omp parallel do simd reduction(+:r07) default(none)
    do i = 1, 64
      r07 = r07 + 1
    end do
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r08\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r08\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r08\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp parallel loop reduction(+:r08) default(none)
    do i = 1, 64
      r08 = r08 + 1
*************** subroutine bar ()
*** 102,109 ****
    do i = 1, 64
      r11 = r11 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } } ! FIXME: This should be on sections instead. 
!   ! { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump-not "omp section \[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } }
    !$omp parallel sections reduction(+:r12) default(none)
      r12 = r12 + 1
--- 102,109 ----
    do i = 1, 64
      r11 = r11 + 1
    end do
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } } ! FIXME: This should be on sections instead.
!   ! { dg-final { scan-tree-dump-not "omp sections\[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump-not "omp section \[^\n\r]*reduction\\(\\+:r12\\)" "gimple" } }
    !$omp parallel sections reduction(+:r12) default(none)
      r12 = r12 + 1
*************** subroutine bar ()
*** 118,133 ****
    !$omp end target parallel
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r14" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r14\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r14\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r14\\)" "gimple" } } ! FIXME. 
    !$omp target parallel do reduction(+:r14) default(none) defaultmap(none)
    do i = 1, 64
      r14 = r14 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r15" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r15\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } }
    !$omp target parallel do simd reduction(+:r15) default(none) defaultmap(none)
    do i = 1, 64
--- 118,133 ----
    !$omp end target parallel
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r14" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r14\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r14\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r14\\)" "gimple" } } ! FIXME.
    !$omp target parallel do reduction(+:r14) default(none) defaultmap(none)
    do i = 1, 64
      r14 = r14 + 1
    end do
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r15" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r15\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r15\\)" "gimple" } }
    !$omp target parallel do simd reduction(+:r15) default(none) defaultmap(none)
    do i = 1, 64
*************** subroutine bar ()
*** 136,143 ****
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r16" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r16\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r16\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r16\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r16\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp target parallel loop reduction(+:r16) default(none) defaultmap(none)
    do i = 1, 64
      r16 = r16 + 1
--- 136,143 ----
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r16" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r16\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r16\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r16\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r16\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp target parallel loop reduction(+:r16) default(none) defaultmap(none)
    do i = 1, 64
      r16 = r16 + 1
*************** subroutine bar ()
*** 160,167 ****
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r19\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } } ! FIXME. 
    !$omp target teams distribute parallel do reduction(+:r19) default(none) defaultmap(none)
    do i = 1, 64
      r19 = r19 + 1
--- 160,167 ----
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r19\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r19\\)" "gimple" } } ! FIXME.
    !$omp target teams distribute parallel do reduction(+:r19) default(none) defaultmap(none)
    do i = 1, 64
      r19 = r19 + 1
*************** subroutine bar ()
*** 170,177 ****
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r20\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } }
    !$omp target teams distribute parallel do simd reduction(+:r20) default(none) defaultmap(none)
    do i = 1, 64
--- 170,177 ----
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r20\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r20\\)" "gimple" } }
    !$omp target teams distribute parallel do simd reduction(+:r20) default(none) defaultmap(none)
    do i = 1, 64
*************** subroutine bar ()
*** 189,198 ****
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r22" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(r22\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r22\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp target teams loop reduction(+:r22) default(none) defaultmap(none)
    do i = 1, 64
      r22 = r22 + 1
--- 189,198 ----
    ! { dg-final { scan-tree-dump "omp target\[^\n\r]*map\\(tofrom:r22" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp target\[^\n\r]*firstprivate\\(r22\\)" "gimple" } }
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(r22\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r22\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r22\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp target teams loop reduction(+:r22) default(none) defaultmap(none)
    do i = 1, 64
      r22 = r22 + 1
*************** subroutine bar ()
*** 218,233 ****
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } ! FIXME. 
    !$omp teams distribute parallel do reduction(+:r26) default(none)
    do i = 1, 64
      r26 = r26 + 1
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } ! FIXME: This should be on for instead. 
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } ! FIXME. 
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } }
    !$omp teams distribute parallel do simd reduction(+:r27) default(none)
    do i = 1, 64
--- 218,233 ----
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r26\\)" "gimple" } } ! FIXME.
    !$omp teams distribute parallel do reduction(+:r26) default(none)
    do i = 1, 64
      r26 = r26 + 1
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } }
    ! { dg-final { scan-tree-dump-not "omp distribute\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } ! FIXME: This should be on for instead.
!   ! { dg-final { scan-tree-dump-not "omp for\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } } ! FIXME.
    ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r27\\)" "gimple" } }
    !$omp teams distribute parallel do simd reduction(+:r27) default(none)
    do i = 1, 64
*************** subroutine bar ()
*** 241,250 ****
      r28 = r28 + 1
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(r29\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r29\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } ! NOTE: This is implementation detail. 
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } ! NOTE: This is implementation detail. 
    !$omp teams loop reduction(+:r29) default(none)
    do i = 1, 64
      r29 = r29 + 1
--- 241,250 ----
      r28 = r28 + 1
    end do
    ! { dg-final { scan-tree-dump "omp teams\[^\n\r]*shared\\(r29\\)" "gimple" } }
!   ! { dg-final { scan-tree-dump "omp distribute\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp parallel\[^\n\r]*shared\\(r29\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp for\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } ! NOTE: This is implementation detail.
!   ! { dg-final { scan-tree-dump "omp simd\[^\n\r]*reduction\\(\\+:r29\\)" "gimple" } } ! NOTE: This is implementation detail.
    !$omp teams loop reduction(+:r29) default(none)
    do i = 1, 64
      r29 = r29 + 1
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/reduction1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/reduction1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/reduction1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/reduction1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fmax-errors=100" }
  ! { dg-require-effective-target tls }
! 
  subroutine foo (ia1)
  integer :: i1, i2, i3
  integer, dimension (*) :: ia1
--- 1,7 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp -fmax-errors=100" }
  ! { dg-require-effective-target tls }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo (ia1)
  integer :: i1, i2, i3
  integer, dimension (*) :: ia1
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/schedule-modifiers-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  subroutine foo
    integer :: i
    !$omp do schedule (nonmonotonic: static, 2)
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo
    integer :: i
    !$omp do schedule (nonmonotonic: static, 2)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/sharing-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  subroutine foo (vara, varb, varc, vard, n)
    integer :: n, vara(n), varb(*), varc(:), vard(6), vare(6)
    vare(:) = 0
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo (vara, varb, varc, vard, n)
    integer :: n, vara(n), varb(*), varc(:), vard(6), vare(6)
    vare(:) = 0
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  program main
    integer :: x, i, n
  
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  program main
    integer :: x, i, n
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,6 ****
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! 
  program main
    integer :: x, i, n
  
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-fopenmp" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  program main
    integer :: x, i, n
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/target1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/target1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/target1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/target1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  module target1
    interface
      subroutine dosomething (a, n, m)
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module target1
    interface
      subroutine dosomething (a, n, m)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/taskloop-1.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none
    integer :: t
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/taskloop-2.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  subroutine foo()
  implicit none
  integer :: i, r
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-55.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-55.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-55.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-55.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-O2 -fopenmp -fdump-tree-optimized" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_doacross_start \[^\n\r]*, (?:2147483648|-2147483648), 0, " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_end " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_doacross_post " 1 "optimized" } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-56.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-56.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-56.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-56.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-O2 -fopenmp -fdump-tree-optimized" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop(?:_ull)?_doacross_start \[^\n\r]*, (?:2147483649|-2147483647), 0, " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_end " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_doacross(?:_ull)?_post " 1 "optimized" } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-57.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-57.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-57.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-57.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-O2 -fopenmp -fdump-tree-optimized" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop(?:_ull)?_doacross_start \[^\n\r]*, (?:2147483650|-2147483646), 1, " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_end " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_doacross(?:_ull)?_post " 1 "optimized" } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-58.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-58.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-58.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/gomp/workshare-reduction-58.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do compile }
  ! { dg-options "-O2 -fopenmp -fdump-tree-optimized" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_doacross_start \[^\n\r]*, (?:2147483651|-2147483645), 1, " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_loop_end " 1 "optimized" } }
  ! { dg-final { scan-tree-dump-times "__builtin_GOMP_doacross_post " 1 "optimized" } }
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/initialization_9.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/initialization_9.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/initialization_9.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/initialization_9.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do compile }
+ ! { dg-options " " }
  !
  ! PR fortran/31639
  ! Contributed by Martin Michlmayr <tbm AT cyrius DOT com>
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/interface_16.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/interface_16.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/interface_16.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/interface_16.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,7 ****
  ! { dg-do compile }
  ! This tests the fix for PR32634, in which the generic interface
  ! in foo_pr_mod was given the original rather than the local name.
! ! This meant that the original name had to be used in the calll
  ! in foo_sub.
  !
  ! Contributed by Salvatore Filippone <salvatore.filippone@uniroma2.it>
--- 1,7 ----
  ! { dg-do compile }
  ! This tests the fix for PR32634, in which the generic interface
  ! in foo_pr_mod was given the original rather than the local name.
! ! This meant that the original name had to be used in the call
  ! in foo_sub.
  !
  ! Contributed by Salvatore Filippone <salvatore.filippone@uniroma2.it>
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/intrinsic_actual_4.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/intrinsic_actual_4.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/intrinsic_actual_4.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/intrinsic_actual_4.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-options " " }
  ! Tests the fix for PR27900, in which an ICE would be caused because
  ! the actual argument LEN had no type.
  !
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/namelist_assumed_char.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/namelist_assumed_char.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/namelist_assumed_char.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/namelist_assumed_char.f90	Sun Dec 14 22:32:14 2025
***************
*** 8,14 ****
  ! Add -std=f95, add bar()
  !
  subroutine foo(c)
!   character*(*) c
    namelist /abc/ c  ! { dg-error "nonconstant character length in namelist" }
  end subroutine
  
--- 8,14 ----
  ! Add -std=f95, add bar()
  !
  subroutine foo(c)
!   character*(*) c   ! { dg-warning "Old-style character length" }
    namelist /abc/ c  ! { dg-error "nonconstant character length in namelist" }
  end subroutine
  
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/openmp-define-3.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/openmp-define-3.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/openmp-define-3.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/openmp-define-3.f90	Sun Dec 14 22:32:14 2025
***************
*** 6,11 ****
  # error _OPENMP not defined
  #endif
  
! #if _OPENMP != 201511
  # error _OPENMP defined to wrong value
  #endif
--- 6,11 ----
  # error _OPENMP not defined
  #endif
  
! #if _OPENMP != 202111
  # error _OPENMP defined to wrong value
  #endif
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/pdt_77.f03 gcc-16-20251214/gcc/testsuite/gfortran.dg/pdt_77.f03
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/pdt_77.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/pdt_77.f03	Sun Dec 14 22:32:14 2025
***************
*** 0 ****
--- 1,63 ----
+ ! { dg-do run }
+ !
+ ! Test the fix for PR110012, which failed to compile with an ICE.
+ !
+ ! Contributed by Neil Carlson  <neil.n.carlson@gmail.com>
+ !
+ module pde_class
+   type, abstract :: pde(npde)
+     integer,len :: npde
+   end type
+ end module
+ 
+ module navier_stokes_type
+   use pde_class
+   type, extends(pde) :: navier_stokes
+     integer, allocatable :: data_(:)
+   end type
+ contains
+   subroutine alloc_navier_stokes(p , n)
+     class(pde(:)), allocatable :: p
+     integer :: n
+     allocate(navier_stokes(npde=n) :: p)
+     select type (p)
+       type is (navier_stokes(*))
+         p%data_ = [(i, i = 1, p%npde)]
+     end select
+   end subroutine
+ end module
+ 
+ module mfe_disc_type
+   use pde_class
+   type :: foo
+     class(pde(:)), allocatable :: p ! This caused the ICE in resolution.
+   end type
+ end module
+ 
+ program test
+   call navier_stokes_test
+   call mfe_disc_test
+ contains
+   subroutine navier_stokes_test
+     use navier_stokes_type
+     class (pde(:)), allocatable :: x
+     call alloc_navier_stokes (x, 4)
+     select type (x)
+       type is (navier_stokes(*))
+         if (any (x%data_ /= [1,2,3,4])) stop 1
+     end select
+   end subroutine
+ 
+   subroutine mfe_disc_test
+     use navier_stokes_type
+     use mfe_disc_type
+     type (foo), allocatable :: x
+     allocate (x)
+     call alloc_navier_stokes (x%p, 3)
+     select type (z => x%p)
+       type is (navier_stokes(*))
+         if (any (z%data_ /= [1,2,3])) stop 2
+     end select
+     if (allocated (x) .and. allocated (x%p)) deallocate (x%p)
+   end subroutine
+ end program
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/pdt_78.f03 gcc-16-20251214/gcc/testsuite/gfortran.dg/pdt_78.f03
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/pdt_78.f03	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/pdt_78.f03	Sun Dec 14 22:32:14 2025
***************
*** 0 ****
--- 1,23 ----
+ ! { dg-do compile }
+ !
+ ! Test the fix for PR107142, which used to ICE after a syntax error.
+ !
+ ! Contributed by Arseny Solokha  <asolokha@gmx.com>
+ !
+ module c1162a
+   type pdt(kind,len)
+     integer, kind :: kind
+     integer, len :: len
+   end type
+  contains
+   subroutine foo(x)
+     class(pdt(kind = 1, len = :)), allocatable :: x
+     select type (x)
+       type is (pdt(kind = *, len = *)) ! { dg-error "does not have a default value" }
+       type is (pdt(kind = :, len = *)) ! { dg-error "does not have a default value" }
+     end select
+     select type (x)
+       type is (pdt(kind = 1, len = *)) ! This, of course, is OK
+     end select
+   end subroutine
+ end module
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/pr15140.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/pr15140.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/pr15140.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/pr15140.f90	Sun Dec 14 22:32:14 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-options "-std=legacy" }
  ! PR 15140: we used to fail an assertion, because we don't use the
  ! argument of the subroutine directly, but instead use a copy of it.
  function M(NAMES)
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gfortran.dg/vect/pr86421.f90 gcc-16-20251214/gcc/testsuite/gfortran.dg/vect/pr86421.f90
*** gcc-16-20251207/gcc/testsuite/gfortran.dg/vect/pr86421.f90	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/gfortran.dg/vect/pr86421.f90	Sun Dec 14 22:32:14 2025
*************** contains
*** 9,15 ****
    subroutine foo(x, y, z)
      real :: x
      integer :: y, z
!     !$omp declare simd linear(ref(x)) linear(val(y)) linear(uval(z))
      x = x + y
      z = z + 1
    end subroutine
--- 9,15 ----
    subroutine foo(x, y, z)
      real :: x
      integer :: y, z
!     !$omp declare simd linear(x : ref) linear(y : val) linear(z : uval)
      x = x + y
      z = z + 1
    end subroutine
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gnat.dg/aggr33.adb gcc-16-20251214/gcc/testsuite/gnat.dg/aggr33.adb
*** gcc-16-20251207/gcc/testsuite/gnat.dg/aggr33.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gnat.dg/aggr33.adb	Sun Dec 14 22:32:15 2025
***************
*** 0 ****
--- 1,99 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ with Ada.Containers.Vectors;
+ 
+ procedure Aggr33 is
+    type Light_Count is new Natural;
+    subtype Light_Position is Light_Count;
+ 
+    generic
+      Lights : Light_Position;
+ 
+    package Generic_Machine
+    is
+ 
+       subtype Light_State is Character
+         with Static_Predicate => Light_State in '.' | '#';
+ 
+       Off : constant Light_State := '.';
+       Lit : constant Light_State := '#';
+ 
+       type Panel_Type is
+         array (Light_Position range 0 .. Lights - 1) of Light_State;
+ 
+       Off_Panel : constant Panel_Type := [others => Off];
+ 
+       -----------------
+       -- Toggle_List --
+       -----------------
+ 
+       type Button_Index is new Positive;
+ 
+       package Toggle_Lists is new
+          Ada.Containers.Vectors (Index_Type   => Button_Index,
+                                  Element_Type => Light_Position);
+ 
+       subtype Toggle_List is Toggle_Lists.Vector;
+ 
+       ----------------
+       -- Press_List --
+       ----------------
+ 
+       package Press_Lists is new
+          Ada.Containers.Vectors (Index_Type   => Positive,
+                                  Element_Type => Toggle_Lists.Vector,
+                                  "="          => Toggle_Lists."=");
+ 
+       subtype Press_List is Press_Lists.Vector;
+ 
+       --------------------
+       -- Press_Sequence --
+       --------------------
+ 
+       subtype Press_Number is Natural;
+ 
+       type Press_Outcome is
+          record
+             Press : Toggle_List;
+             Panel : Panel_Type;
+          end record;
+ 
+       package Outcome_Lists is new
+          Ada.Containers.Vectors (Index_Type   => Press_Number,
+                                  Element_Type => Press_Outcome);
+ 
+       subtype Outcome_List is Outcome_Lists.Vector;
+ 
+       --------------
+       -- Sequence --
+       --------------
+ 
+       subtype Sequence_Id is Positive;
+ 
+       package Sequence_Lists is new
+          Ada.Containers.Vectors (Index_Type   => Sequence_Id,
+                                  Element_Type => Outcome_Lists.Vector,
+                                  "="          => Outcome_Lists."=");
+ 
+       subtype Sequence_List is Sequence_Lists.Vector;
+ 
+    end Generic_Machine;
+ 
+    package body Generic_Machine
+    is
+ 
+       procedure Add_Press
+       is
+          New_Sequence : Sequence_List;
+          Toggle       : Toggle_List;
+          New_Panel    : Panel_Type;
+       begin
+           New_Sequence.Append (Outcome_List'(Toggle, New_Panel)); -- { dg-error "too many components" }
+       end Add_Press;
+ 
+    end Generic_Machine;
+ 
+ begin
+    null;
+ end;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gnat.dg/reduce3.adb gcc-16-20251214/gcc/testsuite/gnat.dg/reduce3.adb
*** gcc-16-20251207/gcc/testsuite/gnat.dg/reduce3.adb	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gnat.dg/reduce3.adb	Sun Dec 14 22:32:15 2025
***************
*** 0 ****
--- 1,17 ----
+ -- { dg-do run }
+ -- { dg-options "-gnat2022" }
+ 
+ with Ada.Containers.Vectors;
+ 
+ procedure Reduce3 is
+ 
+   package Qs is new
+     Ada.Containers.Vectors (Index_Type => Positive, Element_Type => Positive);
+ 
+   V   : Qs.Vector;
+   Sum : Positive;
+ 
+ begin
+   V.Append (1);
+   Sum := V'Reduce ("+", 0);
+ end;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/gnat.dg/specs/put_image2.ads gcc-16-20251214/gcc/testsuite/gnat.dg/specs/put_image2.ads
*** gcc-16-20251207/gcc/testsuite/gnat.dg/specs/put_image2.ads	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/gcc/testsuite/gnat.dg/specs/put_image2.ads	Sun Dec 14 22:32:15 2025
***************
*** 0 ****
--- 1,21 ----
+ -- { dg-do compile }
+ -- { dg-options "-gnat2022" }
+ 
+ package Put_Image2 is
+ 
+   type Abstract_Configuration_Provider is tagged;
+ 
+   type Configuration_Provider_Access is
+     access all Abstract_Configuration_Provider'Class;
+ 
+   type Abstract_Configuration_Provider
+     (Child : Configuration_Provider_Access := null) is
+     abstract tagged limited private;
+ 
+ private
+ 
+   type Abstract_Configuration_Provider
+     (Child : Configuration_Provider_Access := null) is
+     abstract tagged limited null record;
+ 
+ end Put_Image2;
diff -Nrcpad gcc-16-20251207/gcc/testsuite/lib/g++-dg.exp gcc-16-20251214/gcc/testsuite/lib/g++-dg.exp
*** gcc-16-20251207/gcc/testsuite/lib/g++-dg.exp	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/lib/g++-dg.exp	Sun Dec 14 22:32:15 2025
*************** proc g++-std-flags { test } {
*** 92,97 ****
--- 92,98 ----
  	set option_list { }
  	foreach x $std_list {
  	    if { $x eq "impcx" } then { set x "26 -fimplicit-constexpr" }
+ 	    if { $x eq "modules" } then { set x "26 -fmodules -flang-info-include-translate" }
  	    lappend option_list "${std_prefix}$x"
  	}
      } else {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/lib/gnat.exp gcc-16-20251214/gcc/testsuite/lib/gnat.exp
*** gcc-16-20251207/gcc/testsuite/lib/gnat.exp	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/lib/gnat.exp	Sun Dec 14 22:32:15 2025
*************** proc gnat_init { args } {
*** 88,93 ****
--- 88,95 ----
      global GNAT_UNDER_TEST
      global TOOL_EXECUTABLE
      global gnat_target_current
+     global gcc_warning_prefix
+     global gcc_error_prefix
  
      set gnat_target_current ""
  
*************** proc gnat_init { args } {
*** 104,109 ****
--- 106,116 ----
      if ![info exists tmpdir] then {
  	set tmpdir /tmp
      }
+ 
+     # Setting these variables enables the use of relative line numbers
+     # in dg-error and dg-warning wrappers in gcc-dg.exp.
+     set gcc_warning_prefix ""
+     set gcc_error_prefix ""
  }
  
  proc gnat_target_compile { source dest type options } {
diff -Nrcpad gcc-16-20251207/gcc/testsuite/lib/target-supports.exp gcc-16-20251214/gcc/testsuite/lib/target-supports.exp
*** gcc-16-20251207/gcc/testsuite/lib/target-supports.exp	Sun Dec  7 22:32:15 2025
--- gcc-16-20251214/gcc/testsuite/lib/target-supports.exp	Sun Dec 14 22:32:15 2025
*************** proc add_options_for_bfloat16 { flags }
*** 4366,4372 ****
  
  proc check_effective_target_scalar_all_fma { } {
      if { [istarget aarch64*-*-*]
! 	 || [istarget loongarch*-*-*]} {
  	return 1
      }
      return 0
--- 4366,4373 ----
  
  proc check_effective_target_scalar_all_fma { } {
      if { [istarget aarch64*-*-*]
! 	 || ([istarget loongarch*-*-*]
! 	     && [check_effective_target_hard_float])} {
  	return 1
      }
      return 0
*************** proc check_effective_target_vect_cmdline
*** 4563,4569 ****
  	     || ([istarget arm*-*-*] && [check_effective_target_arm_neon])
  	     || [istarget aarch64*-*-*]
  	     || [istarget amdgcn*-*-*]
! 	     || [istarget riscv*-*-*]} {
  	    return 0
  	} else {
  	    return 1
--- 4564,4571 ----
  	     || ([istarget arm*-*-*] && [check_effective_target_arm_neon])
  	     || [istarget aarch64*-*-*]
  	     || [istarget amdgcn*-*-*]
! 	     || [istarget riscv*-*-*]
! 	     || [istarget loongarch*-*-*]} {
  	    return 0
  	} else {
  	    return 1
*************** proc check_effective_target_implicit_con
*** 12348,12353 ****
--- 12350,12359 ----
      return [check-flags { "" { } { -fimplicit-constexpr } }]
  }
  
+ proc check_effective_target_modules { } {
+     return [check-flags { "" { } { -fmodules } }]
+ }
+ 
  # Return 1 if expensive testcases should be run.
  
  proc check_effective_target_run_expensive_tests { } {
*************** proc check_vect_support_and_set_flags {
*** 12538,12550 ****
  	    return 0
          }
      } elseif [istarget loongarch*-*-*] {
!       # Set the default vectorization option to "-mlsx" due to the problem
!       # of non-aligned memory access when using 256-bit vectorization.
!       lappend DEFAULT_VECTCFLAGS "-mdouble-float" "-mlsx"
!       if [check_effective_target_loongarch_sx_hw] {
! 	  set dg-do-what-default run
        } else {
! 	  set dg-do-what-default compile
        }
      } else {
  	return 0
--- 12544,12560 ----
  	    return 0
          }
      } elseif [istarget loongarch*-*-*] {
!       if [check_effective_target_loongarch_sx] { # If compiler support vector
! 	# Set the default vectorization option to "-mlsx" due to the problem
! 	# of non-aligned memory access when using 256-bit vectorization.
! 	lappend DEFAULT_VECTCFLAGS "-mdouble-float" "-mlsx"
! 	if [check_effective_target_loongarch_sx_hw] { # If hardware support vector
! 	    set dg-do-what-default run
! 	} else {
! 	    set dg-do-what-default compile
! 	}
        } else {
! 	return 0
        }
      } else {
  	return 0
diff -Nrcpad gcc-16-20251207/gcc/tree-cfg.cc gcc-16-20251214/gcc/tree-cfg.cc
*** gcc-16-20251207/gcc/tree-cfg.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-cfg.cc	Sun Dec 14 22:32:15 2025
*************** make_pass_fixup_cfg (gcc::context *ctxt)
*** 10173,10178 ****
--- 10173,10396 ----
    return new pass_fixup_cfg (ctxt);
  }
  
+ 
+ /* Sort PHI argument values for make_forwarders_with_degenerate_phis.  */
+ 
+ static int
+ sort_phi_args (const void *a_, const void *b_)
+ {
+   auto *a = (const std::pair<edge, hashval_t> *) a_;
+   auto *b = (const std::pair<edge, hashval_t> *) b_;
+   hashval_t ha = a->second;
+   hashval_t hb = b->second;
+   if (ha < hb)
+     return -1;
+   else if (ha > hb)
+     return 1;
+   else if (a->first->dest_idx < b->first->dest_idx)
+     return -1;
+   else if (a->first->dest_idx > b->first->dest_idx)
+     return 1;
+   else
+     return 0;
+ }
+ 
+ /* Look for a non-virtual PHIs and make a forwarder block when all PHIs
+    have the same argument on a set of edges.  This is to not consider
+    control dependences of individual edges for same values but only for
+    the common set.  Returns true if changed the CFG.  */
+ 
+ bool
+ make_forwarders_with_degenerate_phis (function *fn)
+ {
+   bool didsomething = false;
+ 
+   basic_block bb;
+   FOR_EACH_BB_FN (bb, fn)
+     {
+       /* Only PHIs with three or more arguments have opportunities.  */
+       if (EDGE_COUNT (bb->preds) < 3)
+ 	continue;
+       /* Do not touch loop headers or blocks with abnormal predecessors.
+ 	 ???  This is to avoid creating valid loops here, see PR103458.
+ 	 We might want to improve things to either explicitely add those
+ 	 loops or at least consider blocks with no backedges.  */
+       if (bb->loop_father->header == bb
+ 	  || bb_has_abnormal_pred (bb))
+ 	continue;
+ 
+       /* Take one PHI node as template to look for identical
+ 	 arguments.  Build a vector of candidates forming sets
+ 	 of argument edges with equal values.  Note optimality
+ 	 depends on the particular choice of the template PHI
+ 	 since equal arguments are unordered leaving other PHIs
+ 	 with more than one set of equal arguments within this
+ 	 argument range unsorted.  We'd have to break ties by
+ 	 looking at other PHI nodes.  */
+       gphi_iterator gsi = gsi_start_nonvirtual_phis (bb);
+       if (gsi_end_p (gsi))
+ 	continue;
+       gphi *phi = gsi.phi ();
+       auto_vec<std::pair<edge, hashval_t>, 8> args;
+       bool need_resort = false;
+       for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
+ 	{
+ 	  edge e = gimple_phi_arg_edge (phi, i);
+ 	  /* Skip abnormal edges since we cannot redirect them.  */
+ 	  if (e->flags & EDGE_ABNORMAL)
+ 	    continue;
+ 	  /* Skip loop exit edges when we are in loop-closed SSA form
+ 	     since the forwarder we'd create does not have a PHI node.  */
+ 	  if (loops_state_satisfies_p (LOOP_CLOSED_SSA)
+ 	      && loop_exit_edge_p (e->src->loop_father, e))
+ 	    continue;
+ 
+ 	  tree arg = gimple_phi_arg_def (phi, i);
+ 	  if (!CONSTANT_CLASS_P (arg) && TREE_CODE (arg) != SSA_NAME)
+ 	    need_resort = true;
+ 	  args.safe_push (std::make_pair (e, iterative_hash_expr (arg, 0)));
+ 	}
+       if (args.length () < 2)
+ 	continue;
+       args.qsort (sort_phi_args);
+       /* The above sorting can be different between -g and -g0, as e.g. decls
+ 	 can have different uids (-g could have bigger gaps in between them).
+ 	 So, only use that to determine which args are equal, then change
+ 	 second from hash value to smallest dest_idx of the edges which have
+ 	 equal argument and sort again.  If all the phi arguments are
+ 	 constants or SSA_NAME, there is no need for the second sort, the hash
+ 	 values are stable in that case.  */
+       hashval_t hash = args[0].second;
+       args[0].second = args[0].first->dest_idx;
+       bool any_equal = false;
+       for (unsigned i = 1; i < args.length (); ++i)
+ 	if (hash == args[i].second
+ 	    && operand_equal_p (PHI_ARG_DEF_FROM_EDGE (phi, args[i - 1].first),
+ 				PHI_ARG_DEF_FROM_EDGE (phi, args[i].first)))
+ 	  {
+ 	    args[i].second = args[i - 1].second;
+ 	    any_equal = true;
+ 	  }
+ 	else
+ 	  {
+ 	    hash = args[i].second;
+ 	    args[i].second = args[i].first->dest_idx;
+ 	  }
+       if (!any_equal)
+ 	continue;
+       if (need_resort)
+ 	args.qsort (sort_phi_args);
+ 
+       /* From the candidates vector now verify true candidates for
+ 	 forwarders and create them.  */
+       gphi *vphi = get_virtual_phi (bb);
+       unsigned start = 0;
+       while (start < args.length () - 1)
+ 	{
+ 	  unsigned i;
+ 	  for (i = start + 1; i < args.length (); ++i)
+ 	    if (args[start].second != args[i].second)
+ 	      break;
+ 	  /* args[start]..args[i-1] are equal.  */
+ 	  if (start != i - 1)
+ 	    {
+ 	      /* Check all PHI nodes for argument equality
+ 	         except for vops.  */
+ 	      bool equal = true;
+ 	      gphi_iterator gsi2 = gsi;
+ 	      gsi_next (&gsi2);
+ 	      for (; !gsi_end_p (gsi2); gsi_next (&gsi2))
+ 		{
+ 		  gphi *phi2 = gsi2.phi ();
+ 		  if (virtual_operand_p (gimple_phi_result (phi2)))
+ 		    continue;
+ 		  tree start_arg
+ 		    = PHI_ARG_DEF_FROM_EDGE (phi2, args[start].first);
+ 		  for (unsigned j = start + 1; j < i; ++j)
+ 		    {
+ 		      if (!operand_equal_p (start_arg,
+ 					    PHI_ARG_DEF_FROM_EDGE
+ 					      (phi2, args[j].first)))
+ 			{
+ 			  /* Another PHI might have a shorter set of
+ 			     equivalent args.  Go for that.  */
+ 			  i = j;
+ 			  if (j == start + 1)
+ 			    equal = false;
+ 			  break;
+ 			}
+ 		    }
+ 		  if (!equal)
+ 		    break;
+ 		}
+ 	      if (equal)
+ 		{
+ 		  /* If we are asked to forward all edges the block
+ 		     has all degenerate PHIs.  Do nothing in that case.  */
+ 		  if (start == 0
+ 		      && i == args.length ()
+ 		      && args.length () == gimple_phi_num_args (phi))
+ 		    break;
+ 		  /* Instead of using make_forwarder_block we are
+ 		     rolling our own variant knowing that the forwarder
+ 		     does not need PHI nodes apart from eventually
+ 		     a virtual one.  */
+ 		  auto_vec<tree, 8> vphi_args;
+ 		  if (vphi)
+ 		    {
+ 		      vphi_args.reserve_exact (i - start);
+ 		      for (unsigned j = start; j < i; ++j)
+ 			vphi_args.quick_push
+ 			  (PHI_ARG_DEF_FROM_EDGE (vphi, args[j].first));
+ 		    }
+ 		  free_dominance_info (fn, CDI_DOMINATORS);
+ 		  if (dump_file && (dump_flags & TDF_DETAILS))
+ 		    {
+ 		      fprintf (dump_file, "New forwarder block for edge ");
+ 		      fprintf (dump_file, "%d -> %d.\n",
+ 			       args[start].first->src->index,
+ 			       args[start].first->dest->index);
+ 		    }
+ 		  basic_block forwarder = split_edge (args[start].first);
+ 		  profile_count count = forwarder->count;
+ 		  bool irr = false;
+ 		  for (unsigned j = start + 1; j < i; ++j)
+ 		    {
+ 		      edge e = args[j].first;
+ 		      if (e->flags & EDGE_IRREDUCIBLE_LOOP)
+ 			irr = true;
+ 		      redirect_edge_and_branch_force (e, forwarder);
+ 		      redirect_edge_var_map_clear (e);
+ 		      count += e->count ();
+ 		    }
+ 		  forwarder->count = count;
+ 		  if (irr)
+ 		    {
+ 		      forwarder->flags |= BB_IRREDUCIBLE_LOOP;
+ 		      single_succ_edge (forwarder)->flags
+ 			|= EDGE_IRREDUCIBLE_LOOP;
+ 		    }
+ 
+ 		  if (vphi)
+ 		    {
+ 		      tree def = copy_ssa_name (vphi_args[0]);
+ 		      gphi *vphi_copy = create_phi_node (def, forwarder);
+ 		      for (unsigned j = start; j < i; ++j)
+ 			add_phi_arg (vphi_copy, vphi_args[j - start],
+ 				     args[j].first, UNKNOWN_LOCATION);
+ 		      SET_PHI_ARG_DEF
+ 			(vphi, single_succ_edge (forwarder)->dest_idx, def);
+ 		    }
+ 		  didsomething = true;
+ 		}
+ 	    }
+ 	  /* Continue searching for more opportunities.  */
+ 	  start = i;
+ 	}
+     }
+   return didsomething;
+ }
+ 
  /* Garbage collection support for edge_def.  */
  
  extern void gt_ggc_mx (tree&);
diff -Nrcpad gcc-16-20251207/gcc/tree-cfg.h gcc-16-20251214/gcc/tree-cfg.h
*** gcc-16-20251207/gcc/tree-cfg.h	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-cfg.h	Sun Dec 14 22:32:15 2025
*************** extern edge gimple_switch_edge (function
*** 114,119 ****
--- 114,120 ----
  extern edge gimple_switch_default_edge (function *, gswitch *);
  extern bool cond_only_block_p (basic_block);
  extern void copy_phi_arg_into_existing_phi (edge, edge, bool = false);
+ extern bool make_forwarders_with_degenerate_phis (function *);
  
  /* Return true if the LHS of a call should be removed.  */
  
diff -Nrcpad gcc-16-20251207/gcc/tree-cfgcleanup.cc gcc-16-20251214/gcc/tree-cfgcleanup.cc
*** gcc-16-20251207/gcc/tree-cfgcleanup.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-cfgcleanup.cc	Sun Dec 14 22:32:15 2025
*************** execute_cleanup_cfg_post_optimizing (voi
*** 1409,1422 ****
  {
    unsigned int todo = execute_fixup_cfg ();
    if (cleanup_tree_cfg ())
!     {
!       todo &= ~TODO_cleanup_cfg;
!       todo |= TODO_update_ssa;
!     }
    maybe_remove_unreachable_handlers ();
    cleanup_dead_labels ();
!   if (group_case_labels ())
!     todo |= TODO_cleanup_cfg;
  
    basic_block bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
    gimple_stmt_iterator gsi = gsi_start_nondebug_after_labels_bb (bb);
--- 1409,1429 ----
  {
    unsigned int todo = execute_fixup_cfg ();
    if (cleanup_tree_cfg ())
!     todo |= TODO_update_ssa;
    maybe_remove_unreachable_handlers ();
    cleanup_dead_labels ();
!   if (group_case_labels () && cleanup_tree_cfg ())
!     todo |= TODO_update_ssa;
! 
!   /* When optimizing undo the merging of forwarder blocks
!      that phis for better out of ssa expansion.  */
!   if (optimize)
!     make_forwarders_with_degenerate_phis (cfun);
! 
!   /* Make sure todo does not have cleanup cfg as we don't want
!      remove the forwarder blocks we just created. cleanup cfg
!      has already happened.  */
!   todo &= ~TODO_cleanup_cfg;
  
    basic_block bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
    gimple_stmt_iterator gsi = gsi_start_nondebug_after_labels_bb (bb);
diff -Nrcpad gcc-16-20251207/gcc/tree-core.h gcc-16-20251214/gcc/tree-core.h
*** gcc-16-20251207/gcc/tree-core.h	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-core.h	Sun Dec 14 22:32:15 2025
*************** enum omp_clause_code {
*** 598,603 ****
--- 598,606 ----
  
    /* OpenMP clause: dyn_groupprivate ( [fallback (...)] : integer-expression).  */
    OMP_CLAUSE_DYN_GROUPPRIVATE,
+ 
+   /* OpenMP clause: uses_allocators.  */
+   OMP_CLAUSE_USES_ALLOCATORS,
  };
  
  #undef DEFTREESTRUCT
diff -Nrcpad gcc-16-20251207/gcc/tree-loop-distribution.cc gcc-16-20251214/gcc/tree-loop-distribution.cc
*** gcc-16-20251207/gcc/tree-loop-distribution.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-loop-distribution.cc	Sun Dec 14 22:32:15 2025
*************** destroy_loop (class loop *loop)
*** 1353,1358 ****
--- 1353,1359 ----
    redirect_edge_pred (exit, src);
    exit->flags &= ~(EDGE_TRUE_VALUE|EDGE_FALSE_VALUE);
    exit->flags |= EDGE_FALLTHRU;
+   exit->probability = profile_probability::always ();
    cancel_loop_tree (loop);
    rescan_loop_exit (exit, false, true);
  
diff -Nrcpad gcc-16-20251207/gcc/tree-pretty-print.cc gcc-16-20251214/gcc/tree-pretty-print.cc
*** gcc-16-20251207/gcc/tree-pretty-print.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-pretty-print.cc	Sun Dec 14 22:32:15 2025
*************** dump_omp_clause (pretty_printer *pp, tre
*** 907,912 ****
--- 907,926 ----
        pp_right_paren (pp);
        break;
  
+     case OMP_CLAUSE_USES_ALLOCATORS:
+       pp_string (pp, "uses_allocators(");
+       dump_generic_node (pp, OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (clause),
+ 			 spc, flags, false);
+       pp_string (pp, ": memspace(");
+       dump_generic_node (pp, OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (clause),
+ 			 spc, flags, false);
+       pp_string (pp, "), traits(");
+       dump_generic_node (pp, OMP_CLAUSE_USES_ALLOCATORS_TRAITS (clause),
+ 			 spc, flags, false);
+       pp_right_paren (pp);
+       pp_right_paren (pp);
+       break;
+ 
      case OMP_CLAUSE_AFFINITY:
        pp_string (pp, "affinity(");
        {
diff -Nrcpad gcc-16-20251207/gcc/tree-ssa-dce.cc gcc-16-20251214/gcc/tree-ssa-dce.cc
*** gcc-16-20251207/gcc/tree-ssa-dce.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-ssa-dce.cc	Sun Dec 14 22:32:15 2025
*************** tree_dce_done (bool aggressive)
*** 1940,2153 ****
    worklist.release ();
  }
  
- /* Sort PHI argument values for make_forwarders_with_degenerate_phis.  */
- 
- static int
- sort_phi_args (const void *a_, const void *b_)
- {
-   auto *a = (const std::pair<edge, hashval_t> *) a_;
-   auto *b = (const std::pair<edge, hashval_t> *) b_;
-   hashval_t ha = a->second;
-   hashval_t hb = b->second;
-   if (ha < hb)
-     return -1;
-   else if (ha > hb)
-     return 1;
-   else if (a->first->dest_idx < b->first->dest_idx)
-     return -1;
-   else if (a->first->dest_idx > b->first->dest_idx)
-     return 1;
-   else
-     return 0;
- }
- 
- /* Look for a non-virtual PHIs and make a forwarder block when all PHIs
-    have the same argument on a set of edges.  This is to not consider
-    control dependences of individual edges for same values but only for
-    the common set.  */
- 
- static unsigned
- make_forwarders_with_degenerate_phis (function *fn)
- {
-   unsigned todo = 0;
- 
-   basic_block bb;
-   FOR_EACH_BB_FN (bb, fn)
-     {
-       /* Only PHIs with three or more arguments have opportunities.  */
-       if (EDGE_COUNT (bb->preds) < 3)
- 	continue;
-       /* Do not touch loop headers or blocks with abnormal predecessors.
- 	 ???  This is to avoid creating valid loops here, see PR103458.
- 	 We might want to improve things to either explicitely add those
- 	 loops or at least consider blocks with no backedges.  */
-       if (bb->loop_father->header == bb
- 	  || bb_has_abnormal_pred (bb))
- 	continue;
- 
-       /* Take one PHI node as template to look for identical
- 	 arguments.  Build a vector of candidates forming sets
- 	 of argument edges with equal values.  Note optimality
- 	 depends on the particular choice of the template PHI
- 	 since equal arguments are unordered leaving other PHIs
- 	 with more than one set of equal arguments within this
- 	 argument range unsorted.  We'd have to break ties by
- 	 looking at other PHI nodes.  */
-       gphi_iterator gsi = gsi_start_nonvirtual_phis (bb);
-       if (gsi_end_p (gsi))
- 	continue;
-       gphi *phi = gsi.phi ();
-       auto_vec<std::pair<edge, hashval_t>, 8> args;
-       bool need_resort = false;
-       for (unsigned i = 0; i < gimple_phi_num_args (phi); ++i)
- 	{
- 	  edge e = gimple_phi_arg_edge (phi, i);
- 	  /* Skip abnormal edges since we cannot redirect them.  */
- 	  if (e->flags & EDGE_ABNORMAL)
- 	    continue;
- 	  /* Skip loop exit edges when we are in loop-closed SSA form
- 	     since the forwarder we'd create does not have a PHI node.  */
- 	  if (loops_state_satisfies_p (LOOP_CLOSED_SSA)
- 	      && loop_exit_edge_p (e->src->loop_father, e))
- 	    continue;
- 
- 	  tree arg = gimple_phi_arg_def (phi, i);
- 	  if (!CONSTANT_CLASS_P (arg) && TREE_CODE (arg) != SSA_NAME)
- 	    need_resort = true;
- 	  args.safe_push (std::make_pair (e, iterative_hash_expr (arg, 0)));
- 	}
-       if (args.length () < 2)
- 	continue;
-       args.qsort (sort_phi_args);
-       /* The above sorting can be different between -g and -g0, as e.g. decls
- 	 can have different uids (-g could have bigger gaps in between them).
- 	 So, only use that to determine which args are equal, then change
- 	 second from hash value to smallest dest_idx of the edges which have
- 	 equal argument and sort again.  If all the phi arguments are
- 	 constants or SSA_NAME, there is no need for the second sort, the hash
- 	 values are stable in that case.  */
-       hashval_t hash = args[0].second;
-       args[0].second = args[0].first->dest_idx;
-       bool any_equal = false;
-       for (unsigned i = 1; i < args.length (); ++i)
- 	if (hash == args[i].second
- 	    && operand_equal_p (PHI_ARG_DEF_FROM_EDGE (phi, args[i - 1].first),
- 				PHI_ARG_DEF_FROM_EDGE (phi, args[i].first)))
- 	  {
- 	    args[i].second = args[i - 1].second;
- 	    any_equal = true;
- 	  }
- 	else
- 	  {
- 	    hash = args[i].second;
- 	    args[i].second = args[i].first->dest_idx;
- 	  }
-       if (!any_equal)
- 	continue;
-       if (need_resort)
- 	args.qsort (sort_phi_args);
- 
-       /* From the candidates vector now verify true candidates for
- 	 forwarders and create them.  */
-       gphi *vphi = get_virtual_phi (bb);
-       unsigned start = 0;
-       while (start < args.length () - 1)
- 	{
- 	  unsigned i;
- 	  for (i = start + 1; i < args.length (); ++i)
- 	    if (args[start].second != args[i].second)
- 	      break;
- 	  /* args[start]..args[i-1] are equal.  */
- 	  if (start != i - 1)
- 	    {
- 	      /* Check all PHI nodes for argument equality.  */
- 	      bool equal = true;
- 	      gphi_iterator gsi2 = gsi;
- 	      gsi_next (&gsi2);
- 	      for (; !gsi_end_p (gsi2); gsi_next (&gsi2))
- 		{
- 		  gphi *phi2 = gsi2.phi ();
- 		  if (virtual_operand_p (gimple_phi_result (phi2)))
- 		    continue;
- 		  tree start_arg
- 		    = PHI_ARG_DEF_FROM_EDGE (phi2, args[start].first);
- 		  for (unsigned j = start + 1; j < i; ++j)
- 		    {
- 		      if (!operand_equal_p (start_arg,
- 					    PHI_ARG_DEF_FROM_EDGE
- 					      (phi2, args[j].first)))
- 			{
- 			  /* Another PHI might have a shorter set of
- 			     equivalent args.  Go for that.  */
- 			  i = j;
- 			  if (j == start + 1)
- 			    equal = false;
- 			  break;
- 			}
- 		    }
- 		  if (!equal)
- 		    break;
- 		}
- 	      if (equal)
- 		{
- 		  /* If we are asked to forward all edges the block
- 		     has all degenerate PHIs.  Do nothing in that case.  */
- 		  if (start == 0
- 		      && i == args.length ()
- 		      && args.length () == gimple_phi_num_args (phi))
- 		    break;
- 		  /* Instead of using make_forwarder_block we are
- 		     rolling our own variant knowing that the forwarder
- 		     does not need PHI nodes apart from eventually
- 		     a virtual one.  */
- 		  auto_vec<tree, 8> vphi_args;
- 		  if (vphi)
- 		    {
- 		      vphi_args.reserve_exact (i - start);
- 		      for (unsigned j = start; j < i; ++j)
- 			vphi_args.quick_push
- 			  (PHI_ARG_DEF_FROM_EDGE (vphi, args[j].first));
- 		    }
- 		  free_dominance_info (fn, CDI_DOMINATORS);
- 		  basic_block forwarder = split_edge (args[start].first);
- 		  profile_count count = profile_count::zero ();
- 		  bool irr = false;
- 		  for (unsigned j = start + 1; j < i; ++j)
- 		    {
- 		      edge e = args[j].first;
- 		      if (e->flags & EDGE_IRREDUCIBLE_LOOP)
- 			irr = true;
- 		      redirect_edge_and_branch_force (e, forwarder);
- 		      redirect_edge_var_map_clear (e);
- 		      count += e->count ();
- 		    }
- 		  forwarder->count = count;
- 		  if (irr)
- 		    {
- 		      forwarder->flags |= BB_IRREDUCIBLE_LOOP;
- 		      single_succ_edge (forwarder)->flags
- 			|= EDGE_IRREDUCIBLE_LOOP;
- 		    }
- 
- 		  if (vphi)
- 		    {
- 		      tree def = copy_ssa_name (vphi_args[0]);
- 		      gphi *vphi_copy = create_phi_node (def, forwarder);
- 		      for (unsigned j = start; j < i; ++j)
- 			add_phi_arg (vphi_copy, vphi_args[j - start],
- 				     args[j].first, UNKNOWN_LOCATION);
- 		      SET_PHI_ARG_DEF
- 			(vphi, single_succ_edge (forwarder)->dest_idx, def);
- 		    }
- 		  todo |= TODO_cleanup_cfg;
- 		}
- 	    }
- 	  /* Continue searching for more opportunities.  */
- 	  start = i;
- 	}
-     }
-   return todo;
- }
  
  /* Main routine to eliminate dead code.
  
--- 1940,1945 ----
*************** perform_tree_ssa_dce (bool aggressive)
*** 2174,2181 ****
        scev_initialize ();
      }
  
!   if (aggressive)
!     todo |= make_forwarders_with_degenerate_phis (cfun);
  
    calculate_dominance_info (CDI_DOMINATORS);
  
--- 1966,1973 ----
        scev_initialize ();
      }
  
!   if (aggressive && make_forwarders_with_degenerate_phis (cfun))
!     todo |= TODO_cleanup_cfg;
  
    calculate_dominance_info (CDI_DOMINATORS);
  
diff -Nrcpad gcc-16-20251207/gcc/tree-ssa-loop-ch.cc gcc-16-20251214/gcc/tree-ssa-loop-ch.cc
*** gcc-16-20251207/gcc/tree-ssa-loop-ch.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-ssa-loop-ch.cc	Sun Dec 14 22:32:15 2025
*************** enum ch_decision
*** 185,203 ****
    /* We want to copy.  */
    ch_win,
    /* We want to copy and we will eliminate loop exit.  */
!   ch_win_invariant_exit
  };
  
  /* Check whether we should duplicate HEADER of LOOP.  At most *LIMIT
     instructions should be duplicated, limit is decreased by the actual
!    amount.  */
  
  static ch_decision
  should_duplicate_loop_header_p (basic_block header, class loop *loop,
  				gimple_ranger *ranger,
  				int *limit,
  				hash_set <edge> *invariant_exits,
! 				hash_set <edge> *static_exits)
  {
    gimple_stmt_iterator bsi;
  
--- 185,207 ----
    /* We want to copy.  */
    ch_win,
    /* We want to copy and we will eliminate loop exit.  */
!   ch_win_invariant_exit,
!   
  };
  
  /* Check whether we should duplicate HEADER of LOOP.  At most *LIMIT
     instructions should be duplicated, limit is decreased by the actual
!    amount.  In the case of *CANBE_NEVEREXECUTED, if there is a exit edge
!    of the HEADER that is most likely never executed then consider that
!    as invariant and continue. Set *CANBE_NEVEREXECUTED to false otherwise.  */
  
  static ch_decision
  should_duplicate_loop_header_p (basic_block header, class loop *loop,
  				gimple_ranger *ranger,
  				int *limit,
  				hash_set <edge> *invariant_exits,
! 				hash_set <edge> *static_exits,
! 				bool *canbe_neverexecuted)
  {
    gimple_stmt_iterator bsi;
  
*************** should_duplicate_loop_header_p (basic_bl
*** 460,465 ****
--- 464,497 ----
  	}
        return ch_win_invariant_exit;
      }
+   if (!static_exit && *canbe_neverexecuted)
+     {
+       /* See if one of the edges are an exit edge that is probable
+          never executed.
+ 	 If so treat it as invariant exit win.  */
+       edge e;
+       edge_iterator ei;
+       bool hasone = false;
+       FOR_EACH_EDGE (e, ei, header->succs)
+ 	if (loop_exit_edge_p (loop, e)
+ 	    && (probably_never_executed_edge_p (cfun, e)
+ 		/* We want to rule out paths to noreturns but not
+ 		   low probabilities resulting from adjustments
+ 		   or combining.
+ 		   FIXME: once we have better quality tracking,
+ 		   make this more robust.  */
+ 		|| e->probability <= profile_probability::very_unlikely ()))
+ 	  {
+ 	    hasone = true;
+ 	    if (dump_file && (dump_flags & TDF_DETAILS))
+ 	      fprintf (dump_file,
+ 		       "    `never executed` exit %i->%i\n",
+ 		       e->src->index, e->dest->index);
+ 	  }
+       if (hasone)
+ 	return ch_win_invariant_exit;
+     }
+   *canbe_neverexecuted = false;
  
    /* If the static exit fully optimize out, it is win to "duplicate"
       it.
*************** ch_base::copy_headers (function *fun)
*** 846,855 ****
        auto_vec <ch_decision, 32> decision;
        hash_set <edge> *invariant_exits = new hash_set <edge>;
        hash_set <edge> *static_exits = new hash_set <edge>;
        while ((ret = should_duplicate_loop_header_p (header, loop, ranger,
  						    &remaining_limit,
  						    invariant_exits,
! 						    static_exits))
  	     != ch_impossible)
  	{
  	  nheaders++;
--- 878,889 ----
        auto_vec <ch_decision, 32> decision;
        hash_set <edge> *invariant_exits = new hash_set <edge>;
        hash_set <edge> *static_exits = new hash_set <edge>;
+       bool canbe_neverexecuted = true;
        while ((ret = should_duplicate_loop_header_p (header, loop, ranger,
  						    &remaining_limit,
  						    invariant_exits,
! 						    static_exits,
! 						    &canbe_neverexecuted))
  	     != ch_impossible)
  	{
  	  nheaders++;
diff -Nrcpad gcc-16-20251207/gcc/tree-ssa-loop-ivcanon.cc gcc-16-20251214/gcc/tree-ssa-loop-ivcanon.cc
*** gcc-16-20251207/gcc/tree-ssa-loop-ivcanon.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-ssa-loop-ivcanon.cc	Sun Dec 14 22:32:15 2025
*************** tree_unroll_loops_completely (bool may_i
*** 1539,1545 ****
  
    estimate_numbers_of_iterations (cfun);
  
!   /* Mark all innermost loop at the begining.  */
    for (auto loop : loops_list (cfun, LI_FROM_INNERMOST))
      {
        if (!loop->inner)
--- 1539,1545 ----
  
    estimate_numbers_of_iterations (cfun);
  
!   /* Mark all innermost loop at the beginning.  */
    for (auto loop : loops_list (cfun, LI_FROM_INNERMOST))
      {
        if (!loop->inner)
diff -Nrcpad gcc-16-20251207/gcc/tree-ssa-sccvn.cc gcc-16-20251214/gcc/tree-ssa-sccvn.cc
*** gcc-16-20251207/gcc/tree-ssa-sccvn.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-ssa-sccvn.cc	Sun Dec 14 22:32:15 2025
*************** vn_nary_build_or_lookup_1 (gimple_match_
*** 2527,2533 ****
    else
      {
        tree val = vn_lookup_simplify_result (res_op);
!       if (!val && insert)
  	{
  	  gimple_seq stmts = NULL;
  	  result = maybe_push_res_to_seq (res_op, &stmts);
--- 2527,2536 ----
    else
      {
        tree val = vn_lookup_simplify_result (res_op);
!       /* ???  In weird cases we can end up with internal-fn calls,
! 	 but this isn't expected so throw the result away.  See
! 	 PR123040 for an example.  */
!       if (!val && insert && res_op->code.is_tree_code ())
  	{
  	  gimple_seq stmts = NULL;
  	  result = maybe_push_res_to_seq (res_op, &stmts);
diff -Nrcpad gcc-16-20251207/gcc/tree-vect-generic.cc gcc-16-20251214/gcc/tree-vect-generic.cc
*** gcc-16-20251207/gcc/tree-vect-generic.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-vect-generic.cc	Sun Dec 14 22:32:15 2025
*************** expand_vector_mult (gimple_stmt_iterator
*** 627,633 ****
  	}
        tree accumulator, tmp_var;
        if (alg.op[0] == alg_zero)
! 	accumulator = build_int_cst (vectype, 0);
        else
  	accumulator = op0;
  
--- 627,633 ----
  	}
        tree accumulator, tmp_var;
        if (alg.op[0] == alg_zero)
! 	accumulator = build_zero_cst (vectype);
        else
  	accumulator = op0;
  
diff -Nrcpad gcc-16-20251207/gcc/tree-vect-loop-manip.cc gcc-16-20251214/gcc/tree-vect-loop-manip.cc
*** gcc-16-20251207/gcc/tree-vect-loop-manip.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-vect-loop-manip.cc	Sun Dec 14 22:32:15 2025
*************** vect_update_ivs_after_vectorizer (loop_v
*** 2353,2358 ****
--- 2353,2368 ----
    class loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
    basic_block update_bb = update_e->dest;
    basic_block exit_bb = update_e->src;
+   /* Check to see if this is an empty loop pre-header block.  If it exists
+      we need to use the edge from that block -> loop header for updates but
+      must use the original exit_bb to add any new adjustment because there
+      can be a skip_epilog edge bypassing the epilog and so the loop pre-header
+      too.  */
+   if (empty_block_p (update_bb) && single_succ_p (update_bb))
+     {
+       update_e = single_succ_edge (update_bb);
+       update_bb = update_e->dest;
+     }
    gimple_stmt_iterator last_gsi = gsi_last_bb (exit_bb);
  
    for (gsi = gsi_start_phis (loop->header), gsi1 = gsi_start_phis (update_bb);
*************** vect_do_peeling (loop_vec_info loop_vinf
*** 3585,3590 ****
--- 3595,3601 ----
        /* Update IVs of original loop as if they were advanced by
  	 niters_vector_mult_vf steps.  */
        gcc_checking_assert (vect_can_advance_ivs_p (loop_vinfo));
+       update_e = skip_vector ? e : loop_preheader_edge (epilog);
        if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo))
  	update_e = single_succ_edge (LOOP_VINFO_IV_EXIT (loop_vinfo)->dest);
  
*************** vect_do_peeling (loop_vec_info loop_vinf
*** 3604,3609 ****
--- 3615,3621 ----
  					   skip_vector ? anchor : guard_bb,
  					   prob_epilog.invert (),
  					   irred_flag);
+ 
  	  doms.safe_push (guard_to);
  	  if (vect_epilogues)
  	    epilogue_vinfo->skip_this_loop_edge = guard_e;
*************** vect_do_peeling (loop_vec_info loop_vinf
*** 3643,3653 ****
  	  scale_loop_profile (epilog, prob_epilog, -1);
  	}
  
-       /* Identify the right foward edge for the non-early-break case which must
- 	 be done after splitting the epilog edge.  */
-       if (!LOOP_VINFO_EARLY_BREAKS (loop_vinfo))
- 	update_e = skip_vector ? e : loop_preheader_edge (epilog);
- 
        /* If we have a peeled vector iteration, all exits are the same, leave it
  	 and so the main exit needs to be treated the same as the alternative
  	 exits in that we leave their updates to vectorizable_live_operations.
--- 3655,3660 ----
*************** vect_do_peeling (loop_vec_info loop_vinf
*** 3658,3673 ****
  	  tree scal_iv_ty = signed_type_for (TREE_TYPE (vector_iters_vf));
  	  tree tmp_niters_vf = make_ssa_name (scal_iv_ty);
  	  basic_block exit_bb = NULL;
- 	  edge update_e = NULL;
  
  	  /* Identify the early exit merge block.  I wish we had stored this.  */
  	  for (auto e : get_loop_exit_edges (loop))
  	    if (e != LOOP_VINFO_IV_EXIT (loop_vinfo))
  	      {
  		exit_bb = e->dest;
- 		update_e = single_succ_edge (exit_bb);
  		break;
  	      }
  	  vect_update_ivs_after_vectorizer (loop_vinfo, tmp_niters_vf,
  					    update_e, true);
  
--- 3665,3680 ----
  	  tree scal_iv_ty = signed_type_for (TREE_TYPE (vector_iters_vf));
  	  tree tmp_niters_vf = make_ssa_name (scal_iv_ty);
  	  basic_block exit_bb = NULL;
  
  	  /* Identify the early exit merge block.  I wish we had stored this.  */
  	  for (auto e : get_loop_exit_edges (loop))
  	    if (e != LOOP_VINFO_IV_EXIT (loop_vinfo))
  	      {
  		exit_bb = e->dest;
  		break;
  	      }
+ 
+ 	  edge update_e = single_succ_edge (exit_bb);
  	  vect_update_ivs_after_vectorizer (loop_vinfo, tmp_niters_vf,
  					    update_e, true);
  
diff -Nrcpad gcc-16-20251207/gcc/tree-vect-loop.cc gcc-16-20251214/gcc/tree-vect-loop.cc
*** gcc-16-20251207/gcc/tree-vect-loop.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-vect-loop.cc	Sun Dec 14 22:32:15 2025
*************** again:
*** 2682,2687 ****
--- 2682,2688 ----
      = saved_can_use_partial_vectors_p;
    LOOP_VINFO_MUST_USE_PARTIAL_VECTORS_P (loop_vinfo) = false;
    LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo) = false;
+   LOOP_VINFO_USING_SELECT_VL_P (loop_vinfo) = false;
    if (loop_vinfo->scan_map)
      loop_vinfo->scan_map->empty ();
  
diff -Nrcpad gcc-16-20251207/gcc/tree-vect-patterns.cc gcc-16-20251214/gcc/tree-vect-patterns.cc
*** gcc-16-20251207/gcc/tree-vect-patterns.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-vect-patterns.cc	Sun Dec 14 22:32:15 2025
*************** vect_recog_ctz_ffs_pattern (vec_info *vi
*** 1914,1919 ****
--- 1914,1922 ----
         && val_new == prec)
        || (ifnnew == IFN_POPCOUNT && ifn == IFN_CTZ))
      {
+       if (vect_is_reduction (stmt_vinfo))
+ 	return NULL;
+ 
        /* .CTZ (X) = PREC - .CLZ ((X - 1) & ~X)
  	 .CTZ (X) = .POPCOUNT ((X - 1) & ~X).  */
        if (ifnnew == IFN_CLZ)
*************** vect_recog_ctz_ffs_pattern (vec_info *vi
*** 1952,1957 ****
--- 1955,1963 ----
      }
    else if (ifnnew == IFN_CLZ)
      {
+       if (vect_is_reduction (stmt_vinfo))
+ 	return NULL;
+ 
        /* .CTZ (X) = (PREC - 1) - .CLZ (X & -X)
  	 .FFS (X) = PREC - .CLZ (X & -X).  */
        sub = prec - (ifn == IFN_CTZ);
*************** vect_recog_ctz_ffs_pattern (vec_info *vi
*** 1971,1976 ****
--- 1977,1985 ----
      }
    else if (ifnnew == IFN_POPCOUNT)
      {
+       if (vect_is_reduction (stmt_vinfo))
+ 	return NULL;
+ 
        /* .CTZ (X) = PREC - .POPCOUNT (X | -X)
  	 .FFS (X) = (PREC + 1) - .POPCOUNT (X | -X).  */
        sub = prec + (ifn == IFN_FFS);
*************** vect_recog_ctz_ffs_pattern (vec_info *vi
*** 1993,1998 ****
--- 2002,2012 ----
        /* .FFS (X) = .CTZ (X) + 1.  */
        add = 1;
        val_cmp++;
+ 
+       if (vect_is_reduction (stmt_vinfo)
+ 	  && defined_at_zero
+ 	  && (!defined_at_zero_new || val != val_cmp))
+ 	return NULL;
      }
  
    /* Create B = .IFNNEW (A).  */
diff -Nrcpad gcc-16-20251207/gcc/tree-vect-slp.cc gcc-16-20251214/gcc/tree-vect-slp.cc
*** gcc-16-20251207/gcc/tree-vect-slp.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-vect-slp.cc	Sun Dec 14 22:32:15 2025
*************** vectorizable_slp_permutation_1 (vec_info
*** 11548,11554 ****
        return 0;
      }
  
!   /* Set REPEATING_P to true if the permutations are cylical wrt UNPACK_FACTOR
       and if we can generate the vectors in a vector-length agnostic way.
       This requires UNPACK_STEP == NUNITS / UNPACK_FACTOR to be known at
       compile time.
--- 11548,11554 ----
        return 0;
      }
  
!   /* Set REPEATING_P to true if the permutations are cyclical wrt UNPACK_FACTOR
       and if we can generate the vectors in a vector-length agnostic way.
       This requires UNPACK_STEP == NUNITS / UNPACK_FACTOR to be known at
       compile time.
diff -Nrcpad gcc-16-20251207/gcc/tree-vect-stmts.cc gcc-16-20251214/gcc/tree-vect-stmts.cc
*** gcc-16-20251207/gcc/tree-vect-stmts.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree-vect-stmts.cc	Sun Dec 14 22:32:15 2025
*************** vectorizable_load (vec_info *vinfo,
*** 9920,9955 ****
        bool hoist_p = (LOOP_VINFO_NO_DATA_DEPENDENCIES (loop_vinfo)
  		      && !nested_in_vect_loop);
  
!       /* It is unsafe to hoist a conditional load over the conditions that make
! 	 it valid.  When early break this means that any invariant load can't be
! 	 hoisted unless it's in the loop header or if we know something else has
! 	 verified the load is valid to do.  Alignment peeling would do this
! 	 since getting through the prologue means the load was done at least
! 	 once and so the vector main body is free to hoist it.  However today
! 	 GCC will hoist the load above the PFA loop.  As such that makes it
! 	 still invalid and so we can't allow it today.  */
!       auto stmt_bb
! 	= gimple_bb (STMT_VINFO_STMT (
! 			vect_orig_stmt (SLP_TREE_SCALAR_STMTS (slp_node)[0])));
!       if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
! 	  && !DR_SCALAR_KNOWN_BOUNDS (dr_info)
! 	  && stmt_bb != loop->header)
  	{
! 	  if (LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo)
! 	      && dump_enabled_p ())
! 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
  			     "not hoisting invariant load due to early break"
  			     "constraints\n");
! 	  else if (dump_enabled_p ())
! 	    dump_printf_loc (MSG_NOTE, vect_location,
  			     "not hoisting invariant load due to early break"
  			     "constraints\n");
! 	  hoist_p = false;
! 	}
  
-       bool uniform_p = true;
-       for (stmt_vec_info sinfo : SLP_TREE_SCALAR_STMTS (slp_node))
- 	{
  	  hoist_p = hoist_p && hoist_defs_of_uses (sinfo->stmt, loop, false);
  	  if (sinfo != SLP_TREE_SCALAR_STMTS (slp_node)[0])
  	    uniform_p = false;
--- 9920,9954 ----
        bool hoist_p = (LOOP_VINFO_NO_DATA_DEPENDENCIES (loop_vinfo)
  		      && !nested_in_vect_loop);
  
!       bool uniform_p = true;
!       for (stmt_vec_info sinfo : SLP_TREE_SCALAR_STMTS (slp_node))
  	{
! 	  /* It is unsafe to hoist a conditional load over the conditions that
! 	     make it valid.  When early break this means that any invariant load
! 	     can't be hoisted unless it's in the loop header or if we know
! 	     something else has verified the load is valid to do.  Alignment
! 	     peeling would do this since getting through the prologue means the
! 	     load was done at least once and so the vector main body is free to
! 	     hoist it.  However today GCC will hoist the load above the PFA
! 	     loop.  As such that makes it still invalid and so we can't allow it
! 	     today.  */
! 	  if (LOOP_VINFO_EARLY_BREAKS (loop_vinfo)
! 	      && !DR_SCALAR_KNOWN_BOUNDS (STMT_VINFO_DR_INFO (sinfo))
! 	      && gimple_bb (STMT_VINFO_STMT (vect_orig_stmt (sinfo)))
! 		  != loop->header)
! 	    {
! 	      if (LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo)
! 		  && dump_enabled_p ())
! 		dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
  			     "not hoisting invariant load due to early break"
  			     "constraints\n");
! 	      else if (dump_enabled_p ())
! 	       dump_printf_loc (MSG_NOTE, vect_location,
  			     "not hoisting invariant load due to early break"
  			     "constraints\n");
! 	    hoist_p = false;
! 	  }
  
  	  hoist_p = hoist_p && hoist_defs_of_uses (sinfo->stmt, loop, false);
  	  if (sinfo != SLP_TREE_SCALAR_STMTS (slp_node)[0])
  	    uniform_p = false;
*************** vectorizable_load (vec_info *vinfo,
*** 11393,11402 ****
  	      {
  		tree ptr = build_int_cst (ref_type, align * BITS_PER_UNIT);
  		gcall *call;
  		if (partial_ifn == IFN_MASK_LEN_LOAD)
  		  {
- 		    vec_els = vect_get_mask_load_else (maskload_elsval,
- 						       vectype);
  		    if (type_mode_padding_p
  			&& maskload_elsval != MASK_LOAD_ELSE_ZERO)
  		      need_zeroing = true;
--- 11392,11409 ----
  	      {
  		tree ptr = build_int_cst (ref_type, align * BITS_PER_UNIT);
  		gcall *call;
+ 
+ 		/* Need conversion if the vectype is punned by VnQI.  */
+ 		els_vectype = vectype;
+ 		if (vmode != new_vmode)
+ 		  els_vectype
+ 		    = build_vector_type_for_mode (unsigned_intQI_type_node,
+ 						  new_vmode);
+ 		vec_els = vect_get_mask_load_else (maskload_elsval,
+ 						   els_vectype);
+ 
  		if (partial_ifn == IFN_MASK_LEN_LOAD)
  		  {
  		    if (type_mode_padding_p
  			&& maskload_elsval != MASK_LOAD_ELSE_ZERO)
  		      need_zeroing = true;
*************** vectorizable_load (vec_info *vinfo,
*** 11406,11414 ****
  						       final_len, bias);
  		  }
  		else
! 		  call = gimple_build_call_internal (IFN_LEN_LOAD, 4,
  						     dataref_ptr, ptr,
! 						     final_len, bias);
  		gimple_call_set_nothrow (call, true);
  		new_stmt = call;
  		data_ref = NULL_TREE;
--- 11413,11422 ----
  						       final_len, bias);
  		  }
  		else
! 		  call = gimple_build_call_internal (IFN_LEN_LOAD, 5,
  						     dataref_ptr, ptr,
! 						     vec_els, final_len,
! 						     bias);
  		gimple_call_set_nothrow (call, true);
  		new_stmt = call;
  		data_ref = NULL_TREE;
diff -Nrcpad gcc-16-20251207/gcc/tree.cc gcc-16-20251214/gcc/tree.cc
*** gcc-16-20251207/gcc/tree.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree.cc	Sun Dec 14 22:32:15 2025
*************** unsigned const char omp_clause_num_ops[]
*** 399,404 ****
--- 399,405 ----
    1, /* OMP_CLAUSE_NOVARIANTS */
    1, /* OMP_CLAUSE_NOCONTEXT */
    1, /* OMP_CLAUSE_DYN_GROUPPRIVATE  */
+   3, /* OMP_CLAUSE_USES_ALLOCATORS */
  };
  
  const char * const omp_clause_code_name[] =
*************** const char * const omp_clause_code_name[
*** 503,508 ****
--- 504,510 ----
    "novariants",
    "nocontext",
    "dyn_groupprivate",
+   "uses_allocators",
  };
  
  /* Unless specific to OpenACC, we tend to internally maintain OpenMP-centric
diff -Nrcpad gcc-16-20251207/gcc/tree.h gcc-16-20251214/gcc/tree.h
*** gcc-16-20251207/gcc/tree.h	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/gcc/tree.h	Sun Dec 14 22:32:15 2025
*************** class auto_suppress_location_wrappers
*** 2065,2070 ****
--- 2065,2079 ----
  #define OMP_CLAUSE_ALLOCATE_COMBINED(NODE) \
    (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALLOCATE)->base.public_flag)
  
+ #define OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR(NODE) \
+   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_USES_ALLOCATORS), 0)
+ 
+ #define OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE(NODE) \
+   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_USES_ALLOCATORS), 1)
+ 
+ #define OMP_CLAUSE_USES_ALLOCATORS_TRAITS(NODE) \
+   OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_USES_ALLOCATORS), 2)
+ 
  #define OMP_CLAUSE_NUM_TEAMS_UPPER_EXPR(NODE) \
    OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_NUM_TEAMS), 0)
  
diff -Nrcpad gcc-16-20251207/include/ChangeLog gcc-16-20251214/include/ChangeLog
*** gcc-16-20251207/include/ChangeLog	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/include/ChangeLog	Sun Dec 14 22:32:15 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 	    Jiajie Chen  <c@jia.je>
+ 
+ 	* longlong.h (count_leading_zeros): Delete because LA32R no clz.
+ 	(count_trailing_zeros): Delete because LA32R no ctz.
+ 	(COUNT_LEADING_ZEROS_0): Delete.
+ 
  2025-12-01  Andrew Stubbs  <ams@baylibre.com>
  
  	* hsa.h: Import newer version.
diff -Nrcpad gcc-16-20251207/include/longlong.h gcc-16-20251214/include/longlong.h
*** gcc-16-20251207/include/longlong.h	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/include/longlong.h	Sun Dec 14 22:32:15 2025
*************** extern UDItype __umulsidi3 (USItype, USI
*** 594,604 ****
  #endif
  
  #ifdef __loongarch__
! # if W_TYPE_SIZE == 32
! #  define count_leading_zeros(count, x)  ((count) = __builtin_clz (x))
! #  define count_trailing_zeros(count, x) ((count) = __builtin_ctz (x))
! #  define COUNT_LEADING_ZEROS_0 32
! # elif W_TYPE_SIZE == 64
  #  define count_leading_zeros(count, x)  ((count) = __builtin_clzll (x))
  #  define count_trailing_zeros(count, x) ((count) = __builtin_ctzll (x))
  #  define COUNT_LEADING_ZEROS_0 64
--- 594,600 ----
  #endif
  
  #ifdef __loongarch__
! # if W_TYPE_SIZE == 64
  #  define count_leading_zeros(count, x)  ((count) = __builtin_clzll (x))
  #  define count_trailing_zeros(count, x) ((count) = __builtin_ctzll (x))
  #  define COUNT_LEADING_ZEROS_0 64
diff -Nrcpad gcc-16-20251207/libatomic/ChangeLog gcc-16-20251214/libatomic/ChangeLog
*** gcc-16-20251207/libatomic/ChangeLog	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libatomic/ChangeLog	Sun Dec 14 22:32:15 2025
***************
*** 1,3 ****
--- 1,16 ----
+ 2025-12-11  Mark Wielaard  <mark@klomp.org>
+ 
+ 	* Makefile.in: Regenerate.
+ 	* testsuite/Makefile.in: Regenerate.
+ 
+ 2025-12-09  John Ericson  <git@johnericson.me>
+ 
+ 	* Makefile.in: Regenerate.
+ 	* aclocal.m4: Regenerate.
+ 	* configure: Regenerate.
+ 	* configure.ac: Use GCC_AC_THREAD_MODEL instead of hand-rolled
+ 	* testsuite/Makefile.in: Regenerate.
+ 
  2025-11-19  Martin Liska  <martin.liska@hey.com>
  
  	* acinclude.m4: Add detection for wild linker.
diff -Nrcpad gcc-16-20251207/libatomic/Makefile.in gcc-16-20251214/libatomic/Makefile.in
*** gcc-16-20251207/libatomic/Makefile.in	Sun Dec  7 22:32:21 2025
--- gcc-16-20251214/libatomic/Makefile.in	Sun Dec 14 22:32:20 2025
*************** am__aclocal_m4_deps = $(top_srcdir)/../c
*** 108,113 ****
--- 108,114 ----
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
  	$(top_srcdir)/../config/gcc-plugin.m4 \
+ 	$(top_srcdir)/../config/gthr.m4 \
  	$(top_srcdir)/../config/lead-dot.m4 \
  	$(top_srcdir)/../config/lthostflags.m4 \
  	$(top_srcdir)/../config/multi.m4 \
diff -Nrcpad gcc-16-20251207/libatomic/aclocal.m4 gcc-16-20251214/libatomic/aclocal.m4
*** gcc-16-20251207/libatomic/aclocal.m4	Sun Dec  7 22:32:21 2025
--- gcc-16-20251214/libatomic/aclocal.m4	Sun Dec 14 22:32:20 2025
*************** m4_include([../config/acx.m4])
*** 1191,1196 ****
--- 1191,1197 ----
  m4_include([../config/clang-plugin.m4])
  m4_include([../config/depstand.m4])
  m4_include([../config/gcc-plugin.m4])
+ m4_include([../config/gthr.m4])
  m4_include([../config/lead-dot.m4])
  m4_include([../config/lthostflags.m4])
  m4_include([../config/multi.m4])
diff -Nrcpad gcc-16-20251207/libatomic/configure gcc-16-20251214/libatomic/configure
*** gcc-16-20251207/libatomic/configure	Sun Dec  7 22:32:21 2025
--- gcc-16-20251214/libatomic/configure	Sun Dec 14 22:32:20 2025
*************** libtool_VERSION=3:0:2
*** 12254,12264 ****
  
  
  # Check for used threading-model
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread model used by GCC" >&5
! $as_echo_n "checking for thread model used by GCC... " >&6; }
! target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $target_thread_file" >&5
! $as_echo "$target_thread_file" >&6; }
  
  case "$target" in
   *aarch64*)
--- 12254,12281 ----
  
  
  # Check for used threading-model
! 
! # Specify the threading model for this GCC runtime library
! # Pass with no value to take from compiler's metadata
! # Pass with a value to specify a thread package
! # 'single' means single threaded -- without threads.
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the threading model used by GCC" >&5
! $as_echo_n "checking for the threading model used by GCC... " >&6; }
! if ${gcc_cv_target_thread_file+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
! 
!   # Set new cache variable
!   gcc_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! 
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_target_thread_file" >&5
! $as_echo "$gcc_cv_target_thread_file" >&6; }
! # Set variable name (not prefixed enough to be a good cache variable
! # name) traditionally used for this purpose, to avoid having to change
! # a bunch of configure scripts.
! target_thread_file="$gcc_cv_target_thread_file"
! 
  
  case "$target" in
   *aarch64*)
diff -Nrcpad gcc-16-20251207/libatomic/configure.ac gcc-16-20251214/libatomic/configure.ac
*** gcc-16-20251207/libatomic/configure.ac	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libatomic/configure.ac	Sun Dec 14 22:32:15 2025
*************** libtool_VERSION=3:0:2
*** 177,185 ****
  AC_SUBST(libtool_VERSION)
  
  # Check for used threading-model
! AC_MSG_CHECKING([for thread model used by GCC])
! target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! AC_MSG_RESULT([$target_thread_file])
  
  case "$target" in
   *aarch64*)
--- 177,183 ----
  AC_SUBST(libtool_VERSION)
  
  # Check for used threading-model
! GCC_AC_THREAD_MODEL
  
  case "$target" in
   *aarch64*)
diff -Nrcpad gcc-16-20251207/libatomic/testsuite/Makefile.in gcc-16-20251214/libatomic/testsuite/Makefile.in
*** gcc-16-20251207/libatomic/testsuite/Makefile.in	Sun Dec  7 22:32:21 2025
--- gcc-16-20251214/libatomic/testsuite/Makefile.in	Sun Dec 14 22:32:20 2025
*************** am__aclocal_m4_deps = $(top_srcdir)/../c
*** 94,99 ****
--- 94,100 ----
  	$(top_srcdir)/../config/clang-plugin.m4 \
  	$(top_srcdir)/../config/depstand.m4 \
  	$(top_srcdir)/../config/gcc-plugin.m4 \
+ 	$(top_srcdir)/../config/gthr.m4 \
  	$(top_srcdir)/../config/lead-dot.m4 \
  	$(top_srcdir)/../config/lthostflags.m4 \
  	$(top_srcdir)/../config/multi.m4 \
diff -Nrcpad gcc-16-20251207/libcpp/ChangeLog gcc-16-20251214/libcpp/ChangeLog
*** gcc-16-20251207/libcpp/ChangeLog	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libcpp/ChangeLog	Sun Dec 14 22:32:15 2025
***************
*** 1,3 ****
--- 1,22 ----
+ 2025-12-10  Jason Merrill  <jason@redhat.com>
+ 
+ 	* include/cpplib.h (struct cpp_callbacks): Replace 'path' parameter
+ 	with file, angle_brackets, and alternate name.
+ 	(cpp_get_name): Declare.
+ 	* files.cc (cpp_get_name): New.
+ 	(_cpp_stack_include, _cpp_post_stack_file, _cpp_stack_file)
+ 	(_cpp_stack_translated_file): Refactor, try alternate file.
+ 
+ 2025-12-07  Jason Merrill  <jason@redhat.com>
+ 
+ 	* include/cpplib.h (cpp_get_path, cpp_get_dir): Remove.
+ 	(_cpp_get_file_path, _cpp_get_file_name, _cpp_get_file_stat)
+ 	(_cpp_get_file_dir): Move prototypes from...
+ 	* internal.h: ...here.
+ 	* files.cc (_cpp_get_file_path): Rename from...
+ 	(cpp_get_path): ...this.
+ 	(cpp_get_dir): Remove.
+ 
  2025-11-10  Jakub Jelinek  <jakub@redhat.com>
  
  	* directives.cc: Implement CWG3053.
diff -Nrcpad gcc-16-20251207/libcpp/files.cc gcc-16-20251214/libcpp/files.cc
*** gcc-16-20251207/libcpp/files.cc	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libcpp/files.cc	Sun Dec 14 22:32:15 2025
*************** static bool validate_pch (cpp_reader *,
*** 211,216 ****
--- 211,217 ----
  static int pchf_save_compare (const void *e1, const void *e2);
  static int pchf_compare (const void *d_p, const void *e_p);
  static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool);
+ static void _cpp_post_stack_file (cpp_reader *, _cpp_file *, include_type, bool);
  
  /* Given a filename in FILE->PATH, with the empty string interpreted
     as <stdin>, open it.
*************** bool
*** 954,1041 ****
  _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
  		 location_t loc)
  {
-   if (is_known_idempotent_file (pfile, file, type == IT_IMPORT))
-     return false;
- 
    int sysp = 0;
-   char *buf = nullptr;
  
!   /* Check C++ module include translation.  */
!   if (!file->header_unit && type < IT_HEADER_HWM
!       /* Do not include translate include-next.  */
!       && type != IT_INCLUDE_NEXT
!       && pfile->cb.translate_include)
!     buf = (pfile->cb.translate_include
! 	   (pfile, pfile->line_table, loc, file->path));
  
!   if (buf)
!     {
!       /* We don't increment the line number at the end of a buffer,
! 	 because we don't usually need that location (we're popping an
! 	 include file).  However in this case we do want to do the
! 	 increment.  So push a writable buffer of two newlines to acheive
! 	 that.  (We also need an extra newline, so this looks like a regular
! 	 file, which we do that to to make sure we don't fall off the end in the
! 	 middle of a line.  */
!       if (type != IT_CMDLINE)
! 	{
! 	  static uchar newlines[] = "\n\n\n";
! 	  cpp_push_buffer (pfile, newlines, 2, true);
! 	}
  
!       size_t len = strlen (buf);
!       buf[len] = '\n'; /* See above  */
!       cpp_buffer *buffer
! 	= cpp_push_buffer (pfile, reinterpret_cast<unsigned char *> (buf),
! 			   len, true);
!       buffer->to_free = buffer->buf;
!       if (type == IT_CMDLINE)
! 	/* Tell _cpp_pop_buffer to change files.  */
! 	buffer->file = file;
  
!       file->header_unit = +1;
!       _cpp_mark_file_once_only (pfile, file);
!     }
!   else
!     {
!       /* Not a header unit, and we know it.  */
!       file->header_unit = -1;
  
!       if (!read_file (pfile, file, loc))
! 	return false;
  
!       if (!has_unique_contents (pfile, file, type == IT_IMPORT, loc))
! 	return false;
  
!       if (pfile->buffer && file->dir)
! 	sysp = MAX (pfile->buffer->sysp, file->dir->sysp);
  
!       /* Add the file to the dependencies on its first inclusion.  */
!       if (CPP_OPTION (pfile, deps.style) > (sysp != 0)
! 	  && !file->stack_count
! 	  && file->path[0]
! 	  && !(pfile->main_file == file
! 	       && CPP_OPTION (pfile, deps.ignore_main_file)))
! 	deps_add_dep (pfile->deps, file->path);
  
!       /* Clear buffer_valid since _cpp_clean_line messes it up.  */
!       file->buffer_valid = false;
!       file->stack_count++;
  
!       /* Stack the buffer.  */
!       cpp_buffer *buffer
! 	= cpp_push_buffer (pfile, file->buffer, file->st.st_size,
! 			   CPP_OPTION (pfile, preprocessed)
! 			   && !CPP_OPTION (pfile, directives_only));
!       buffer->file = file;
!       buffer->sysp = sysp;
!       buffer->to_free = file->buffer_start;
  
!       /* Initialize controlling macro state.  */
!       pfile->mi_valid = true;
!       pfile->mi_cmacro = 0;
      }
  
    /* In the case of a normal #include, we're now at the start of the
       line *following* the #include.  A separate location_t for this
       location makes no sense, until we do the LC_LEAVE.
--- 955,1046 ----
  _cpp_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
  		 location_t loc)
  {
    int sysp = 0;
  
!   /* Not a header unit, and we know it.  */
!   file->header_unit = -1;
  
!   if (!read_file (pfile, file, loc))
!     return false;
  
!   if (!has_unique_contents (pfile, file, type == IT_IMPORT, loc))
!     return false;
  
!   if (pfile->buffer && file->dir)
!     sysp = MAX (pfile->buffer->sysp, file->dir->sysp);
  
!   /* Add the file to the dependencies on its first inclusion.  */
!   if (CPP_OPTION (pfile, deps.style) > (sysp != 0)
!       && !file->stack_count
!       && file->path[0]
!       && !(pfile->main_file == file
! 	   && CPP_OPTION (pfile, deps.ignore_main_file)))
!     deps_add_dep (pfile->deps, file->path);
  
!   /* Clear buffer_valid since _cpp_clean_line messes it up.  */
!   file->buffer_valid = false;
!   file->stack_count++;
  
!   /* Stack the buffer.  */
!   cpp_buffer *buffer
!     = cpp_push_buffer (pfile, file->buffer, file->st.st_size,
! 		       CPP_OPTION (pfile, preprocessed)
! 		       && !CPP_OPTION (pfile, directives_only));
!   buffer->file = file;
!   buffer->sysp = sysp;
!   buffer->to_free = file->buffer_start;
  
!   /* Initialize controlling macro state.  */
!   pfile->mi_valid = true;
!   pfile->mi_cmacro = 0;
  
!   _cpp_post_stack_file (pfile, file, type, sysp);
!   return true;
! }
  
! /* Like _cpp_stack_file, but for a file that's been replaced by the contents of
!    BUF.  Used for C++ modules include -> import translation.  */
  
! static bool
! _cpp_stack_translated_file (cpp_reader *pfile, _cpp_file *file,
! 			    char *buf, include_type type)
! {
!   /* We don't increment the line number at the end of a buffer,
!      because we don't usually need that location (we're popping an
!      include file).  However in this case we do want to do the
!      increment.  So push a writable buffer of two newlines to acheive
!      that.  (We also need an extra newline, so this looks like a regular
!      file, which we do that to to make sure we don't fall off the end in the
!      middle of a line.  */
!   if (type != IT_CMDLINE)
!     {
!       static uchar newlines[] = "\n\n\n";
!       cpp_push_buffer (pfile, newlines, 2, true);
      }
  
+   size_t len = strlen (buf);
+   buf[len] = '\n'; /* See above  */
+   cpp_buffer *buffer
+     = cpp_push_buffer (pfile, reinterpret_cast<unsigned char *> (buf),
+ 		       len, true);
+   buffer->to_free = buffer->buf;
+   if (type == IT_CMDLINE)
+     /* Tell _cpp_pop_buffer to change files.  */
+     buffer->file = file;
+ 
+   file->header_unit = +1;
+   _cpp_mark_file_once_only (pfile, file);
+ 
+   _cpp_post_stack_file (pfile, file, type, false);
+   return true;
+ }
+ 
+ /* The common epilogue of _cpp_stack_file and _cpp_stack_translated_file.  */
+ 
+ static void
+ _cpp_post_stack_file (cpp_reader *pfile, _cpp_file *file, include_type type,
+ 		      bool sysp)
+ {
    /* In the case of a normal #include, we're now at the start of the
       line *following* the #include.  A separate location_t for this
       location makes no sense, until we do the LC_LEAVE.
*************** _cpp_stack_file (cpp_reader *pfile, _cpp
*** 1070,1077 ****
        linenum_type line = SOURCE_LINE (map, pfile->line_table->highest_line);
        linemap_line_start (pfile->line_table, line - 1, 0);
      }
- 
-   return true;
  }
  
  /* Mark FILE to be included once only.  */
--- 1075,1080 ----
*************** _cpp_stack_include (cpp_reader *pfile, c
*** 1171,1177 ****
    if (type == IT_DEFAULT && file == NULL)
      return false;
  
!   return _cpp_stack_file (pfile, file, type, loc);
  }
  
  /* NAME is a header file name, find the _cpp_file, if any.  */
--- 1174,1210 ----
    if (type == IT_DEFAULT && file == NULL)
      return false;
  
!   if (is_known_idempotent_file (pfile, file, type == IT_IMPORT))
!     return false;
! 
!   /* Check C++ module include translation.  */
!   char *buf = nullptr;
!   if (!file->header_unit && type < IT_DEFAULT
!       /* Do not include translate include-next.  */
!       && type != IT_INCLUDE_NEXT
!       && pfile->cb.translate_include)
!     {
!       const char *aname = nullptr;
!       buf = (pfile->cb.translate_include
! 	     (pfile, pfile->line_table, loc, file,
! 	      angle_brackets, &aname));
!       if (!buf && aname)
! 	{
! 	  _cpp_file *afile = _cpp_find_file (pfile, aname, dir, angle_brackets,
! 					     _cpp_FFK_NORMAL, loc);
! 	  if (afile && !afile->header_unit)
! 	    buf = (pfile->cb.translate_include
! 		   (pfile, pfile->line_table, loc,
! 		    afile, angle_brackets, nullptr));
! 	  if (buf)
! 	    file = afile;
! 	}
!     }
! 
!   if (buf)
!     return _cpp_stack_translated_file (pfile, file, buf, type);
!   else
!     return _cpp_stack_file (pfile, file, type, loc);
  }
  
  /* NAME is a header file name, find the _cpp_file, if any.  */
diff -Nrcpad gcc-16-20251207/libcpp/include/cpplib.h gcc-16-20251214/libcpp/include/cpplib.h
*** gcc-16-20251207/libcpp/include/cpplib.h	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libcpp/include/cpplib.h	Sun Dec 14 22:32:15 2025
*************** struct cpp_callbacks
*** 860,866 ****
    /* Maybe translate a #include into something else.  Return a
       cpp_buffer containing the translation if translating.  */
    char *(*translate_include) (cpp_reader *, line_maps *, location_t,
! 			      const char *path);
  };
  
  #ifdef VMS
--- 860,867 ----
    /* Maybe translate a #include into something else.  Return a
       cpp_buffer containing the translation if translating.  */
    char *(*translate_include) (cpp_reader *, line_maps *, location_t,
! 			      _cpp_file *file, bool angle_brackets,
! 			      const char **alternate);
  };
  
  #ifdef VMS
diff -Nrcpad gcc-16-20251207/libgcc/ChangeLog gcc-16-20251214/libgcc/ChangeLog
*** gcc-16-20251207/libgcc/ChangeLog	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libgcc/ChangeLog	Sun Dec 14 22:32:15 2025
***************
*** 1,3 ****
--- 1,30 ----
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac:
+ 	* config/loongarch/t-crtstuff-la32: New file.
+ 	* config/loongarch/t-crtstuff: Rename to t-crtstuff-la64.
+ 	* config/loongarch/t-crtstuff-la64: New file.
+ 
+ 2025-12-09  John Ericson  <git@JohnEricson.me>
+ 
+ 	* config/rs6000/t-slibgcc-aix: Instead of using a
+ 	TARGET_SYSTEM_ROOT make variable, just define a shell variable
+ 	as part of the rule and use that.
+ 
+ 2025-12-09  John Ericson  <git@JohnEricson.me>
+ 
+ 	* Makefile.in: Define NO_PIE_CFLAGS make variable via autoconf
+ 	substitution.
+ 	* configure: Regenerate.
+ 	* configure.ac: New configure check to define NO_PIE_CFLAGS
+ 	using the algorithm Andrew asked for in the linked mail.
+ 
+ 2025-12-09  John Ericson  <git@johnericson.me>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac: Use GCC_AC_THREAD_MODEL instead of hand-rolled
+ 
  2025-11-27  Lulu Cheng  <chenglulu@loongson.cn>
  
  	* config/loongarch/cpuinfo.c (HWCAP_LOONGARCH_LSX): Define
diff -Nrcpad gcc-16-20251207/libgcc/Makefile.in gcc-16-20251214/libgcc/Makefile.in
*** gcc-16-20251207/libgcc/Makefile.in	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libgcc/Makefile.in	Sun Dec 14 22:32:15 2025
*************** override CFLAGS := $(filter-out -fprofil
*** 298,303 ****
--- 298,305 ----
  INTERNAL_CFLAGS = $(CFLAGS) $(LIBGCC2_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \
  		  $(INCLUDES) @set_have_cc_tls@ @set_use_emutls@
  
+ NO_PIE_CFLAGS = @NO_PIE_CFLAGS@
+ 
  # Options to use when compiling crtbegin/end.
  CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
    $(NO_PIE_CFLAGS) -finhibit-size-directive -fno-inline -fno-exceptions \
diff -Nrcpad gcc-16-20251207/libgcc/config/loongarch/t-crtstuff gcc-16-20251214/libgcc/config/loongarch/t-crtstuff
*** gcc-16-20251207/libgcc/config/loongarch/t-crtstuff	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libgcc/config/loongarch/t-crtstuff	Thu Jan  1 00:00:00 1970
***************
*** 1,11 ****
- # -fasynchronous-unwind-tables is on by default for LoongArch.
- # We turn it off for crt*.o because it would make __EH_FRAME_BEGIN__ point
- # to .eh_frame data from crtbeginT.o instead of the user-defined object
- # during static linking.
- CRTSTUFF_T_CFLAGS += -fno-omit-frame-pointer -fno-asynchronous-unwind-tables
- 
- # As shown in the test case PR118844, when using lld for linking,
- # it fails due to B26 in crtbeginS.o causing the link to exceed the range.
- # Therefore, the issue was resolved by adding the compilation option
- # "-mcmodel=extreme" when compiling crtbeginS.o.
- CRTSTUFF_T_CFLAGS_S += -mcmodel=extreme
--- 0 ----
diff -Nrcpad gcc-16-20251207/libgcc/config/loongarch/t-crtstuff-la32 gcc-16-20251214/libgcc/config/loongarch/t-crtstuff-la32
*** gcc-16-20251207/libgcc/config/loongarch/t-crtstuff-la32	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgcc/config/loongarch/t-crtstuff-la32	Sun Dec 14 22:32:15 2025
***************
*** 0 ****
--- 1,11 ----
+ # -fasynchronous-unwind-tables is on by default for LoongArch.
+ # We turn it off for crt*.o because it would make __EH_FRAME_BEGIN__ point
+ # to .eh_frame data from crtbeginT.o instead of the user-defined object
+ # during static linking.
+ CRTSTUFF_T_CFLAGS += -fno-omit-frame-pointer -fno-asynchronous-unwind-tables
+ 
+ # As shown in the test case PR118844, when using lld for linking,
+ # it fails due to B26 in crtbeginS.o causing the link to exceed the range.
+ # Therefore, the issue was resolved by adding the compilation option
+ # "-mcmodel=extreme" when compiling crtbeginS.o.
+ CRTSTUFF_T_CFLAGS_S += -mcmodel=medium
diff -Nrcpad gcc-16-20251207/libgcc/config/loongarch/t-crtstuff-la64 gcc-16-20251214/libgcc/config/loongarch/t-crtstuff-la64
*** gcc-16-20251207/libgcc/config/loongarch/t-crtstuff-la64	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgcc/config/loongarch/t-crtstuff-la64	Sun Dec 14 22:32:15 2025
***************
*** 0 ****
--- 1,11 ----
+ # -fasynchronous-unwind-tables is on by default for LoongArch.
+ # We turn it off for crt*.o because it would make __EH_FRAME_BEGIN__ point
+ # to .eh_frame data from crtbeginT.o instead of the user-defined object
+ # during static linking.
+ CRTSTUFF_T_CFLAGS += -fno-omit-frame-pointer -fno-asynchronous-unwind-tables
+ 
+ # As shown in the test case PR118844, when using lld for linking,
+ # it fails due to B26 in crtbeginS.o causing the link to exceed the range.
+ # Therefore, the issue was resolved by adding the compilation option
+ # "-mcmodel=extreme" when compiling crtbeginS.o.
+ CRTSTUFF_T_CFLAGS_S += -mcmodel=extreme
diff -Nrcpad gcc-16-20251207/libgcc/config/rs6000/t-slibgcc-aix gcc-16-20251214/libgcc/config/rs6000/t-slibgcc-aix
*** gcc-16-20251207/libgcc/config/rs6000/t-slibgcc-aix	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libgcc/config/rs6000/t-slibgcc-aix	Sun Dec 14 22:32:15 2025
*************** SHLIB_LINK = \
*** 40,46 ****
  	  -Wl,-bE:@shlib_map_file@ -o shr.o \
  	  @multilib_flags@ @shlib_objs@ -lc \
  	  `case @multilib_dir@ in \
! 	  *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \
  	  *) echo -lc ;; esac` ; \
  	  rm -f tmp-@shlib_base_name@.a ; \
  	  $(AR_CREATE_FOR_TARGET) tmp-@shlib_base_name@.a shr.o ; \
--- 40,48 ----
  	  -Wl,-bE:@shlib_map_file@ -o shr.o \
  	  @multilib_flags@ @shlib_objs@ -lc \
  	  `case @multilib_dir@ in \
! 	  *pthread*) \
! 	    TARGET_SYSTEM_ROOT=\`$(CC) -print-sysroot\`; \
! 	    echo -L$$TARGET_SYSTEM_ROOT/usr/lib/threads -lpthreads -lc_r $$TARGET_SYSTEM_ROOT/usr/lib/libc.a ;; \
  	  *) echo -lc ;; esac` ; \
  	  rm -f tmp-@shlib_base_name@.a ; \
  	  $(AR_CREATE_FOR_TARGET) tmp-@shlib_base_name@.a shr.o ; \
*************** SHLIB_LINK = \
*** 53,59 ****
  	  -Wl,-bE:@shlib_map_file@ -o $$shr.o \
  	  @multilib_flags@ @shlib_objs@ -lc \
  	  `case @multilib_dir@ in \
! 	  *pthread*) echo -L$(TARGET_SYSTEM_ROOT)/usr/lib/threads -lpthreads -lc_r $(TARGET_SYSTEM_ROOT)/usr/lib/libc.a ;; \
  	  *) echo -lc ;; esac` ; \
  	  $(STRIP_FOR_TARGET) -X32_64 -e $$shr.o ; \
  	  { echo "\#! $(SHLIB_SONAME)($$shr.o)" ; \
--- 55,63 ----
  	  -Wl,-bE:@shlib_map_file@ -o $$shr.o \
  	  @multilib_flags@ @shlib_objs@ -lc \
  	  `case @multilib_dir@ in \
! 	  *pthread*) \
! 	    TARGET_SYSTEM_ROOT=\`$(CC) -print-sysroot\`; \
! 	    echo -L$$TARGET_SYSTEM_ROOT/usr/lib/threads -lpthreads -lc_r $$TARGET_SYSTEM_ROOT/usr/lib/libc.a ;; \
  	  *) echo -lc ;; esac` ; \
  	  $(STRIP_FOR_TARGET) -X32_64 -e $$shr.o ; \
  	  { echo "\#! $(SHLIB_SONAME)($$shr.o)" ; \
diff -Nrcpad gcc-16-20251207/libgcc/configure gcc-16-20251214/libgcc/configure
*** gcc-16-20251207/libgcc/configure	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libgcc/configure	Sun Dec 14 22:32:15 2025
*************** accel_dir_suffix
*** 610,615 ****
--- 610,616 ----
  use_tm_clone_registry
  force_explicit_eh_registry
  CET_FLAGS
+ NO_PIE_CFLAGS
  fixed_point
  enable_decimal_float
  decimal_float
*************** $as_echo "$libgcc_cv_fixed_point" >&6; }
*** 4836,4841 ****
--- 4837,4876 ----
  fixed_point=$libgcc_cv_fixed_point
  
  
+ # Check whether the compiler defines __PIE__ by default, so -fno-PIE is needed.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler defines __PIE__" >&5
+ $as_echo_n "checking whether the compiler defines __PIE__... " >&6; }
+ if ${libgcc_cv_no_pie_cflags+:} false; then :
+   $as_echo_n "(cached) " >&6
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ 
+ #ifdef __PIE__
+ #error __PIE__ defined
+ #endif
+ 
+ int
+ main ()
+ {
+ 
+   ;
+   return 0;
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+   libgcc_cv_no_pie_cflags=''
+ else
+   libgcc_cv_no_pie_cflags='-fno-PIE'
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgcc_cv_no_pie_cflags" >&5
+ $as_echo "$libgcc_cv_no_pie_cflags" >&6; }
+ 
+ NO_PIE_CFLAGS=$libgcc_cv_no_pie_cflags
+ 
+ 
  # For platforms with the unwind ABI which includes an unwind library,
  # libunwind, we can choose to use the system libunwind.
  # config.gcc also contains tests of with_system_libunwind.
*************** $as_echo "$acl_cv_prog_gnu_ld" >&6; }
*** 5046,5056 ****
  with_gnu_ld=$acl_cv_prog_gnu_ld
  
  
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread model used by GCC" >&5
! $as_echo_n "checking for thread model used by GCC... " >&6; }
! target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $target_thread_file" >&5
! $as_echo "$target_thread_file" >&6; }
  
  # Check for assembler CFI support.
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports CFI directives" >&5
--- 5081,5108 ----
  with_gnu_ld=$acl_cv_prog_gnu_ld
  
  
! 
! # Specify the threading model for this GCC runtime library
! # Pass with no value to take from compiler's metadata
! # Pass with a value to specify a thread package
! # 'single' means single threaded -- without threads.
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the threading model used by GCC" >&5
! $as_echo_n "checking for the threading model used by GCC... " >&6; }
! if ${gcc_cv_target_thread_file+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
! 
!   # Set new cache variable
!   gcc_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! 
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_target_thread_file" >&5
! $as_echo "$gcc_cv_target_thread_file" >&6; }
! # Set variable name (not prefixed enough to be a good cache variable
! # name) traditionally used for this purpose, to avoid having to change
! # a bunch of configure scripts.
! target_thread_file="$gcc_cv_target_thread_file"
! 
  
  # Check for assembler CFI support.
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports CFI directives" >&5
*************** case ${host} in
*** 5345,5350 ****
--- 5397,5414 ----
  esac
  
  
+ case ${host} in
+ loongarch32*-*-*)
+   tmake_file="${tmake_file} loongarch/t-crtstuff-la32"
+   ;;
+ esac
+ 
+ case ${host} in
+ loongarch64*-*-*)
+   tmake_file="${tmake_file} loongarch/t-crtstuff-la64"
+   ;;
+ esac
+ 
  # Check if xtensa target is configured for windowed ABI and thus needs to use
  # custom unwind code.
  # This is after config.host so we can augment tmake_file.
*************** case $target_thread_file in
*** 5737,5742 ****
--- 5801,5809 ----
      vxworks)	thread_header=config/gthr-vxworks.h ;;
      win32)	thread_header=config/i386/gthr-win32.h ;;
      mcf)	thread_header=config/i386/gthr-mcf.h ;;
+     *)
+         as_fn_error $? "No known header for threading model '$target_thread_file'." "$LINENO" 5
+         ;;
  esac
  
  
diff -Nrcpad gcc-16-20251207/libgcc/configure.ac gcc-16-20251214/libgcc/configure.ac
*** gcc-16-20251207/libgcc/configure.ac	Sun Dec  7 22:32:16 2025
--- gcc-16-20251214/libgcc/configure.ac	Sun Dec 14 22:32:15 2025
*************** AC_CACHE_CHECK([whether fixed-point is s
*** 258,263 ****
--- 258,277 ----
  fixed_point=$libgcc_cv_fixed_point
  AC_SUBST(fixed_point)
  
+ # Check whether the compiler defines __PIE__ by default, so -fno-PIE is needed.
+ AC_CACHE_CHECK([whether the compiler defines __PIE__], [libgcc_cv_no_pie_cflags],
+   [AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM([[
+ #ifdef __PIE__
+ #error __PIE__ defined
+ #endif
+      ]], [[]])],
+      [libgcc_cv_no_pie_cflags=''],
+      [libgcc_cv_no_pie_cflags='-fno-PIE'])])
+ 
+ NO_PIE_CFLAGS=$libgcc_cv_no_pie_cflags
+ AC_SUBST([NO_PIE_CFLAGS])
+ 
  # For platforms with the unwind ABI which includes an unwind library,
  # libunwind, we can choose to use the system libunwind.
  # config.gcc also contains tests of with_system_libunwind.
*************** AC_SUBST([use_tm_clone_registry])
*** 305,313 ****
  
  AC_LIB_PROG_LD_GNU
  
! AC_MSG_CHECKING([for thread model used by GCC])
! target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! AC_MSG_RESULT([$target_thread_file]) 
  
  # Check for assembler CFI support.
  AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi],
--- 319,325 ----
  
  AC_LIB_PROG_LD_GNU
  
! GCC_AC_THREAD_MODEL
  
  # Check for assembler CFI support.
  AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi],
*************** case ${host} in
*** 518,523 ****
--- 530,547 ----
  esac
  AC_SUBST(solaris_ld_v2_maps)
  
+ case ${host} in
+ loongarch32*-*-*)
+   tmake_file="${tmake_file} loongarch/t-crtstuff-la32"
+   ;;
+ esac
+ 
+ case ${host} in
+ loongarch64*-*-*)
+   tmake_file="${tmake_file} loongarch/t-crtstuff-la64"
+   ;;
+ esac
+ 
  # Check if xtensa target is configured for windowed ABI and thus needs to use
  # custom unwind code.
  # This is after config.host so we can augment tmake_file.
diff -Nrcpad gcc-16-20251207/libgomp/ChangeLog gcc-16-20251214/libgomp/ChangeLog
*** gcc-16-20251207/libgomp/ChangeLog	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/ChangeLog	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,302 ----
+ 2025-12-12  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/dep-uses-allocators.f90: Properly
+ 	escape '(..)' in dg-warning.
+ 
+ 2025-12-12  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/dep-uses-allocators.f90: Update
+ 	dg-warning.
+ 
+ 2025-12-12  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* libgomp.texi (OpenMP Implementation Status): Add missing '@tab';
+ 	claim initial partial support for 'declare mapper',
+ 	'uses_allocators', and map iterators.
+ 
+ 2025-12-12  Chung-Lin Tang  <cltang@baylibre.com>
+ 	    Tobias Burnus  <tburnus@baylibre.com>
+ 	    Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/uses_allocators_1.f90: Add check for
+ 	omp_null_allocator.
+ 	* testsuite/libgomp.fortran/uses_allocators-7.f90: New test.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/121114
+ 	* omp.h.in: Include <bits/new_throw.h> instead of
+ 	<bits/functexcept.h>.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* libgomp.texi: Bump version. Update implementation status.
+ 	Note deprecation of 'MASTER' affinity policy.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/allocate-8a.f90: Suppress warnings.
+ 	* testsuite/libgomp.fortran/allocators-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/allocators-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/allocators-4.f90: Ditto.
+ 	* testsuite/libgomp.fortran/declare-target-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/declare-target-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/declare-target-indirect-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/declare-target-indirect-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/doacross1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/doacross2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/doacross3.f90: Ditto.
+ 	* testsuite/libgomp.fortran/map-alloc-ptr-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/pr84418-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/pr84418-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/reduction1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/udr11.f90: Ditto.
+ 	* testsuite/libgomp.fortran/uses_allocators_1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/uses_allocators_2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/dep-uses-allocators.f90: New test.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* testsuite/libgomp.c++/declare_target-1.C: Suppress warnings.
+ 	* testsuite/libgomp.c++/depobj-1.C: Ditto.
+ 	* testsuite/libgomp.c++/doacross-1.C: Ditto.
+ 	* testsuite/libgomp.c++/for-15.C: Ditto.
+ 	* testsuite/libgomp.c++/for-24.C: Ditto.
+ 	* testsuite/libgomp.c++/pr101544-1-O0.C: Ditto.
+ 	* testsuite/libgomp.c++/pr101544-1.C: Ditto.
+ 	* testsuite/libgomp.c++/pr96835-1-O0.C: Ditto.
+ 	* testsuite/libgomp.c++/pr96835-1.C: Ditto.
+ 	* testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C: Ditto.
+ 	* testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C: Ditto.
+ 	* testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C: Ditto.
+ 	* testsuite/libgomp.c++/target-13.C: Ditto.
+ 	* testsuite/libgomp.c++/target-cdtor-1.C: Ditto.
+ 	* testsuite/libgomp.c++/target-cdtor-2.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__array-concurrent-usm.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__array-concurrent.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__cmath.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__complex.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__deque-concurrent-usm.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__deque-concurrent.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__forward_list-concurrent.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__list-concurrent-usm.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__list-concurrent.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__numbers.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__span-concurrent-usm.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__span-concurrent.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__valarray-1.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__valarray-concurrent.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__vector-concurrent-usm.C: Ditto.
+ 	* testsuite/libgomp.c++/target-std__vector-concurrent.C: Ditto.
+ 	* testsuite/libgomp.c-c++-common/declare_target-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/depend-2.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/depobj-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/for-11.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/for-12.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/for-16.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/for-3.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/for-5.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/for-6.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/for-9.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/function-not-offloaded.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/metadirective-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/metadirective-2.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/metadirective-3.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/metadirective-5.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/monotonic-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/monotonic-2.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr100059-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr66199-2.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr66199-4.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr66199-5.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr66199-6.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr66199-7.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr66199-8.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/pr66199-9.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/ptr-attach-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/reverse-offload-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-10.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-40.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-abi-struct-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-cdtor-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-same-name-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/task-reduction-14.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/variable-not-offloaded.c: Ditto.
+ 	* testsuite/libgomp.c/declare-variant-3.c: Ditto.
+ 	* testsuite/libgomp.c/declare-variant-4.c: Ditto.
+ 	* testsuite/libgomp.c/doacross-1.c: Ditto.
+ 	* testsuite/libgomp.c/doacross-2.c: Ditto.
+ 	* testsuite/libgomp.c/doacross-3.c: Ditto.
+ 	* testsuite/libgomp.c/examples-4/async_target-1.c: Ditto.
+ 	* testsuite/libgomp.c/examples-4/declare_target-1.c: Ditto.
+ 	* testsuite/libgomp.c/examples-4/declare_target-3.c: Ditto.
+ 	* testsuite/libgomp.c/examples-4/declare_target-4.c: Ditto.
+ 	* testsuite/libgomp.c/examples-4/declare_target-5.c: Ditto.
+ 	* testsuite/libgomp.c/max_vf-1.c: Ditto.
+ 	* testsuite/libgomp.c/pr81778.c: Ditto.
+ 	* testsuite/libgomp.c/pr86660.c: Ditto.
+ 	* testsuite/libgomp.c/reduction-4.c: Ditto.
+ 	* testsuite/libgomp.c/switch-conversion.c: Ditto.
+ 	* testsuite/libgomp.c/target-26.c: Ditto.
+ 	* testsuite/libgomp.c/target-28.c: Ditto.
+ 	* testsuite/libgomp.c/target-30.c: Ditto.
+ 	* testsuite/libgomp.c/target-32.c: Ditto.
+ 	* testsuite/libgomp.c/target-35.c: Ditto.
+ 	* testsuite/libgomp.c/target-38.c: Ditto.
+ 	* testsuite/libgomp.c/target-39.c: Ditto.
+ 	* testsuite/libgomp.c/target-9.c: Ditto.
+ 	* testsuite/libgomp.c/target-link-1.c: Ditto.
+ 	* testsuite/libgomp.c/target-teams-1.c: Ditto.
+ 	* testsuite/libgomp.c/thread-limit-2.c: Ditto.
+ 	* testsuite/libgomp.oacc-c-c++-common/vred2d-128.c: Ditto.
+ 
+ 2025-12-11  supers1ngular  <supers1ngular@baylibre.com>
+ 
+ 	* env.c (omp_display_env): Bump _OPENMP version.
+ 	* fortran.c (ialias_redirect): Remove suppression pragmas.
+ 	(omp_set_dynamic_8_): Ditto.
+ 	(omp_set_nested_8_): Ditto.
+ 	(omp_get_nested_): Ditto.
+ 	* icv.c (omp_get_dynamic): Ditto.
+ 	(omp_get_nested): Ditto.
+ 	(ialias): Ditto.
+ 	* omp_lib.f90.in: Bump openmp_version.
+ 	* omp_lib.h.in: Ditto.
+ 	* testsuite/libgomp.c++/affinity-1.C: Suppress deprecation
+ 	warnings.
+ 	* testsuite/libgomp.c++/ctor-1.C: Ditto.
+ 	* testsuite/libgomp.c++/ctor-11.C: Ditto.
+ 	* testsuite/libgomp.c++/ctor-13.C: Ditto.
+ 	* testsuite/libgomp.c++/ctor-2.C: Ditto.
+ 	* testsuite/libgomp.c++/ctor-5.C: Ditto.
+ 	* testsuite/libgomp.c++/ctor-7.C: Ditto.
+ 	* testsuite/libgomp.c++/depend-iterator-1.C: Ditto.
+ 	* testsuite/libgomp.c++/loop-13.C: Ditto.
+ 	* testsuite/libgomp.c++/master-1.C: Ditto.
+ 	* testsuite/libgomp.c++/pr26943.C: Ditto.
+ 	* testsuite/libgomp.c++/pr81130.C: Ditto.
+ 	* testsuite/libgomp.c++/pr81314.C: Ditto.
+ 	* testsuite/libgomp.c++/target-in-reduction-1.C: Ditto.
+ 	* testsuite/libgomp.c++/target-in-reduction-2.C: Ditto.
+ 	* testsuite/libgomp.c++/task-1.C: Ditto.
+ 	* testsuite/libgomp.c++/task-2.C: Ditto.
+ 	* testsuite/libgomp.c++/task-6.C: Ditto.
+ 	* testsuite/libgomp.c++/task-reduction-7.C: Ditto.
+ 	* testsuite/libgomp.c++/task-reduction-9.C: Ditto.
+ 	* testsuite/libgomp.c++/taskloop-reduction-1.C: Ditto.
+ 	* testsuite/libgomp.c-c++-common/cancel-taskgroup-4.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/depend-inoutset-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/depend-iterator-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/master-combined-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-in-reduction-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/target-in-reduction-2.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/task-detach-12.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/task-reduction-15.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/task-reduction-5.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/task-reduction-6.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/task-reduction-8.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/taskloop-reduction-1.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/taskloop-reduction-3.c: Ditto.
+ 	* testsuite/libgomp.c-c++-common/taskloop-reduction-4.c: Ditto.
+ 	* testsuite/libgomp.c/affinity-1.c: Remove extraneous dg
+ 	instruction and add suppression.
+ 	* testsuite/libgomp.c/critical-2.c: Suppress deprecation
+ 	warnings.
+ 	* testsuite/libgomp.c/debug-1.c: Ditto.
+ 	* testsuite/libgomp.c/lib-1.c: Ditto.
+ 	* testsuite/libgomp.c/loop-24.c: Ditto.
+ 	* testsuite/libgomp.c/nestedfn-2.c: Ditto.
+ 	* testsuite/libgomp.c/nestedfn-3.c: Ditto.
+ 	* testsuite/libgomp.c/pr104385.c: Ditto.
+ 	* testsuite/libgomp.c/target-31.c: Ditto.
+ 	* testsuite/libgomp.c/target-34.c: Ditto.
+ 	* testsuite/libgomp.c/target-critical-1.c: Ditto.
+ 	* testsuite/libgomp.c/task-1.c: Ditto.
+ 	* testsuite/libgomp.c/task-3.c: Ditto.
+ 	* testsuite/libgomp.c/task-6.c: Ditto.
+ 	* testsuite/libgomp.c/task-reduction-1.c: Ditto.
+ 	* testsuite/libgomp.c/task-reduction-2.c: Ditto.
+ 	* testsuite/libgomp.c/teams-1.c: Ditto.
+ 	* testsuite/libgomp.c/vla-1.c: Ditto.
+ 	* testsuite/libgomp.fortran/crayptr1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/depend-inoutset-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/is_device_ptr-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/is_device_ptr-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/lib1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/lib2.f: Ditto.
+ 	* testsuite/libgomp.fortran/lib3.f: Ditto.
+ 	* testsuite/libgomp.fortran/omp_parse2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/openmp_version-1.f: Bump OMP version.
+ 	* testsuite/libgomp.fortran/openmp_version-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/parallel-master.f90: Suppress
+ 	warnings.
+ 	* testsuite/libgomp.fortran/pointer2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/reduction6.f90: Ditto.
+ 	* testsuite/libgomp.fortran/target-firstprivate-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_addr-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_addr-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_addr-3.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_addr-4.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_addr-5.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_ptr-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_ptr-3.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_ptr-4.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_ptr-optional-1.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_ptr-optional-2.f90: Ditto.
+ 	* testsuite/libgomp.fortran/use_device_ptr-optional-3.f90: Ditto.
+ 	* testsuite/libgomp.c-c++-common/omp-atv-seq-dep.c: New test.
+ 	* testsuite/libgomp.c-c++-common/omp-lock-hint-contended-dep.c:
+ 	New test.
+ 	* testsuite/libgomp.c-c++-common/omp-lock-hint-none-dep.c: New test.
+ 	* testsuite/libgomp.c-c++-common/omp-lock-hint-speculative-dep.c:
+ 	New test.
+ 	* testsuite/libgomp.c-c++-common/omp-lock-hint-uncontended-dep.c:
+ 	New test.
+ 	* testsuite/libgomp.c/omp-proc-bind-master-dep.c: New test.
+ 	* testsuite/libgomp.fortran/omp-atv-seq-dep.f90: New test.
+ 	* testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90: New
+ 	test.
+ 	* testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90: New test.
+ 	* testsuite/libgomp.fortran/omp-lock-hint-speculative-dep.f90: New
+ 	test.
+ 	* testsuite/libgomp.fortran/omp-lock-hint-uncontended-dep.f90: New
+ 	test.
+ 
+ 2025-12-09  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR testsuite/120167
+ 	* testsuite/libgomp.graphite/force-parallel-1.c: Make parloop
+ 	noipa.
+ 
+ 2025-12-09  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* testsuite/lib/libgomp.exp (check_effective_target_omp_usm): New.
+ 	* testsuite/libgomp.c++/target-std__array-concurrent-usm.C: Require
+ 	working Unified Shared Memory to run the test.
+ 	* testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C: Likewise.
+ 	* testsuite/libgomp.c++/target-std__deque-concurrent-usm.C: Likewise.
+ 	* testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C:
+ 	Likewise.
+ 	* testsuite/libgomp.c++/target-std__list-concurrent-usm.C: Likewise.
+ 	* testsuite/libgomp.c++/target-std__map-concurrent-usm.C: Likewise.
+ 	* testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C:
+ 	Likewise.
+ 	* testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C:
+ 	Likewise.
+ 	* testsuite/libgomp.c++/target-std__set-concurrent-usm.C: Likewise.
+ 	* testsuite/libgomp.c++/target-std__span-concurrent-usm.C: Likewise.
+ 	* testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C:
+ 	Likewise.
+ 	* testsuite/libgomp.c++/target-std__vector-concurrent-usm.C: Likewise.
+ 	* testsuite/libgomp.c-c++-common/target-implicit-map-4.c: Likewise.
+ 	* testsuite/libgomp.c-c++-common/target-link-3.c: Likewise.
+ 	* testsuite/libgomp.c-c++-common/target-link-4.c: Likewise.
+ 	* testsuite/libgomp.fortran/self_maps.f90: Likewise.
+ 
  2025-12-04  Andrew Stubbs  <ams@baylibre.com>
  
  	* plugin/plugin-gcn.c (generic_isa_code): New function.
diff -Nrcpad gcc-16-20251207/libgomp/env.c gcc-16-20251214/libgomp/env.c
*** gcc-16-20251207/libgomp/env.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/env.c	Sun Dec 14 22:32:16 2025
*************** omp_display_env (int verbose)
*** 1777,1783 ****
  
    fputs ("\nOPENMP DISPLAY ENVIRONMENT BEGIN\n", stderr);
  
!   fputs ("  _OPENMP = '201511'\n", stderr);
  
    fprintf (stderr, "  [host] OMP_DYNAMIC = '%s'\n",
  	   none->icvs.dyn_var ? "TRUE" : "FALSE");
--- 1777,1783 ----
  
    fputs ("\nOPENMP DISPLAY ENVIRONMENT BEGIN\n", stderr);
  
!   fputs ("  _OPENMP = '202111'\n", stderr);
  
    fprintf (stderr, "  [host] OMP_DYNAMIC = '%s'\n",
  	   none->icvs.dyn_var ? "TRUE" : "FALSE");
diff -Nrcpad gcc-16-20251207/libgomp/fortran.c gcc-16-20251214/libgomp/fortran.c
*** gcc-16-20251207/libgomp/fortran.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/fortran.c	Sun Dec 14 22:32:16 2025
*************** ialias_redirect (omp_test_nest_lock)
*** 48,58 ****
  # endif
  ialias_redirect (omp_set_dynamic)
  ialias_redirect (omp_get_dynamic)
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  ialias_redirect (omp_set_nested)
  ialias_redirect (omp_get_nested)
- #pragma GCC diagnostic pop
  ialias_redirect (omp_set_num_threads)
  ialias_redirect (omp_in_parallel)
  ialias_redirect (omp_get_max_threads)
--- 48,55 ----
*************** omp_set_dynamic_8_ (const int64_t *set)
*** 296,303 ****
    omp_set_dynamic (!!*set);
  }
  
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  void
  omp_set_nested_ (const int32_t *set)
  {
--- 293,298 ----
*************** omp_set_nested_8_ (const int64_t *set)
*** 309,315 ****
  {
    omp_set_nested (!!*set);
  }
- #pragma GCC diagnostic pop
  
  void
  omp_set_num_threads_ (const int32_t *set)
--- 304,309 ----
*************** omp_get_dynamic_ (void)
*** 329,342 ****
    return omp_get_dynamic ();
  }
  
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  int32_t
  omp_get_nested_ (void)
  {
    return omp_get_nested ();
  }
- #pragma GCC diagnostic pop
  
  int32_t
  omp_in_parallel_ (void)
--- 323,333 ----
diff -Nrcpad gcc-16-20251207/libgomp/icv.c gcc-16-20251214/libgomp/icv.c
*** gcc-16-20251207/libgomp/icv.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/icv.c	Sun Dec 14 22:32:16 2025
*************** omp_get_dynamic (void)
*** 53,60 ****
    return icv->dyn_var;
  }
  
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  void
  omp_set_nested (int val)
  {
--- 53,58 ----
*************** omp_get_nested (void)
*** 72,78 ****
    return (icv->max_active_levels_var > 1
  	  && icv->max_active_levels_var > omp_get_active_level ());
  }
- #pragma GCC diagnostic pop
  
  void
  omp_set_schedule (omp_sched_t kind, int chunk_size)
--- 70,75 ----
*************** omp_get_default_allocator (void)
*** 235,245 ****
  
  ialias (omp_set_dynamic)
  ialias (omp_get_dynamic)
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  ialias (omp_set_nested)
  ialias (omp_get_nested)
- #pragma GCC diagnostic pop
  ialias (omp_set_num_threads)
  ialias (omp_set_schedule)
  ialias (omp_get_schedule)
--- 232,239 ----
diff -Nrcpad gcc-16-20251207/libgomp/libgomp.texi gcc-16-20251214/libgomp/libgomp.texi
*** gcc-16-20251207/libgomp/libgomp.texi	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/libgomp.texi	Sun Dec 14 22:32:16 2025
*************** See also @ref{OpenMP Implementation Stat
*** 175,181 ****
  
  The @code{_OPENMP} preprocessor macro and Fortran's @code{openmp_version}
  parameter, provided by @code{omp_lib.h} and the @code{omp_lib} module, have
! the value @code{201511} (i.e. OpenMP 4.5).
  
  @node OpenMP 4.5
  @section OpenMP 4.5
--- 175,181 ----
  
  The @code{_OPENMP} preprocessor macro and Fortran's @code{openmp_version}
  parameter, provided by @code{omp_lib.h} and the @code{omp_lib} module, have
! the value @code{202111} (i.e. OpenMP 5.2).
  
  @node OpenMP 4.5
  @section OpenMP 4.5
*************** The OpenMP 4.5 specification is fully su
*** 261,267 ****
        and allocatable components of variables
        @tab Y @tab
  @item @code{defaultmap} extensions @tab Y @tab
! @item @code{declare mapper} directive @tab N @tab
  @item @code{omp_get_supported_active_levels} routine @tab Y @tab
  @item Runtime routines and environment variables to display runtime thread
        affinity information @tab Y @tab
--- 261,267 ----
        and allocatable components of variables
        @tab Y @tab
  @item @code{defaultmap} extensions @tab Y @tab
! @item @code{declare mapper} directive @tab P @tab Initial support and for C/C++, only
  @item @code{omp_get_supported_active_levels} routine @tab Y @tab
  @item Runtime routines and environment variables to display runtime thread
        affinity information @tab Y @tab
*************** The OpenMP 4.5 specification is fully su
*** 289,295 ****
  @headitem Description @tab Status @tab Comments
  @item OpenMP directive as C++ attribute specifiers @tab Y @tab
  @item @code{omp_all_memory} reserved locator @tab Y @tab
! @item @emph{target_device trait} in OpenMP Context @tab Y
  @item @code{target_device} selector set in context selectors @tab Y @tab
  @item C/C++'s delimited @code{declare variant} directive: support elision of
        preprocessed code and interpret enclosed function definitions
--- 289,295 ----
  @headitem Description @tab Status @tab Comments
  @item OpenMP directive as C++ attribute specifiers @tab Y @tab
  @item @code{omp_all_memory} reserved locator @tab Y @tab
! @item @emph{target_device trait} in OpenMP Context @tab Y @tab
  @item @code{target_device} selector set in context selectors @tab Y @tab
  @item C/C++'s delimited @code{declare variant} directive: support elision of
        preprocessed code and interpret enclosed function definitions
*************** The OpenMP 4.5 specification is fully su
*** 312,318 ****
  @item @code{thread_limit} clause to @code{target} construct @tab Y @tab
  @item @code{has_device_addr} clause to @code{target} construct @tab Y @tab
  @item Iterators in @code{target update} motion clauses and @code{map}
!       clauses @tab N @tab
  @item Indirect calls to the device version of a procedure or function in
        @code{target} regions @tab Y @tab
  @item @code{interop} directive @tab Y @tab Cf. @ref{Offload-Target Specifics}
--- 312,318 ----
  @item @code{thread_limit} clause to @code{target} construct @tab Y @tab
  @item @code{has_device_addr} clause to @code{target} construct @tab Y @tab
  @item Iterators in @code{target update} motion clauses and @code{map}
!       clauses @tab P @tab Limited support for C/C++
  @item Indirect calls to the device version of a procedure or function in
        @code{target} regions @tab Y @tab
  @item @code{interop} directive @tab Y @tab Cf. @ref{Offload-Target Specifics}
*************** to address of matching mapped list item
*** 401,431 ****
  @item Deprecation of no-argument @code{destroy} clause on @code{depobj}
        @tab N/A @tab undeprecated in OpenMP 6
  @item @code{linear} clause syntax changes and @code{step} modifier @tab Y @tab
! @item Deprecation of minus operator for reductions @tab N @tab
! @item Deprecation of separating @code{map} modifiers without comma @tab N @tab
  @item @code{declare mapper} with iterator and @code{present} modifiers
        @tab N @tab
  @item If a matching mapped list item is not found in the data environment, the
        pointer retains its original value @tab Y @tab
  @item New @code{enter} clause as alias for @code{to} on declare target directive
        @tab Y @tab
! @item Deprecation of @code{to} clause on declare target directive @tab N @tab
  @item Extended list of directives permitted in Fortran pure procedures
        @tab Y @tab
  @item New @code{allocators} directive for Fortran @tab Y @tab
  @item Deprecation of @code{allocate} directive for Fortran
!       allocatables/pointers @tab N @tab
  @item Optional paired @code{end} directive with @code{dispatch} @tab Y @tab
  @item New @code{memspace} and @code{traits} modifiers for @code{uses_allocators}
!       @tab N @tab
  @item Deprecation of traits array following the allocator_handle expression in
!       @code{uses_allocators} @tab N @tab
  @item New @code{otherwise} clause as alias for @code{default} on metadirectives
        @tab Y @tab
! @item Deprecation of @code{default} clause on metadirectives @tab N
        @tab Both @code{otherwise} and @code{default} are accepted
        without diagnostics.
! @item Deprecation of delimited form of @code{declare target} @tab N @tab
  @item Reproducible semantics changed for @code{order(concurrent)} @tab N @tab
  @item @code{allocate} and @code{firstprivate} clauses on @code{scope}
        @tab Y @tab
--- 401,431 ----
  @item Deprecation of no-argument @code{destroy} clause on @code{depobj}
        @tab N/A @tab undeprecated in OpenMP 6
  @item @code{linear} clause syntax changes and @code{step} modifier @tab Y @tab
! @item Deprecation of minus operator for reductions @tab Y @tab
! @item Deprecation of separating @code{map} modifiers without comma @tab Y @tab
  @item @code{declare mapper} with iterator and @code{present} modifiers
        @tab N @tab
  @item If a matching mapped list item is not found in the data environment, the
        pointer retains its original value @tab Y @tab
  @item New @code{enter} clause as alias for @code{to} on declare target directive
        @tab Y @tab
! @item Deprecation of @code{to} clause on declare target directive @tab Y @tab
  @item Extended list of directives permitted in Fortran pure procedures
        @tab Y @tab
  @item New @code{allocators} directive for Fortran @tab Y @tab
  @item Deprecation of @code{allocate} directive for Fortran
!       allocatables/pointers @tab Y @tab
  @item Optional paired @code{end} directive with @code{dispatch} @tab Y @tab
  @item New @code{memspace} and @code{traits} modifiers for @code{uses_allocators}
!       @tab P @tab Only predefined allocators
  @item Deprecation of traits array following the allocator_handle expression in
!       @code{uses_allocators} @tab Y @tab
  @item New @code{otherwise} clause as alias for @code{default} on metadirectives
        @tab Y @tab
! @item Deprecation of @code{default} clause on metadirectives @tab Y
        @tab Both @code{otherwise} and @code{default} are accepted
        without diagnostics.
! @item Deprecation of delimited form of @code{declare target} @tab Y @tab
  @item Reproducible semantics changed for @code{order(concurrent)} @tab N @tab
  @item @code{allocate} and @code{firstprivate} clauses on @code{scope}
        @tab Y @tab
*************** to address of matching mapped list item
*** 435,441 ****
  @item New @code{doacross} clause as alias for @code{depend} with
        @code{source}/@code{sink} modifier @tab Y @tab
  @item Deprecation of @code{depend} with @code{source}/@code{sink} modifier
!       @tab N @tab
  @item @code{omp_cur_iteration} keyword @tab Y @tab
  @end multitable
  
--- 435,441 ----
  @item New @code{doacross} clause as alias for @code{depend} with
        @code{source}/@code{sink} modifier @tab Y @tab
  @item Deprecation of @code{depend} with @code{source}/@code{sink} modifier
!       @tab Y @tab
  @item @code{omp_cur_iteration} keyword @tab Y @tab
  @end multitable
  
*************** They have C linkage and do not throw exc
*** 1365,1372 ****
  This functions returns the currently active thread affinity policy, which is
  set via @env{OMP_PROC_BIND}.  Possible values are @code{omp_proc_bind_false},
  @code{omp_proc_bind_true}, @code{omp_proc_bind_primary},
! @code{omp_proc_bind_master}, @code{omp_proc_bind_close} and @code{omp_proc_bind_spread},
! where @code{omp_proc_bind_master} is an alias for @code{omp_proc_bind_primary}.
  
  @item @emph{C/C++}:
  @multitable @columnfractions .20 .80
--- 1365,1373 ----
  This functions returns the currently active thread affinity policy, which is
  set via @env{OMP_PROC_BIND}.  Possible values are @code{omp_proc_bind_false},
  @code{omp_proc_bind_true}, @code{omp_proc_bind_primary},
! @code{omp_proc_bind_master}, @code{omp_proc_bind_close}
! and @code{omp_proc_bind_spread}, where @code{omp_proc_bind_master} is a
! deprecated alias for @code{omp_proc_bind_primary}.
  
  @item @emph{C/C++}:
  @multitable @columnfractions .20 .80
*************** are only printed when @var{verbose} set
*** 4004,4010 ****
  
  @smallexample
  OPENMP DISPLAY ENVIRONMENT BEGIN
!   _OPENMP = '201511'
    [host] OMP_DYNAMIC = 'FALSE'
    [host] OMP_NESTED = 'FALSE'
    [all] OMP_CANCELLATION = 'FALSE'
--- 4005,4011 ----
  
  @smallexample
  OPENMP DISPLAY ENVIRONMENT BEGIN
!   _OPENMP = '202111'
    [host] OMP_DYNAMIC = 'FALSE'
    [host] OMP_NESTED = 'FALSE'
    [all] OMP_CANCELLATION = 'FALSE'
*************** When a list with more than value is spec
*** 4429,4442 ****
  Specifies whether threads may be moved between processors.  If set to
  @code{TRUE}, OpenMP threads should not be moved; if set to @code{FALSE}
  they may be moved.  Alternatively, a comma separated list with the
! values @code{PRIMARY}, @code{MASTER}, @code{CLOSE} and @code{SPREAD} can
! be used to specify the thread affinity policy for the corresponding nesting
! level.  With @code{PRIMARY} and @code{MASTER} the worker threads are in the
! same place partition as the primary thread.  With @code{CLOSE} those are
! kept close to the primary thread in contiguous place partitions.  And
! with @code{SPREAD} a sparse distribution
! across the place partitions is used.  Specifying more than one item in the
! list automatically enables nesting by default.
  
  When a list is specified, it also affects the @var{max-active-levels-var} ICV
  as described in @ref{OMP_MAX_ACTIVE_LEVELS}.
--- 4430,4443 ----
  Specifies whether threads may be moved between processors.  If set to
  @code{TRUE}, OpenMP threads should not be moved; if set to @code{FALSE}
  they may be moved.  Alternatively, a comma separated list with the
! values @code{PRIMARY}, @code{MASTER} (deprecated since OpenMP 5.1),
! @code{CLOSE} and @code{SPREAD} can be used to specify the thread affinity
! policy for the corresponding nesting level.  With @code{PRIMARY} and
! @code{MASTER} the worker threads are in the same place partition as the
! primary thread. With @code{CLOSE} those are kept close to the primary
! thread in contiguous place partitions.  And with @code{SPREAD} a sparse
! distribution across the place partitions is used.  Specifying more than
! one item in the list automatically enables nesting by default.
  
  When a list is specified, it also affects the @var{max-active-levels-var} ICV
  as described in @ref{OMP_MAX_ACTIVE_LEVELS}.
diff -Nrcpad gcc-16-20251207/libgomp/omp.h.in gcc-16-20251214/libgomp/omp.h.in
*** gcc-16-20251207/libgomp/omp.h.in	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/omp.h.in	Sun Dec 14 22:32:16 2025
*************** extern const char *omp_get_uid_from_devi
*** 442,448 ****
  #if __cplusplus >= 201103L
  
  /* std::__throw_bad_alloc and std::__throw_bad_array_new_length.  */
! #include <bits/functexcept.h>
  
  namespace omp
  {
--- 442,448 ----
  #if __cplusplus >= 201103L
  
  /* std::__throw_bad_alloc and std::__throw_bad_array_new_length.  */
! #include <bits/new_throw.h>
  
  namespace omp
  {
diff -Nrcpad gcc-16-20251207/libgomp/omp_lib.f90.in gcc-16-20251214/libgomp/omp_lib.f90.in
*** gcc-16-20251207/libgomp/omp_lib.f90.in	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/omp_lib.f90.in	Sun Dec 14 22:32:16 2025
***************
*** 225,231 ****
        module omp_lib
          use omp_lib_kinds
          implicit none
!         integer, parameter :: openmp_version = 201511
  
          interface
            subroutine omp_init_lock (svar)
--- 225,231 ----
        module omp_lib
          use omp_lib_kinds
          implicit none
!         integer, parameter :: openmp_version = 202111
  
          interface
            subroutine omp_init_lock (svar)
diff -Nrcpad gcc-16-20251207/libgomp/omp_lib.h.in gcc-16-20251214/libgomp/omp_lib.h.in
*** gcc-16-20251207/libgomp/omp_lib.h.in	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/omp_lib.h.in	Sun Dec 14 22:32:16 2025
***************
*** 74,80 ****
        parameter (omp_lock_hint_nonspeculative = 4)
        parameter (omp_sync_hint_speculative = 8)
        parameter (omp_lock_hint_speculative = 8)
!       parameter (openmp_version = 201511)
        integer omp_pause_resource_kind
        parameter (omp_pause_resource_kind = 4)
        integer (omp_pause_resource_kind) omp_pause_soft
--- 74,80 ----
        parameter (omp_lock_hint_nonspeculative = 4)
        parameter (omp_sync_hint_speculative = 8)
        parameter (omp_lock_hint_speculative = 8)
!       parameter (openmp_version = 202111)
        integer omp_pause_resource_kind
        parameter (omp_pause_resource_kind = 4)
        integer (omp_pause_resource_kind) omp_pause_soft
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/lib/libgomp.exp gcc-16-20251214/libgomp/testsuite/lib/libgomp.exp
*** gcc-16-20251207/libgomp/testsuite/lib/libgomp.exp	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/lib/libgomp.exp	Sun Dec 14 22:32:16 2025
*************** int main() {
*** 725,730 ****
--- 725,753 ----
  } } "-lhipblas" ]
  }
  
+ # return 1 if OpenMP Unified Shared Memory is supported by offload devices
+ 
+ proc check_effective_target_omp_usm { } {
+     if { [check_effective_target_offload_device_nvptx] 
+          || [check_effective_target_offload_target_amdgcn] } {
+ 	if [check_runtime usm_available_ {
+ 	    #include <omp.h>
+ 	    #pragma omp requires unified_shared_memory
+ 	    int main ()
+ 	    {
+ 	      int a;
+ 	      #pragma omp target map(from: a)
+ 		a = omp_is_initial_device ();
+ 	      return a;
+ 	    }
+ 	} ] {
+ 	  return 1
+ 	}
+     }
+ 
+     return 0
+ }
+ 
  # return 1 if OpenMP Device Managed Memory is supported
  
  proc check_effective_target_omp_managedmem { } {
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/affinity-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/affinity-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/affinity-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/affinity-1.c	Sun Dec 14 22:32:16 2025
***************
*** 17,24 ****
  
  /* { dg-do run } */
  /* { dg-set-target-env-var OMP_PROC_BIND "false" } */
! /* { dg-additional-options "-Wno-deprecated-declarations" } */
! /* { dg-additional-options "-DINTERPOSE_GETAFFINITY -DDO_FORK -ldl -Wno-deprecated-declarations" { target *-*-linux* } } */
  
  #ifndef _GNU_SOURCE
  #define _GNU_SOURCE
--- 17,23 ----
  
  /* { dg-do run } */
  /* { dg-set-target-env-var OMP_PROC_BIND "false" } */
! /* { dg-additional-options "-DINTERPOSE_GETAFFINITY -DDO_FORK -ldl -Wno-deprecated-declarations -Wno-deprecated-openmp" { target *-*-linux* } } */
  
  #ifndef _GNU_SOURCE
  #define _GNU_SOURCE
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/critical-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c/critical-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/critical-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/critical-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  // Test several constructs within a parallel.  At one point in development,
  // the critical directive clobbered the shared clause of the parallel.
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/debug-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/debug-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/debug-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/debug-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
--- 1,7 ----
  /* PR debug/36617 */
  /* { dg-do run } */
  /* { dg-options "-g -O0" } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  int
  f1 (void)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/declare-variant-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c/declare-variant-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/declare-variant-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/declare-variant-3.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* { dg-additional-options -DOFFLOAD_DEVICE_NVPTX { target offload_device_nvptx } } */
  /* { dg-additional-options {-fdump-tree-optimized -foffload-options=-fdump-tree-optimized} } */
! 
  #include "declare-variant-3.h"
  
  /* { dg-final { scan-tree-dump "= f \\(\\);" "optimized" } }
--- 1,6 ----
  /* { dg-additional-options -DOFFLOAD_DEVICE_NVPTX { target offload_device_nvptx } } */
  /* { dg-additional-options {-fdump-tree-optimized -foffload-options=-fdump-tree-optimized} } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "declare-variant-3.h"
  
  /* { dg-final { scan-tree-dump "= f \\(\\);" "optimized" } }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/declare-variant-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c/declare-variant-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/declare-variant-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/declare-variant-4.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* { dg-additional-options -DOFFLOAD_DEVICE_GCN { target offload_device_gcn } } */
  /* { dg-additional-options {-fdump-tree-optimized -foffload-options=-fdump-tree-optimized} } */
! 
  #include "declare-variant-4.h"
  
  /* { dg-final { scan-tree-dump "= f \\(\\);" "optimized" } }
--- 1,6 ----
  /* { dg-additional-options -DOFFLOAD_DEVICE_GCN { target offload_device_gcn } } */
  /* { dg-additional-options {-fdump-tree-optimized -foffload-options=-fdump-tree-optimized} } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "declare-variant-4.h"
  
  /* { dg-final { scan-tree-dump "= f \\(\\);" "optimized" } }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/doacross-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/doacross-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/doacross-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/doacross-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  
  #define N 256
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/doacross-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c/doacross-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/doacross-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/doacross-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  
  #define N 256
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/doacross-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c/doacross-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/doacross-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/doacross-3.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  
  #define N 256
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/async_target-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/async_target-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/async_target-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/async_target-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* { dg-do run } */
  /* { dg-additional-options "-DCHUNKSZ=5000" { target { ! run_expensive_tests } } } */
  /* { dg-additional-options "-DCHUNKSZ=1000" { target run_expensive_tests } } */
! 
  #include <stdlib.h>
  
  #define EPS 0.00001
--- 1,7 ----
  /* { dg-do run } */
  /* { dg-additional-options "-DCHUNKSZ=5000" { target { ! run_expensive_tests } } } */
  /* { dg-additional-options "-DCHUNKSZ=1000" { target run_expensive_tests } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  #define EPS 0.00001
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do run } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-3.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #include <stdlib.h>
  
  #define EPS 0.000001
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  #define EPS 0.000001
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-4.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* { dg-do run } */
  /* { dg-additional-options "-DTESTITERS=20" { target { ! run_expensive_tests } } } */
! 
  #include <stdlib.h>
  
  #define EPS 0.00001
--- 1,6 ----
  /* { dg-do run } */
  /* { dg-additional-options "-DTESTITERS=20" { target { ! run_expensive_tests } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  #define EPS 0.00001
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-5.c gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-5.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/examples-4/declare_target-5.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/examples-4/declare_target-5.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* { dg-do run { target vect_simd_clones } } */
  /* { dg-additional-options "-msse2" { target sse2_runtime } } */
  /* { dg-additional-options "-mavx" { target avx_runtime } } */
! 
  #include <stdlib.h>
  
  #define EPS 0.00001
--- 1,7 ----
  /* { dg-do run { target vect_simd_clones } } */
  /* { dg-additional-options "-msse2" { target sse2_runtime } } */
  /* { dg-additional-options "-mavx" { target avx_runtime } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  #define EPS 0.00001
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/lib-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/lib-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/lib-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/lib-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
! /* { dg-additional-options "-Wno-deprecated-declarations" } */
  
  #include <stdlib.h>
  #include <omp.h>
--- 1,4 ----
! /* { dg-additional-options "-Wno-deprecated-openmp" } */
  
  #include <stdlib.h>
  #include <omp.h>
*************** main (void)
*** 46,56 ****
    if (omp_get_dynamic ())
      abort ();
  
!   omp_set_nested (1);
!   if (! omp_get_nested ())
      abort ();
!   omp_set_nested (0);
!   if (omp_get_nested ())
      abort ();
  
    omp_set_num_threads (5);
--- 46,56 ----
    if (omp_get_dynamic ())
      abort ();
  
!   omp_set_nested (1); // { dg-warning "'omp_set_nested' is deprecated \\\[-Wdeprecated-declarations\\\]" }
!   if (! omp_get_nested ()) // { dg-warning "'omp_get_nested' is deprecated \\\[-Wdeprecated-declarations\\\]" }
      abort ();
!   omp_set_nested (0); // { dg-warning "'omp_set_nested' is deprecated \\\[-Wdeprecated-declarations\\\]" }
!   if (omp_get_nested ()) // { dg-warning "'omp_get_nested' is deprecated \\\[-Wdeprecated-declarations\\\]" }
      abort ();
  
    omp_set_num_threads (5);
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/loop-24.c gcc-16-20251214/libgomp/testsuite/libgomp.c/loop-24.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/loop-24.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/loop-24.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do run } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  extern void abort (void);
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/max_vf-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/max_vf-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/max_vf-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/max_vf-1.c	Sun Dec 14 22:32:16 2025
***************
*** 8,14 ****
  
  /* Fix a max_vf size so we can scan for it.
  { dg-additional-options "-msse2 -mno-avx" { target { x86_64-*-* i?86-*-* } } } */
! 
  #define N 1024
  int a[N], b[N], c[N];
  
--- 8,14 ----
  
  /* Fix a max_vf size so we can scan for it.
  { dg-additional-options "-msse2 -mno-avx" { target { x86_64-*-* i?86-*-* } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 1024
  int a[N], b[N], c[N];
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/nestedfn-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c/nestedfn-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/nestedfn-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/nestedfn-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do run } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  extern void abort (void);
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/nestedfn-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c/nestedfn-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/nestedfn-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/nestedfn-3.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do run } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/omp-proc-bind-master-dep.c gcc-16-20251214/libgomp/testsuite/libgomp.c/omp-proc-bind-master-dep.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/omp-proc-bind-master-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/omp-proc-bind-master-dep.c	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ #include <omp.h>
+ #include <stdlib.h>
+ 
+ int
+ main()
+ {
+   if (omp_proc_bind_master != omp_proc_bind_primary) // { dg-warning "'omp_proc_bind_master' is deprecated \\\[-Wdeprecated-declarations\\\]" }
+     abort();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/pr104385.c gcc-16-20251214/libgomp/testsuite/libgomp.c/pr104385.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/pr104385.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/pr104385.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* PR libgomp/104385 */
! 
  #include <unistd.h>
  
  int
--- 1,5 ----
  /* PR libgomp/104385 */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <unistd.h>
  
  int
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/pr81778.c gcc-16-20251214/libgomp/testsuite/libgomp.c/pr81778.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/pr81778.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/pr81778.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* Minimized from for-5.c.  */
! 
  #include <stdio.h>
  #include <stdlib.h>
  
--- 1,5 ----
  /* Minimized from for-5.c.  */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdio.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/pr86660.c gcc-16-20251214/libgomp/testsuite/libgomp.c/pr86660.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/pr86660.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/pr86660.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  /* PR middle-end/86660 */
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/reduction-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c/reduction-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/reduction-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/reduction-4.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  
*************** main (void)
*** 11,17 ****
      if (i != 0 || k != 0 || l != 0)
  #pragma omp atomic
        j |= 1;
!   
      if (omp_get_num_threads () != 4)
  #pragma omp atomic
        j |= 2;
--- 12,18 ----
      if (i != 0 || k != 0 || l != 0)
  #pragma omp atomic
        j |= 1;
! 
      if (omp_get_num_threads () != 4)
  #pragma omp atomic
        j |= 2;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/switch-conversion.c gcc-16-20251214/libgomp/testsuite/libgomp.c/switch-conversion.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/switch-conversion.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/switch-conversion.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* PR tree-optimization/85063 */
  /* { dg-additional-options "-ftree-switch-conversion" } */
! 
  #include <stdlib.h>
  
  #pragma omp declare target
--- 1,6 ----
  /* PR tree-optimization/85063 */
  /* { dg-additional-options "-ftree-switch-conversion" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-26.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-26.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-26.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-26.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  #pragma omp declare target
  int a[4] = { 2, 3, 4, 5 }, *b;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-28.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-28.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-28.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-28.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  
  int g;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-30.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-30.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-30.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-30.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-31.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-31.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-31.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-31.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-32.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-32.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-32.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-32.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <unistd.h>
  #include "usleep.h"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-34.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-34.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-34.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-34.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-declarations -Wno-deprecated-openmp" }
  extern void abort (void);
  
  int
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-35.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-35.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-35.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-35.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-38.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-38.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-38.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-38.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #define A(n) n##0, n##1, n##2, n##3, n##4, n##5, n##6, n##7, n##8, n##9
  #define B(n) A(n##0), A(n##1), A(n##2), A(n##3), A(n##4), A(n##5), A(n##6), A(n##7), A(n##8), A(n##9)
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-39.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-39.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-39.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-39.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* { dg-do run } */
  /* { dg-options "-O0" } */
! 
  extern void abort (void);
  volatile int v;
  #pragma omp declare target to (v)
--- 1,6 ----
  /* { dg-do run } */
  /* { dg-options "-O0" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  volatile int v;
  #pragma omp declare target to (v)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-9.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-9.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-9.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-9.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* { dg-do run } */
  /* { dg-options "-O1 -ftree-parallelize-loops=0" } */
  /* { dg-additional-options "-flto" { target lto } } */
! 
  #include <stdlib.h>
  
  #define N 123456
--- 1,7 ----
  /* { dg-do run } */
  /* { dg-options "-O1 -ftree-parallelize-loops=0" } */
  /* { dg-additional-options "-flto" { target lto } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  #define N 123456
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-critical-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-critical-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-critical-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-critical-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #include <omp.h>
  #include <stdlib.h>
  
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-link-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-link-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-link-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-link-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  struct S { int s, t; };
  
  int a = 1, b = 1;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/target-teams-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/target-teams-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/target-teams-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/target-teams-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #include <omp.h>
  #include <stdlib.h>
  
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/task-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/task-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/task-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/task-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern void abort (void);
  
  int a = 18;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/task-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c/task-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/task-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/task-3.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #include <omp.h>
  extern void abort ();
  
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  extern void abort ();
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/task-6.c gcc-16-20251214/libgomp/testsuite/libgomp.c/task-6.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/task-6.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/task-6.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <unistd.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/task-reduction-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/task-reduction-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/task-reduction-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/task-reduction-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef __SIZE_TYPE__ size_t;
  extern void abort (void);
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/task-reduction-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c/task-reduction-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/task-reduction-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/task-reduction-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef __SIZE_TYPE__ size_t;
  extern void abort (void);
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/teams-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/teams-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/teams-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/teams-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
- /* { dg-additional-options "-Wno-deprecated-declarations" } */
- 
  #include <omp.h>
  #include <stdlib.h>
  
--- 1,3 ----
*************** int
*** 7,13 ****
  main ()
  {
    omp_set_dynamic (0);
!   omp_set_nested (1);
    #pragma omp teams thread_limit (2)
    {
      #pragma omp distribute dist_schedule(static,1)
--- 5,11 ----
  main ()
  {
    omp_set_dynamic (0);
!   omp_set_nested (1); // { dg-warning "'omp_set_nested' is deprecated \\\[-Wdeprecated-declarations\\\]" }
    #pragma omp teams thread_limit (2)
    {
      #pragma omp distribute dist_schedule(static,1)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/thread-limit-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c/thread-limit-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/thread-limit-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/thread-limit-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* { dg-do run } */
  /* { dg-set-target-env-var OMP_THREAD_LIMIT "9" } */
  /* { dg-additional-options "-Wno-deprecated-declarations" } */
! 
  #include <stdlib.h>
  #include <unistd.h>
  #include <omp.h>
--- 1,7 ----
  /* { dg-do run } */
  /* { dg-set-target-env-var OMP_THREAD_LIMIT "9" } */
  /* { dg-additional-options "-Wno-deprecated-declarations" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <unistd.h>
  #include <omp.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c/vla-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c/vla-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c/vla-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c/vla-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #include <omp.h>
  #include <stdlib.h>
  #include <string.h>
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  #include <string.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/affinity-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/affinity-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/affinity-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/affinity-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  // { dg-do run }
  // { dg-set-target-env-var OMP_PROC_BIND "true" }
! // { dg-additional-options "-Wno-deprecated-declarations" }
  
  #include "../libgomp.c/affinity-1.c"
--- 1,5 ----
  // { dg-do run }
  // { dg-set-target-env-var OMP_PROC_BIND "true" }
! // { dg-additional-options "-Wno-deprecated-declarations -Wno-deprecated-openmp" }
  
  #include "../libgomp.c/affinity-1.c"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  // { dg-do run }
! 
  #include <omp.h>
  #include <assert.h>
  
--- 1,5 ----
  // { dg-do run }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <assert.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-11.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-11.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-11.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-11.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // PR c++/36308
  // { dg-do run }
! 
  #include <omp.h>
  #include <assert.h>
  
--- 1,6 ----
  // PR c++/36308
  // { dg-do run }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <assert.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-13.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-13.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-13.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-13.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  // { dg-do run }
! 
  #include <omp.h>
  #include <assert.h>
  
--- 1,5 ----
  // { dg-do run }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <assert.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-2.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-2.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-2.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-2.C	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  #include <assert.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-5.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-5.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-5.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-5.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run }
  // { dg-require-effective-target tls_runtime }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  #include <assert.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-7.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-7.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/ctor-7.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/ctor-7.C	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  #include <assert.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/declare_target-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/declare_target-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/declare_target-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/declare_target-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-require-effective-target offload_device_shared_as }
! 
  #include <stdlib.h>
  
  struct typeX
--- 1,7 ----
  // { dg-do run }
  // { dg-require-effective-target offload_device_shared_as }
! // { dg-additional-options "-Wno-deprecated-declarations" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  
  struct typeX
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/depend-iterator-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/depend-iterator-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/depend-iterator-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/depend-iterator-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  extern "C" void abort ();
  int arr[64], arr2[64], arr3[64];
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/depobj-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/depobj-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/depobj-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/depobj-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <omp.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/doacross-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/doacross-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/doacross-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/doacross-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  // { dg-do run }
! 
  typedef __PTRDIFF_TYPE__ ptrdiff_t;
  extern "C" void abort ();
  
--- 1,5 ----
  // { dg-do run }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef __PTRDIFF_TYPE__ ptrdiff_t;
  extern "C" void abort ();
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/for-15.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/for-15.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/for-15.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/for-15.C	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  // PR c++/86443
  // { dg-do run }
  // { dg-additional-options "-std=c++17" }
! 
  typedef __PTRDIFF_TYPE__ ptrdiff_t;
  extern "C" void abort ();
  
--- 1,7 ----
  // PR c++/86443
  // { dg-do run }
  // { dg-additional-options "-std=c++17" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef __PTRDIFF_TYPE__ ptrdiff_t;
  extern "C" void abort ();
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/for-24.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/for-24.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/for-24.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/for-24.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options "-std=c++17" }
! 
  typedef __PTRDIFF_TYPE__ ptrdiff_t;
  extern "C" void abort ();
  
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options "-std=c++17" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef __PTRDIFF_TYPE__ ptrdiff_t;
  extern "C" void abort ();
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/loop-13.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/loop-13.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/loop-13.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/loop-13.C	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  typedef __PTRDIFF_TYPE__ ptrdiff_t;
  extern "C" void abort ();
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/master-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/master-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/master-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/master-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  // PR c++/24734
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  extern "C" void abort ();
  int i;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr101544-1-O0.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr101544-1-O0.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr101544-1-O0.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr101544-1-O0.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
  // { dg-additional-options -O0 }
! 
  #include "pr101544-1.C"
--- 1,3 ----
  // { dg-additional-options -O0 }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "pr101544-1.C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr101544-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr101544-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr101544-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr101544-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  // See also '../libgomp.oacc-c++/pr101544-1.C'.
  #ifndef ALWAYS_INLINE
  # define ALWAYS_INLINE
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr26943.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr26943.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr26943.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr26943.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  // PR c++/26943
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <assert.h>
  #include <unistd.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr81130.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr81130.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr81130.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr81130.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  // PR c++/81130
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  struct A
  {
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr81314.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr81314.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr81314.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr81314.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  // PR c++/81314
  // { dg-do link }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  template <int N>
  struct S {
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr96835-1-O0.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr96835-1-O0.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr96835-1-O0.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr96835-1-O0.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
  // { dg-additional-options -O0 }
! 
  #include "pr96835-1.C"
--- 1,3 ----
  // { dg-additional-options -O0 }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "pr96835-1.C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr96835-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr96835-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/pr96835-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/pr96835-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  // See also '../libgomp.oacc-c++/pr96835-1.C'.
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #ifndef ALWAYS_INLINE
  # define ALWAYS_INLINE
  #endif
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C	Sun Dec 14 22:32:16 2025
***************
*** 26,32 ****
  // { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_amdgcn } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-not "omp_initial_device;" "optimized" { target offload_target_nvptx } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_nvptx } } }
! 
  #include <cassert>
  #include <omp.h>
  
--- 26,32 ----
  // { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_amdgcn } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-not "omp_initial_device;" "optimized" { target offload_target_nvptx } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_nvptx } } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <cassert>
  #include <omp.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C	Sun Dec 14 22:32:16 2025
***************
*** 27,33 ****
  // { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_amdgcn } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-not "omp_initial_device;" "optimized" { target offload_target_nvptx } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_nvptx } } }
! 
  
  #include <cassert>
  
--- 27,33 ----
  // { dg-final { only_for_offload_target amdgcn-amdhsa scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_amdgcn } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump-not "omp_initial_device;" "optimized" { target offload_target_nvptx } } }
  // { dg-final { only_for_offload_target nvptx-none scan-offload-tree-dump "v1\\._x = 5;" "optimized" { target offload_target_nvptx } } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <cassert>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  // { dg-do run }
! 
  #include <cassert>
  
  #pragma omp declare target
--- 1,5 ----
  // { dg-do run }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <cassert>
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-13.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-13.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-13.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-13.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern "C" void abort (void);
  
  int g;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-cdtor-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-cdtor-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-cdtor-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-cdtor-1.C	Sun Dec 14 22:32:16 2025
***************
*** 2,8 ****
  
  /* { dg-additional-options -fdump-tree-optimized-raw-asmname }
     { dg-additional-options -foffload-options=-fdump-tree-optimized-raw-asmname } */
! 
  #include <omp.h>
  #include <vector>
  
--- 2,8 ----
  
  /* { dg-additional-options -fdump-tree-optimized-raw-asmname }
     { dg-additional-options -foffload-options=-fdump-tree-optimized-raw-asmname } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <vector>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-cdtor-2.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-cdtor-2.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-cdtor-2.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-cdtor-2.C	Sun Dec 14 22:32:16 2025
***************
*** 4,10 ****
  
  /* { dg-additional-options -fdump-tree-optimized-raw-asmname }
     { dg-additional-options -foffload-options=-fdump-tree-optimized-raw-asmname } */
! 
  #include <omp.h>
  #include <vector>
  
--- 4,10 ----
  
  /* { dg-additional-options -fdump-tree-optimized-raw-asmname }
     { dg-additional-options -foffload-options=-fdump-tree-optimized-raw-asmname } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <vector>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-in-reduction-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-in-reduction-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-in-reduction-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-in-reduction-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  void
  foo (int &x, int *&y, int n, int v)
  {
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-in-reduction-2.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-in-reduction-2.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-in-reduction-2.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-in-reduction-2.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  struct S { int a, b, c[2]; };
  #pragma omp declare reduction (+: S : (omp_out.a += omp_in.a, omp_out.b += omp_in.b)) \
    initializer (omp_priv = { 0, 0, { 0, 0 } })
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-require-effective-target omp_usm } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <stdlib.h>
  #include <time.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__cmath.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__cmath.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__cmath.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__cmath.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options "-std=c++20" }
! 
  #include <cmath>
  #include <numbers>
  
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options "-std=c++20" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <cmath>
  #include <numbers>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__complex.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__complex.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__complex.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__complex.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options "-std=c++20" }
! 
  #include <cmath>
  #include <complex>
  #include <numbers>
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options "-std=c++20" }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <cmath>
  #include <complex>
  #include <numbers>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-require-effective-target omp_usm } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! 
  #include <stdlib.h>
  #include <time.h>
  #include <deque>
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <time.h>
  #include <deque>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-require-effective-target omp_usm } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! 
  #include <stdlib.h>
  #include <time.h>
  #include <omp.h>
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <time.h>
  #include <omp.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-require-effective-target omp_usm } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! 
  #include <stdlib.h>
  #include <time.h>
  #include <omp.h>
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <time.h>
  #include <omp.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__numbers.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__numbers.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__numbers.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__numbers.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options "-std=c++20" }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <cmath>
  #include <numbers>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  // { dg-additional-options "-std=c++20" }
! 
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
--- 1,6 ----
  // { dg-additional-options "-std=c++20" }
! /* { dg-require-effective-target omp_usm } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  // { dg-do run }
  // { dg-additional-options "-std=c++20" }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! 
  #include <stdlib.h>
  #include <time.h>
  #include <span>
--- 1,7 ----
  // { dg-do run }
  // { dg-additional-options "-std=c++20" }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <time.h>
  #include <span>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__valarray-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__valarray-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__valarray-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__valarray-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-additional-options -std=c++20 }
  // { dg-output-file target-std__valarray-1.output }
! 
  #include <valarray>
  #include <ostream>
  #include <sstream>
--- 1,6 ----
  // { dg-additional-options -std=c++20 }
  // { dg-output-file target-std__valarray-1.output }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <valarray>
  #include <ostream>
  #include <sstream>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-require-effective-target omp_usm } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! 
  #include <stdlib.h>
  #include <time.h>
  #include <valarray>
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <time.h>
  #include <valarray>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ /* { dg-require-effective-target omp_usm } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp requires unified_shared_memory self_maps
  
  #define MEM_SHARED
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! 
  #include <stdlib.h>
  #include <time.h>
  #include <vector>
--- 1,6 ----
  // { dg-do run }
  // { dg-additional-options -DMEM_SHARED { target offload_device_shared_as } }
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <time.h>
  #include <vector>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  extern "C" void abort ();
  
  int a = 18;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-2.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-2.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-2.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-2.C	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  // { dg-do run }
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  extern "C" void abort ();
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-6.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-6.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-6.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-6.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern "C" void abort ();
  
  int a = 18;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-reduction-7.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-reduction-7.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-reduction-7.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-reduction-7.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef __SIZE_TYPE__ size_t;
  extern "C" void abort ();
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-reduction-9.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-reduction-9.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/task-reduction-9.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/task-reduction-9.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  #include <omp.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c++/taskloop-reduction-1.C gcc-16-20251214/libgomp/testsuite/libgomp.c++/taskloop-reduction-1.C
*** gcc-16-20251207/libgomp/testsuite/libgomp.c++/taskloop-reduction-1.C	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c++/taskloop-reduction-1.C	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  extern "C" void abort ();
  
  struct S { S (); S (unsigned long long int, int); ~S (); static int cnt1, cnt2, cnt3; unsigned long long int s; int t; };
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/cancel-taskgroup-4.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do run } */
  /* { dg-set-target-env-var OMP_CANCELLATION "true" } */
+ /* { dg-additional-options "-Wno-deprecated-openmp" } */
  
  #include <stdlib.h>
  #include <unistd.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/declare_target-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/declare_target-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/declare_target-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/declare_target-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* PR c++/99509  */
! 
! #pragma omp declare target
  int data[] = {5};
  #pragma omp end declare target
  
--- 1,5 ----
  /* PR c++/99509  */
! #pragma omp declare target // { dg-warning "use of 'omp declare target' as a synonym for 'omp begin declare target' has been deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" }
  int data[] = {5};
  #pragma omp end declare target
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depend-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depend-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depend-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depend-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  #include <unistd.h>
*************** test (int ifval)
*** 7,13 ****
  {
    int a[8], b[8], i;
    omp_depend_t d1, d2;
!   #pragma omp depobj (d1) depend(inout: omp_all_memory) 
    #pragma omp depobj (d2) depend(out: omp_all_memory)
    for (i = 0; i < 8; i++)
      {
--- 8,14 ----
  {
    int a[8], b[8], i;
    omp_depend_t d1, d2;
!   #pragma omp depobj (d1) depend(inout: omp_all_memory)
    #pragma omp depobj (d2) depend(out: omp_all_memory)
    for (i = 0; i < 8; i++)
      {
*************** test (int ifval)
*** 99,105 ****
        b[0] = 6 * i + 57;
        for (i = 1; i < 8; ++i)
  	{
! 	  if (b[i] != 4 * i - 7) 
  	    abort ();
  	  b[i] = 6 * i + 57;
  	}
--- 100,106 ----
        b[0] = 6 * i + 57;
        for (i = 1; i < 8; ++i)
  	{
! 	  if (b[i] != 4 * i - 7)
  	    abort ();
  	  b[i] = 6 * i + 57;
  	}
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depend-inoutset-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depend-inoutset-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depend-inoutset-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depend-inoutset-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  #include <omp.h>
  #include <stdlib.h>
  #include <unistd.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depend-iterator-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  #ifdef __cplusplus
  extern "C"
  #endif
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depobj-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depobj-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/depobj-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/depobj-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <stdlib.h>
  #include <omp.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-11.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-11.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-11.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-11.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
  /* { dg-additional-options "-std=gnu99" {target c } } */
! 
  #define CONDNE
  #include "for-5.c"
--- 1,4 ----
  /* { dg-additional-options "-std=gnu99" {target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define CONDNE
  #include "for-5.c"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-12.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-12.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-12.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-12.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
  /* { dg-additional-options "-std=gnu99" {target c } } */
! 
  #define CONDNE
  #include "for-6.c"
--- 1,4 ----
  /* { dg-additional-options "-std=gnu99" {target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define CONDNE
  #include "for-6.c"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-16.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-16.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-16.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-16.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-3.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-additional-options "-std=gnu99" { target c } } */
! 
  extern
  #ifdef __cplusplus
  "C"
--- 1,5 ----
  /* { dg-additional-options "-std=gnu99" { target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-5.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-5.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-5.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-5.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-additional-options "-std=gnu99" { target c } } */
! 
  extern
  #ifdef __cplusplus
  "C"
--- 1,5 ----
  /* { dg-additional-options "-std=gnu99" { target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-6.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-6.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-6.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-6.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-additional-options "-std=gnu99" { target c } } */
! 
  extern
  #ifdef __cplusplus
  "C"
--- 1,5 ----
  /* { dg-additional-options "-std=gnu99" { target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-9.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-9.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/for-9.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/for-9.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
  /* { dg-additional-options "-std=gnu99" {target c } } */
! 
  #define CONDNE
  #include "for-3.c"
--- 1,4 ----
  /* { dg-additional-options "-std=gnu99" {target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define CONDNE
  #include "for-3.c"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/function-not-offloaded.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* { dg-do link } */
  /* { dg-excess-errors "unresolved symbol foo, lto1, mkoffload and lto-wrapper fatal errors" { target { offload_target_nvptx || offload_target_amdgcn } } } */
  /* { dg-additional-sources "function-not-offloaded-aux.c" } */
! 
  #pragma omp declare target
  int var;
  #pragma omp end declare target
--- 1,7 ----
  /* { dg-do link } */
  /* { dg-excess-errors "unresolved symbol foo, lto1, mkoffload and lto-wrapper fatal errors" { target { offload_target_nvptx || offload_target_amdgcn } } } */
  /* { dg-additional-sources "function-not-offloaded-aux.c" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int var;
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/master-combined-1.c	Sun Dec 14 22:32:16 2025
***************
*** 3,8 ****
--- 3,9 ----
  /* { dg-additional-options "-std=c99" { target c } } */
  /* { dg-additional-options "-msse2" { target sse2_runtime } } */
  /* { dg-additional-options "-mavx" { target avx_runtime } } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  #include <stdlib.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* { dg-do run { target { ! offload_target_nvptx } } } */
  /* { dg-do compile { target offload_target_nvptx } } */
! 
  #define N 100
  
  void
--- 1,6 ----
  /* { dg-do run { target { ! offload_target_nvptx } } } */
  /* { dg-do compile { target offload_target_nvptx } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  void
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #include <math.h>
  
  #define N 100
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <math.h>
  
  #define N 100
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-3.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #define N 100
  
  int
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  int
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-5.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-5.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/metadirective-5.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/metadirective-5.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #define N 100
  
  #include <stdio.h>
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 100
  
  #include <stdio.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/monotonic-1.c	Sun Dec 14 22:32:16 2025
*************** main ()
*** 226,239 ****
  	    n = 1;
  	    c++;
  	  }
! 	#pragma omp ordered depend(source)
  	if (MONOTONIC_UNDEF > 0)
  	  {
! 	    #pragma omp ordered depend(sink: i)
  	  }
  	else
  	  {
! 	    #pragma omp ordered depend(sink: i - 1)
  	  }
  	l = i;
        }
--- 226,239 ----
  	    n = 1;
  	    c++;
  	  }
! 	#pragma omp ordered depend(source) // { dg-warning "'source' modifier with 'depend' clause deprecated since OpenMP 5.2, use with 'doacross' \\\[-Wdeprecated-openmp\\\]" }
  	if (MONOTONIC_UNDEF > 0)
  	  {
! 	    #pragma omp ordered depend(sink: i) // { dg-warning "'sink' modifier with 'depend' clause deprecated since OpenMP 5.2, use with 'doacross' \\\[-Wdeprecated-openmp\\\]" }
  	  }
  	else
  	  {
! 	    #pragma omp ordered depend(sink: i - 1) // { dg-warning "'sink' modifier with 'depend' clause deprecated since OpenMP 5.2, use with 'doacross' \\\[-Wdeprecated-openmp\\\]" }
  	  }
  	l = i;
        }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/monotonic-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* { dg-do run } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  #include <stdlib.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-atv-seq-dep.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-atv-seq-dep.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-atv-seq-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-atv-seq-dep.c	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,9 ----
+ // { dg-do run }
+ #include <omp.h>
+ 
+ int
+ main()
+ {
+   int test = omp_atv_sequential; // { dg-warning "'omp_atv_sequential' is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-contended-dep.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-contended-dep.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-contended-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-contended-dep.c	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,11 ----
+ // { dg-do compile }
+ #include <omp.h>
+ 
+ int
+ main()
+ {
+   omp_lock_t lock;
+   omp_init_lock_with_hint(&lock, omp_lock_hint_contended); // { dg-warning "'omp_lock_hint_contended' is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   omp_destroy_lock(&lock);
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-none-dep.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-none-dep.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-none-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-none-dep.c	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do compile }
+ 
+ #include <omp.h>
+ 
+ int
+ main()
+ {
+   omp_lock_t lock;
+   omp_init_lock_with_hint(&lock, omp_lock_hint_none); // { dg-warning "'omp_lock_hint_none' is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   omp_destroy_lock(&lock);
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-speculative-dep.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-speculative-dep.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-speculative-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-speculative-dep.c	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,11 ----
+ // { dg-do compile }
+ #include <omp.h>
+ 
+ int
+ main()
+ {
+   omp_lock_t lock;
+   omp_init_lock_with_hint(&lock, omp_lock_hint_speculative); // { dg-warning "'omp_lock_hint_speculative' is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   omp_destroy_lock(&lock);
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-uncontended-dep.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-uncontended-dep.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-uncontended-dep.c	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/omp-lock-hint-uncontended-dep.c	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,11 ----
+ // { dg-do compile }
+ #include <omp.h>
+ 
+ int
+ main()
+ {
+   omp_lock_t lock;
+   omp_init_lock_with_hint(&lock, omp_lock_hint_uncontended); // { dg-warning "'omp_lock_hint_uncontended' is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   omp_destroy_lock(&lock);
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr100059-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr100059-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr100059-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr100059-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* Based on sollve_vv's tests/5.0/declare_target/test_nested_declare_target.c.  */
! 
  #define N 1024
  int a[N], b[N], c[N];  
  int i = 0;
--- 1,5 ----
  /* Based on sollve_vv's tests/5.0/declare_target/test_nested_declare_target.c.  */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #define N 1024
  int a[N], b[N], c[N];  
  int i = 0;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* PR middle-end/66199 */
  /* { dg-do run } */
! 
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
--- 1,6 ----
  /* PR middle-end/66199 */
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-4.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* PR middle-end/66199 */
  /* { dg-do run } */
  /* { dg-options "-O2" { target c } } */
! 
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
--- 1,7 ----
  /* PR middle-end/66199 */
  /* { dg-do run } */
  /* { dg-options "-O2" { target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-5.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-5.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-5.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-5.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* PR middle-end/66199 */
  /* { dg-do run } */
! 
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
--- 1,6 ----
  /* PR middle-end/66199 */
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-6.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-6.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-6.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-6.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* PR middle-end/66199 */
  /* { dg-do run } */
  /* { dg-options "-O2" { target c } } */
! 
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
--- 1,7 ----
  /* PR middle-end/66199 */
  /* { dg-do run } */
  /* { dg-options "-O2" { target c } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-7.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-7.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-7.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-7.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* PR middle-end/66199 */
  /* { dg-do run } */
! 
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
--- 1,6 ----
  /* PR middle-end/66199 */
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-8.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-8.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-8.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-8.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* PR middle-end/66199 */
  /* { dg-do run } */
! 
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
--- 1,6 ----
  /* PR middle-end/66199 */
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-9.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-9.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/pr66199-9.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/pr66199-9.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* PR middle-end/66199 */
  /* { dg-do run } */
! 
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
--- 1,6 ----
  /* PR middle-end/66199 */
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  int u[1024], v[1024], w[1024];
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/ptr-attach-1.c	Sun Dec 14 22:32:16 2025
*************** struct S
*** 8,14 ****
  };
  typedef struct S S;
  
! #pragma omp declare target
  int *gp;
  #pragma omp end declare target
  
--- 8,14 ----
  };
  typedef struct S S;
  
! #pragma omp declare target // { dg-warning "use of 'omp declare target' as a synonym for 'omp begin declare target' has been deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" }
  int *gp;
  #pragma omp end declare target
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/reverse-offload-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
  /* { dg-do run }  */
  /* { dg-additional-options "-foffload-options=nvptx-none=-misa=sm_35" { target { offload_target_nvptx } } } */
  /* { dg-additional-sources reverse-offload-1-aux.c } */
! 
  /* Check that reverse offload works in particular:
     - no code is generated on the device side (i.e. no
       implicit declare target of called functions and no
--- 1,7 ----
  /* { dg-do run }  */
  /* { dg-additional-options "-foffload-options=nvptx-none=-misa=sm_35" { target { offload_target_nvptx } } } */
  /* { dg-additional-sources reverse-offload-1-aux.c } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  /* Check that reverse offload works in particular:
     - no code is generated on the device side (i.e. no
       implicit declare target of called functions and no
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-10.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-10.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-10.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-10.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* { dg-do run } */
! 
  #pragma omp declare target
  extern int v;
  #pragma omp end declare target
--- 1,5 ----
  /* { dg-do run } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #pragma omp declare target
  extern int v;
  #pragma omp end declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-40.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-40.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-40.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-40.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* { dg-do run } */
  /* { dg-options "-O0" } */
! 
  extern
  #ifdef __cplusplus
  "C"
--- 1,6 ----
  /* { dg-do run } */
  /* { dg-options "-O0" } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
  /* { dg-additional-options -O0 } */
! 
  #include "target-abi-struct-1.c"
--- 1,3 ----
  /* { dg-additional-options -O0 } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "target-abi-struct-1.c"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-abi-struct-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1 ****
--- 1,2 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include "../libgomp.oacc-c-c++-common/abi-struct-1.c"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-cdtor-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-cdtor-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-cdtor-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-cdtor-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  /* Offloaded 'constructor' and 'destructor' functions.  */
! 
  #include <omp.h>
  
  #pragma omp declare target
--- 1,5 ----
  /* Offloaded 'constructor' and 'destructor' functions.  */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-implicit-map-4.c	Sun Dec 14 22:32:16 2025
***************
*** 4,9 ****
--- 4,10 ----
     and for not mapping the stack variables 'A' and 'B' (not mapped
     but accessible -> USM makes this tested feature even more important.)  */
  
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires unified_shared_memory
  
  /* Ensure that defaultmap(default : pointer) uses correct OpenMP 5.2
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  void
  foo (int x, int *y, int n, int v)
  {
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-in-reduction-2.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,5 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
+ 
  struct S { int a, b, c[2]; };
  #pragma omp declare reduction (+: struct S : (omp_out.a += omp_in.a, omp_out.b += omp_in.b)) \
    initializer (omp_priv = { 0, 0, { 0, 0 } })
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-link-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-link-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-link-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-link-3.c	Sun Dec 14 22:32:16 2025
***************
*** 3,8 ****
--- 3,9 ----
  #include <stdint.h>
  #include <omp.h>
  
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires unified_shared_memory
  
  int A[3] = {-3,-4,-5};
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-link-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-link-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-link-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-link-4.c	Sun Dec 14 22:32:16 2025
***************
*** 3,8 ****
--- 3,9 ----
  #include <stdint.h>
  #include <omp.h>
  
+ /* { dg-require-effective-target omp_usm } */
  #pragma omp requires self_maps
  
  int A[3] = {-3,-4,-5};
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-same-name-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-same-name-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/target-same-name-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/target-same-name-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  /* { dg-additional-sources "target-same-name-1-a.c target-same-name-1-b.c" } */
  /* PR middle-end/104285 */
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-detach-12.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-detach-12.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-detach-12.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-detach-12.c	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do run } */
  /* { dg-options "-fopenmp" } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-14.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-15.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-15.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-15.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-15.c	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  /* PR middle-end/101167 */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  extern
  #ifdef __cplusplus
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-5.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-5.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-5.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-5.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  typedef __SIZE_TYPE__ size_t;
  extern
  #ifdef __cplusplus
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-6.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-6.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-6.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-6.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-8.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-8.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/task-reduction-8.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/task-reduction-8.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  #include <omp.h>
  #include <stdlib.h>
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-1.c	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  extern
  #ifdef __cplusplus
  "C"
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-3.c	Sun Dec 14 22:32:16 2025
***************
*** 3,8 ****
--- 3,9 ----
  /* { dg-additional-options "-std=c99" { target c } } */
  /* { dg-additional-options "-msse2" { target sse2_runtime } } */
  /* { dg-additional-options "-mavx" { target avx_runtime } } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #define N 1024
  long int u[N], m, n;
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/taskloop-reduction-4.c	Sun Dec 14 22:32:16 2025
***************
*** 3,8 ****
--- 3,9 ----
  /* { dg-additional-options "-std=c99" { target c } } */
  /* { dg-additional-options "-msse2" { target sse2_runtime } } */
  /* { dg-additional-options "-mavx" { target avx_runtime } } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <omp.h>
  #include <stdlib.h>
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.c-c++-common/variable-not-offloaded.c	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  /* { dg-do link } */
  /* { dg-excess-errors "lto1, mkoffload and lto-wrapper fatal errors" { target { offload_target_nvptx || offload_target_amdgcn } } } */
! 
  int var; /* { dg-error "variable 'var' has been referenced in offloaded code but hasn't been marked to be included in the offloaded code" "" { target { offload_target_nvptx || offload_target_amdgcn } } } */
  
  #pragma omp declare target
--- 1,6 ----
  /* { dg-do link } */
  /* { dg-excess-errors "lto1, mkoffload and lto-wrapper fatal errors" { target { offload_target_nvptx || offload_target_amdgcn } } } */
! // { dg-additional-options "-Wno-deprecated-openmp" }
  int var; /* { dg-error "variable 'var' has been referenced in offloaded code but hasn't been marked to be included in the offloaded code" "" { target { offload_target_nvptx || offload_target_amdgcn } } } */
  
  #pragma omp declare target
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocate-8a.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocate-8a.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocate-8a.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocate-8a.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-additional-options "-fopenmp-allocators" }
  ! { dg-additional-options "-fdump-tree-omplower" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  program main
    use iso_c_binding
    use omp_lib
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocators-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocators-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocators-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocators-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,9 ****
  ! { dg-additional-options "-fopenmp-allocators -fdump-tree-original" }
  module m
    use omp_lib
    use iso_c_binding, only: c_intptr_t
    implicit none (type,external)
!   integer(omp_allocator_handle_kind) :: handle  
    integer(c_intptr_t) :: iptr
  end module m
  
--- 1,10 ----
  ! { dg-additional-options "-fopenmp-allocators -fdump-tree-original" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    use omp_lib
    use iso_c_binding, only: c_intptr_t
    implicit none (type,external)
!   integer(omp_allocator_handle_kind) :: handle
    integer(c_intptr_t) :: iptr
  end module m
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocators-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocators-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocators-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocators-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-additional-options "-fopenmp-allocators" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
    implicit none (type, external)
    type t
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocators-4.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocators-4.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/allocators-4.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/allocators-4.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-additional-options "-fopenmp-allocators" }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
  implicit none
  type t
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/crayptr1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/crayptr1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/crayptr1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/crayptr1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  ! { dg-do run }
  ! { dg-options "-fcray-pointer" }
! 
    use omp_lib
    integer :: a, b, c, p
    logical :: l
--- 1,6 ----
  ! { dg-do run }
  ! { dg-options "-fcray-pointer" }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
    use omp_lib
    integer :: a, b, c, p
    logical :: l
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  ! { dg-do run }
  ! { dg-additional-sources declare-target-2.f90 }
! 
  module declare_target_1_mod
    integer :: var_x, var_y, var_z
    !$omp declare target(var_x)
--- 1,6 ----
  ! { dg-do run }
  ! { dg-additional-sources declare-target-2.f90 }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module declare_target_1_mod
    integer :: var_x, var_y, var_z
    !$omp declare target(var_x)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 2,8 ****
  ! file compiled together with declare-target-1.f90
  ! to verify inter-CU module handling of omp declare target.
  ! { dg-do compile { target { lp64 && { ! lp64 } } } }
- 
  subroutine foo
    use declare_target_1_mod
  
--- 2,7 ----
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-indirect-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-indirect-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-indirect-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-indirect-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
  module m
  contains
    integer function foo ()
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
  contains
    integer function foo ()
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/declare-target-indirect-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
  module m
  contains
    integer function foo ()
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module m
  contains
    integer function foo ()
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/dep-uses-allocators.f90	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do compile }
+ ! { dg-warning "The specification of arguments to 'uses_allocators' at \\(1\\) where each item is of the form 'allocator\\(traits\\)' is deprecated since OpenMP 5.2; instead use 'uses_allocators\\(traits\\(trait\\): a1\\)' \\\[-Wdeprecated-openmp\\\]" "" { target *-*-* } 11 }
+ 
+ program test
+   use omp_lib
+   implicit none
+   integer(kind=omp_allocator_handle_kind) :: a1
+ 
+   type(omp_alloctrait), parameter :: trait(0) = [omp_alloctrait :: ]
+ 
+   !$omp target uses_allocators(omp_default_mem_alloc, a1(trait))
+   ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" "" { target *-*-* } .-1 }
+   block; end block
+ end program
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/depend-inoutset-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/depend-inoutset-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/depend-inoutset-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/depend-inoutset-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-additional-sources my-usleep.c }
! ! { dg-additional-options -Wno-complain-wrong-lang }
  
  program main
    use omp_lib
--- 1,5 ----
  ! { dg-additional-sources my-usleep.c }
! ! { dg-additional-options "-Wno-complain-wrong-lang -Wno-deprecated-openmp" }
  
  program main
    use omp_lib
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/doacross1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/doacross1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/doacross1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/doacross1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
    integer, parameter :: N = 256
    integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8)
    integer, save, volatile :: d, e
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
    integer, parameter :: N = 256
    integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8)
    integer, save, volatile :: d, e
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/doacross2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/doacross2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/doacross2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/doacross2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
    integer, parameter :: N = 256
    integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8), g(N/16,8,6)
    integer, save, volatile :: d, e
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
    integer, parameter :: N = 256
    integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8), g(N/16,8,6)
    integer, save, volatile :: d, e
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/doacross3.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/doacross3.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/doacross3.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/doacross3.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
    integer, parameter :: N = 256
    integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8), g(N/16,8,6)
    integer, save, volatile :: d, e
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
    integer, parameter :: N = 256
    integer, save :: a(N), b(N / 16, 8, 4), c(N / 32, 8, 8), g(N/16,8,6)
    integer, save, volatile :: d, e
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/is_device_ptr-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/is_device_ptr-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/is_device_ptr-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/is_device_ptr-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
! ! { dg-additional-options "-fdump-tree-original" }
! 
  ! PR fortran/98476
  
  program abc
--- 1,4 ----
! ! { dg-additional-options "-fdump-tree-original -Wno-deprecated-openmp" }
  ! PR fortran/98476
  
  program abc
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/is_device_ptr-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/is_device_ptr-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/is_device_ptr-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/is_device_ptr-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,7 ****
! ! { dg-additional-options "-fdump-tree-original" }
  !
  ! Since OpenMP 5.1, non-TYPE(c_ptr) arguments to is_device_ptr
! ! map to has_device_ptr - check this!
  !
  ! PR fortran/105318
  !
--- 1,7 ----
! ! { dg-additional-options "-fdump-tree-original -Wno-deprecated-openmp" }
  !
  ! Since OpenMP 5.1, non-TYPE(c_ptr) arguments to is_device_ptr
! ! map to has_device_addr - check this!
  !
  ! PR fortran/105318
  !
*************** contains
*** 73,79 ****
      if (false_) then
        !$omp target device(omp_invalid_device)
        !$omp end target
!     end if 
    end subroutine
  
  end module m
--- 73,79 ----
      if (false_) then
        !$omp target device(omp_invalid_device)
        !$omp end target
!     end if
    end subroutine
  
  end module m
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/lib1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/lib1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/lib1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/lib1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,6 ****
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-declarations" }
! 
    use omp_lib
  
    double precision :: d, e
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-declarations -Wno-deprecated-openmp" }
    use omp_lib
  
    double precision :: d, e
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/lib2.f gcc-16-20251214/libgomp/testsuite/libgomp.fortran/lib2.f
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/lib2.f	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/lib2.f	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  C { dg-do run }
! C { dg-additional-options "-Wno-deprecated-declarations" }
  
        USE OMP_LIB
  
--- 1,5 ----
  C { dg-do run }
! C { dg-additional-options "-Wno-deprecated-declarations -Wno-deprecated-openmp" }
  
        USE OMP_LIB
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/lib3.f gcc-16-20251214/libgomp/testsuite/libgomp.fortran/lib3.f
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/lib3.f	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/lib3.f	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
! C { dg-do run }
! 
        INCLUDE "omp_lib.h"
  
        DOUBLE PRECISION :: D, E
--- 1,5 ----
! ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
        INCLUDE "omp_lib.h"
  
        DOUBLE PRECISION :: D, E
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! ! 
  ! PR fortran/96668
  
  module m
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! PR fortran/96668
  
  module m
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-atv-seq-dep.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-atv-seq-dep.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-atv-seq-dep.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-atv-seq-dep.f90	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,7 ----
+ ! { dg-do run }
+ 
+ program omp_atv_seq_dep
+   use omp_lib ! { dg-warning "Using parameter 'omp_atv_sequential' declared at \\(1\\) is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   integer :: x
+   x = omp_atv_sequential
+ end program
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-contended-dep.f90	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,8 ----
+ ! { dg-do compile }
+ 
+ program hint_contended_dep
+   use omp_lib ! { dg-warning "Using parameter 'omp_lock_hint_contended' declared at \\(1\\) is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   integer (kind=omp_lock_kind) :: lock
+   call omp_init_lock_with_hint(lock, omp_lock_hint_contended)
+   call omp_destroy_lock(lock)
+ end program
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-none-dep.f90	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,8 ----
+ ! { dg-do compile }
+ 
+ program hint_none_dep
+   use omp_lib ! { dg-warning "Using parameter 'omp_lock_hint_none' declared at \\(1\\) is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   integer (kind=omp_lock_kind) :: lock
+   call omp_init_lock_with_hint(lock, omp_lock_hint_none)
+   call omp_destroy_lock(lock)
+ end program
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-speculative-dep.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-speculative-dep.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-speculative-dep.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-speculative-dep.f90	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,8 ----
+ ! { dg-do compile }
+ 
+ program hint_speculative_dep
+   use omp_lib ! { dg-warning "Using parameter 'omp_lock_hint_speculative' declared at \\(1\\) is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   integer (kind=omp_lock_kind) :: lock
+   call omp_init_lock_with_hint(lock, omp_lock_hint_speculative)
+   call omp_destroy_lock(lock)
+ end program
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-uncontended-dep.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-uncontended-dep.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp-lock-hint-uncontended-dep.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp-lock-hint-uncontended-dep.f90	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,8 ----
+ ! { dg-do compile }
+ 
+ program hint_uncontended_dep
+   use omp_lib ! { dg-warning "Using parameter 'omp_lock_hint_uncontended' declared at \\(1\\) is deprecated \\\[-Wdeprecated-declarations\\\]" }
+   integer (kind=omp_lock_kind) :: lock
+   call omp_init_lock_with_hint(lock, omp_lock_hint_uncontended)
+   call omp_destroy_lock(lock)
+ end program
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp_parse2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp_parse2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/omp_parse2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/omp_parse2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  use omp_lib
    call test_master
    call test_critical
*************** contains
*** 14,27 ****
  !$omp master
      i = .true.
      j = omp_get_thread_num () .eq. 0
! !$omp endmaster
  !$omp end parallel
      if (.not. (i .or. j)) stop 1
    end subroutine test_master
  
    subroutine test_critical_1 (i, j)
      integer :: i, j
! !$omp critical(critical_foo) 
      i = i + 1
  !$omp end critical (critical_foo)
  !$omp critical
--- 15,28 ----
  !$omp master
      i = .true.
      j = omp_get_thread_num () .eq. 0
! !$omp end master
  !$omp end parallel
      if (.not. (i .or. j)) stop 1
    end subroutine test_master
  
    subroutine test_critical_1 (i, j)
      integer :: i, j
! !$omp critical(critical_foo)
      i = i + 1
  !$omp end critical (critical_foo)
  !$omp critical
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/openmp_version-1.f gcc-16-20251214/libgomp/testsuite/libgomp.fortran/openmp_version-1.f
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/openmp_version-1.f	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/openmp_version-1.f	Sun Dec 14 22:32:16 2025
***************
*** 4,9 ****
        implicit none
        include "omp_lib.h"
  
!       if (openmp_version .ne. 201511) stop 1;
  
        end program main
--- 4,9 ----
        implicit none
        include "omp_lib.h"
  
!       if (openmp_version .ne. 202111) stop 1;
  
        end program main
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/openmp_version-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/openmp_version-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/openmp_version-2.f90	Sun Dec 14 22:32:16 2025
*************** program main
*** 4,9 ****
    use omp_lib
    implicit none
  
!   if (openmp_version .ne. 201511) stop 1;
  
  end program main
--- 4,9 ----
    use omp_lib
    implicit none
  
!   if (openmp_version .ne. 202111) stop 1;
  
  end program main
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/parallel-master.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/parallel-master.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/parallel-master.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/parallel-master.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
! ! { dg-additional-options "-fdump-tree-original" }
  program main
    use omp_lib
    implicit none (type, external)
--- 1,4 ----
! ! { dg-additional-options "-fdump-tree-original -Wno-deprecated-openmp" }
  program main
    use omp_lib
    implicit none (type, external)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/pointer2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/pointer2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/pointer2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/pointer2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
--- 1,6 ----
  ! { dg-do run }
  ! { dg-require-effective-target tls_runtime }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
    integer, pointer, save :: thr(:)
  !$omp threadprivate (thr)
    integer, target :: s(3), t(3), u(3)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/pr84418-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/pr84418-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/pr84418-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/pr84418-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 20,26 ****
  contains
    real function foo (x, y)
      real :: x, y
!     !$omp declare simd linear (ref (x, y))
      foo = x + y
    end function
  end
--- 20,26 ----
  contains
    real function foo (x, y)
      real :: x, y
!     !$omp declare simd linear (ref (x, y)) ! { dg-warning "Specification of the list items as arguments to the modifiers at \\(1\\) is deprecated since OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" }
      foo = x + y
    end function
  end
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/pr84418-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/pr84418-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/pr84418-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/pr84418-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 3,9 ****
  ! { dg-options "-fno-inline" }
  ! { dg-additional-options "-msse2" { target sse2_runtime } }
  ! { dg-additional-options "-mavx" { target avx_runtime } }
! 
    type p
      integer :: i, j
    end type
--- 3,9 ----
  ! { dg-options "-fno-inline" }
  ! { dg-additional-options "-msse2" { target sse2_runtime } }
  ! { dg-additional-options "-mavx" { target avx_runtime } }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
    type p
      integer :: i, j
    end type
***************
*** 25,31 ****
    do i = 1, 1024
      if (c(i).ne.(6 * i)) stop 1
    end do
! contains  
    function foo (x, y)
      type (p) :: x
      integer :: y(4), foo
--- 25,31 ----
    do i = 1, 1024
      if (c(i).ne.(6 * i)) stop 1
    end do
! contains
    function foo (x, y)
      type (p) :: x
      integer :: y(4), foo
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/reduction1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/reduction1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/reduction1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/reduction1.f90	Sun Dec 14 22:32:16 2025
***************
*** 77,83 ****
    cnt = -1
  
  !$omp parallel num_threads (3) private (n) reduction (.or.:v) &
! !$omp & reduction (-:i, ia, r, ra, d, da, c, ca)
  !$ if (i .ne. 0 .or. any (ia .ne. 0)) v = .true.
  !$ if (r .ne. 0 .or. any (ra .ne. 0)) v = .true.
  !$ if (d .ne. 0 .or. any (da .ne. 0)) v = .true.
--- 77,83 ----
    cnt = -1
  
  !$omp parallel num_threads (3) private (n) reduction (.or.:v) &
! !$omp & reduction (-:i, ia, r, ra, d, da, c, ca) ! { dg-warning "'-' operator at \\(1\\) for reductions deprecated in OpenMP 5.2 \\\[-Wdeprecated-openmp\\\]" }
  !$ if (i .ne. 0 .or. any (ia .ne. 0)) v = .true.
  !$ if (r .ne. 0 .or. any (ra .ne. 0)) v = .true.
  !$ if (d .ne. 0 .or. any (da .ne. 0)) v = .true.
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/reduction6.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/reduction6.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/reduction6.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/reduction6.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
    integer, dimension (6, 6) :: a
    character (36) :: c
    integer nthreads
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
    integer, dimension (6, 6) :: a
    character (36) :: c
    integer nthreads
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/self_maps.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/self_maps.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/self_maps.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/self_maps.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! Basic test whether self_maps work
+ ! { dg-require-effective-target omp_usm }
  
  module m
    !$omp requires self_maps
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/target-firstprivate-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/target-firstprivate-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/target-firstprivate-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/target-firstprivate-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! PR fortran/104949
! 
  implicit none (type,external)
  integer, allocatable :: A(:)
  A = [1,2,3,4,5,6]
--- 1,5 ----
  ! PR fortran/104949
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  implicit none (type,external)
  integer, allocatable :: A(:)
  A = [1,2,3,4,5,6]
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/udr11.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/udr11.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/udr11.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/udr11.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
  module udr11
    type dt
      integer :: x = 0
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module udr11
    type dt
      integer :: x = 0
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Comprehensive run-time test for use_device_addr
  !
  ! Differs from use_device_addr-2.f90 by using a 8-byte variable (c_double)
*************** contains
*** 77,83 ****
        real(c_double), target :: from_r(:), to_r(:)
        ! The extra function is needed as is_device_ptr
        ! requires non-value, non-pointer dummy arguments
- 
        !$omp target is_device_ptr(from_r, to_r)
        call copy3_scalar_int(from_r(1), to_r(1))
        !$omp end target
--- 78,83 ----
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Comprehensive run-time test for use_device_addr
  !
  ! Differs from use_device_addr-1.f90 by using a 4-byte variable (c_float)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-3.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-3.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-3.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-3.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
  ! Comprehensive run-time test for use_device_addr
  !
  ! Tests array with array descriptor
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Comprehensive run-time test for use_device_addr
  !
  ! Tests array with array descriptor
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-4.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-4.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-4.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-4.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
  ! Comprehensive run-time test for use_device_addr
  !
  ! Tests array with array descriptor
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Comprehensive run-time test for use_device_addr
  !
  ! Tests array with array descriptor
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-5.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-5.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_addr-5.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_addr-5.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,3 ****
--- 1,4 ----
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  program main
    use omp_lib
    implicit none
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! 
  module target_procs
    use iso_c_binding
    implicit none (type, external)
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  module target_procs
    use iso_c_binding
    implicit none (type, external)
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-3.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-3.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-3.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-3.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! PR fortran/98858
! !
  ! Assumed-size array with use_device_ptr()
  !
  program test_use_device_ptr
--- 1,5 ----
  ! PR fortran/98858
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Assumed-size array with use_device_ptr()
  !
  program test_use_device_ptr
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-4.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-4.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-4.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-4.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do run }
! !
  ! Test user_device_ptr nested within another parallel
  ! construct
  !
--- 1,5 ----
  ! { dg-do run }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Test user_device_ptr nested within another parallel
  ! construct
  !
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Test whether use_device_ptr properly handles OPTIONAL arguments
  ! (Only case of present arguments is tested)
  program test_it
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Check whether absent optional arguments are properly
  ! handled with use_device_{addr,ptr}.
  program main
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/use_device_ptr-optional-3.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do run }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Check whether absent optional arguments are properly
  ! handled with use_device_{addr,ptr}.
  program main
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/uses_allocators-7.f90	Sun Dec 14 22:32:16 2025
***************
*** 0 ****
--- 1,58 ----
+ ! { dg-additional-options "-fdump-tree-gimple" }
+ 
+ program main
+   use iso_c_binding
+   use omp_lib
+   implicit none (type, external)
+   integer :: x, xbuf(10)
+   integer(c_intptr_t) :: iptr
+   integer(omp_allocator_handle_kind) :: my_alloc
+   type(omp_alloctrait), parameter :: trait(*) = [omp_alloctrait(omp_atk_alignment, 128)]
+ 
+   !$omp target uses_allocators(omp_low_lat_mem_alloc) map(tofrom: x, xbuf) defaultmap(none)
+     !$omp parallel allocate(allocator(omp_low_lat_mem_alloc), align(128): x, xbuf) if(.false.) firstprivate(x, xbuf)
+       if (mod (TRANSFER (loc(x), iptr), 128) /= 0) &
+         stop 1
+       if (mod (TRANSFER (loc(xbuf), iptr), 128) /= 0) &
+         stop 2
+     !$omp end parallel
+   !$omp end target
+ 
+   my_alloc = transfer(int(z'ABCD', omp_allocator_handle_kind), my_alloc)
+ 
+   !$omp target uses_allocators(traits(trait): my_alloc) defaultmap(none) map(tofrom: x, xbuf) 
+     !$omp parallel allocate(allocator(my_alloc): x, xbuf) if(.false.) firstprivate(x, xbuf)
+       if (mod (TRANSFER (loc(x), iptr), 128) /= 0) &
+         stop 3
+       if (mod (TRANSFER (loc(xbuf), iptr), 128) /= 0) &
+         stop 4
+     !$omp end parallel
+   !$omp end target
+ 
+   if (transfer(my_alloc, 0_omp_allocator_handle_kind) /= int(z'ABCD', omp_allocator_handle_kind)) &
+     stop 5
+ 
+   ! The following creates an allocator with empty traits + default mem space.
+   !$omp target uses_allocators(my_alloc) map(tofrom: x, xbuf) defaultmap(none)
+     !$omp parallel allocate(allocator(my_alloc), align(128): x, xbuf) if(.false.) firstprivate(x, xbuf)
+       if (mod (TRANSFER (loc(x), iptr), 128) /= 0) &
+         stop 6
+       if (mod (TRANSFER (loc(xbuf), iptr), 128) /= 0) &
+         stop 7
+     !$omp end parallel
+   !$omp end target
+ 
+   if (transfer(my_alloc, 0_omp_allocator_handle_kind) /= int(z'ABCD', omp_allocator_handle_kind)) &
+     stop 8
+ end
+ 
+ 
+ ! FIXME ENABLE: 'dg FIXME final' -> 'dg-final'
+ ! { dg  FIXME  final { scan-tree-dump-times "#pragma omp target .*private\\(my_alloc\\).*uses_allocators\\(my_alloc: memspace\\(\\), traits\\(trait\\)\\)" 1 "gimple" } }
+ ! { dg  FIXME  final { scan-tree-dump-times "#pragma omp target .*private\\(my_alloc\\).*uses_allocators\\(my_alloc: memspace\\(\\), traits\\(\\)\\)" 1 "gimple" } }
+ 
+ ! FIXME ENABLE code above for "gimple" once it has been implemented:
+ ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" "" { target *-*-* } 23 }
+ ! { dg-message "sorry, unimplemented: 'uses_allocators' clause with traits and memory spaces" "" { target *-*-* } 36 }
+ ! { dg-bogus "'my_alloc' not specified in enclosing 'target'" "bogus issue because clause is ignored" { xfail *-*-* } 24 }
+ ! { dg-bogus "'my_alloc' not specified in enclosing 'target'" "bogus issue because clause is ignored" { xfail *-*-* } 37 }
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/uses_allocators_1.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,4 ****
--- 1,5 ----
  ! { dg-do compile }
+ ! { dg-additional-options "-Wno-deprecated-openmp" }
  
  subroutine test
    use omp_lib
*************** subroutine traits_checks
*** 166,168 ****
--- 167,184 ----
    !$omp target uses_allocators(a1 (trait3))  ! { dg-error "Traits array 'trait3' in USES_ALLOCATORS .1. must be a one-dimensional named constant array of type 'omp_alloctrait'" }
    block; end block
  end
+ 
+ subroutine null_allocator_ok
+   use omp_lib
+   implicit none
+   integer(omp_allocator_handle_kind) ::  my, my2
+   integer(omp_allocator_handle_kind), parameter ::  my3 = -9
+   !$omp target uses_allocators(my, my2) ! OK -> default settings
+   block; end block
+   !$omp target uses_allocators(my3) ! { dg-error "'my3' at .1. in USES_ALLOCATORS must either a variable or a predefined allocator" }
+   block; end block
+   !$omp target uses_allocators(omp_default_mem_alloc, omp_null_allocator) ! OK -> omp_null_allocator
+   block; end block
+   !$omp target uses_allocators(my, omp_null_allocator) firstprivate(my) ! { dg-error "Symbol 'my' present on both data and map clauses" }
+   block; end block
+ end
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90 gcc-16-20251214/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90
*** gcc-16-20251207/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.fortran/uses_allocators_2.f90	Sun Dec 14 22:32:16 2025
***************
*** 1,5 ****
  ! { dg-do compile }
! 
  ! Minimal test for valid code:
  ! - predefined allocators do not need any special treatment in uses_allocators
  !   (as 'requires dynamic_allocators' is the default).
--- 1,5 ----
  ! { dg-do compile }
! ! { dg-additional-options "-Wno-deprecated-openmp" }
  ! Minimal test for valid code:
  ! - predefined allocators do not need any special treatment in uses_allocators
  !   (as 'requires dynamic_allocators' is the default).
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.graphite/force-parallel-1.c gcc-16-20251214/libgomp/testsuite/libgomp.graphite/force-parallel-1.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.graphite/force-parallel-1.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.graphite/force-parallel-1.c	Sun Dec 14 22:32:16 2025
*************** void abort (void);
*** 2,8 ****
  
  int x[10000000];
  
! void parloop (int N)
  {
    int i;
  
--- 2,8 ----
  
  int x[10000000];
  
! void __attribute__((noipa)) parloop (int N)
  {
    int i;
  
diff -Nrcpad gcc-16-20251207/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c gcc-16-20251214/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c
*** gcc-16-20251207/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libgomp/testsuite/libgomp.oacc-c-c++-common/vred2d-128.c	Sun Dec 14 22:32:16 2025
***************
*** 3,8 ****
--- 3,9 ----
  /* { dg-additional-options "-DEXPENSIVE" { target run_expensive_tests } } */
  
  /* { dg-additional-options -Wuninitialized } */
+ // { dg-additional-options "-Wno-deprecated-openmp" }
  
  #include <assert.h>
  
diff -Nrcpad gcc-16-20251207/libitm/ChangeLog gcc-16-20251214/libitm/ChangeLog
*** gcc-16-20251207/libitm/ChangeLog	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libitm/ChangeLog	Sun Dec 14 22:32:17 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-12-12  mengqinggang  <mengqinggang@loongson.cn>
+ 	    Jiajie Chen  <c@jia.je>
+ 
+ 	* config/loongarch/asm.h: Fix ilp32 detection.
+ 
  2025-11-19  Martin Liska  <martin.liska@hey.com>
  
  	* acinclude.m4:: Add detection for wild linker.
diff -Nrcpad gcc-16-20251207/libitm/config/loongarch/asm.h gcc-16-20251214/libitm/config/loongarch/asm.h
*** gcc-16-20251207/libitm/config/loongarch/asm.h	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libitm/config/loongarch/asm.h	Sun Dec 14 22:32:17 2025
***************
*** 30,36 ****
  #  define GPR_S st.d
  #  define SZ_GPR 8
  #  define ADDSP(si)   addi.d  $sp, $sp, si
! #elif defined(__loongarch64_ilp32)
  #  define GPR_L ld.w
  #  define GPR_S st.w
  #  define SZ_GPR 4
--- 30,36 ----
  #  define GPR_S st.d
  #  define SZ_GPR 8
  #  define ADDSP(si)   addi.d  $sp, $sp, si
! #elif defined(__loongarch_ilp32)
  #  define GPR_L ld.w
  #  define GPR_S st.w
  #  define SZ_GPR 4
diff -Nrcpad gcc-16-20251207/libphobos/ChangeLog gcc-16-20251214/libphobos/ChangeLog
*** gcc-16-20251207/libphobos/ChangeLog	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libphobos/ChangeLog	Sun Dec 14 22:32:17 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-12-09  John Ericson  <git@johnericson.me>
+ 
+ 	* configure: Regenerate.
+ 	* m4/druntime/os.m4: Use AC_MSG_ERROR, not private as_fn_error
+ 
  2025-11-03  Sam James  <sam@gentoo.org>
  
  	* configure: Regenerate.
diff -Nrcpad gcc-16-20251207/libphobos/configure gcc-16-20251214/libphobos/configure
*** gcc-16-20251207/libphobos/configure	Sun Dec  7 22:32:21 2025
--- gcc-16-20251214/libphobos/configure	Sun Dec 14 22:32:20 2025
*************** case $d_thread_model in
*** 14920,14926 ****
      # TODO: These targets need porting.
      dce|mipssde|rtems|tpf|vxworks)
  	    DCFG_THREAD_MODEL="Single" ;;
!     *)	    as_fn_error "Thread implementation '$d_thread_model' not recognised" "$LINENO" 5 ;;
  esac
  
  
--- 14920,14926 ----
      # TODO: These targets need porting.
      dce|mipssde|rtems|tpf|vxworks)
  	    DCFG_THREAD_MODEL="Single" ;;
!     *)	    as_fn_error $? "Thread implementation '$d_thread_model' not recognised" "$LINENO" 5 ;;
  esac
  
  
diff -Nrcpad gcc-16-20251207/libphobos/m4/druntime/os.m4 gcc-16-20251214/libphobos/m4/druntime/os.m4
*** gcc-16-20251207/libphobos/m4/druntime/os.m4	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libphobos/m4/druntime/os.m4	Sun Dec 14 22:32:17 2025
*************** case $1 in
*** 32,38 ****
      # TODO: These targets need porting.
      dce|mipssde|rtems|tpf|vxworks)
  	    DCFG_THREAD_MODEL="Single" ;;
!     *)	    as_fn_error "Thread implementation '$1' not recognised" "$LINENO" 5 ;;
  esac
  AC_SUBST(DCFG_THREAD_MODEL)
  ])
--- 32,38 ----
      # TODO: These targets need porting.
      dce|mipssde|rtems|tpf|vxworks)
  	    DCFG_THREAD_MODEL="Single" ;;
!     *)	    AC_MSG_ERROR([Thread implementation '$1' not recognised]) ;;
  esac
  AC_SUBST(DCFG_THREAD_MODEL)
  ])
diff -Nrcpad gcc-16-20251207/libsanitizer/ChangeLog gcc-16-20251214/libsanitizer/ChangeLog
*** gcc-16-20251207/libsanitizer/ChangeLog	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libsanitizer/ChangeLog	Sun Dec 14 22:32:17 2025
***************
*** 1,3 ****
--- 1,7 ----
+ 2025-12-10  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* LOCAL_PATCHES: Update.
+ 
  2025-12-02  Jakub Jelinek  <jakub@redhat.com>
  
  	* LOCAL_PATCHES: Update.
diff -Nrcpad gcc-16-20251207/libsanitizer/LOCAL_PATCHES gcc-16-20251214/libsanitizer/LOCAL_PATCHES
*** gcc-16-20251207/libsanitizer/LOCAL_PATCHES	Sun Dec  7 22:32:17 2025
--- gcc-16-20251214/libsanitizer/LOCAL_PATCHES	Sun Dec 14 22:32:17 2025
***************
*** 1,2 ****
--- 1,3 ----
  r16-5832-g89130a50108077e81a11a60007de6830c9f23b34
  r16-5839-g2249f6143717d9d5d6801e25867a2f826b1132de
+ r16-6008-g203d4dd09ba83121e447ce93ba98175b68d955f6
diff -Nrcpad gcc-16-20251207/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h gcc-16-20251214/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h
*** gcc-16-20251207/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libsanitizer/sanitizer_common/sanitizer_redefine_builtins.h	Sun Dec 14 22:32:17 2025
***************
*** 15,21 ****
  #    define SANITIZER_REDEFINE_BUILTINS_H
  
  // The asm hack only works with GCC and Clang.
! #    if !defined(_WIN32) && !defined(_AIX) && !defined(__APPLE__)
  
  asm(R"(
      .set memcpy, __sanitizer_internal_memcpy
--- 15,22 ----
  #    define SANITIZER_REDEFINE_BUILTINS_H
  
  // The asm hack only works with GCC and Clang.
! #if !defined(_WIN32) && !defined(_AIX) && !defined(__APPLE__) &&               \
!     defined(HAVE_AS_SYM_ASSIGN)
  
  asm(R"(
      .set memcpy, __sanitizer_internal_memcpy
diff -Nrcpad gcc-16-20251207/libstdc++-v3/ChangeLog gcc-16-20251214/libstdc++-v3/ChangeLog
*** gcc-16-20251207/libstdc++-v3/ChangeLog	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/ChangeLog	Sun Dec 14 22:32:17 2025
***************
*** 1,3 ****
--- 1,362 ----
+ 2025-12-12  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (submdspan): Fix missing '::template'.
+ 
+ 2025-12-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR libstdc++/121114
+ 	* include/bits/version.def: Implement C++26 P3378R2 - constexpr
+ 	exception types.
+ 	(constexpr_exceptions): Change value from 1 to 202502, remove
+ 	no_stdname and TODO comments.
+ 	* include/bits/version.h: Regenerate.
+ 	* src/c++11/cow-stdexcept.cc (__cow_string(const char*)): New
+ 	ctor.
+ 	(__cow_string::c_str()): New method.
+ 	* config/abi/pre/gnu.ver (GLIBCXX_3.4.35): Export 8 __cow_string
+ 	symbols.
+ 	* include/bits/new_except.h: New file.
+ 	* include/bits/new_throw.h: New file.
+ 	* include/bits/stdexcept_throw.h: New file.
+ 	* include/bits/stdexcept_throwdef.h: New file.
+ 	* include/bits/stdexcept_throwfwd.h: New file.
+ 	* include/std/stdexcept: Include bits/stdexcept_except.h and move
+ 	everything after <string> include except for std::range_error into
+ 	include/bits/stdexcept_except.h.
+ 	(std::range_error): If __cpp_lib_constexpr_exceptions >= 202502L
+ 	make all cdtors and methods constexpr.
+ 	* include/bits/stdexcept_except.h: New file.
+ 	* include/std/optional (__glibcxx_want_constexpr_exceptions): Define
+ 	before including bits/version.h.
+ 	(bad_optional_access::what): Make constexpr for
+ 	__cpp_lib_constexpr_exceptions >= 202502L.
+ 	(__throw_bad_optional_access): Likewise.
+ 	* include/std/expected (__glibcxx_want_constexpr_exceptions): Define
+ 	before including bits/version.h.
+ 	(bad_expected_access): Make cdtors and all methods constexpr for
+ 	__cpp_lib_constexpr_exceptions >= 202502L.
+ 	* include/std/format (__glibcxx_want_constexpr_exceptions): Define
+ 	before including bits/version.h.
+ 	(_GLIBCXX_CONSTEXPR_FORMAT_ERROR): Define and undef later.
+ 	(format_error): Use _GLIBCXX_CONSTEXPR_FORMAT_ERROR on ctors.
+ 	* include/std/variant (__glibcxx_want_constexpr_exceptions): Define
+ 	before including bits/version.h.
+ 	(_GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS): Define and undef later.
+ 	(bad_variant_access): Use it on ctors and what() method.
+ 	(__throw_bad_variant_access): Use it here too.
+ 	* testsuite/18_support/exception/version.cc: Adjust expected
+ 	__cpp_lib_constexpr_exceptions value.
+ 	* testsuite/19_diagnostics/runtime_error/constexpr.cc: New test.
+ 	* testsuite/19_diagnostics/headers/stdexcept/version.cc: New test.
+ 	* testsuite/19_diagnostics/logic_error/constexpr.cc: New test.
+ 	* testsuite/20_util/expected/observers.cc (test_value_throw): Change
+ 	return type to bool from void, return true at the end, add test
+ 	to dereference what() first character.  Make it constexpr for
+ 	__cpp_lib_constexpr_exceptions >= 202502L and add static_assert.
+ 	* testsuite/20_util/expected/version.cc: Add tests for
+ 	__cpp_lib_constexpr_exceptions value.
+ 	* testsuite/20_util/variant/constexpr.cc: For
+ 	__cpp_lib_constexpr_exceptions >= 202502L include <string>.
+ 	(test_get): New function if __cpp_lib_constexpr_exceptions >= 202502L,
+ 	assert calling it is true.
+ 	* testsuite/20_util/variant/version.cc: Add tests for
+ 	__cpp_lib_constexpr_exceptions value.
+ 	* testsuite/20_util/optional/constexpr/observers/3.cc: Include
+ 	testsuite_hooks.h.
+ 	(eat, test01): New functions.  Assert test01() is true.
+ 	* testsuite/20_util/optional/version.cc: Add tests for
+ 	__cpp_lib_constexpr_exceptions value.
+ 	* include/std/future: Add #include <bits/functexcept.h>.
+ 	* include/std/shared_mutex: Include <bits/new_throw.h>.
+ 	* include/std/flat_map: Include <bits/stdexcept_throw.h> instead of
+ 	<bits/functexcept.h>.
+ 	* include/std/syncstream: Remove <bits/functexcept.h> include.
+ 	* include/std/flat_set: Likewise.
+ 	* include/std/bitset: Include <bits/stdexcept_throw.h> instead of
+ 	<bits/functexcept.h>.
+ 	* include/std/string_view: Don't include <bits/functexcept.h>, include
+ 	<bits/stdexcept_throw.h> early if __glibcxx_exc_in_string is not
+ 	defined and include <bits/stdexcept_throw.h> at the end of
+ 	the header again if __glibcxx_exc_in_string is 2 and C++26 constexpr
+ 	exceptions are enabled.
+ 	(__glibcxx_exc_in_string): Define if __glibcxx_exc_in_string wasn't
+ 	defined before including <bits/stdexcept_throw.h>.
+ 	* include/std/array: Include <bits/stdexcept_throw.h> instead of
+ 	<bits/functexcept.h>.
+ 	* include/std/inplace_vector: Likewise.
+ 	* include/std/string: Include <bits/stdexcept_except.h> and
+ 	<bits/stdexcept_throw.h> after bits/basic_string.tcc include if
+ 	C++26 constexpr exceptions are enabled and include
+ 	<bits/stdexcept_throw.h> instead of <bits/functexcept.h> early.
+ 	(__glibcxx_exc_in_string): Define early to 1, undefine at the end.
+ 	* include/std/deque: Include <bits/stdexcept_throw.h>.
+ 	* include/bits/new_allocator.h: Include <bits/new_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* include/bits/stl_algobase.h: Remove <bits/functexcept.h> include.
+ 	* include/bits/stl_vector.h: Include <bits/stdexcept_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* include/bits/memory_resource.h: Include <bits/new_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* include/bits/functexcept.h: Guard everything after includes with
+ 	#if _GLIBCXX_HOSTED.
+ 	(__throw_bad_alloc, __throw_bad_array_new_length,  __throw_logic_error,
+ 	__throw_domain_error, __throw_invalid_argument, __throw_length_error,
+ 	__throw_out_of_range, __throw_out_of_range_fmt, __throw_runtime_error,
+ 	__throw_overflow_error, __throw_underflow_error): Move declarations to
+ 	other headers - <bits/new_throw.h> and <bits/stdexcept_throwfwd.h>.
+ 	* include/bits/stl_map.h: Include <bits/stdexcept_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* include/bits/hashtable_policy.h: Include <bits/stdexcept_throw.h>
+ 	instead of <bits/functexcept.h>.
+ 	* include/bits/formatfwd.h (std::__throw_format_error): Remove
+ 	declaration.
+ 	* include/bits/specfun.h: Include <bits/stdexcept_throw.h> instead of
+ 	<bits/functexcept.h>.
+ 	* include/bits/basic_ios.h: Include <bits/functexcept.h>.
+ 	* include/bits/locale_classes.h: Likewise.
+ 	* include/tr1/cmath: Include <bits/stdexcept_throw.h> instead of
+ 	<bits/functexcept.h>.
+ 	* include/tr1/memory: Remove <bits/functexcept.h> include.
+ 	* include/tr1/array: Include <bits/stdexcept_throw.h>.
+ 	* include/ext/vstring_util.h: Include <bits/stdexcept_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* include/ext/bitmap_allocator.h: Include <bits/new_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* include/ext/mt_allocator.h: Likewise.
+ 	* include/ext/malloc_allocator.h: Likewise.
+ 	* include/ext/debug_allocator.h: Include <bits/stdexcept_throw.h>
+ 	instead of <bits/functexcept.h>.
+ 	* include/ext/concurrence.h: Include <bits/exception_defines.h>
+ 	instead of <bits/functexcept.h>.
+ 	* include/ext/throw_allocator.h: Include <bits/new_throw.h> and
+ 	<bits/stdexcept_throw.h> instead of <bits/functexcept.h>.
+ 	* include/ext/string_conversions.h: Include <bits/stdexcept_throw.h>
+ 	instead of <bits/functexcept.h>.
+ 	* include/ext/pool_allocator.h: Include <bits/new_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* include/ext/ropeimpl.h: Include <bits/stdexcept_throw.h> instead of
+ 	<bits/functexcept.h>.
+ 	* include/tr2/dynamic_bitset: Likewise.
+ 	* include/experimental/optional: Include <bits/exception_defines.h>
+ 	instead of <bits/functexcept.h>.
+ 	* include/Makefile.am (bits_freestanding): Add
+ 	${bits_srcdir}/{new,stdexcept}_{except,throw}.h
+ 	and ${bits_srcdir}/stdexcept_throw{fwd,def}.h.
+ 	* include/Makefile.in: Regenerate.
+ 	* src/c++17/floating_from_chars.cc: Remove <bits/functexcept.h>
+ 	include.
+ 	* src/c++11/regex.cc: Likewise.
+ 	* src/c++11/functexcept.cc: Likewise.
+ 	* src/c++11/snprintf_lite.cc: Include <bits/stdexcept_throw.h> instead
+ 	of <bits/functexcept.h>.
+ 	* src/c++11/thread.cc: Include <bits/functexcept.h>.
+ 	* testsuite/util/testsuite_hooks.h: Include <bits/stdexcept_throw.h>
+ 	instead of <bits/functexcept.h>.
+ 	* testsuite/util/io/verified_cmd_line_input.cc: Include
+ 	<bits/exception_defines.h> instead of <bits/functexcept.h>.
+ 	* testsuite/20_util/allocator/105975.cc: Expect different diagnostics
+ 	for C++26.
+ 	* testsuite/23_containers/inplace_vector/access/capacity.cc: Remove
+ 	#error, guard if consteval { return; } with
+ 	#ifndef __cpp_lib_constexpr_exceptions.
+ 	* testsuite/23_containers/inplace_vector/access/elem.cc: Likewise.
+ 	* testsuite/23_containers/inplace_vector/cons/1.cc: Likewise.
+ 	* testsuite/23_containers/inplace_vector/cons/from_range.cc: Likewise.
+ 	* testsuite/23_containers/inplace_vector/modifiers/single_insert.cc:
+ 	Likewise.
+ 	* testsuite/23_containers/inplace_vector/modifiers/assign.cc:
+ 	Likewise.
+ 	* testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc:
+ 	Likewise.
+ 	* libsupc++/new: Include <bits/new_except.h>.
+ 	(std::bad_alloc, std::bad_array_new_length): Move defintion to
+ 	<bits/new_except.h>.
+ 
+ 2025-12-11  Jason Merrill  <jason@redhat.com>
+ 
+ 	* testsuite/Makefile.am (CLEANFILES): Add gcm.cache.
+ 	* testsuite/Makefile.in: Regenerate.
+ 	* testsuite/lib/dg-options.exp (add_options_for_no_pch): Also add
+ 	-fno-modules.
+ 	* testsuite/lib/libstdc++.exp (v3_std_list): Handle "modules" std.
+ 	(v3_modules_std): New global.
+ 	(v3-build_support): Build gcms for bits/stdc++.h, std, and
+ 	std.compat.
+ 
+ 2025-12-11  Yuao Ma  <c8ef@outlook.com>
+ 
+ 	* include/bits/version.def: Add FTM.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/flat_set: Add constexpr.
+ 	* testsuite/23_containers/flat_multiset/1.cc: Add constexpr test.
+ 	* testsuite/23_containers/flat_set/1.cc: Add constexpr test.
+ 
+ 2025-12-09  John Ericson  <git@johnericson.me>
+ 
+ 	* acinclude.m4: Use GCC_AC_THREAD_MODEL instead, via AC_REQUIRE
+ 	* configure: Regenerate.
+ 
+ 2025-12-09  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/version.h: Regenerate.
+ 
+ 2025-12-09  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/bits/version.def (padded_layouts): Set to 202403.
+ 	(submdspan): Set to 202411 add dependency.
+ 	* include/bits/version.h: Regenerate.
+ 
+ 2025-12-09  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/110352
+ 	* include/std/mdspan
+ 	(__mdspan::_SubMdspanMapping<_LayoutSide::__right, true>): Define.
+ 	(layout_right_padded::submdspan_mapping): New friend function.
+ 	* testsuite/23_containers/mdspan/submdspan/selections/right_padded.cc:
+ 	Instantiate tests for layout_right_padded.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc:
+ 	Ditto.
+ 
+ 2025-12-09  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/110352
+ 	* include/std/mdspan (__mdspan::__is_padded_mapping): Define.
+ 	(__mdspan::_SubMdspanMapping): Add _Padded template parameter.
+ 	(__mdspan::_SubMdspanMapping<_LayoutSide::__left, true>): Define.
+ 	(__mdspan::__submdspan_mapping_impl): Updated _Trait alias.
+ 	(layout_left_padded::submdspan_mapping): New friend method.
+ 	* testsuite/23_containers/mdspan/layout_traits.h
+ 	(LayoutTraits::layout_same_padded): New template type alias.
+ 	* testsuite/23_containers/mdspan/submdspan/selections/left_padded.cc:
+ 	Instantiate tests for layout_left_padded.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc:
+ 	Ditto.
+ 
+ 2025-12-09  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/110352
+ 	* include/std/mdspan (layout_stride::mapping::submdspan_mapping): New
+ 	friend function.
+ 	* testsuite/23_containers/mdspan/submdspan/selections/stride.cc:
+ 	Instantiate tests for layout_stride.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc:
+ 	Ditto.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc:
+ 	Add tests for layout_stride.
+ 
+ 2025-12-09  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/110352
+ 	* include/std/mdspan
+ 	(__mdspan::_SubMdspanMapping<_LayoutSide::__right>): Define.
+ 	(layout_right::mapping::submdspan_mapping): New friend function.
+ 	* testsuite/23_containers/mdspan/submdspan/selections/right.cc:
+ 	Instantiate tests for layout_right.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc:
+ 	Ditto.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc:
+ 	Ditto.
+ 
+ 2025-12-09  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	PR libstdc++/110352
+ 	* include/std/mdspan (__mdspan::__is_submdspan_mapping_result)
+ 	(__mdspan::__submdspan_mapping_result, __mdspan::__fwd_prod)
+ 	(__mdspan::__acceptable_slice_type, __mdspan::__slice_begin)
+ 	(__mdspan::__suboffset, __mdspan::_LayoutSide, __mdspan::__mapping_side)
+ 	(__mdspan::_StridesTrait, __mdspan::__substrides_generic)
+ 	(__mdspan::__substrides_standardized, __mdspan::__substrides)
+ 	(__mdspan::__is_unit_stride_slice, __mdspan::_SliceKind)
+ 	(__mdspan::__make_slice_kind, __mdspan::__make_slice_kind_array)
+ 	(__mdspan::__is_block, __mdspan::__padded_block_begin_generic)
+ 	(__mdspan::__padded_block_begin, __mpdspan::_SubMdspanMapping)
+ 	(__mdspan::__submdspan_mapping_impl): Define.
+ 	(__mdspan::__dynamic_slice_extent, __mdspan::__static_slice_extent)
+ 	(__mdspan::__subextents): Move earlier in the file.
+ 	(layout_left::mapping::submdspan_mapping, __mdspan::__sliceable_mapping)
+ 	(__mdspan::__submapping, submdspan): Define.
+ 	* src/c++23/std.cc.in: Add submdspan.
+ 	* testsuite/23_containers/mdspan/submdspan/generic.cc: New test.
+ 	* testsuite/23_containers/mdspan/submdspan/selections/left.cc:
+ 	Instantiate selection tests for layout_left.
+ 	* testsuite/23_containers/mdspan/submdspan/selections/testcases.h: Generic
+ 	tests different selections.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc: New test.
+ 	* testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc: New test.
+ 
+ 2025-12-09  Luc Grosheintz  <luc.grosheintz@gmail.com>
+ 
+ 	* include/std/mdspan (_ExtentsStorage::_M_dynamic_extents):
+ 	Create span from pointer + size, not begin and end iterators.
+ 
+ 2025-12-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/122946
+ 	* include/bits/version.def (concepts): Set value to 202207.
+ 	* include/bits/version.h: Regenerate.
+ 	* include/std/concepts (__comparison_common_type_with_impl)
+ 	(__comparison_common_type_with): New helper concepts.
+ 	(equality_comparable_with): Use __comparison_common_type_with.
+ 	* libsupc++/compare (three_way_comparable_with): Likewise.
+ 	(__glibcxx_want_concepts): Define to get __cpp_lib_concepts
+ 	here.
+ 	* testsuite/std/concepts/concepts.compare/move_only.cc: New
+ 	test.
+ 
+ 2025-12-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/intcmp.h: Replace all uses of
+ 	__is_standard_integer with __is_signed_or_unsigned_integer.
+ 	* include/bits/max_size_type.h: Fix outdated comment.
+ 	* include/bits/sat_arith.h: Replace all uses of
+ 	__is_standard_integer with __is_signed_or_unsigned_integer.
+ 	* include/c_compatibility/stdckdint.h: Replace all uses of the
+ 	__cv_unqual_signed_or_unsigned_integer_type concept with
+ 	__is_signed_or_unsigned_integer.
+ 	(__cv_unqual_signed_or_unsigned_integer_type): Remove.
+ 	* include/ext/numeric_traits.h: Fix outdated comment.
+ 	* include/std/charconv (from_chars): Replace use of
+ 	__is_standard_integer with __is_signed_or_unsigned_integer.
+ 	Do not enable for cv-qualified char.
+ 	* include/std/mdspan: Likewise.
+ 	* include/std/type_traits (__is_unsigned_integer): Include
+ 	unsigned __int128 in type list.
+ 	(__is_signed_integer): Include signed __int128 in type list.
+ 	(__is_standard_integer): Rename to ...
+ 	(__is_signed_or_unsigned_integer): ... this.
+ 	* testsuite/23_containers/mdspan/extents/ctor_ints.cc: Test
+ 	with 128-bit integers.
+ 	* testsuite/23_containers/mdspan/submdspan/strided_slice.cc:
+ 	Likewise.
+ 	* testsuite/20_util/integer_comparisons/extended.cc: New test.
+ 	* testsuite/26_numerics/saturation/extended.cc: New test.
+ 	* testsuite/26_numerics/stdckdint/extended.cc: New test.
+ 
+ 2025-12-08  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	PR libstdc++/112591
+ 	* include/std/variant (_Variadic_union): Separate specializations for
+ 	for union of only trivially destructible types (true as first template
+ 	argument). Unconditionally define destructor for _Variadic_union<false,
+ 	_First, _Rest...>.
+ 	* testsuite/20_util/variant/87619.cc: Add limit for the template depth.
+ 	* testsuite/20_util/variant/112591.cc: New test.
+ 
+ 2025-12-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/iterator_concepts.h: Remove diagnostic pragmas.
+ 
+ 2025-12-08  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/Makefile.am: Add new header.
+ 	* include/Makefile.in: Regenerate.
+ 	* include/std/latch: Include <bits/intcmp.h> instead of
+ 	<utility>.
+ 	* include/std/utility: Include <bits/intcmp.h>.
+ 	(cmp_equal, cmp_not_equal, cmp_less, cmp_greater)
+ 	(cmp_less_equal, cmp_greater_equal, in_range): Move to ...
+ 	* include/bits/intcmp.h: New file.
+ 
  2025-12-06  Jason Merrill  <jason@redhat.com>
  
  	* src/c++23/std.cc.in: Add more #if.
diff -Nrcpad gcc-16-20251207/libstdc++-v3/acinclude.m4 gcc-16-20251214/libstdc++-v3/acinclude.m4
*** gcc-16-20251207/libstdc++-v3/acinclude.m4	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/acinclude.m4	Sun Dec 14 22:32:17 2025
*************** dnl Substs:
*** 4193,4201 ****
  dnl  thread_header
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
!   AC_MSG_CHECKING([for thread model used by GCC])
!   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
!   AC_MSG_RESULT([$target_thread_file])
    GCC_AC_THREAD_HEADER([$target_thread_file])
  ])
  
--- 4193,4199 ----
  dnl  thread_header
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_THREADS], [
!   AC_REQUIRE([GCC_AC_THREAD_MODEL])
    GCC_AC_THREAD_HEADER([$target_thread_file])
  ])
  
*************** dnl
*** 4208,4213 ****
--- 4206,4212 ----
  dnl GLIBCXX_ENABLE_SYMVERS must be done before this.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
+   AC_REQUIRE([GCC_AC_THREAD_MODEL])
    GLIBCXX_ENABLE(libstdcxx-threads,auto,,[enable C++11 threads support])
  
    if test x$enable_libstdcxx_threads = xauto ||
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4220,4226 ****
    CXXFLAGS="$CXXFLAGS -fno-exceptions \
  	-I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
  
-   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
    case $target_thread_file in
      posix)
        CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
--- 4219,4224 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/config/abi/pre/gnu.ver gcc-16-20251214/libstdc++-v3/config/abi/pre/gnu.ver
*** gcc-16-20251207/libstdc++-v3/config/abi/pre/gnu.ver	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/config/abi/pre/gnu.ver	Sun Dec 14 22:32:17 2025
*************** GLIBCXX_3.4.35 {
*** 2576,2581 ****
--- 2576,2591 ----
      _ZN11__gnu_debug25_Safe_local_iterator_base16_M_attach_singleEPKNS_30_Safe_unordered_container_baseEb;
      _ZNK11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv;
      _ZNK11__gnu_debug30_Safe_unordered_container_base7_M_swapERKS0_;
+ 
+     # std::__cow_string
+     _ZNSt12__cow_stringC2EPKc;
+     _ZNSt12__cow_stringC2EPKc[jmy];
+     _ZNSt12__cow_stringC2ERKS_;
+     _ZNSt12__cow_stringC2EOS_;
+     _ZNSt12__cow_stringD2Ev;
+     _ZNSt12__cow_stringaSERKS_;
+     _ZNSt12__cow_stringaSEOS_;
+     _ZNKSt12__cow_string5c_strEv;
  } GLIBCXX_3.4.34;
  
  # Symbols in the support library (libsupc++) have their own tag.
diff -Nrcpad gcc-16-20251207/libstdc++-v3/configure gcc-16-20251214/libstdc++-v3/configure
*** gcc-16-20251207/libstdc++-v3/configure	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/configure	Sun Dec 14 22:32:17 2025
*************** $as_echo "$enable_libstdcxx_pch" >&6; }
*** 16330,16340 ****
  
  
  
!   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread model used by GCC" >&5
! $as_echo_n "checking for thread model used by GCC... " >&6; }
!   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
!   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $target_thread_file" >&5
! $as_echo "$target_thread_file" >&6; }
  
  case $target_thread_file in
      aix)	thread_header=config/rs6000/gthr-aix.h ;;
--- 16330,16358 ----
  
  
  
! # Specify the threading model for this GCC runtime library
! # Pass with no value to take from compiler's metadata
! # Pass with a value to specify a thread package
! # 'single' means single threaded -- without threads.
! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the threading model used by GCC" >&5
! $as_echo_n "checking for the threading model used by GCC... " >&6; }
! if ${gcc_cv_target_thread_file+:} false; then :
!   $as_echo_n "(cached) " >&6
! else
! 
!   # Set new cache variable
!   gcc_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`
! 
! fi
! { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_target_thread_file" >&5
! $as_echo "$gcc_cv_target_thread_file" >&6; }
! # Set variable name (not prefixed enough to be a good cache variable
! # name) traditionally used for this purpose, to avoid having to change
! # a bunch of configure scripts.
! target_thread_file="$gcc_cv_target_thread_file"
! 
! 
! 
  
  case $target_thread_file in
      aix)	thread_header=config/rs6000/gthr-aix.h ;;
*************** case $target_thread_file in
*** 16349,16354 ****
--- 16367,16375 ----
      vxworks)	thread_header=config/gthr-vxworks.h ;;
      win32)	thread_header=config/i386/gthr-win32.h ;;
      mcf)	thread_header=config/i386/gthr-mcf.h ;;
+     *)
+         as_fn_error $? "No known header for threading model '$target_thread_file'." "$LINENO" 5
+         ;;
  esac
  
  
*************** $as_echo "$glibcxx_cv_atomic_word" >&6;
*** 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()
  {
--- 16443,16449 ----
      # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16446 "configure"
  #include "${glibcxx_srcdir}/config/$atomic_word_dir/atomic_word.h"
  int main()
  {
*************** $as_echo "mutex" >&6; }
*** 16568,16574 ****
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16571 "configure"
  int main()
  {
    _Decimal32 d1;
--- 16589,16595 ----
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16592 "configure"
  int main()
  {
    _Decimal32 d1;
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 16610,16616 ****
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16613 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
--- 16631,16637 ----
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16634 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
*************** done
*** 52252,52257 ****
--- 52273,52279 ----
  
  # For gthread support.  Depends on GLIBCXX_ENABLE_SYMVERS.
  
+ 
     # Check whether --enable-libstdcxx-threads was given.
  if test "${enable_libstdcxx_threads+set}" = set; then :
    enableval=$enable_libstdcxx_threads;
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 52281,52287 ****
    CXXFLAGS="$CXXFLAGS -fno-exceptions \
  	-I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc"
  
-   target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'`
    case $target_thread_file in
      posix)
        CXXFLAGS="$CXXFLAGS -DSUPPORTS_WEAK -DGTHREAD_USE_WEAK -D_PTHREADS"
--- 52303,52308 ----
*************** $as_echo "$glibcxx_cv_libbacktrace_atomi
*** 53969,53975 ****
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 53972 "configure"
  #include <stddef.h>
  int main()
  {
--- 53990,53996 ----
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 53993 "configure"
  #include <stddef.h>
  int main()
  {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/Makefile.am gcc-16-20251214/libstdc++-v3/include/Makefile.am
*** gcc-16-20251207/libstdc++-v3/include/Makefile.am	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/Makefile.am	Sun Dec 14 22:32:17 2025
*************** bits_freestanding = \
*** 134,141 ****
--- 134,144 ----
  	${bits_srcdir}/enable_special_members.h \
  	${bits_srcdir}/functexcept.h \
  	${bits_srcdir}/functional_hash.h \
+ 	${bits_srcdir}/intcmp.h \
  	${bits_srcdir}/invoke.h \
  	${bits_srcdir}/iterator_concepts.h \
+ 	${bits_srcdir}/new_except.h \
+ 	${bits_srcdir}/new_throw.h \
  	${bits_srcdir}/max_size_type.h \
  	${bits_srcdir}/memoryfwd.h \
  	${bits_srcdir}/monostate.h \
*************** bits_freestanding = \
*** 154,159 ****
--- 157,166 ----
  	${bits_srcdir}/ranges_util.h \
  	${bits_srcdir}/refwrap.h \
  	${bits_srcdir}/sat_arith.h \
+ 	${bits_srcdir}/stdexcept_except.h \
+ 	${bits_srcdir}/stdexcept_throw.h \
+ 	${bits_srcdir}/stdexcept_throwdef.h \
+ 	${bits_srcdir}/stdexcept_throwfwd.h \
  	${bits_srcdir}/stl_algo.h \
  	${bits_srcdir}/stl_algobase.h \
  	${bits_srcdir}/stl_construct.h \
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/Makefile.in gcc-16-20251214/libstdc++-v3/include/Makefile.in
*** gcc-16-20251207/libstdc++-v3/include/Makefile.in	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/Makefile.in	Sun Dec 14 22:32:17 2025
*************** bits_freestanding = \
*** 492,499 ****
--- 492,502 ----
  	${bits_srcdir}/enable_special_members.h \
  	${bits_srcdir}/functexcept.h \
  	${bits_srcdir}/functional_hash.h \
+ 	${bits_srcdir}/intcmp.h \
  	${bits_srcdir}/invoke.h \
  	${bits_srcdir}/iterator_concepts.h \
+ 	${bits_srcdir}/new_except.h \
+ 	${bits_srcdir}/new_throw.h \
  	${bits_srcdir}/max_size_type.h \
  	${bits_srcdir}/memoryfwd.h \
  	${bits_srcdir}/monostate.h \
*************** bits_freestanding = \
*** 512,517 ****
--- 515,524 ----
  	${bits_srcdir}/ranges_util.h \
  	${bits_srcdir}/refwrap.h \
  	${bits_srcdir}/sat_arith.h \
+ 	${bits_srcdir}/stdexcept_except.h \
+ 	${bits_srcdir}/stdexcept_throw.h \
+ 	${bits_srcdir}/stdexcept_throwdef.h \
+ 	${bits_srcdir}/stdexcept_throwfwd.h \
  	${bits_srcdir}/stl_algo.h \
  	${bits_srcdir}/stl_algobase.h \
  	${bits_srcdir}/stl_construct.h \
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/basic_ios.h gcc-16-20251214/libstdc++-v3/include/bits/basic_ios.h
*** gcc-16-20251207/libstdc++-v3/include/bits/basic_ios.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/basic_ios.h	Sun Dec 14 22:32:17 2025
***************
*** 34,39 ****
--- 34,40 ----
  #pragma GCC system_header
  #endif
  
+ #include <bits/functexcept.h>
  #include <bits/localefwd.h>
  #include <bits/locale_classes.h>
  #include <bits/locale_facets.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/formatfwd.h gcc-16-20251214/libstdc++-v3/include/bits/formatfwd.h
*** gcc-16-20251207/libstdc++-v3/include/bits/formatfwd.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/formatfwd.h	Sun Dec 14 22:32:17 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 56,66 ****
    // [format.formatter], formatter
    template<typename _Tp, typename _CharT = char> struct formatter;
  
- /// @cond undocumented
-   [[noreturn]]
-   inline void
-   __throw_format_error(const char* __what);
- 
  namespace __format
  {
  #ifdef _GLIBCXX_USE_WCHAR_T
--- 56,61 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/functexcept.h gcc-16-20251214/libstdc++-v3/include/bits/functexcept.h
*** gcc-16-20251207/libstdc++-v3/include/bits/functexcept.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/functexcept.h	Sun Dec 14 22:32:17 2025
***************
*** 39,60 ****
  #include <bits/c++config.h>
  #include <bits/exception_defines.h>
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
- 
- #if _GLIBCXX_HOSTED
    // Helper for exception objects in <except>
    void
    __throw_bad_exception(void) __attribute__((__noreturn__));
  
-   // Helper for exception objects in <new>
-   void
-   __throw_bad_alloc(void) __attribute__((__noreturn__));
- 
-   void
-   __throw_bad_array_new_length(void) __attribute__((__noreturn__));
- 
    // Helper for exception objects in <typeinfo>
    void
    __throw_bad_cast(void) __attribute__((__noreturn__,__cold__));
--- 39,52 ----
  #include <bits/c++config.h>
  #include <bits/exception_defines.h>
  
+ #if _GLIBCXX_HOSTED
  namespace std _GLIBCXX_VISIBILITY(default)
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
    // Helper for exception objects in <except>
    void
    __throw_bad_exception(void) __attribute__((__noreturn__));
  
    // Helper for exception objects in <typeinfo>
    void
    __throw_bad_cast(void) __attribute__((__noreturn__,__cold__));
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 64,99 ****
  
    // Helpers for exception objects in <stdexcept>
    void
-   __throw_logic_error(const char*) __attribute__((__noreturn__,__cold__));
- 
-   void
-   __throw_domain_error(const char*) __attribute__((__noreturn__,__cold__));
- 
-   void
-   __throw_invalid_argument(const char*) __attribute__((__noreturn__,__cold__));
- 
-   void
-   __throw_length_error(const char*) __attribute__((__noreturn__,__cold__));
- 
-   void
-   __throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__));
- 
-   void
-   __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__,__cold__))
-     __attribute__((__format__(__gnu_printf__, 1, 2)));
- 
-   void
-   __throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__));
- 
-   void
    __throw_range_error(const char*) __attribute__((__noreturn__,__cold__));
  
-   void
-   __throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__));
- 
-   void
-   __throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__));
- 
    // Helpers for exception objects in <ios>
    void
    __throw_ios_failure(const char*) __attribute__((__noreturn__,__cold__));
--- 56,63 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 113,143 ****
    void
    __throw_bad_function_call() __attribute__((__noreturn__,__cold__));
  
- #else // ! HOSTED
- 
-   __attribute__((__noreturn__)) inline void
-   __throw_invalid_argument(const char*)
-   { std::__terminate(); }
- 
-   __attribute__((__noreturn__)) inline void
-   __throw_out_of_range(const char*)
-   { std::__terminate(); }
- 
-   __attribute__((__noreturn__)) inline void
-   __throw_out_of_range_fmt(const char*, ...)
-   { std::__terminate(); }
- 
-   __attribute__((__noreturn__)) inline void
-   __throw_runtime_error(const char*)
-   { std::__terminate(); }
- 
-   __attribute__((__noreturn__)) inline void
-   __throw_overflow_error(const char*)
-   { std::__terminate(); }
- 
- #endif // HOSTED
- 
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace
  
  #endif
--- 77,84 ----
    void
    __throw_bad_function_call() __attribute__((__noreturn__,__cold__));
  
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace
+ #endif // HOSTED
  
  #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/hashtable_policy.h gcc-16-20251214/libstdc++-v3/include/bits/hashtable_policy.h
*** gcc-16-20251207/libstdc++-v3/include/bits/hashtable_policy.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/hashtable_policy.h	Sun Dec 14 22:32:17 2025
***************
*** 32,37 ****
--- 32,38 ----
  #define _HASHTABLE_POLICY_H 1
  
  #include <tuple>		// for std::tuple, std::forward_as_tuple
+ #include <bits/stdexcept_throw.h>
  #include <bits/functional_hash.h> // for __is_fast_hash
  #include <bits/stl_algobase.h>	// for std::min
  #include <bits/stl_pair.h>	// for std::pair
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/intcmp.h gcc-16-20251214/libstdc++-v3/include/bits/intcmp.h
*** gcc-16-20251207/libstdc++-v3/include/bits/intcmp.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/include/bits/intcmp.h	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,120 ----
+ // Integer comparison functions -*- C++ -*-
+ 
+ // Copyright (C) 2020-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library 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/>.
+ 
+ /** @file bits/intcmp.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{utility}
+  */
+ 
+ #ifndef _GLIBCXX_INTCMP_H
+ #define _GLIBCXX_INTCMP_H 1
+ 
+ #ifdef _GLIBCXX_SYSHDR
+ #pragma GCC system_header
+ #endif
+ 
+ #include <bits/version.h>
+ 
+ #ifdef __glibcxx_integer_comparison_functions // C++ >= 20
+ 
+ #include <type_traits>
+ #include <ext/numeric_traits.h> // __int_traits
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+   template<typename _Tp, typename _Up>
+     constexpr bool
+     cmp_equal(_Tp __t, _Up __u) noexcept
+     {
+       static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
+       static_assert(__is_signed_or_unsigned_integer<_Up>::value);
+ 
+       if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
+ 	return __t == __u;
+       else if constexpr (is_signed_v<_Tp>)
+ 	return __t >= 0 && make_unsigned_t<_Tp>(__t) == __u;
+       else
+ 	return __u >= 0 && __t == make_unsigned_t<_Up>(__u);
+     }
+ 
+   template<typename _Tp, typename _Up>
+     constexpr bool
+     cmp_not_equal(_Tp __t, _Up __u) noexcept
+     { return !std::cmp_equal(__t, __u); }
+ 
+   template<typename _Tp, typename _Up>
+     constexpr bool
+     cmp_less(_Tp __t, _Up __u) noexcept
+     {
+       static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
+       static_assert(__is_signed_or_unsigned_integer<_Up>::value);
+ 
+       if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
+ 	return __t < __u;
+       else if constexpr (is_signed_v<_Tp>)
+ 	return __t < 0 || make_unsigned_t<_Tp>(__t) < __u;
+       else
+ 	return __u >= 0 && __t < make_unsigned_t<_Up>(__u);
+     }
+ 
+   template<typename _Tp, typename _Up>
+     constexpr bool
+     cmp_greater(_Tp __t, _Up __u) noexcept
+     { return std::cmp_less(__u, __t); }
+ 
+   template<typename _Tp, typename _Up>
+     constexpr bool
+     cmp_less_equal(_Tp __t, _Up __u) noexcept
+     { return !std::cmp_less(__u, __t); }
+ 
+   template<typename _Tp, typename _Up>
+     constexpr bool
+     cmp_greater_equal(_Tp __t, _Up __u) noexcept
+     { return !std::cmp_less(__t, __u); }
+ 
+   template<typename _Res, typename _Tp>
+     constexpr bool
+     in_range(_Tp __t) noexcept
+     {
+       static_assert(__is_signed_or_unsigned_integer<_Res>::value);
+       static_assert(__is_signed_or_unsigned_integer<_Tp>::value);
+       using __gnu_cxx::__int_traits;
+ 
+       if constexpr (is_signed_v<_Tp> == is_signed_v<_Res>)
+ 	return __int_traits<_Res>::__min <= __t
+ 	  && __t <= __int_traits<_Res>::__max;
+       else if constexpr (is_signed_v<_Tp>)
+ 	return __t >= 0
+ 	  && make_unsigned_t<_Tp>(__t) <= __int_traits<_Res>::__max;
+       else
+ 	return __t <= make_unsigned_t<_Res>(__int_traits<_Res>::__max);
+     }
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ #endif // __glibcxx_integer_comparison_functions
+ #endif // _GLIBCXX_INTCMP_H
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/iterator_concepts.h gcc-16-20251214/libstdc++-v3/include/bits/iterator_concepts.h
*** gcc-16-20251207/libstdc++-v3/include/bits/iterator_concepts.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/iterator_concepts.h	Sun Dec 14 22:32:17 2025
***************
*** 39,47 ****
  #include <bits/ptr_traits.h>	// to_address
  #include <bits/ranges_cmp.h>	// identity, ranges::less
  
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wpedantic" // __int128
- 
  namespace std _GLIBCXX_VISIBILITY(default)
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
--- 39,44 ----
*************** namespace ranges
*** 1032,1037 ****
  #endif // C++20 library concepts
  _GLIBCXX_END_NAMESPACE_VERSION
  } // namespace std
- #pragma GCC diagnostic pop
  #endif // C++20
  #endif // _ITERATOR_CONCEPTS_H
--- 1029,1033 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/locale_classes.h gcc-16-20251214/libstdc++-v3/include/bits/locale_classes.h
*** gcc-16-20251207/libstdc++-v3/include/bits/locale_classes.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/locale_classes.h	Sun Dec 14 22:32:17 2025
***************
*** 38,43 ****
--- 38,44 ----
  #pragma GCC system_header
  #endif
  
+ #include <bits/functexcept.h>
  #include <bits/localefwd.h>
  #include <string>
  #include <ext/atomicity.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/max_size_type.h gcc-16-20251214/libstdc++-v3/include/bits/max_size_type.h
*** gcc-16-20251207/libstdc++-v3/include/bits/max_size_type.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/max_size_type.h	Sun Dec 14 22:32:17 2025
***************
*** 44,53 ****
  // [iterator.concept.winc]) that are one bit wider than the widest supported
  // integer type.
  //
! // The set of integer types we consider includes __int128 and unsigned __int128
! // (when they exist), even though they are really integer types only in GNU
! // mode.  This is to obtain a consistent ABI for these integer-class types
! // across strict mode and GNU mode.
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
--- 44,51 ----
  // [iterator.concept.winc]) that are one bit wider than the widest supported
  // integer type.
  //
! // The set of integer types we consider includes the extended integer types
! // __int128 and unsigned __int128 (when they exist).
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/memory_resource.h gcc-16-20251214/libstdc++-v3/include/bits/memory_resource.h
*** gcc-16-20251207/libstdc++-v3/include/bits/memory_resource.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/memory_resource.h	Sun Dec 14 22:32:17 2025
***************
*** 38,44 ****
  
  #include <new>				// operator new(size_t, void*)
  #include <cstddef>			// size_t, max_align_t, byte
! #include <bits/functexcept.h>		// __throw_bad_array_new_length
  #include <bits/uses_allocator.h>	// allocator_arg_t, __use_alloc
  #include <bits/uses_allocator_args.h>	// uninitialized_construct_using_alloc
  #include <ext/numeric_traits.h>		// __int_traits
--- 38,44 ----
  
  #include <new>				// operator new(size_t, void*)
  #include <cstddef>			// size_t, max_align_t, byte
! #include <bits/new_throw.h>		// __throw_bad_array_new_length
  #include <bits/uses_allocator.h>	// allocator_arg_t, __use_alloc
  #include <bits/uses_allocator_args.h>	// uninitialized_construct_using_alloc
  #include <ext/numeric_traits.h>		// __int_traits
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/new_allocator.h gcc-16-20251214/libstdc++-v3/include/bits/new_allocator.h
*** gcc-16-20251207/libstdc++-v3/include/bits/new_allocator.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/new_allocator.h	Sun Dec 14 22:32:17 2025
***************
*** 32,38 ****
  
  #include <bits/c++config.h>
  #include <new>
! #include <bits/functexcept.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
  #include <type_traits>
--- 32,38 ----
  
  #include <bits/c++config.h>
  #include <new>
! #include <bits/new_throw.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
  #include <type_traits>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/new_except.h gcc-16-20251214/libstdc++-v3/include/bits/new_except.h
*** gcc-16-20251207/libstdc++-v3/include/bits/new_except.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/include/bits/new_except.h	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,110 ----
+ // Exception classes for <new> -*- C++ -*-
+ 
+ // Copyright (C) 2001-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library 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/>.
+ 
+ /** @file bits/new_except.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{new}
+  */
+ 
+ //
+ // ISO C++ 14882: 19.1  Exception classes
+ //
+ 
+ #ifndef _NEW_EXCEPT_H
+ #define _NEW_EXCEPT_H 1
+ 
+ #include <bits/c++config.h>
+ #include <bits/exception_defines.h>
+ #include <bits/exception.h>
+ 
+ extern "C++"
+ {
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+   /**
+    *  @brief  Exception possibly thrown by @c new.
+    *  @ingroup exceptions
+    *
+    *  @c bad_alloc (or classes derived from it) is used to report allocation
+    *  errors from the throwing forms of @c new.  */
+   class bad_alloc : public exception
+   {
+   public:
+     _GLIBCXX26_CONSTEXPR bad_alloc() throw() { }
+ 
+ #if __cplusplus >= 201103L
+     _GLIBCXX26_CONSTEXPR bad_alloc(const bad_alloc&) = default;
+     _GLIBCXX26_CONSTEXPR bad_alloc& operator=(const bad_alloc&) = default;
+ #endif
+ 
+ #if __cplusplus >= 202400L
+     constexpr virtual ~bad_alloc() noexcept {}
+ 
+     constexpr virtual const char* what() const noexcept
+     {
+       return "std::bad_alloc";
+     }
+ #else
+     // This declaration is not useless:
+     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
+     virtual ~bad_alloc() throw();
+ 
+     // See comment in eh_exception.cc.
+     virtual const char* what() const throw();
+ #endif
+   };
+ 
+ #if __cplusplus >= 201103L
+   class bad_array_new_length : public bad_alloc
+   {
+   public:
+     _GLIBCXX26_CONSTEXPR bad_array_new_length() throw() { }
+ 
+ #if __cplusplus >= 202400L
+     constexpr virtual ~bad_array_new_length() noexcept {}
+ 
+     constexpr virtual const char* what() const noexcept
+     {
+       return "std::bad_array_new_length";
+     }
+ #else
+     // This declaration is not useless:
+     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
+     virtual ~bad_array_new_length() throw();
+ 
+     // See comment in eh_exception.cc.
+     virtual const char* what() const throw();
+ #endif
+   };
+ #endif
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ }
+ 
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/new_throw.h gcc-16-20251214/libstdc++-v3/include/bits/new_throw.h
*** gcc-16-20251207/libstdc++-v3/include/bits/new_throw.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/include/bits/new_throw.h	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,76 ----
+ // Function-Based Exception Support -*- C++ -*-
+ 
+ // Copyright (C) 2001-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library 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/>.
+ 
+ /** @file bits/new_throw.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{new}
+  */
+ 
+ //
+ // ISO C++ 14882: 19.1  Exception classes
+ //
+ 
+ #ifndef _NEW_THROW_H
+ #define _NEW_THROW_H 1
+ 
+ #include <bits/c++config.h>
+ #include <bits/exception_defines.h>
+ #if (_GLIBCXX_HOSTED && __cpp_exceptions && __cplusplus > 202302L \
+      && __cpp_constexpr_exceptions >= 202411L)
+ #include <bits/new_except.h>
+ #endif
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+ #if _GLIBCXX_HOSTED
+ #if (__cpp_exceptions && __cplusplus > 202302L \
+      && __cpp_constexpr_exceptions >= 202411L)
+   // Helper for exception objects in <new>
+   [[noreturn, __gnu__::__always_inline__]] constexpr void
+   __throw_bad_alloc(void)
+   {
+     throw bad_alloc();
+   }
+ 
+   [[noreturn, __gnu__::__always_inline__]] constexpr void
+   __throw_bad_array_new_length(void)
+   {
+     throw bad_array_new_length();
+   }
+ #else
+   // Helper for exception objects in <new>
+   void
+   __throw_bad_alloc(void) __attribute__((__noreturn__));
+ 
+   void
+   __throw_bad_array_new_length(void) __attribute__((__noreturn__));
+ #endif
+ #endif // HOSTED
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/sat_arith.h gcc-16-20251214/libstdc++-v3/include/bits/sat_arith.h
*** gcc-16-20251207/libstdc++-v3/include/bits/sat_arith.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/sat_arith.h	Sun Dec 14 22:32:17 2025
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 46,52 ****
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
  
    /// Add two integers, with saturation in case of overflow.
!   template<typename _Tp> requires __is_standard_integer<_Tp>::value
      constexpr _Tp
      add_sat(_Tp __x, _Tp __y) noexcept
      {
--- 46,52 ----
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
  
    /// Add two integers, with saturation in case of overflow.
!   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value
      constexpr _Tp
      add_sat(_Tp __x, _Tp __y) noexcept
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 62,68 ****
      }
  
    /// Subtract one integer from another, with saturation in case of overflow.
!   template<typename _Tp> requires __is_standard_integer<_Tp>::value
      constexpr _Tp
      sub_sat(_Tp __x, _Tp __y) noexcept
      {
--- 62,68 ----
      }
  
    /// Subtract one integer from another, with saturation in case of overflow.
!   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value
      constexpr _Tp
      sub_sat(_Tp __x, _Tp __y) noexcept
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 78,84 ****
      }
  
    /// Multiply two integers, with saturation in case of overflow.
!   template<typename _Tp> requires __is_standard_integer<_Tp>::value
      constexpr _Tp
      mul_sat(_Tp __x, _Tp __y) noexcept
      {
--- 78,84 ----
      }
  
    /// Multiply two integers, with saturation in case of overflow.
!   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value
      constexpr _Tp
      mul_sat(_Tp __x, _Tp __y) noexcept
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 94,100 ****
      }
  
    /// Divide one integer by another, with saturation in case of overflow.
!   template<typename _Tp> requires __is_standard_integer<_Tp>::value
      constexpr _Tp
      div_sat(_Tp __x, _Tp __y) noexcept
      {
--- 94,100 ----
      }
  
    /// Divide one integer by another, with saturation in case of overflow.
!   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value
      constexpr _Tp
      div_sat(_Tp __x, _Tp __y) noexcept
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 107,114 ****
  
    /// Divide one integer by another, with saturation in case of overflow.
    template<typename _Res, typename _Tp>
!     requires __is_standard_integer<_Res>::value
!       && __is_standard_integer<_Tp>::value
      constexpr _Res
      saturate_cast(_Tp __x) noexcept
      {
--- 107,114 ----
  
    /// Divide one integer by another, with saturation in case of overflow.
    template<typename _Res, typename _Tp>
!     requires __is_signed_or_unsigned_integer<_Res>::value
!       && __is_signed_or_unsigned_integer<_Tp>::value
      constexpr _Res
      saturate_cast(_Tp __x) noexcept
      {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/specfun.h gcc-16-20251214/libstdc++-v3/include/bits/specfun.h
*** gcc-16-20251207/libstdc++-v3/include/bits/specfun.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/specfun.h	Sun Dec 14 22:32:17 2025
***************
*** 40,45 ****
--- 40,46 ----
  # error include <cmath> and define __STDCPP_WANT_MATH_SPEC_FUNCS__
  #endif
  
+ #include <bits/stdexcept_throw.h>
  #include <bits/stl_algobase.h>
  #include <limits>
  #include <type_traits>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_except.h gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_except.h
*** gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_except.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_except.h	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,552 ----
+ // Exception classes for <stdexcept>  -*- C++ -*-
+ 
+ // Copyright (C) 2001-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library 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/>.
+ 
+ /** @file bits/stdexcept_except.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{stdexcept}  */
+ 
+ #ifndef _STDEXCEPT_EXCEPT_H
+ #define _STDEXCEPT_EXCEPT_H 1
+ 
+ #include <exception>
+ #include <string>
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+ #if _GLIBCXX_USE_DUAL_ABI
+ #if _GLIBCXX_USE_CXX11_ABI
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+   struct __cow_constexpr_string;
+   namespace __detail
+   {
+     extern "C"
+     {
+       void _ZNSt12__cow_stringC2EPKcm(__cow_constexpr_string*, const char*,
+ 				      unsigned long);
+       void _ZNSt12__cow_stringC2EPKcj(__cow_constexpr_string*, const char*,
+ 				      unsigned int);
+       void _ZNSt12__cow_stringC2EPKcy(__cow_constexpr_string*, const char*,
+ 				      unsigned long long);
+       void _ZNSt12__cow_stringC2EPKc(__cow_constexpr_string*, const char*);
+       void _ZNSt12__cow_stringC2ERKS_(__cow_constexpr_string*,
+ 				      const __cow_constexpr_string&) noexcept;
+       void _ZNSt12__cow_stringC2EOS_(__cow_constexpr_string*,
+ 				     __cow_constexpr_string&&) noexcept;
+       void _ZNSt12__cow_stringD2Ev(__cow_constexpr_string*);
+       __cow_constexpr_string&
+       _ZNSt12__cow_stringaSERKS_(__cow_constexpr_string*,
+ 				 const __cow_constexpr_string&) noexcept;
+       __cow_constexpr_string&
+       _ZNSt12__cow_stringaSEOS_(__cow_constexpr_string*,
+ 				__cow_constexpr_string&&) noexcept;
+       const char*
+       _ZNKSt12__cow_string5c_strEv(const __cow_constexpr_string*) noexcept;
+     }
+   } // namespace __detail
+ 
+   // Emulates an old COW string when the new std::string is in use,
+   // but in addition is constexpr and uses the __cow_string out of
+   // line cdtors/methods unless manifestly constant evaluated.
+   struct __cow_constexpr_string
+   {
+     union {
+       const char* _M_p;
+       char _M_bytes[sizeof(const char*)];
+       string* _M_str;
+     };
+ 
+     [[__gnu__::__always_inline__]] constexpr
+     __cow_constexpr_string(const string& __o)
+     {
+       if consteval {
+ 	_M_str = new string(__o);
+       } else {
+ 	__cow_constexpr_string_ctor(__o.c_str(), __o.length());
+       }
+     }
+ 
+     [[__gnu__::__always_inline__]] inline void
+     __cow_constexpr_string_ctor(const char *__s, unsigned long __l)
+     {
+       __detail::_ZNSt12__cow_stringC2EPKcm(this, __s, __l);
+     }
+ 
+     [[__gnu__::__always_inline__]] inline void
+     __cow_constexpr_string_ctor(const char *__s, unsigned int __l)
+     {
+       __detail::_ZNSt12__cow_stringC2EPKcj(this, __s, __l);
+     }
+ 
+     [[__gnu__::__always_inline__]] inline void
+     __cow_constexpr_string_ctor(const char *__s, unsigned long long __l)
+     {
+       __detail::_ZNSt12__cow_stringC2EPKcy(this, __s, __l);
+     }
+ 
+     [[__gnu__::__always_inline__]] constexpr
+     __cow_constexpr_string(const char* __o)
+     {
+       if consteval {
+ 	_M_str = new string(__o);
+       } else {
+ 	__detail::_ZNSt12__cow_stringC2EPKc(this, __o);
+       }
+     }
+ 
+     [[__gnu__::__always_inline__]] constexpr
+     __cow_constexpr_string(const __cow_constexpr_string& __o) noexcept
+     {
+       if consteval {
+ 	_M_str = new string(*__o._M_str);
+       } else {
+ 	__detail::_ZNSt12__cow_stringC2ERKS_(this, __o);
+       }
+     }
+ 
+     [[__gnu__::__always_inline__]] constexpr __cow_constexpr_string&
+     operator=(const __cow_constexpr_string& __o) noexcept
+     {
+       if consteval {
+ 	string* __p = _M_str;
+ 	_M_str = new string(*__o._M_str);
+ 	delete __p;
+ 	return *this;
+       } else {
+ 	return __detail::_ZNSt12__cow_stringaSERKS_(this, __o);
+       }
+     }
+ 
+     [[__gnu__::__always_inline__]] constexpr
+     ~__cow_constexpr_string()
+     {
+       if consteval {
+ 	delete _M_str;
+       } else {
+ 	__detail::_ZNSt12__cow_stringD2Ev(this);
+       }
+     }
+ 
+     [[__gnu__::__always_inline__]] constexpr
+     __cow_constexpr_string(__cow_constexpr_string&& __o) noexcept
+     {
+       if consteval {
+ 	_M_str = new string(std::move(*__o._M_str));
+       } else {
+ 	__detail::_ZNSt12__cow_stringC2EOS_(this, std::move(__o));
+       }
+     }
+ 
+     [[__gnu__::__always_inline__]] constexpr __cow_constexpr_string&
+     operator=(__cow_constexpr_string&& __o) noexcept
+     {
+       if consteval {
+ 	string* __p = _M_str;
+ 	_M_str = new string(std::move(*__o._M_str));
+ 	delete __p;
+ 	return *this;
+       } else {
+ 	return __detail::_ZNSt12__cow_stringaSEOS_(this, std::move(__o));
+       }	
+     }
+ 
+     [[__gnu__::__always_inline__]] constexpr const char*
+     c_str() const noexcept
+     {
+       if consteval {
+ 	return _M_str->c_str();
+       } else {
+ 	return __detail::_ZNKSt12__cow_string5c_strEv(this);
+       }
+     }
+   };
+ 
+   typedef __cow_constexpr_string __cow_string;
+ #else
+   // Emulates an old COW string when the new std::string is in use.
+   struct __cow_string
+   {
+     union {
+       const char* _M_p;
+       char _M_bytes[sizeof(const char*)];
+     };
+ 
+     __cow_string();
+     __cow_string(const std::string&);
+     __cow_string(const char*, size_t);
+     __cow_string(const __cow_string&) _GLIBCXX_NOTHROW;
+     __cow_string& operator=(const __cow_string&) _GLIBCXX_NOTHROW;
+     ~__cow_string();
+ #if __cplusplus >= 201103L
+     __cow_string(__cow_string&&) noexcept;
+     __cow_string& operator=(__cow_string&&) noexcept;
+ #endif
+   };
+ #endif
+ 
+   typedef basic_string<char> __sso_string;
+ #else // _GLIBCXX_USE_CXX11_ABI
+   typedef basic_string<char> __cow_string;
+ 
+   // Emulates a new SSO string when the old std::string is in use.
+   struct __sso_string
+   {
+     struct __str
+     {
+       const char* _M_p;
+       size_t _M_string_length;
+       char _M_local_buf[16];
+     };
+ 
+     union {
+       __str _M_s;
+       char _M_bytes[sizeof(__str)];
+     };
+ 
+     __sso_string() _GLIBCXX_NOTHROW;
+     __sso_string(const std::string&);
+     __sso_string(const char*, size_t);
+     __sso_string(const __sso_string&);
+     __sso_string& operator=(const __sso_string&);
+     ~__sso_string();
+ #if __cplusplus >= 201103L
+     __sso_string(__sso_string&&) noexcept;
+     __sso_string& operator=(__sso_string&&) noexcept;
+ #endif
+   };
+ #endif // _GLIBCXX_USE_CXX11_ABI
+ #else  // _GLIBCXX_USE_DUAL_ABI
+   typedef basic_string<char> __sso_string;
+   typedef basic_string<char> __cow_string;
+ #endif
+ 
+   /**
+    * @addtogroup exceptions
+    * @{
+    */
+ 
+   /** Logic errors represent problems in the internal logic of a program;
+    *  in theory, these are preventable, and even detectable before the
+    *  program runs (e.g., violations of class invariants).
+    *  @brief One of two subclasses of exception.
+    */
+   class logic_error : public exception
+   {
+     __cow_string _M_msg;
+ 
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit
+     logic_error(const string& __arg) _GLIBCXX_TXN_SAFE
+     : _M_msg(__arg) {}
+ 
+     constexpr explicit
+     logic_error(const char* __arg) _GLIBCXX_TXN_SAFE
+     : _M_msg(__arg) {}
+ 
+     constexpr logic_error(logic_error&& __arg) noexcept = default;
+     constexpr logic_error& operator=(logic_error&& __arg) noexcept = default;
+     constexpr logic_error(const logic_error&) noexcept = default;
+     constexpr logic_error& operator=(const logic_error&) noexcept = default;
+ 
+     constexpr virtual ~logic_error() _GLIBCXX_TXN_SAFE_DYN noexcept { }
+ 
+     constexpr virtual const char*
+     what() const _GLIBCXX_TXN_SAFE_DYN noexcept
+     {
+       return _M_msg.c_str();
+     }
+ #else
+     /** Takes a character string describing the error.  */
+     explicit
+     logic_error(const string& __arg) _GLIBCXX_TXN_SAFE;
+ 
+ #if __cplusplus >= 201103L
+     explicit
+     logic_error(const char*) _GLIBCXX_TXN_SAFE;
+ 
+     logic_error(logic_error&&) noexcept;
+     logic_error& operator=(logic_error&&) noexcept;
+ #endif
+ 
+ #if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
+     logic_error(const logic_error&) _GLIBCXX_NOTHROW;
+     logic_error& operator=(const logic_error&) _GLIBCXX_NOTHROW;
+ #elif __cplusplus >= 201103L
+     logic_error(const logic_error&) = default;
+     logic_error& operator=(const logic_error&) = default;
+ #endif
+ 
+     virtual ~logic_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
+ 
+     /** Returns a C-style character string describing the general cause of
+      *  the current error (the same string passed to the ctor).  */
+     virtual const char*
+     what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
+ #endif
+ 
+ # ifdef _GLIBCXX_TM_TS_INTERNAL
+     friend void*
+     ::_txnal_logic_error_get_msg(void* e);
+ # endif
+   };
+ 
+   /** Thrown by the library, or by you, to report domain errors (domain in
+    *  the mathematical sense).  */
+   class domain_error : public logic_error
+   {
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit domain_error(const string& __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr explicit domain_error(const char* __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr domain_error(const domain_error&) = default;
+     constexpr domain_error& operator=(const domain_error&) = default;
+     constexpr domain_error(domain_error&&) = default;
+     constexpr domain_error& operator=(domain_error&&) = default;
+     constexpr virtual ~domain_error() _GLIBCXX_NOTHROW { }
+ #else
+     explicit domain_error(const string& __arg) _GLIBCXX_TXN_SAFE;
+ #if __cplusplus >= 201103L
+     explicit domain_error(const char*) _GLIBCXX_TXN_SAFE;
+     domain_error(const domain_error&) = default;
+     domain_error& operator=(const domain_error&) = default;
+     domain_error(domain_error&&) = default;
+     domain_error& operator=(domain_error&&) = default;
+ #endif
+     virtual ~domain_error() _GLIBCXX_NOTHROW;
+ #endif
+   };
+ 
+   /** Thrown to report invalid arguments to functions.  */
+   class invalid_argument : public logic_error
+   {
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit invalid_argument(const string& __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr explicit invalid_argument(const char* __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr invalid_argument(const invalid_argument&) = default;
+     constexpr invalid_argument& operator=(const invalid_argument&) = default;
+     constexpr invalid_argument(invalid_argument&&) = default;
+     constexpr invalid_argument& operator=(invalid_argument&&) = default;
+     constexpr virtual ~invalid_argument() _GLIBCXX_NOTHROW { }
+ #else
+     explicit invalid_argument(const string& __arg) _GLIBCXX_TXN_SAFE;
+ #if __cplusplus >= 201103L
+     explicit invalid_argument(const char*) _GLIBCXX_TXN_SAFE;
+     invalid_argument(const invalid_argument&) = default;
+     invalid_argument& operator=(const invalid_argument&) = default;
+     invalid_argument(invalid_argument&&) = default;
+     invalid_argument& operator=(invalid_argument&&) = default;
+ #endif
+     virtual ~invalid_argument() _GLIBCXX_NOTHROW;
+ #endif
+   };
+ 
+   /** Thrown when an object is constructed that would exceed its maximum
+    *  permitted size (e.g., a basic_string instance).  */
+   class length_error : public logic_error
+   {
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit length_error(const string& __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr explicit length_error(const char* __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr length_error(const length_error&) = default;
+     constexpr length_error& operator=(const length_error&) = default;
+     constexpr length_error(length_error&&) = default;
+     constexpr length_error& operator=(length_error&&) = default;
+     constexpr virtual ~length_error() _GLIBCXX_NOTHROW { }
+ #else
+     explicit length_error(const string& __arg) _GLIBCXX_TXN_SAFE;
+ #if __cplusplus >= 201103L
+     explicit length_error(const char*) _GLIBCXX_TXN_SAFE;
+     length_error(const length_error&) = default;
+     length_error& operator=(const length_error&) = default;
+     length_error(length_error&&) = default;
+     length_error& operator=(length_error&&) = default;
+ #endif
+     virtual ~length_error() _GLIBCXX_NOTHROW;
+ #endif
+   };
+ 
+   /** This represents an argument whose value is not within the expected
+    *  range (e.g., boundary checks in basic_string).  */
+   class out_of_range : public logic_error
+   {
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit out_of_range(const string& __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr explicit out_of_range(const char* __arg) _GLIBCXX_TXN_SAFE
+     : logic_error(__arg) { }
+     constexpr out_of_range(const out_of_range&) = default;
+     constexpr out_of_range& operator=(const out_of_range&) = default;
+     constexpr out_of_range(out_of_range&&) = default;
+     constexpr out_of_range& operator=(out_of_range&&) = default;
+     constexpr virtual ~out_of_range() _GLIBCXX_NOTHROW { }
+ #else
+     explicit out_of_range(const string& __arg) _GLIBCXX_TXN_SAFE;
+ #if __cplusplus >= 201103L
+     explicit out_of_range(const char*) _GLIBCXX_TXN_SAFE;
+     out_of_range(const out_of_range&) = default;
+     out_of_range& operator=(const out_of_range&) = default;
+     out_of_range(out_of_range&&) = default;
+     out_of_range& operator=(out_of_range&&) = default;
+ #endif
+     virtual ~out_of_range() _GLIBCXX_NOTHROW;
+ #endif
+   };
+ 
+   /** Runtime errors represent problems outside the scope of a program;
+    *  they cannot be easily predicted and can generally only be caught as
+    *  the program executes.
+    *  @brief One of two subclasses of exception.
+    */
+   class runtime_error : public exception
+   {
+     __cow_string _M_msg;
+ 
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit
+     runtime_error(const string& __arg) _GLIBCXX_TXN_SAFE
+     : _M_msg(__arg) {}
+ 
+     constexpr explicit
+     runtime_error(const char* __arg) _GLIBCXX_TXN_SAFE
+     : _M_msg(__arg) {}
+ 
+     constexpr runtime_error(runtime_error&&) noexcept = default;
+     constexpr runtime_error& operator=(runtime_error&&) noexcept = default;
+     constexpr runtime_error(const runtime_error&) noexcept = default;
+     runtime_error& operator=(const runtime_error&) noexcept = default;
+ 
+     constexpr virtual ~runtime_error() _GLIBCXX_TXN_SAFE_DYN noexcept { }
+ 
+     constexpr virtual const char*
+     what() const _GLIBCXX_TXN_SAFE_DYN noexcept
+     {
+       return _M_msg.c_str();
+     }
+ #else
+     /** Takes a character string describing the error.  */
+     explicit
+     runtime_error(const string& __arg) _GLIBCXX_TXN_SAFE;
+ 
+ #if __cplusplus >= 201103L
+     explicit
+     runtime_error(const char*) _GLIBCXX_TXN_SAFE;
+ 
+     runtime_error(runtime_error&&) noexcept;
+     runtime_error& operator=(runtime_error&&) noexcept;
+ #endif
+ 
+ #if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
+     runtime_error(const runtime_error&) _GLIBCXX_NOTHROW;
+     runtime_error& operator=(const runtime_error&) _GLIBCXX_NOTHROW;
+ #elif __cplusplus >= 201103L
+     runtime_error(const runtime_error&) = default;
+     runtime_error& operator=(const runtime_error&) = default;
+ #endif
+ 
+     virtual ~runtime_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
+ 
+     /** Returns a C-style character string describing the general cause of
+      *  the current error (the same string passed to the ctor).  */
+     virtual const char*
+     what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
+ #endif
+ 
+ # ifdef _GLIBCXX_TM_TS_INTERNAL
+     friend void*
+     ::_txnal_runtime_error_get_msg(void* e);
+ # endif
+   };
+ 
+   /** Thrown to indicate arithmetic overflow.  */
+   class overflow_error : public runtime_error
+   {
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit overflow_error(const string& __arg) _GLIBCXX_TXN_SAFE
+     : runtime_error(__arg) { }
+     constexpr explicit overflow_error(const char* __arg) _GLIBCXX_TXN_SAFE
+     : runtime_error(__arg) { }
+     constexpr overflow_error(const overflow_error&) = default;
+     constexpr overflow_error& operator=(const overflow_error&) = default;
+     constexpr overflow_error(overflow_error&&) = default;
+     constexpr overflow_error& operator=(overflow_error&&) = default;
+     constexpr virtual ~overflow_error() noexcept { }
+ #else
+     explicit overflow_error(const string& __arg) _GLIBCXX_TXN_SAFE;
+ #if __cplusplus >= 201103L
+     explicit overflow_error(const char*) _GLIBCXX_TXN_SAFE;
+     overflow_error(const overflow_error&) = default;
+     overflow_error& operator=(const overflow_error&) = default;
+     overflow_error(overflow_error&&) = default;
+     overflow_error& operator=(overflow_error&&) = default;
+ #endif
+     virtual ~overflow_error() _GLIBCXX_NOTHROW;
+ #endif
+   };
+ 
+   /** Thrown to indicate arithmetic underflow.  */
+   class underflow_error : public runtime_error
+   {
+   public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit underflow_error(const string& __arg) _GLIBCXX_TXN_SAFE
+     : runtime_error(__arg) { }
+     constexpr explicit underflow_error(const char* __arg) _GLIBCXX_TXN_SAFE
+     : runtime_error(__arg) { }
+     constexpr underflow_error(const underflow_error&) = default;
+     constexpr underflow_error& operator=(const underflow_error&) = default;
+     constexpr underflow_error(underflow_error&&) = default;
+     constexpr underflow_error& operator=(underflow_error&&) = default;
+     constexpr virtual ~underflow_error() noexcept { }
+ #else
+     explicit underflow_error(const string& __arg) _GLIBCXX_TXN_SAFE;
+ #if __cplusplus >= 201103L
+     explicit underflow_error(const char*) _GLIBCXX_TXN_SAFE;
+     underflow_error(const underflow_error&) = default;
+     underflow_error& operator=(const underflow_error&) = default;
+     underflow_error(underflow_error&&) = default;
+     underflow_error& operator=(underflow_error&&) = default;
+ #endif
+     virtual ~underflow_error() _GLIBCXX_NOTHROW;
+ #endif
+   };
+ 
+   /// @} group exceptions
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ #endif /* _STDEXCEPT_EXCEPT_H */
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_throw.h gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_throw.h
*** gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_throw.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_throw.h	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,61 ----
+ // Function-Based Exception Support -*- C++ -*-
+ 
+ // Copyright (C) 2001-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library 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/>.
+ 
+ /** @file bits/stdexcept_throw.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{stdexcept}
+  */
+ 
+ //
+ // ISO C++ 14882: 19.1  Exception classes
+ //
+ 
+ #include <bits/c++config.h>
+ #include <bits/exception_defines.h>
+ 
+ #if (_GLIBCXX_HOSTED && __cpp_exceptions && __cplusplus > 202302L \
+      && __cpp_constexpr_exceptions >= 202411L)
+ // This is a complicated case.  Classes like std::logic_error
+ // are defined in <stdexcept> but need std::string and <string>
+ // needs __throw_logic_error and a few others.  So, for C++26
+ // constant expression we need to forward declare the constexpr
+ // __throw_logic_error etc. functions when included recursively
+ // from <string> and then at the end of that header make sure
+ // <stdexcept> is included and define those.
+ // If <string> hasn't been included yet, include it at the end
+ // of this header and that will arrange for all these to be
+ // defined.
+ #if defined(_GLIBCXX_STRING) || __glibcxx_exc_in_string == 2
+ #ifdef __glibcxx_exc_in_string
+ #include <bits/stdexcept_throwfwd.h>
+ #else
+ #include <bits/stdexcept_throwdef.h>
+ #endif
+ #endif
+ #if !defined(_GLIBCXX_STRING) && __glibcxx_exc_in_string != 2
+ #include <string>
+ #endif
+ #else
+ #include <bits/stdexcept_throwfwd.h>
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_throwdef.h gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_throwdef.h
*** gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_throwdef.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_throwdef.h	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,177 ----
+ // Function-Based Exception Support -*- C++ -*-
+ 
+ // Copyright (C) 2001-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library 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/>.
+ 
+ /** @file bits/stdexcept_throwdef.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{stdexcept}
+  */
+ 
+ //
+ // ISO C++ 14882: 19.1  Exception classes
+ //
+ 
+ #ifndef _STDEXCEPT_THROWDEF_H
+ #define _STDEXCEPT_THROWDEF_H 1
+ 
+ #include <bits/c++config.h>
+ #include <bits/exception_defines.h>
+ #if (_GLIBCXX_HOSTED && __cpp_exceptions && __cplusplus > 202302L \
+      && __cpp_constexpr_exceptions >= 202411L)
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+   // Helpers for exception objects in <stdexcept>
+   namespace __detail
+   {
+     extern "C"
+     {
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt19__throw_logic_errorPKc(const char*);
+      
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt20__throw_domain_errorPKc(const char*);
+     
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt24__throw_invalid_argumentPKc(const char*);
+ 
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt20__throw_length_errorPKc(const char*);
+   
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt20__throw_out_of_rangePKc(const char*);
+   
+       [[noreturn, __gnu__::__cold__]]
+       [[__gnu__::__format__(__gnu_printf__, 1, 2)]] void
+       _ZSt24__throw_out_of_range_fmtPKcz(const char*, ...);
+   
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt21__throw_runtime_errorPKc(const char*);
+ 
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt22__throw_overflow_errorPKc(const char*);
+   
+       [[noreturn, __gnu__::__cold__]] void
+       _ZSt23__throw_underflow_errorPKc(const char*);
+     }
+   } // namespace __detail
+ 
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_logic_error(const char* __s)
+   {
+     if consteval {
+       throw logic_error(__s);
+     } else {
+       __detail::_ZSt19__throw_logic_errorPKc(__s);
+     }
+   }
+       
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_domain_error(const char* __s)
+   {
+     if consteval {
+       throw domain_error(__s);
+     } else {
+       __detail::_ZSt20__throw_domain_errorPKc(__s);
+     }
+   }
+       
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_invalid_argument(const char* __s)
+   {
+     if consteval {
+       throw invalid_argument(__s);
+     } else {
+       __detail::_ZSt24__throw_invalid_argumentPKc(__s);
+     }
+   }
+       
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_length_error(const char* __s)
+   {
+     if consteval {
+       throw length_error(__s);
+     } else {
+       __detail::_ZSt20__throw_length_errorPKc(__s);
+     }
+   }
+     
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_out_of_range(const char* __s)
+   {
+     if consteval {
+       throw out_of_range(__s);
+     } else {
+       __detail::_ZSt20__throw_out_of_rangePKc(__s);
+     } 
+   }
+     
+   template <typename... _Args>
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_out_of_range_fmt(const char* __s, _Args... __args)
+   {
+     if consteval {
+       throw out_of_range(__s);
+     } else {
+       __detail::_ZSt24__throw_out_of_range_fmtPKcz(__s, __args...);
+     }
+   }
+ 
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_runtime_error(const char* __s)
+   {
+     if consteval {
+       throw runtime_error(__s);
+     } else {
+       __detail::_ZSt21__throw_runtime_errorPKc(__s);
+     }
+   }
+ 
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_overflow_error(const char* __s)
+   {
+     if consteval {
+       throw overflow_error(__s);
+     } else {
+       __detail::_ZSt22__throw_overflow_errorPKc(__s);
+     }
+   }
+   
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_underflow_error(const char* __s)
+   {
+     if consteval {
+       throw underflow_error(__s);
+     } else {
+       __detail::_ZSt23__throw_underflow_errorPKc(__s);
+     } 
+   }
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ #endif
+ 
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_throwfwd.h gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_throwfwd.h
*** gcc-16-20251207/libstdc++-v3/include/bits/stdexcept_throwfwd.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/include/bits/stdexcept_throwfwd.h	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,125 ----
+ // Function-Based Exception Support -*- C++ -*-
+ 
+ // Copyright (C) 2001-2025 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+ // terms of the GNU General Public License as published by the
+ // Free Software Foundation; either version 3, or (at your option)
+ // any later version.
+ 
+ // This library 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/>.
+ 
+ /** @file bits/stdexcept_throwfwd.h
+  *  This is an internal header file, included by other library headers.
+  *  Do not attempt to use it directly. @headername{stdexcept}
+  */
+ 
+ //
+ // ISO C++ 14882: 19.1  Exception classes
+ //
+ 
+ #ifndef _STDEXCEPT_THROWFWD_H
+ #define _STDEXCEPT_THROWFWD_H 1
+ 
+ #include <bits/c++config.h>
+ #include <bits/exception_defines.h>
+ 
+ namespace std _GLIBCXX_VISIBILITY(default)
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ 
+ #if _GLIBCXX_HOSTED
+ #if (__cpp_exceptions && __cplusplus > 202302L \
+      && __cpp_constexpr_exceptions >= 202411L)
+   // Helper for exception objects in <stdexcept>
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_logic_error(const char*);
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_domain_error(const char*);
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_invalid_argument(const char*);
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_length_error(const char*);
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_out_of_range(const char*);
+   template <typename... _Args>
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_out_of_range_fmt(const char* __s, _Args... __args);
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_runtime_error(const char*);
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_overflow_error(const char*);
+   [[noreturn, __gnu__::__always_inline__, __gnu__::__cold__]] constexpr void
+   __throw_underflow_error(const char*);
+ #else
+   // Helpers for exception objects in <stdexcept>
+   void
+   __throw_logic_error(const char*) __attribute__((__noreturn__,__cold__));
+ 
+   void
+   __throw_domain_error(const char*) __attribute__((__noreturn__,__cold__));
+ 
+   void
+   __throw_invalid_argument(const char*) __attribute__((__noreturn__,__cold__));
+ 
+   void
+   __throw_length_error(const char*) __attribute__((__noreturn__,__cold__));
+ 
+   void
+   __throw_out_of_range(const char*) __attribute__((__noreturn__,__cold__));
+ 
+   void
+   __throw_out_of_range_fmt(const char*, ...)
+     __attribute__((__noreturn__,__cold__,__format__(__gnu_printf__, 1, 2)));
+ 
+   void
+   __throw_runtime_error(const char*) __attribute__((__noreturn__,__cold__));
+ 
+   void
+   __throw_overflow_error(const char*) __attribute__((__noreturn__,__cold__));
+ 
+   void
+   __throw_underflow_error(const char*) __attribute__((__noreturn__,__cold__));
+ #endif
+ 
+ #else // ! HOSTED
+ 
+   __attribute__((__noreturn__)) inline void
+   __throw_invalid_argument(const char*)
+   { std::__terminate(); }
+ 
+   __attribute__((__noreturn__)) inline void
+   __throw_out_of_range(const char*)
+   { std::__terminate(); }
+ 
+   __attribute__((__noreturn__)) inline void
+   __throw_out_of_range_fmt(const char*, ...)
+   { std::__terminate(); }
+ 
+   __attribute__((__noreturn__)) inline void
+   __throw_runtime_error(const char*)
+   { std::__terminate(); }
+ 
+   __attribute__((__noreturn__)) inline void
+   __throw_overflow_error(const char*)
+   { std::__terminate(); }
+ 
+ #endif // HOSTED
+ 
+ _GLIBCXX_END_NAMESPACE_VERSION
+ } // namespace
+ 
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/stl_algobase.h gcc-16-20251214/libstdc++-v3/include/bits/stl_algobase.h
*** gcc-16-20251207/libstdc++-v3/include/bits/stl_algobase.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/stl_algobase.h	Sun Dec 14 22:32:17 2025
***************
*** 57,63 ****
  #define _STL_ALGOBASE_H 1
  
  #include <bits/c++config.h>
- #include <bits/functexcept.h>
  #include <bits/cpp_type_traits.h>
  #include <ext/type_traits.h>
  #include <ext/numeric_traits.h>
--- 57,62 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/stl_map.h gcc-16-20251214/libstdc++-v3/include/bits/stl_map.h
*** gcc-16-20251207/libstdc++-v3/include/bits/stl_map.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/stl_map.h	Sun Dec 14 22:32:17 2025
***************
*** 56,62 ****
  #ifndef _STL_MAP_H
  #define _STL_MAP_H 1
  
! #include <bits/functexcept.h>
  #include <bits/concept_check.h>
  #if __cplusplus >= 201103L
  #include <initializer_list>
--- 56,62 ----
  #ifndef _STL_MAP_H
  #define _STL_MAP_H 1
  
! #include <bits/stdexcept_throw.h>
  #include <bits/concept_check.h>
  #if __cplusplus >= 201103L
  #include <initializer_list>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/stl_vector.h gcc-16-20251214/libstdc++-v3/include/bits/stl_vector.h
*** gcc-16-20251207/libstdc++-v3/include/bits/stl_vector.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/stl_vector.h	Sun Dec 14 22:32:17 2025
***************
*** 57,63 ****
  #define _STL_VECTOR_H 1
  
  #include <bits/stl_iterator_base_funcs.h>
! #include <bits/functexcept.h>
  #include <bits/concept_check.h>
  #if __cplusplus >= 201103L
  #include <initializer_list>
--- 57,63 ----
  #define _STL_VECTOR_H 1
  
  #include <bits/stl_iterator_base_funcs.h>
! #include <bits/stdexcept_throw.h>
  #include <bits/concept_check.h>
  #if __cplusplus >= 201103L
  #include <initializer_list>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/version.def gcc-16-20251214/libstdc++-v3/include/bits/version.def
*** gcc-16-20251207/libstdc++-v3/include/bits/version.def	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/version.def	Sun Dec 14 22:32:17 2025
*************** ftms = {
*** 879,886 ****
  
  ftms = {
    name = concepts;
    values = {
!     v = 202002;
      cxxmin = 20;
      extra_cond = "__cpp_concepts >= 201907L";
    };
--- 879,890 ----
  
  ftms = {
    name = concepts;
+   // 201806 P0898R3 Standard Library Concepts
+   // 201907 P1754R1 Rename concepts to standard_case for C++20
+   // 202002 P1964R2 Wording for boolean-testable
+   // 202207 P2404R3 Move-only types for equality_comparable_with, etc.
    values = {
!     v = 202207;
      cxxmin = 20;
      extra_cond = "__cpp_concepts >= 201907L";
    };
*************** ftms = {
*** 1090,1106 ****
    name = padded_layouts;
    no_stdname = true; // internal
    values = {
!     v = 1;
      cxxmin = 26;
    };
  };
  
  ftms = {
    name = submdspan;
-   no_stdname = true; // TODO: change once complete
    values = {
!     v = 1;
      cxxmin = 26;
    };
  };
  
--- 1094,1110 ----
    name = padded_layouts;
    no_stdname = true; // internal
    values = {
!     v = 202403;
      cxxmin = 26;
    };
  };
  
  ftms = {
    name = submdspan;
    values = {
!     v = 202411;
      cxxmin = 26;
+     extra_cond = "__glibcxx_constant_wrapper >= 202506L";
    };
  };
  
*************** ftms = {
*** 1348,1353 ****
--- 1352,1365 ----
  };
  
  ftms = {
+   name = constexpr_flat_set;
+   values = {
+     v = 202502;
+     cxxmin = 26;
+   };
+ };
+ 
+ ftms = {
    name = constexpr_string;
    values = {
      v = 201907;
*************** ftms = {
*** 2208,2217 ****
  
  ftms = {
    name = constexpr_exceptions;
-   // TODO Remove when PR121114 is resolved
-   no_stdname = true;
    values = {
!     v = 1; // TODO 202411;
      cxxmin = 26;
      extra_cond = "__cpp_constexpr_exceptions >= 202411L";
    };
--- 2220,2227 ----
  
  ftms = {
    name = constexpr_exceptions;
    values = {
!     v = 202502;
      cxxmin = 26;
      extra_cond = "__cpp_constexpr_exceptions >= 202411L";
    };
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/bits/version.h gcc-16-20251214/libstdc++-v3/include/bits/version.h
*** gcc-16-20251207/libstdc++-v3/include/bits/version.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/bits/version.h	Sun Dec 14 22:32:17 2025
***************
*** 985,993 ****
  
  #if !defined(__cpp_lib_concepts)
  # if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L)
! #  define __glibcxx_concepts 202002L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_concepts)
! #   define __cpp_lib_concepts 202002L
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_concepts) */
--- 985,993 ----
  
  #if !defined(__cpp_lib_concepts)
  # if (__cplusplus >= 202002L) && (__cpp_concepts >= 201907L)
! #  define __glibcxx_concepts 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_concepts)
! #   define __cpp_lib_concepts 202207L
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_concepts) */
***************
*** 1214,1220 ****
  
  #if !defined(__cpp_lib_padded_layouts)
  # if (__cplusplus >  202302L)
! #  define __glibcxx_padded_layouts 1L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_padded_layouts)
  #  endif
  # endif
--- 1214,1220 ----
  
  #if !defined(__cpp_lib_padded_layouts)
  # if (__cplusplus >  202302L)
! #  define __glibcxx_padded_layouts 202403L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_padded_layouts)
  #  endif
  # endif
***************
*** 1222,1230 ****
  #undef __glibcxx_want_padded_layouts
  
  #if !defined(__cpp_lib_submdspan)
! # if (__cplusplus >  202302L)
! #  define __glibcxx_submdspan 1L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan)
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_submdspan) */
--- 1222,1231 ----
  #undef __glibcxx_want_padded_layouts
  
  #if !defined(__cpp_lib_submdspan)
! # if (__cplusplus >  202302L) && (__glibcxx_constant_wrapper >= 202506L)
! #  define __glibcxx_submdspan 202411L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan)
+ #   define __cpp_lib_submdspan 202411L
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_submdspan) */
***************
*** 1495,1500 ****
--- 1496,1511 ----
  #endif /* !defined(__cpp_lib_constexpr_dynamic_alloc) */
  #undef __glibcxx_want_constexpr_dynamic_alloc
  
+ #if !defined(__cpp_lib_constexpr_flat_set)
+ # if (__cplusplus >  202302L)
+ #  define __glibcxx_constexpr_flat_set 202502L
+ #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_flat_set)
+ #   define __cpp_lib_constexpr_flat_set 202502L
+ #  endif
+ # endif
+ #endif /* !defined(__cpp_lib_constexpr_flat_set) */
+ #undef __glibcxx_want_constexpr_flat_set
+ 
  #if !defined(__cpp_lib_constexpr_string)
  # if (__cplusplus >= 202002L) && _GLIBCXX_USE_CXX11_ABI && _GLIBCXX_HOSTED && (defined(__glibcxx_is_constant_evaluated))
  #  define __glibcxx_constexpr_string 201907L
***************
*** 2037,2043 ****
  #   define __cpp_lib_common_reference 202302L
  #  endif
  # endif
! #endif /* !defined(__cpp_lib_common_reference) && defined(__glibcxx_want_common_reference) */
  #undef __glibcxx_want_common_reference
  
  #if !defined(__cpp_lib_common_reference_wrapper)
--- 2048,2054 ----
  #   define __cpp_lib_common_reference 202302L
  #  endif
  # endif
! #endif /* !defined(__cpp_lib_common_reference) */
  #undef __glibcxx_want_common_reference
  
  #if !defined(__cpp_lib_common_reference_wrapper)
***************
*** 2047,2053 ****
  #   define __cpp_lib_common_reference_wrapper 202302L
  #  endif
  # endif
! #endif /* !defined(__cpp_lib_common_reference_wrapper) && defined(__glibcxx_want_common_reference_wrapper) */
  #undef __glibcxx_want_common_reference_wrapper
  
  #if !defined(__cpp_lib_formatters)
--- 2058,2064 ----
  #   define __cpp_lib_common_reference_wrapper 202302L
  #  endif
  # endif
! #endif /* !defined(__cpp_lib_common_reference_wrapper) */
  #undef __glibcxx_want_common_reference_wrapper
  
  #if !defined(__cpp_lib_formatters)
***************
*** 2477,2484 ****
  
  #if !defined(__cpp_lib_constexpr_exceptions)
  # if (__cplusplus >  202302L) && (__cpp_constexpr_exceptions >= 202411L)
! #  define __glibcxx_constexpr_exceptions 1L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_exceptions)
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_constexpr_exceptions) */
--- 2488,2496 ----
  
  #if !defined(__cpp_lib_constexpr_exceptions)
  # if (__cplusplus >  202302L) && (__cpp_constexpr_exceptions >= 202411L)
! #  define __glibcxx_constexpr_exceptions 202502L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_exceptions)
+ #   define __cpp_lib_constexpr_exceptions 202502L
  #  endif
  # endif
  #endif /* !defined(__cpp_lib_constexpr_exceptions) */
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/c_compatibility/stdckdint.h gcc-16-20251214/libstdc++-v3/include/c_compatibility/stdckdint.h
*** gcc-16-20251207/libstdc++-v3/include/c_compatibility/stdckdint.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/c_compatibility/stdckdint.h	Sun Dec 14 22:32:17 2025
***************
*** 40,54 ****
  namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
  {
  #endif
- /// @cond undocumented
- namespace __detail
- {
-   template<typename _Tp>
-     concept __cv_unqual_signed_or_unsigned_integer_type
-       = std::same_as<_Tp, std::remove_cv_t<_Tp>>
- 	  && std::__is_standard_integer<_Tp>::value;
- }
- /// @endcond
  
  /** Checked integer arithmetic
   *
--- 40,45 ----
*************** template<typename _Tp1, typename _Tp2, t
*** 71,80 ****
    inline bool
    ckd_add(_Tp1* __result, _Tp2 __a, _Tp3 __b)
    {
!     using __gnu_cxx::__detail::__cv_unqual_signed_or_unsigned_integer_type;
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp1>);
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp2>);
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp3>);
      return __builtin_add_overflow(__a, __b, __result);
    }
  
--- 62,70 ----
    inline bool
    ckd_add(_Tp1* __result, _Tp2 __a, _Tp3 __b)
    {
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp1>::value);
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp2>::value);
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp3>::value);
      return __builtin_add_overflow(__a, __b, __result);
    }
  
*************** template<typename _Tp1, typename _Tp2, t
*** 82,91 ****
    inline bool
    ckd_sub(_Tp1* __result, _Tp2 __a, _Tp3 __b)
    {
!     using __gnu_cxx::__detail::__cv_unqual_signed_or_unsigned_integer_type;
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp1>);
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp2>);
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp3>);
      return __builtin_sub_overflow(__a, __b, __result);
    }
  
--- 72,80 ----
    inline bool
    ckd_sub(_Tp1* __result, _Tp2 __a, _Tp3 __b)
    {
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp1>::value);
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp2>::value);
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp3>::value);
      return __builtin_sub_overflow(__a, __b, __result);
    }
  
*************** template<typename _Tp1, typename _Tp2, t
*** 93,107 ****
    inline bool
    ckd_mul(_Tp1* __result, _Tp2 __a, _Tp3 __b)
    {
!     using __gnu_cxx::__detail::__cv_unqual_signed_or_unsigned_integer_type;
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp1>);
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp2>);
!     static_assert(__cv_unqual_signed_or_unsigned_integer_type<_Tp3>);
      return __builtin_mul_overflow(__a, __b, __result);
    }
  /// @}
  #ifndef _GLIBCXX_DOXYGEN
! }
  
  using __gnu_cxx::ckd_add;
  using __gnu_cxx::ckd_sub;
--- 82,95 ----
    inline bool
    ckd_mul(_Tp1* __result, _Tp2 __a, _Tp3 __b)
    {
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp1>::value);
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp2>::value);
!     static_assert(std::__is_signed_or_unsigned_integer<_Tp3>::value);
      return __builtin_mul_overflow(__a, __b, __result);
    }
  /// @}
  #ifndef _GLIBCXX_DOXYGEN
! } // namespace __gnu_cxx
  
  using __gnu_cxx::ckd_add;
  using __gnu_cxx::ckd_sub;
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/experimental/optional gcc-16-20251214/libstdc++-v3/include/experimental/optional
*** gcc-16-20251207/libstdc++-v3/include/experimental/optional	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/experimental/optional	Sun Dec 14 22:32:17 2025
***************
*** 38,44 ****
  #include <stdexcept>
  #include <new>
  #include <initializer_list>
! #include <bits/functexcept.h>
  #include <bits/functional_hash.h>
  #include <bits/enable_special_members.h>
  #include <bits/move.h>
--- 38,44 ----
  #include <stdexcept>
  #include <new>
  #include <initializer_list>
! #include <bits/exception_defines.h>
  #include <bits/functional_hash.h>
  #include <bits/enable_special_members.h>
  #include <bits/move.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/bitmap_allocator.h gcc-16-20251214/libstdc++-v3/include/ext/bitmap_allocator.h
*** gcc-16-20251207/libstdc++-v3/include/ext/bitmap_allocator.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/bitmap_allocator.h	Sun Dec 14 22:32:17 2025
***************
*** 32,38 ****
  #include <bits/requires_hosted.h> // GNU extensions are currently omitted
  
  #include <utility> // For std::pair.
! #include <bits/functexcept.h> // For __throw_bad_alloc().
  #include <bits/stl_function.h> // For greater_equal, and less_equal.
  #include <new> // For operator new.
  #include <debug/debug.h> // _GLIBCXX_DEBUG_ASSERT
--- 32,38 ----
  #include <bits/requires_hosted.h> // GNU extensions are currently omitted
  
  #include <utility> // For std::pair.
! #include <bits/new_throw.h> // For __throw_bad_alloc().
  #include <bits/stl_function.h> // For greater_equal, and less_equal.
  #include <new> // For operator new.
  #include <debug/debug.h> // _GLIBCXX_DEBUG_ASSERT
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/concurrence.h gcc-16-20251214/libstdc++-v3/include/ext/concurrence.h
*** gcc-16-20251207/libstdc++-v3/include/ext/concurrence.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/concurrence.h	Sun Dec 14 22:32:17 2025
***************
*** 35,41 ****
  
  #include <exception>
  #include <bits/gthr.h>
! #include <bits/functexcept.h>
  #include <bits/cpp_type_traits.h>
  #include <ext/type_traits.h>
  
--- 35,41 ----
  
  #include <exception>
  #include <bits/gthr.h>
! #include <bits/exception_defines.h>
  #include <bits/cpp_type_traits.h>
  #include <ext/type_traits.h>
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/debug_allocator.h gcc-16-20251214/libstdc++-v3/include/ext/debug_allocator.h
*** gcc-16-20251207/libstdc++-v3/include/ext/debug_allocator.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/debug_allocator.h	Sun Dec 14 22:32:17 2025
***************
*** 45,51 ****
  #include <bits/requires_hosted.h> // GNU extensions are currently omitted
  
  #include <stdexcept>
! #include <bits/functexcept.h>
  #include <ext/alloc_traits.h>
  
  namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
--- 45,51 ----
  #include <bits/requires_hosted.h> // GNU extensions are currently omitted
  
  #include <stdexcept>
! #include <bits/stdexcept_throw.h>
  #include <ext/alloc_traits.h>
  
  namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/malloc_allocator.h gcc-16-20251214/libstdc++-v3/include/ext/malloc_allocator.h
*** gcc-16-20251207/libstdc++-v3/include/ext/malloc_allocator.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/malloc_allocator.h	Sun Dec 14 22:32:17 2025
***************
*** 34,40 ****
  #include <cstdlib>
  #include <cstddef>
  #include <new>
! #include <bits/functexcept.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
  #include <type_traits>
--- 34,40 ----
  #include <cstdlib>
  #include <cstddef>
  #include <new>
! #include <bits/new_throw.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
  #include <type_traits>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/mt_allocator.h gcc-16-20251214/libstdc++-v3/include/ext/mt_allocator.h
*** gcc-16-20251207/libstdc++-v3/include/ext/mt_allocator.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/mt_allocator.h	Sun Dec 14 22:32:17 2025
***************
*** 33,39 ****
  
  #include <new>
  #include <cstdlib>
! #include <bits/functexcept.h>
  #include <ext/atomicity.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
--- 33,39 ----
  
  #include <new>
  #include <cstdlib>
! #include <bits/new_throw.h>
  #include <ext/atomicity.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/numeric_traits.h gcc-16-20251214/libstdc++-v3/include/ext/numeric_traits.h
*** gcc-16-20251207/libstdc++-v3/include/ext/numeric_traits.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/numeric_traits.h	Sun Dec 14 22:32:17 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 48,54 ****
    // or is_signed, digits10, max_digits10, or max_exponent10 for floats.
  
    // Unlike __is_integer (and std::is_integral) this trait is true for
!   // non-standard built-in integer types such as __int128 and __int20.
    template<typename _Tp>
      struct __is_integer_nonstrict
      : public std::__is_integer<_Tp>
--- 48,54 ----
    // or is_signed, digits10, max_digits10, or max_exponent10 for floats.
  
    // Unlike __is_integer (and std::is_integral) this trait is true for
!   // non-standard built-in integer types such as __int20.
    template<typename _Tp>
      struct __is_integer_nonstrict
      : public std::__is_integer<_Tp>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/pool_allocator.h gcc-16-20251214/libstdc++-v3/include/ext/pool_allocator.h
*** gcc-16-20251207/libstdc++-v3/include/ext/pool_allocator.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/pool_allocator.h	Sun Dec 14 22:32:17 2025
***************
*** 47,53 ****
  #include <bits/c++config.h>
  #include <cstdlib>
  #include <new>
! #include <bits/functexcept.h>
  #include <ext/atomicity.h>
  #include <ext/concurrence.h>
  #include <bits/move.h>
--- 47,53 ----
  #include <bits/c++config.h>
  #include <cstdlib>
  #include <new>
! #include <bits/new_throw.h>
  #include <ext/atomicity.h>
  #include <ext/concurrence.h>
  #include <bits/move.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/ropeimpl.h gcc-16-20251214/libstdc++-v3/include/ext/ropeimpl.h
*** gcc-16-20251207/libstdc++-v3/include/ext/ropeimpl.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/ropeimpl.h	Sun Dec 14 22:32:17 2025
***************
*** 42,48 ****
  
  #include <cstdio>
  #include <ostream>
! #include <bits/functexcept.h>
  
  #include <ext/algorithm> // For copy_n and lexicographical_compare_3way
  #include <ext/memory> // For uninitialized_copy_n
--- 42,48 ----
  
  #include <cstdio>
  #include <ostream>
! #include <bits/stdexcept_throw.h>
  
  #include <ext/algorithm> // For copy_n and lexicographical_compare_3way
  #include <ext/memory> // For uninitialized_copy_n
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/string_conversions.h gcc-16-20251214/libstdc++-v3/include/ext/string_conversions.h
*** gcc-16-20251207/libstdc++-v3/include/ext/string_conversions.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/string_conversions.h	Sun Dec 14 22:32:17 2025
***************
*** 41,47 ****
  
  #include <bits/c++config.h>
  #include <ext/numeric_traits.h>
! #include <bits/functexcept.h>
  #include <cstdlib>
  #include <cwchar>
  #include <cstdio>
--- 41,47 ----
  
  #include <bits/c++config.h>
  #include <ext/numeric_traits.h>
! #include <bits/stdexcept_throw.h>
  #include <cstdlib>
  #include <cwchar>
  #include <cstdio>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/throw_allocator.h gcc-16-20251214/libstdc++-v3/include/ext/throw_allocator.h
*** gcc-16-20251207/libstdc++-v3/include/ext/throw_allocator.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/throw_allocator.h	Sun Dec 14 22:32:17 2025
***************
*** 55,61 ****
  #include <ostream>
  #include <stdexcept>
  #include <utility>
! #include <bits/functexcept.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
  # include <functional>
--- 55,62 ----
  #include <ostream>
  #include <stdexcept>
  #include <utility>
! #include <bits/new_throw.h>
! #include <bits/stdexcept_throw.h>
  #include <bits/move.h>
  #if __cplusplus >= 201103L
  # include <functional>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/ext/vstring_util.h gcc-16-20251214/libstdc++-v3/include/ext/vstring_util.h
*** gcc-16-20251207/libstdc++-v3/include/ext/vstring_util.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/ext/vstring_util.h	Sun Dec 14 22:32:17 2025
***************
*** 39,45 ****
  #include <ext/vstring_fwd.h>
  #include <debug/debug.h>
  #include <bits/stl_function.h>  // For less
! #include <bits/functexcept.h>
  #include <bits/localefwd.h>
  #include <bits/ostream_insert.h>
  #include <bits/stl_iterator.h>
--- 39,45 ----
  #include <ext/vstring_fwd.h>
  #include <debug/debug.h>
  #include <bits/stl_function.h>  // For less
! #include <bits/stdexcept_throw.h>
  #include <bits/localefwd.h>
  #include <bits/ostream_insert.h>
  #include <bits/stl_iterator.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/array gcc-16-20251214/libstdc++-v3/include/std/array
*** gcc-16-20251207/libstdc++-v3/include/std/array	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/array	Sun Dec 14 22:32:17 2025
***************
*** 41,47 ****
  #include <initializer_list>
  
  #include <type_traits>
! #include <bits/functexcept.h>
  #include <bits/stl_algobase.h>
  #include <bits/range_access.h> // std::begin, std::end etc.
  #include <bits/utility.h>      // std::index_sequence, std::tuple_size
--- 41,47 ----
  #include <initializer_list>
  
  #include <type_traits>
! #include <bits/stdexcept_throw.h>
  #include <bits/stl_algobase.h>
  #include <bits/range_access.h> // std::begin, std::end etc.
  #include <bits/utility.h>      // std::index_sequence, std::tuple_size
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/bitset gcc-16-20251214/libstdc++-v3/include/std/bitset
*** gcc-16-20251207/libstdc++-v3/include/std/bitset	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/bitset	Sun Dec 14 22:32:17 2025
***************
*** 46,53 ****
  #pragma GCC system_header
  #endif
  
! #include <bits/functexcept.h>   // For invalid_argument, out_of_range,
!                                 // overflow_error
  #include <bits/stl_algobase.h>  // For std::fill
  
  #if _GLIBCXX_HOSTED
--- 46,53 ----
  #pragma GCC system_header
  #endif
  
! #include <bits/stdexcept_throw.h> // For invalid_argument, out_of_range,
! 				  // overflow_error
  #include <bits/stl_algobase.h>  // For std::fill
  
  #if _GLIBCXX_HOSTED
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/charconv gcc-16-20251214/libstdc++-v3/include/std/charconv
*** gcc-16-20251207/libstdc++-v3/include/std/charconv	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/charconv	Sun Dec 14 22:32:17 2025
*************** namespace __detail
*** 554,563 ****
  
  } // namespace __detail
  
!   /// std::from_chars for integral types.
    template<typename _Tp,
! 	   enable_if_t<__or_<__is_standard_integer<_Tp>,
! 			     is_same<char, remove_cv_t<_Tp>>>::value, int> = 0>
      _GLIBCXX23_CONSTEXPR from_chars_result
      from_chars(const char* __first, const char* __last, _Tp& __value,
  	       int __base = 10)
--- 554,563 ----
  
  } // namespace __detail
  
!   /// std::from_chars for integer types.
    template<typename _Tp,
! 	   enable_if_t<__or_<__is_signed_or_unsigned_integer<_Tp>,
! 			     is_same<char, _Tp>>::value, int> = 0>
      _GLIBCXX23_CONSTEXPR from_chars_result
      from_chars(const char* __first, const char* __last, _Tp& __value,
  	       int __base = 10)
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/concepts gcc-16-20251214/libstdc++-v3/include/std/concepts
*** gcc-16-20251207/libstdc++-v3/include/std/concepts	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/concepts	Sun Dec 14 22:32:17 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 296,301 ****
--- 296,322 ----
  	  { { !static_cast<_Tp&&>(__t) } -> __boolean_testable_impl; };
    } // namespace __detail
  
+   // [concept.comparisoncommontype], helpers for comparison common types
+   namespace __detail
+   {
+     template<typename _Tp, typename _Up,
+ 	     typename _Cref = common_reference_t<const _Tp&, const _Up&>>
+       concept __comparison_common_type_with_impl
+ 	= same_as<common_reference_t<const _Tp&, const _Up&>,
+ 		  common_reference_t<const _Up&, const _Tp&>>
+ 	    && requires {
+ 	      requires convertible_to<const _Tp&, const _Cref&>
+ 		|| convertible_to<_Tp, const _Cref&>;
+ 	      requires convertible_to<const _Up&, const _Cref&>
+ 		|| convertible_to<_Up, const _Cref&>;
+ 	    };
+ 
+     template<typename _Tp, typename _Up>
+       concept __comparison_common_type_with
+ 	= __comparison_common_type_with_impl<remove_cvref_t<_Tp>,
+ 					     remove_cvref_t<_Up>>;
+   } // namespace __detail
+ 
    // [concept.equalitycomparable], concept equality_comparable
  
    namespace __detail
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 316,322 ****
    template<typename _Tp, typename _Up>
      concept equality_comparable_with
        = equality_comparable<_Tp> && equality_comparable<_Up>
!       && common_reference_with<__detail::__cref<_Tp>, __detail::__cref<_Up>>
        && equality_comparable<common_reference_t<__detail::__cref<_Tp>,
  						__detail::__cref<_Up>>>
        && __detail::__weakly_eq_cmp_with<_Tp, _Up>;
--- 337,343 ----
    template<typename _Tp, typename _Up>
      concept equality_comparable_with
        = equality_comparable<_Tp> && equality_comparable<_Up>
!       && __detail::__comparison_common_type_with<_Tp, _Up>
        && equality_comparable<common_reference_t<__detail::__cref<_Tp>,
  						__detail::__cref<_Up>>>
        && __detail::__weakly_eq_cmp_with<_Tp, _Up>;
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/deque gcc-16-20251214/libstdc++-v3/include/std/deque
*** gcc-16-20251207/libstdc++-v3/include/std/deque	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/deque	Sun Dec 14 22:32:17 2025
***************
*** 61,66 ****
--- 61,67 ----
  
  #include <bits/requires_hosted.h> // containers are hosted only
  
+ #include <bits/stdexcept_throw.h>
  #include <bits/stl_algobase.h>
  #include <bits/allocator.h>
  #include <bits/stl_construct.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/expected gcc-16-20251214/libstdc++-v3/include/std/expected
*** gcc-16-20251207/libstdc++-v3/include/std/expected	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/expected	Sun Dec 14 22:32:17 2025
***************
*** 36,41 ****
--- 36,42 ----
  #define __glibcxx_want_expected
  #define __glibcxx_want_freestanding_expected
  #define __glibcxx_want_constrained_equality
+ #define __glibcxx_want_constexpr_exceptions
  #include <bits/version.h>
  
  #ifdef __cpp_lib_expected // C++ >= 23 && __cpp_concepts >= 202002L
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 77,97 ****
    template<typename _Er>
      class bad_expected_access;
  
    template<>
      class bad_expected_access<void> : public exception
      {
      protected:
!       bad_expected_access() noexcept { }
        bad_expected_access(const bad_expected_access&) noexcept = default;
        bad_expected_access(bad_expected_access&&) noexcept = default;
        bad_expected_access& operator=(const bad_expected_access&) noexcept = default;
        bad_expected_access& operator=(bad_expected_access&&) noexcept = default;
        ~bad_expected_access() = default;
  
      public:
  
        [[nodiscard]]
!       const char*
        what() const noexcept override
        { return "bad access to std::expected without expected value"; }
      };
--- 78,109 ----
    template<typename _Er>
      class bad_expected_access;
  
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+ #define _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS constexpr
+ #else
+ #define _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS
+ #endif
+ 
    template<>
      class bad_expected_access<void> : public exception
      {
      protected:
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS bad_expected_access() noexcept { }
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS
        bad_expected_access(const bad_expected_access&) noexcept = default;
+       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS
        bad_expected_access(bad_expected_access&&) noexcept = default;
+       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS
        bad_expected_access& operator=(const bad_expected_access&) noexcept = default;
+       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS
        bad_expected_access& operator=(bad_expected_access&&) noexcept = default;
+       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS
        ~bad_expected_access() = default;
  
      public:
  
        [[nodiscard]]
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS const char*
        what() const noexcept override
        { return "bad access to std::expected without expected value"; }
      };
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 99,126 ****
    template<typename _Er>
      class bad_expected_access : public bad_expected_access<void> {
      public:
!       explicit
        bad_expected_access(_Er __e) : _M_unex(std::move(__e)) { }
  
        // XXX const char* what() const noexcept override;
  
        [[nodiscard]]
!       _Er&
        error() & noexcept
        { return _M_unex; }
  
        [[nodiscard]]
!       const _Er&
        error() const & noexcept
        { return _M_unex; }
  
        [[nodiscard]]
!       _Er&&
        error() && noexcept
        { return std::move(_M_unex); }
  
        [[nodiscard]]
!       const _Er&&
        error() const && noexcept
        { return std::move(_M_unex); }
  
--- 111,138 ----
    template<typename _Er>
      class bad_expected_access : public bad_expected_access<void> {
      public:
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS explicit
        bad_expected_access(_Er __e) : _M_unex(std::move(__e)) { }
  
        // XXX const char* what() const noexcept override;
  
        [[nodiscard]]
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS _Er&
        error() & noexcept
        { return _M_unex; }
  
        [[nodiscard]]
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS const _Er&
        error() const & noexcept
        { return _M_unex; }
  
        [[nodiscard]]
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS _Er&&
        error() && noexcept
        { return std::move(_M_unex); }
  
        [[nodiscard]]
!       _GLIBCXX_CONSTEXPR_BAD_EXPECTED_ACCESS const _Er&&
        error() const && noexcept
        { return std::move(_M_unex); }
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/flat_map gcc-16-20251214/libstdc++-v3/include/std/flat_map
*** gcc-16-20251207/libstdc++-v3/include/std/flat_map	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/flat_map	Sun Dec 14 22:32:17 2025
***************
*** 47,53 ****
  #include <ranges> // views::zip
  #include <type_traits>
  #include <vector>
! #include <bits/functexcept.h>
  #include <bits/stl_algo.h>
  #include <bits/stl_function.h>  // less
  #include <bits/stl_pair.h>
--- 47,53 ----
  #include <ranges> // views::zip
  #include <type_traits>
  #include <vector>
! #include <bits/stdexcept_throw.h>
  #include <bits/stl_algo.h>
  #include <bits/stl_function.h>  // less
  #include <bits/stl_pair.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/flat_set gcc-16-20251214/libstdc++-v3/include/std/flat_set
*** gcc-16-20251207/libstdc++-v3/include/std/flat_set	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/flat_set	Sun Dec 14 22:32:17 2025
***************
*** 33,38 ****
--- 33,39 ----
  #pragma GCC system_header
  #endif
  
+ #define __glibcxx_want_constexpr_flat_set
  #define __glibcxx_want_flat_set
  #include <bits/version.h>
  
***************
*** 46,52 ****
  #include <optional>
  #include <type_traits>
  #include <vector>
- #include <bits/functexcept.h>
  #include <bits/stl_algo.h>
  #include <bits/stl_function.h>  // less
  #include <bits/stl_pair.h>
--- 47,52 ----
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 100,149 ****
--- 100,159 ----
        {
  	container_type* _M_cont;
  
+ 	_GLIBCXX26_CONSTEXPR
  	_ClearGuard(container_type& __cont)
  	: _M_cont(std::__addressof(__cont))
  	{ }
  
+ 	_GLIBCXX26_CONSTEXPR
  	~_ClearGuard()
  	{
  	  if (_M_cont)
  	    _M_cont->clear();
  	}
  
+ 	_GLIBCXX26_CONSTEXPR
  	void
  	_M_disable()
  	{ _M_cont = nullptr; }
        };
  
+       _GLIBCXX26_CONSTEXPR
        _ClearGuard
        _M_make_clear_guard()
        { return _ClearGuard{this->_M_cont}; }
  
      public:
        // constructors
+       _GLIBCXX26_CONSTEXPR
        _Flat_set_impl() : _Flat_set_impl(key_compare()) { }
  
+       _GLIBCXX26_CONSTEXPR
        explicit
        _Flat_set_impl(const key_compare& __comp)
        : _M_cont(), _M_comp(__comp)
        { }
  
+       _GLIBCXX26_CONSTEXPR
        _Flat_set_impl(container_type __cont, const key_compare& __comp = key_compare())
        : _M_cont(std::move(__cont)), _M_comp(__comp)
        { _M_sort_uniq(); }
  
+       _GLIBCXX26_CONSTEXPR
        _Flat_set_impl(__sorted_t,
  		     container_type __cont, const key_compare& __comp = key_compare())
        : _M_cont(std::move(__cont)), _M_comp(__comp)
        { _GLIBCXX_DEBUG_ASSERT(ranges::is_sorted(_M_cont, _M_comp)); }
  
        template<__has_input_iter_cat _InputIterator>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(_InputIterator __first, _InputIterator __last,
  		       const key_compare& __comp = key_compare())
  	: _M_cont(), _M_comp(__comp)
  	{ insert(__first, __last); }
  
        template<__has_input_iter_cat _InputIterator>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(__sorted_t __s,
  		       _InputIterator __first, _InputIterator __last,
  		       const key_compare& __comp = key_compare())
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 151,170 ****
--- 161,184 ----
  	{ insert(__s, __first, __last); }
  
        template<__detail::__container_compatible_range<value_type> _Rg>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(from_range_t, _Rg&& __rg)
  	: _Flat_set_impl(from_range, std::forward<_Rg>(__rg), key_compare())
  	{ }
  
        template<__detail::__container_compatible_range<value_type> _Rg>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(from_range_t, _Rg&& __rg, const key_compare& __comp)
  	: _Flat_set_impl(__comp)
  	{ insert_range(std::forward<_Rg>(__rg)); }
  
+       _GLIBCXX26_CONSTEXPR
        _Flat_set_impl(initializer_list<value_type> __il,
  		     const key_compare& __comp = key_compare())
        : _Flat_set_impl(__il.begin(), __il.end(), __comp)
        { }
  
+       _GLIBCXX26_CONSTEXPR
        _Flat_set_impl(__sorted_t __s,
  		     initializer_list<value_type> __il,
  		     const key_compare& __comp = key_compare())
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 174,196 ****
--- 188,214 ----
        // constructors with allocators
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	explicit
  	_Flat_set_impl(const _Alloc& __a)
  	: _Flat_set_impl(key_compare(), __a)
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(const key_compare& __comp, const _Alloc& __a)
  	: _M_cont(std::make_obj_using_allocator<container_type>(__a)),
  	  _M_comp(__comp)
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(const container_type& __cont, const _Alloc& __a)
  	: _Flat_set_impl(__cont, key_compare(), __a)
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(const container_type& __cont, const key_compare& __comp,
  		       const _Alloc& __a)
  	: _M_cont(std::make_obj_using_allocator<container_type>(__a, __cont)),
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 198,208 ****
--- 216,228 ----
  	{ _M_sort_uniq(); }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(__sorted_t __s, const container_type& __cont, const _Alloc& __a)
  	: _Flat_set_impl(__s, __cont, key_compare(), __a)
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(__sorted_t, const container_type& __cont, const key_compare& __comp,
  		       const _Alloc& __a)
  	: _M_cont(std::make_obj_using_allocator<container_type>(__a, __cont)),
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 210,233 ****
--- 230,257 ----
  	{ _GLIBCXX_DEBUG_ASSERT(ranges::is_sorted(_M_cont, _M_comp)); }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(const _Derived& __x, const _Alloc& __a)
  	: _M_cont(std::make_obj_using_allocator<container_type>(__a, __x._M_cont)),
  	  _M_comp(__x._M_comp)
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(_Derived&& __x, const _Alloc& __a)
  	: _M_cont(std::make_obj_using_allocator<container_type>(__a, std::move(__x._M_cont))),
  	  _M_comp(__x._M_comp)
  	{ }
  
        template<__has_input_iter_cat _InputIterator, __allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(_InputIterator __first, _InputIterator __last,
  		       const _Alloc& __a)
  	: _Flat_set_impl(std::move(__first), std::move(__last), key_compare(), __a)
  	{ }
  
        template<__has_input_iter_cat _InputIterator, __allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(_InputIterator __first, _InputIterator __last,
  		       const key_compare& __comp,
  		       const _Alloc& __a)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 235,240 ****
--- 259,265 ----
  	{ insert(__first, __last); }
  
        template<__has_input_iter_cat _InputIterator, __allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(__sorted_t __s,
  		       _InputIterator __first, _InputIterator __last,
  		       const _Alloc& __a)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 242,247 ****
--- 267,273 ----
  	{ }
  
        template<__has_input_iter_cat _InputIterator, __allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(__sorted_t __s,
  		       _InputIterator __first, _InputIterator __last,
  		       const key_compare& __comp,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 251,256 ****
--- 277,283 ----
  
        template<__detail::__container_compatible_range<value_type> _Rg,
  	       __allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(from_range_t, _Rg&& __rg,
  		       const _Alloc& __a)
  	: _Flat_set_impl(from_range, std::forward<_Rg>(__rg), key_compare(), __a)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 258,263 ****
--- 285,291 ----
  
        template<__detail::__container_compatible_range<value_type> _Rg,
  	       __allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(from_range_t, _Rg&& __rg,
  		       const key_compare& __comp,
  		       const _Alloc& __a)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 265,276 ****
--- 293,306 ----
  	{ insert_range(std::forward<_Rg>(__rg)); }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(initializer_list<value_type> __il,
  		       const _Alloc& __a)
  	: _Flat_set_impl(__il, key_compare(), __a)
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(initializer_list<value_type> __il,
  		       const key_compare& __comp,
  		       const _Alloc& __a)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 278,283 ****
--- 308,314 ----
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(__sorted_t __s,
  		       initializer_list<value_type> __il,
  		       const _Alloc& __a)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 285,290 ****
--- 316,322 ----
  	{ }
  
        template<__allocator_for<container_type> _Alloc>
+ 	_GLIBCXX26_CONSTEXPR
  	_Flat_set_impl(__sorted_t __s,
  		       initializer_list<value_type> __il,
  		       const key_compare& __comp,
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 292,297 ****
--- 324,330 ----
  	: _Flat_set_impl(__s, __il.begin(), __il.end(), __comp, __a)
  	{ }
  
+       _GLIBCXX26_CONSTEXPR
        _Derived&
        operator=(initializer_list<value_type> __il)
        {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 303,356 ****
--- 336,401 ----
        }
  
        // iterators
+       _GLIBCXX26_CONSTEXPR
        const_iterator
        begin() const noexcept
        { return _M_cont.begin(); }
  
+       _GLIBCXX26_CONSTEXPR
        const_iterator
        end() const noexcept
        { return _M_cont.end(); }
  
+       _GLIBCXX26_CONSTEXPR
        const_reverse_iterator
        rbegin() const noexcept
        { return const_reverse_iterator(end()); }
  
+       _GLIBCXX26_CONSTEXPR
        const_reverse_iterator
        rend() const noexcept
        { return const_reverse_iterator(begin()); }
  
+       _GLIBCXX26_CONSTEXPR
        const_iterator
        cbegin() const noexcept
        { return begin(); }
  
+       _GLIBCXX26_CONSTEXPR
        const_iterator
        cend() const noexcept
        { return end(); }
  
+       _GLIBCXX26_CONSTEXPR
        const_reverse_iterator
        crbegin() const noexcept
        { return rbegin(); }
  
+       _GLIBCXX26_CONSTEXPR
        const_reverse_iterator
        crend() const noexcept
        { return rend(); }
  
        // capacity
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        bool
        empty() const noexcept
        { return _M_cont.empty(); }
  
+       _GLIBCXX26_CONSTEXPR
        size_type
        size() const noexcept
        { return _M_cont.size(); }
  
+       _GLIBCXX26_CONSTEXPR
        size_type
        max_size() const noexcept
        { return _M_cont.max_size(); }
  
        // modifiers
        template<typename _Arg, typename... _Args>
+ 	_GLIBCXX26_CONSTEXPR
  	pair<iterator, bool>
  	_M_try_emplace(optional<const_iterator> __hint, _Arg&& __arg, _Args&&... __args)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 410,421 ****
--- 455,468 ----
  	}
  
        template<typename... _Args>
+ 	_GLIBCXX26_CONSTEXPR
  	pair<iterator, bool>
  	_M_try_emplace(optional<const_iterator> __hint)
  	{ return _M_try_emplace(__hint, value_type()); }
  
        template<typename... _Args>
  	requires is_constructible_v<value_type, _Args...>
+ 	_GLIBCXX26_CONSTEXPR
  	__emplace_result_t
  	emplace(_Args&&... __args)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 427,465 ****
--- 474,520 ----
  	}
  
        template<typename... _Args>
+ 	_GLIBCXX26_CONSTEXPR
  	iterator
  	emplace_hint(const_iterator __position, _Args&&... __args)
  	{ return _M_try_emplace(__position, std::forward<_Args>(__args)...).first; }
  
+       _GLIBCXX26_CONSTEXPR
        __emplace_result_t
        insert(const value_type& __x)
        { return emplace(__x); }
  
+       _GLIBCXX26_CONSTEXPR
        __emplace_result_t
        insert(value_type&& __x)
        { return emplace(std::move(__x)); }
  
+       _GLIBCXX26_CONSTEXPR
        iterator
        insert(const_iterator __position, const value_type& __x)
        { return emplace_hint(__position, __x); }
  
+       _GLIBCXX26_CONSTEXPR
        iterator
        insert(const_iterator __position, value_type&& __x)
        { return emplace_hint(__position, std::move(__x)); }
  
        template<typename _Arg>
  	requires is_constructible_v<value_type, _Arg>
+ 	_GLIBCXX26_CONSTEXPR
  	__emplace_result_t
  	insert(_Arg&& __x)
  	{ return emplace(std::forward<_Arg>(__x)); }
  
        template<typename _Arg>
  	requires is_constructible_v<value_type, _Arg>
+ 	_GLIBCXX26_CONSTEXPR
  	iterator
  	insert(const_iterator __position, _Arg&& __x)
  	{ return emplace_hint(__position, std::forward<_Arg>(__x)); }
  
        template<__has_input_iter_cat _InputIterator>
+ 	_GLIBCXX26_CONSTEXPR
  	void
  	insert(_InputIterator __first, _InputIterator __last)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 473,478 ****
--- 528,534 ----
  	}
  
        template<__has_input_iter_cat _InputIterator>
+ 	_GLIBCXX26_CONSTEXPR
  	void
  	insert(__sorted_t, _InputIterator __first, _InputIterator __last)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 485,490 ****
--- 541,547 ----
  	}
  
        template<__detail::__container_compatible_range<value_type> _Rg>
+ 	_GLIBCXX26_CONSTEXPR
  	void
  	insert_range(_Rg&& __rg)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 511,524 ****
--- 568,584 ----
  	  __guard._M_disable();
  	}
  
+       _GLIBCXX26_CONSTEXPR
        void
        insert(initializer_list<value_type> __il)
        { insert(__il.begin(), __il.end()); }
  
+       _GLIBCXX26_CONSTEXPR
        void
        insert(__sorted_t __s, initializer_list<value_type> __il)
        { insert(__s, __il.begin(), __il.end()); }
  
+       _GLIBCXX26_CONSTEXPR
        container_type
        extract() &&
        {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 526,531 ****
--- 586,592 ----
  	return std::move(_M_cont);
        }
  
+       _GLIBCXX26_CONSTEXPR
        void
        replace(container_type&& __cont)
        {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 535,544 ****
--- 596,607 ----
  	__guard._M_disable();
        }
  
+       _GLIBCXX26_CONSTEXPR
        iterator
        erase(const_iterator __position)
        { return _M_cont.erase(__position); }
  
+       _GLIBCXX26_CONSTEXPR
        size_type
        erase(const key_type& __x)
        { return erase<const key_type&>(__x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 548,553 ****
--- 611,617 ----
  	  || (__transparent_comparator<_Compare>
  	      && !is_convertible_v<_Key2, iterator>
  	      && !is_convertible_v<_Key2, const_iterator>)
+ 	_GLIBCXX26_CONSTEXPR
  	size_type
  	erase(_Key2&& __x)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 557,566 ****
--- 621,632 ----
  	  return __n;
  	}
  
+       _GLIBCXX26_CONSTEXPR
        iterator
        erase(const_iterator __first, const_iterator __last)
        { return _M_cont.erase(__first, __last); }
  
+       _GLIBCXX26_CONSTEXPR
        void
        swap(_Derived& __x) noexcept
        {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 569,596 ****
--- 635,667 ----
  	swap(_M_comp, __x._M_comp);
        }
  
+       _GLIBCXX26_CONSTEXPR
        void
        clear() noexcept
        { _M_cont.clear(); }
  
        // observers
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        key_compare
        key_comp() const
        { return _M_comp; }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        value_compare
        value_comp() const
        { return _M_comp; }
  
        // set operations
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        iterator
        find(const key_type& __x)
        { return find<key_type>(__x); }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        const_iterator
        find(const key_type& __x) const
        { return find<key_type>(__x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 598,603 ****
--- 669,675 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	iterator
  	find(const _Key2& __x)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 611,616 ****
--- 683,689 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	const_iterator
  	find(const _Key2& __x) const
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 622,627 ****
--- 695,701 ----
  	}
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        size_type
        count(const key_type& __x) const
        { return count<key_type>(__x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 629,634 ****
--- 703,709 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	size_type
  	count(const _Key2& __x) const
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 642,647 ****
--- 717,723 ----
  	}
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        bool
        contains(const key_type& __x) const
        { return contains<key_type>(__x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 649,664 ****
--- 725,743 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	bool
  	contains(const _Key2& __x) const
  	{ return find(__x) != cend(); }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        iterator
        lower_bound(const key_type& __x)
        { return lower_bound<key_type>(__x); }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        const_iterator
        lower_bound(const key_type& __x) const
        { return lower_bound<key_type>(__x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 666,671 ****
--- 745,751 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	iterator
  	lower_bound(const _Key2& __x)
  	{ return std::lower_bound(begin(), end(), __x, _M_comp); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 673,688 ****
--- 753,771 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	const_iterator
  	lower_bound(const _Key2& __x) const
  	{ return std::lower_bound(begin(), end(), __x, _M_comp); }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        iterator
        upper_bound(const key_type& __x)
        { return upper_bound<key_type>(__x); }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        const_iterator
        upper_bound(const key_type& __x) const
        { return upper_bound<key_type>(__x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 690,695 ****
--- 773,779 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	iterator
  	upper_bound(const _Key2& __x)
  	{ return std::upper_bound(begin(), end(), __x, _M_comp); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 697,712 ****
--- 781,799 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	const_iterator
  	upper_bound(const _Key2& __x) const
  	{ return std::upper_bound(begin(), end(), __x, _M_comp); }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        pair<iterator, iterator>
        equal_range(const key_type& __x)
        { return equal_range<key_type>(__x); }
  
        [[nodiscard]]
+       _GLIBCXX26_CONSTEXPR
        pair<const_iterator, const_iterator>
        equal_range(const key_type& __x) const
        { return equal_range<key_type>(__x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 714,719 ****
--- 801,807 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	pair<iterator, iterator>
  	equal_range(const _Key2& __x)
  	{ return std::equal_range(begin(), end(), __x, _M_comp); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 721,738 ****
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
  	pair<const_iterator, const_iterator>
  	equal_range(const _Key2& __x) const
  	{ return std::equal_range(begin(), end(), __x, _M_comp); }
  
        [[nodiscard]]
!       friend bool
        operator==(const _Derived& __x, const _Derived& __y)
        { return std::equal(__x.begin(), __x.end(), __y.begin(), __y.end()); }
  
        template<typename _Up = value_type>
  	[[nodiscard]]
! 	friend __detail::__synth3way_t<_Up>
  	operator<=>(const _Derived& __x, const _Derived& __y)
  	{
  	  return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
--- 809,827 ----
        template<typename _Key2>
  	requires same_as<_Key2, _Key> || __transparent_comparator<_Compare>
  	[[nodiscard]]
+ 	_GLIBCXX26_CONSTEXPR
  	pair<const_iterator, const_iterator>
  	equal_range(const _Key2& __x) const
  	{ return std::equal_range(begin(), end(), __x, _M_comp); }
  
        [[nodiscard]]
!       friend _GLIBCXX26_CONSTEXPR bool
        operator==(const _Derived& __x, const _Derived& __y)
        { return std::equal(__x.begin(), __x.end(), __y.begin(), __y.end()); }
  
        template<typename _Up = value_type>
  	[[nodiscard]]
! 	friend _GLIBCXX26_CONSTEXPR __detail::__synth3way_t<_Up>
  	operator<=>(const _Derived& __x, const _Derived& __y)
  	{
  	  return std::lexicographical_compare_three_way(__x.begin(), __x.end(),
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 740,750 ****
  							__detail::__synth3way);
  	}
  
!       friend void
        swap(_Derived& __x, _Derived& __y) noexcept
        { return __x.swap(__y); }
  
        template<typename _Predicate>
  	size_type
  	_M_erase_if(_Predicate __pred)
  	{
--- 829,840 ----
  							__detail::__synth3way);
  	}
  
!       friend _GLIBCXX26_CONSTEXPR void
        swap(_Derived& __x, _Derived& __y) noexcept
        { return __x.swap(__y); }
  
        template<typename _Predicate>
+ 	_GLIBCXX26_CONSTEXPR
  	size_type
  	_M_erase_if(_Predicate __pred)
  	{
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 762,767 ****
--- 852,858 ----
        container_type _M_cont;
        [[no_unique_address]] _Compare _M_comp;
  
+       _GLIBCXX26_CONSTEXPR
        void
        _M_sort_uniq()
        {
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 770,782 ****
--- 861,876 ----
  	  _M_unique();
        }
  
+       _GLIBCXX26_CONSTEXPR
        void
        _M_unique() requires (!_Multi)
        {
  	struct __key_equiv
  	{
+ 	  _GLIBCXX26_CONSTEXPR
  	  __key_equiv(key_compare __c) : _M_comp(__c) { }
  
+ 	  _GLIBCXX26_CONSTEXPR
  	  bool
  	  operator()(const_reference __x, const_reference __y) const
  	  { return !_M_comp(__x, __y) && !_M_comp(__y, __x); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 934,939 ****
--- 1028,1034 ----
  
    template<typename _Key, typename _Compare, typename _KeyContainer,
  	   typename _Predicate>
+     _GLIBCXX26_CONSTEXPR
      typename flat_set<_Key, _Compare, _KeyContainer>::size_type
      erase_if(flat_set<_Key, _Compare, _KeyContainer>& __c, _Predicate __pred)
      { return __c._M_erase_if(std::move(__pred)); }
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1081,1086 ****
--- 1176,1182 ----
  
    template<typename _Key, typename _Compare, typename _KeyContainer,
  	   typename _Predicate>
+     _GLIBCXX26_CONSTEXPR
      typename flat_multiset<_Key, _Compare, _KeyContainer>::size_type
      erase_if(flat_multiset<_Key, _Compare, _KeyContainer>& __c, _Predicate __pred)
      { return __c._M_erase_if(std::move(__pred)); }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/format gcc-16-20251214/libstdc++-v3/include/std/format
*** gcc-16-20251207/libstdc++-v3/include/std/format	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/format	Sun Dec 14 22:32:17 2025
***************
*** 38,43 ****
--- 38,44 ----
  #define __glibcxx_want_format
  #define __glibcxx_want_format_ranges
  #define __glibcxx_want_format_uchar
+ #define __glibcxx_want_constexpr_exceptions
  #include <bits/version.h>
  
  #ifdef __cpp_lib_format // C++ >= 20 && HOSTED
*************** namespace __format
*** 219,230 ****
        formatter& operator=(const formatter&) = delete;
      };
  
    // [format.error], class format_error
    class format_error : public runtime_error
    {
    public:
!     explicit format_error(const string& __what) : runtime_error(__what) { }
!     explicit format_error(const char* __what) : runtime_error(__what) { }
    };
  
    /// @cond undocumented
--- 220,239 ----
        formatter& operator=(const formatter&) = delete;
      };
  
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+ #define _GLIBCXX_CONSTEXPR_FORMAT_ERROR constexpr
+ #else
+ #define _GLIBCXX_CONSTEXPR_FORMAT_ERROR
+ #endif
+ 
    // [format.error], class format_error
    class format_error : public runtime_error
    {
    public:
!     _GLIBCXX_CONSTEXPR_FORMAT_ERROR explicit format_error(const string& __what)
!     : runtime_error(__what) { }
!     _GLIBCXX_CONSTEXPR_FORMAT_ERROR explicit format_error(const char* __what)
!     : runtime_error(__what) { }
    };
  
    /// @cond undocumented
*************** namespace __format
*** 233,238 ****
--- 242,249 ----
    __throw_format_error(const char* __what)
    { _GLIBCXX_THROW_OR_ABORT(format_error(__what)); }
  
+ #undef _GLIBCXX_CONSTEXPR_FORMAT_ERROR
+ 
  namespace __format
  {
    // XXX use named functions for each constexpr error?
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/future gcc-16-20251214/libstdc++-v3/include/std/future
*** gcc-16-20251207/libstdc++-v3/include/std/future	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/future	Sun Dec 14 22:32:17 2025
***************
*** 34,39 ****
--- 34,40 ----
  #endif
  
  #include <bits/requires_hosted.h> // concurrency
+ #include <bits/functexcept.h>
  
  #if __cplusplus < 201103L
  # include <bits/c++0x_warning.h>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/inplace_vector gcc-16-20251214/libstdc++-v3/include/std/inplace_vector
*** gcc-16-20251207/libstdc++-v3/include/std/inplace_vector	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/inplace_vector	Sun Dec 14 22:32:17 2025
***************
*** 38,43 ****
--- 38,44 ----
  #ifdef __glibcxx_inplace_vector // C++ >= 26
  #include <compare>
  #include <initializer_list>
+ #include <bits/stdexcept_throw.h>
  #include <bits/range_access.h>
  #include <bits/ranges_base.h> // borrowed_iterator_t, __detail::__container_compatible_range
  #include <bits/ranges_util.h> // subrange
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/latch gcc-16-20251214/libstdc++-v3/include/std/latch
*** gcc-16-20251207/libstdc++-v3/include/std/latch	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/latch	Sun Dec 14 22:32:17 2025
***************
*** 41,47 ****
  #ifdef __cpp_lib_latch // C++ >= 20 && atomic_wait
  #include <bits/atomic_base.h>
  #include <ext/numeric_traits.h>
! #include <utility> // cmp_equal, cmp_less_equal, etc.
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
--- 41,47 ----
  #ifdef __cpp_lib_latch // C++ >= 20 && atomic_wait
  #include <bits/atomic_base.h>
  #include <ext/numeric_traits.h>
! #include <bits/intcmp.h> // cmp_equal, cmp_less_equal, etc.
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/mdspan gcc-16-20251214/libstdc++-v3/include/std/mdspan
*** gcc-16-20251207/libstdc++-v3/include/std/mdspan	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/mdspan	Sun Dec 14 22:32:17 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 271,277 ****
  	requires (_Extents.size() > 0)
  	{
  	  return {_M_dyn_exts + _S_dynamic_index(__begin),
! 		  _M_dyn_exts + _S_dynamic_index(__end)};
  	}
  
        private:
--- 271,277 ----
  	requires (_Extents.size() > 0)
  	{
  	  return {_M_dyn_exts + _S_dynamic_index(__begin),
! 		  _S_dynamic_index(__end) - _S_dynamic_index(__begin)};
  	}
  
        private:
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 352,362 ****
    template<typename _OffsetType, typename _ExtentType, typename _StrideType>
      struct strided_slice
      {
!       static_assert(__is_standard_integer<_OffsetType>::value
  	|| __detail::__integral_constant_like<_OffsetType>);
!       static_assert(__is_standard_integer<_ExtentType>::value
  	|| __detail::__integral_constant_like<_ExtentType>);
!       static_assert(__is_standard_integer<_StrideType>::value
  	|| __detail::__integral_constant_like<_StrideType>);
  
        using offset_type = _OffsetType;
--- 352,362 ----
    template<typename _OffsetType, typename _ExtentType, typename _StrideType>
      struct strided_slice
      {
!       static_assert(__is_signed_or_unsigned_integer<_OffsetType>::value
  	|| __detail::__integral_constant_like<_OffsetType>);
!       static_assert(__is_signed_or_unsigned_integer<_ExtentType>::value
  	|| __detail::__integral_constant_like<_ExtentType>);
!       static_assert(__is_signed_or_unsigned_integer<_StrideType>::value
  	|| __detail::__integral_constant_like<_StrideType>);
  
        using offset_type = _OffsetType;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 374,385 ****
        [[no_unique_address]] _Mapping mapping = _Mapping();
        size_t offset{};
      };
  #endif // __glibcxx_submdspan
  
    template<typename _IndexType, size_t... _Extents>
      class extents
      {
!       static_assert(__is_standard_integer<_IndexType>::value,
  		    "IndexType must be a signed or unsigned integer type");
        static_assert(
  	  (__mdspan::__valid_static_extent<_Extents, _IndexType> && ...),
--- 374,395 ----
        [[no_unique_address]] _Mapping mapping = _Mapping();
        size_t offset{};
      };
+ 
+   template<typename _Tp>
+     constexpr bool __is_submdspan_mapping_result = false;
+ 
+   template<typename _Mapping>
+     constexpr bool __is_submdspan_mapping_result<submdspan_mapping_result<_Mapping>> = true;
+ 
+   template<typename _Mapping>
+     concept __submdspan_mapping_result = __is_submdspan_mapping_result<_Mapping>;
+ 
  #endif // __glibcxx_submdspan
  
    template<typename _IndexType, size_t... _Extents>
      class extents
      {
!       static_assert(__is_signed_or_unsigned_integer<_IndexType>::value,
  		    "IndexType must be a signed or unsigned integer type");
        static_assert(
  	  (__mdspan::__valid_static_extent<_Extents, _IndexType> && ...),
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 589,594 ****
--- 599,614 ----
  	  }
        }
  
+     template<typename _IndexType, size_t _Nm>
+       consteval _IndexType
+       __fwd_prod(span<const _IndexType, _Nm> __values)
+       {
+ 	_IndexType __ret = 1;
+ 	for(auto __value : __values)
+ 	  __ret *= __value;
+ 	return __ret;
+       }
+ 
      // Preconditions: _r < _Extents::rank()
      template<typename _Extents>
        constexpr typename _Extents::index_type
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 792,797 ****
--- 812,821 ----
      template<typename _Mapping>
        constexpr bool __is_right_padded_mapping = __padded_mapping_of<
  	layout_right_padded, _Mapping>;
+ 
+     template<typename _Mapping>
+       constexpr bool __is_padded_mapping = __is_left_padded_mapping<_Mapping>
+         || __is_right_padded_mapping<_Mapping>;
  #endif
  
      template<typename _PaddedMapping>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 866,871 ****
--- 890,900 ----
  	  __exts.extent(_Index)};
        }
  
+     template<typename _Slice, typename _IndexType>
+       concept __acceptable_slice_type = same_as<_Slice, full_extent_t>
+ 	  || same_as<_Slice, _IndexType> || __is_constant_wrapper<_Slice>
+ 	  || __is_strided_slice<_Slice>;
+ 
      template<typename _IndexType, typename... _Slices>
        consteval auto
        __subrank()
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 890,895 ****
--- 919,1465 ----
  	    __map[__i++] = __k;
  	return __map;
        }
+ 
+     template<typename _Slice>
+       constexpr auto
+       __slice_begin(_Slice __slice)
+       {
+ 	if constexpr (same_as<_Slice, full_extent_t>)
+ 	  return 0;
+ 	else if constexpr (__is_strided_slice<_Slice>)
+ 	  return __slice.offset;
+ 	else
+ 	  return __slice; // collapsing slice
+       }
+ 
+     template<typename _Mapping, typename... _Slices>
+       constexpr size_t
+       __suboffset(const _Mapping& __mapping, const _Slices&... __slices)
+       {
+ 	using _IndexType = typename _Mapping::index_type;
+ 	auto __any_past_the_end = [&]<size_t... _Is>(index_sequence<_Is...>)
+ 	{
+ 	  auto __is_past_the_end = [](const auto& __slice, const auto& __ext)
+ 	  {
+ 	    using _Slice = remove_cvref_t<decltype(__slice)>;
+ 	    if constexpr (is_convertible_v<_Slice, _IndexType>)
+ 	      return false;
+ 	    else if constexpr (same_as<_Slice, full_extent_t>
+ 		&& __ext.static_extent(0) != 0
+ 		&& __ext.static_extent(0) != dynamic_extent)
+ 	      return false;
+ 	    else
+ 	      return __mdspan::__slice_begin(__slice) == __ext.extent(0);
+ 	  };
+ 
+ 	  const auto& __exts = __mapping.extents();
+ 	  return ((__is_past_the_end(__slices...[_Is],
+ 				     __mdspan::__extract_extent<_Is>(__exts))) || ...);
+ 	};
+ 
+ 	if constexpr ((same_as<_Slices, full_extent_t> && ...))
+ 	  return __mdspan::__offset(__mapping);
+ 
+ 	if (__any_past_the_end(std::make_index_sequence<sizeof...(__slices)>()))
+ 	  return __mapping.required_span_size();
+ 	return __mapping(__mdspan::__slice_begin(__slices)...);
+       }
+ 
+     template<typename _IndexType, size_t _Extent, typename _Slice>
+       consteval size_t
+       __static_slice_extent()
+       {
+ 	if constexpr (same_as<_Slice, full_extent_t>)
+ 	  return _Extent;
+ 	else if constexpr (same_as<_Slice, constant_wrapper<_IndexType(0)>>)
+ 	  return 0;
+ 	else if constexpr (__is_constant_wrapper<typename _Slice::extent_type>
+ 			&& __is_constant_wrapper<typename _Slice::stride_type>)
+ 	  return 1 + ((typename _Slice::extent_type{}) - 1)
+ 		   / (typename _Slice::stride_type{});
+ 	else
+ 	  return dynamic_extent;
+       }
+ 
+     template<size_t _K, typename _Extents, typename _Slice>
+       constexpr typename _Extents::index_type
+       __dynamic_slice_extent(const _Extents& __exts, _Slice __slice)
+       {
+ 	if constexpr (__is_strided_slice<_Slice>)
+ 	  return __slice.extent == 0 ? 0 : 1 + (__slice.extent - 1) / __slice.stride;
+ 	else
+ 	  return __exts.extent(_K);
+       }
+ 
+     template<typename _IndexType, size_t... _Extents, typename... _Slices>
+       requires (sizeof...(_Slices) == sizeof...(_Extents))
+       constexpr auto
+       __subextents(const extents<_IndexType, _Extents...>& __exts,
+ 		   _Slices... __slices)
+       {
+ 	constexpr auto __inv_map = __mdspan::__inv_map_rank<_IndexType, _Slices...>();
+ 	auto __impl = [&]<size_t... _Indices>(std::index_sequence<_Indices...>)
+ 	{
+ 	  using _SubExts = extents<_IndexType,
+ 	      __mdspan::__static_slice_extent<_IndexType,
+ 		 _Extents...[__inv_map[_Indices]],
+ 		 _Slices...[__inv_map[_Indices]]>()...>;
+ 	  if constexpr (_SubExts::rank_dynamic() == 0)
+ 	    return _SubExts{};
+ 	  else
+ 	    {
+ 	      using _StaticSubExtents = __mdspan::_StaticExtents<
+ 		__mdspan::__static_extents<_SubExts>()>;
+ 	      auto __create = [&]<size_t... _Is>(std::index_sequence<_Is...>)
+ 	      {
+ 		constexpr auto __slice_idx = [__inv_map](size_t __i) consteval
+ 		{
+ 		  return __inv_map[_StaticSubExtents::_S_dynamic_index_inv(__i)];
+ 		};
+ 
+ 		return _SubExts{__mdspan::__dynamic_slice_extent<__slice_idx(_Is)>(
+ 		     __exts, __slices...[__slice_idx(_Is)])...};
+ 	      };
+ 	      constexpr auto __dyn_subrank = _SubExts::rank_dynamic();
+ 	      return __create(std::make_index_sequence<__dyn_subrank>());
+ 	    }
+ 	};
+ 
+ 	return __impl(std::make_index_sequence<__inv_map.size()>());
+       }
+ 
+     enum class _LayoutSide
+     {
+       __left,
+       __right,
+       __unknown
+     };
+ 
+     template<typename _Mapping>
+       consteval _LayoutSide
+       __mapping_side()
+       {
+ 	if constexpr (__is_left_padded_mapping<_Mapping>
+ 	    || __mapping_of<layout_left, _Mapping>)
+ 	  return _LayoutSide::__left;
+ 	if constexpr (__is_right_padded_mapping<_Mapping>
+ 	    || __mapping_of<layout_right, _Mapping>)
+ 	  return _LayoutSide::__right;
+ 	else
+ 	  return _LayoutSide::__unknown;
+       }
+ 
+     template<_LayoutSide _Side, size_t _Rank>
+       struct _StridesTrait
+       {
+ 	static constexpr const _LayoutSide _S_side = _Side;
+ 
+ 	static constexpr size_t
+ 	_S_idx(size_t __k) noexcept
+ 	{
+ 	  if constexpr (_Side == _LayoutSide::__left)
+ 	    return __k;
+ 	  else
+ 	    return _Rank - 1 - __k;
+ 	}
+ 
+ 	// Unifies the formulas for computing strides for padded and unpadded
+ 	// layouts.
+ 	template<typename _Mapping>
+ 	  static constexpr typename _Mapping::index_type
+ 	  _S_padded_extent(const _Mapping& __mapping, size_t __k)
+ 	  {
+ 	    if (__k == 0)
+ 	      return __mapping.stride(_S_idx(1));
+ 	    else
+ 	      return __mapping.extents().extent(_S_idx(__k));
+ 	  }
+ 
+ 	template<typename _IndexType, typename... _Slices>
+ 	  static consteval auto
+ 	  _S_inv_map()
+ 	  {
+ 	    static_assert(_Side != _LayoutSide::__unknown);
+ 	    auto __impl = [&]<size_t... _Is>(std::index_sequence<_Is...>)
+ 	    {
+ 	      return __mdspan::__inv_map_rank<_IndexType, _Slices...[_S_idx(_Is)]...>();
+ 	    };
+ 	    return __impl(std::make_index_sequence<_Rank>());
+ 	  }
+       };
+ 
+     template<typename _SubExts, typename _Mapping, typename... _Slices>
+       constexpr auto
+       __substrides_generic(const _Mapping& __mapping, const _Slices&... __slices)
+       {
+ 	using _IndexType = typename _Mapping::index_type;
+ 	if constexpr (_SubExts::rank() == 0)
+ 	  return array<_IndexType, _SubExts::rank()>{};
+ 	else
+ 	  {
+ 	    auto __stride = [&__mapping](size_t __k, auto __slice) -> _IndexType
+ 	    {
+ 	      if constexpr (__is_strided_slice<decltype(__slice)>)
+ 		if (__slice.stride < __slice.extent)
+ 		  return __mapping.stride(__k) * __slice.stride;
+ 	      return __mapping.stride(__k);
+ 	    };
+ 
+ 	    auto __impl = [&]<size_t... _Is>(std::index_sequence<_Is...>)
+ 	    {
+ 	      constexpr auto __inv_map
+ 		= __mdspan::__inv_map_rank<_IndexType, _Slices...>();
+ 	      return array<_IndexType, _SubExts::rank()>{
+ 		__stride(__inv_map[_Is], __slices...[__inv_map[_Is]])...};
+ 	    };
+ 	    return __impl(std::make_index_sequence<_SubExts::rank()>());
+ 	  }
+       };
+ 
+     template<typename _SubExts, typename _Mapping, typename... _Slices>
+       constexpr auto
+       __substrides_standardized(const _Mapping& __mapping,
+ 			       const _Slices&... __slices)
+       {
+ 	using _IndexType = typename _Mapping::index_type;
+ 	using _Trait = _StridesTrait<__mapping_side<_Mapping>(),
+ 				     _Mapping::extents_type::rank()>;
+ 	using _SubTrait = _StridesTrait<__mapping_side<_Mapping>(), _SubExts::rank()>;
+ 
+ 	constexpr size_t __sub_rank = _SubExts::rank();
+ 
+ 	std::array<_IndexType, __sub_rank> __ret;
+ 	if constexpr (__sub_rank > 0)
+ 	  {
+ 	    constexpr auto __inv_map
+ 	      = _Trait::template _S_inv_map<_IndexType, _Slices...>();
+ 	    auto __loop = [&]<size_t... _Ks>(std::index_sequence<_Ks...>)
+ 	    {
+ 	      size_t __i0 = 0;
+ 	      size_t __stride = 1;
+ 	      auto __body = [&](size_t __k, auto __slice)
+ 	      {
+ 		for (size_t __i = __i0; __i < __inv_map[__k]; ++__i)
+ 		  __stride *= _Trait::_S_padded_extent(__mapping, __i);
+ 
+ 		size_t __krev = _SubTrait::_S_idx(__k);
+ 		if constexpr (__is_strided_slice<decltype(__slice)>)
+ 		  {
+ 		    if (__slice.stride < __slice.extent)
+ 		      __ret[__krev] = __stride * __slice.stride;
+ 		    else
+ 		      __ret[__krev] = __stride;
+ 		  }
+ 		else
+ 		  __ret[__krev] = __stride;
+ 
+ 		__i0 = __inv_map[__k];
+ 	      };
+ 
+ 	      ((__body(_Ks, __slices...[_Trait::_S_idx(__inv_map[_Ks])])),...);
+ 	    };
+ 	    __loop(std::make_index_sequence<__sub_rank>());
+ 	  }
+ 	return __ret;
+       }
+ 
+ 
+     template<typename _SubExts, typename _Mapping, typename... _Slices>
+       constexpr auto
+       __substrides(const _Mapping& __mapping, const _Slices&... __slices)
+       {
+ 	if constexpr (__mdspan::__mapping_side<_Mapping>() == _LayoutSide::__unknown)
+ 	  return __mdspan::__substrides_generic<_SubExts>(__mapping, __slices...);
+ 	else
+ 	  return __mdspan::__substrides_standardized<_SubExts>(__mapping, __slices...);
+       }
+ 
+     template<typename _Slice>
+       concept __is_unit_stride_slice = (__mdspan::__is_strided_slice<_Slice>
+ 	  && __mdspan::__is_constant_wrapper<typename _Slice::stride_type>
+ 	  && _Slice::stride_type::value == 1)
+ 	|| std::same_as<_Slice, full_extent_t>;
+ 
+     // These are (forced) exclusive categories:
+     //  - full & collapsing: obvious,
+     //  - unit_strided_slice: strided_slice{a, b, cw<1>}, but not `full`,
+     //  - strided_slice: strided_slice{a, b, c} with c != cw<1>.
+     enum class _SliceKind
+     {
+       __strided_slice,
+       __unit_strided_slice,
+       __full,
+       __collapsing
+     };
+ 
+     template<typename _Slice>
+       consteval _SliceKind
+       __make_slice_kind()
+       {
+ 	if constexpr (std::same_as<_Slice, full_extent_t>)
+ 	  return _SliceKind::__full;
+ 	else if constexpr (__mdspan::__is_strided_slice<_Slice>)
+ 	  {
+ 	    if constexpr (__mdspan::__is_unit_stride_slice<_Slice>)
+ 	      return _SliceKind::__unit_strided_slice;
+ 	    else
+ 	      return _SliceKind::__strided_slice;
+ 	  }
+ 	else
+ 	  return _SliceKind::__collapsing;
+       }
+ 
+     template<typename... _Slices>
+       consteval array<_SliceKind, sizeof...(_Slices)>
+       __make_slice_kind_array()
+       {
+ 	return array<_SliceKind, sizeof...(_Slices)>{
+ 	  __mdspan::__make_slice_kind<_Slices>()...};
+       }
+ 
+     //                   __block_size - 1
+     // [full, ..., full, unit_slice    , *]
+     consteval bool
+     __is_block(span<const _SliceKind> __slice_kinds, size_t __block_size)
+     {
+       if (__block_size == 0)
+ 	return false;
+ 
+       if (__block_size > __slice_kinds.size())
+ 	return false;
+ 
+       for (size_t __i = 0; __i < __block_size - 1; ++__i)
+ 	if (__slice_kinds[__i] != _SliceKind::__full)
+ 	  return false;
+ 
+       auto __last = __slice_kinds[__block_size - 1];
+       return __last == _SliceKind::__full
+ 	  || __last == _SliceKind::__unit_strided_slice;
+     }
+ 
+     //                         __u              __u + __sub_rank-2
+     // [unit_slice, i, ..., k, full, ..., full, unit_slice, *]
+     static consteval size_t
+     __padded_block_begin_generic(span<const _SliceKind> __slice_kinds,
+ 				 size_t __sub_rank)
+     {
+       if (__slice_kinds[0] != _SliceKind::__full
+ 	  && __slice_kinds[0] != _SliceKind::__unit_strided_slice)
+ 	return dynamic_extent;
+       else if (__slice_kinds.size() == 1)
+ 	return dynamic_extent;
+       else
+ 	{
+ 	  size_t __u = 1;
+ 	  while(__u < __slice_kinds.size()
+ 		&& __slice_kinds[__u] == _SliceKind::__collapsing)
+ 	    ++__u;
+ 
+ 	  if (__mdspan::__is_block(__slice_kinds.subspan(__u), __sub_rank -1))
+ 	    return __u;
+ 	  return dynamic_extent;
+ 	}
+     }
+ 
+     template<_LayoutSide _Side, size_t _Nm>
+       static consteval size_t
+       __padded_block_begin(span<const _SliceKind, _Nm> __slice_kinds, size_t __sub_rank)
+       {
+ 	if constexpr (_Side == _LayoutSide::__left)
+ 	  return __mdspan::__padded_block_begin_generic(__slice_kinds, __sub_rank);
+ 	else
+ 	  {
+ 	    std::array<_SliceKind, _Nm> __rev_slices;
+ 	    for(size_t __i = 0; __i < _Nm; ++__i)
+ 	      __rev_slices[__i] = __slice_kinds[_Nm - 1 - __i];
+ 	    auto __rev_slice_kinds = span<const _SliceKind>(__rev_slices);
+ 
+ 	    auto __u = __mdspan::__padded_block_begin_generic(__rev_slice_kinds,
+ 							      __sub_rank);
+ 	    return __u == dynamic_extent ? dynamic_extent : _Nm - 1 - __u;
+ 	  }
+       }
+ 
+     template<_LayoutSide _Side, bool _Padded>
+       struct _SubMdspanMapping;
+ 
+     template<>
+       struct _SubMdspanMapping<_LayoutSide::__left, false>
+       {
+ 	using _Layout = layout_left;
+ 	template<size_t _Pad> using _PaddedLayout = layout_left_padded<_Pad>;
+ 
+ 	template<typename _Mapping, size_t _Us>
+ 	  static consteval size_t
+ 	  _S_pad()
+ 	  {
+ 	    using _Extents = typename _Mapping::extents_type;
+ 	    constexpr auto __sta_exts = __mdspan::__static_extents<_Extents>(0, _Us);
+ 	    if constexpr (!__mdspan::__all_static(__sta_exts))
+ 	      return dynamic_extent;
+ 	    else
+ 	      return __mdspan::__fwd_prod(__sta_exts);
+ 	  }
+ 
+ 	template<size_t _Nm>
+ 	  static consteval bool
+ 	  _S_is_unpadded_submdspan(span<const _SliceKind, _Nm> __slice_kinds, size_t __sub_rank)
+ 	  { return __mdspan::__is_block(__slice_kinds, __sub_rank); }
+       };
+ 
+     template<>
+       struct _SubMdspanMapping<_LayoutSide::__left, true>
+       {
+ 	using _Layout = layout_left;
+ 	template<size_t _Pad> using _PaddedLayout = layout_left_padded<_Pad>;
+ 
+ 	template<typename _Mapping, size_t _Us>
+ 	  static consteval size_t
+ 	  _S_pad()
+ 	  {
+ 	    using _Extents = typename _Mapping::extents_type;
+ 	    constexpr auto __sta_exts
+ 	      = __mdspan::__static_extents<_Extents>(1, _Us);
+ 	    constexpr auto __sta_padstride
+ 	      = __mdspan::__get_static_stride<_Mapping>();
+ 	    if constexpr (__sta_padstride == dynamic_extent
+ 			  || !__mdspan::__all_static(__sta_exts))
+ 	      return dynamic_extent;
+ 	    else
+ 	      return __sta_padstride * __mdspan::__fwd_prod(__sta_exts);
+ 	  }
+ 
+ 	template<size_t _Nm>
+ 	  static consteval bool
+ 	  _S_is_unpadded_submdspan(span<const _SliceKind, _Nm> __slice_kinds,
+ 				   size_t __sub_rank)
+ 	  {
+ 	    if (__sub_rank == 1)
+ 	      return __slice_kinds[0] == _SliceKind::__unit_strided_slice
+ 		|| __slice_kinds[0] == _SliceKind::__full;
+ 	    else
+ 	      return false;
+ 	  }
+       };
+ 
+     template<>
+       struct _SubMdspanMapping<_LayoutSide::__right, false>
+       {
+ 	using _Layout = layout_right;
+ 	template<size_t _Pad> using _PaddedLayout = layout_right_padded<_Pad>;
+ 
+ 	template<typename _Mapping, size_t _Us>
+ 	  static consteval size_t
+ 	  _S_pad()
+ 	  {
+ 	    using _Extents = typename _Mapping::extents_type;
+ 	    constexpr auto __rank = _Extents::rank();
+ 	    constexpr auto __sta_exts
+ 	      = __mdspan::__static_extents<_Extents>(_Us + 1, __rank);
+ 	    if constexpr (!__mdspan::__all_static(__sta_exts))
+ 	      return dynamic_extent;
+ 	    else
+ 	      return __fwd_prod(__sta_exts);
+ 	  }
+ 
+ 	template<size_t _Nm>
+ 	  static consteval bool
+ 	  _S_is_unpadded_submdspan(span<const _SliceKind, _Nm> __slice_kinds,
+ 				   size_t __sub_rank)
+ 	  {
+ 	    auto __rev_slice_kinds = array<_SliceKind, _Nm>{};
+ 	    for(size_t __i = 0; __i < _Nm; ++__i)
+ 	      __rev_slice_kinds[__i] = __slice_kinds[_Nm - 1 - __i];
+ 	    return __mdspan::__is_block(span(__rev_slice_kinds), __sub_rank);
+ 	  }
+       };
+ 
+     template<>
+       struct _SubMdspanMapping<_LayoutSide::__right, true>
+       {
+ 	using _Layout = layout_right;
+ 	template<size_t _Pad> using _PaddedLayout = layout_right_padded<_Pad>;
+ 
+ 	template<typename _Mapping, size_t _Us>
+ 	  static consteval size_t
+ 	  _S_pad()
+ 	  {
+ 	    using _Extents = typename _Mapping::extents_type;
+ 	    constexpr auto __rank = _Extents::rank();
+ 	    constexpr auto __sta_exts
+ 	      = __mdspan::__static_extents<_Extents>(_Us + 1, __rank - 1);
+ 	    constexpr auto __sta_padstride
+ 	      = __mdspan::__get_static_stride<_Mapping>();
+ 	    if constexpr (__sta_padstride == dynamic_extent
+ 			  || !__mdspan::__all_static(__sta_exts))
+ 	      return dynamic_extent;
+ 	    else
+ 	      return __sta_padstride * __mdspan::__fwd_prod(__sta_exts);
+ 	  }
+ 
+ 	template<size_t _Nm>
+ 	  static consteval bool
+ 	  _S_is_unpadded_submdspan(span<const _SliceKind, _Nm> __slice_kinds,
+ 				   size_t __sub_rank)
+ 	  {
+ 	    if (__sub_rank == 1)
+ 	      return __slice_kinds[_Nm - 1] == _SliceKind::__unit_strided_slice
+ 		|| __slice_kinds[_Nm - 1] == _SliceKind::__full;
+ 	    else
+ 	      return false;
+ 	  }
+       };
+ 
+ 
+     template<typename _Mapping>
+       constexpr auto
+       __submdspan_mapping_impl(const _Mapping& __mapping)
+       { return submdspan_mapping_result{__mapping, 0}; }
+ 
+     template<typename _Mapping, typename... _Slices>
+       requires (sizeof...(_Slices) > 0)
+       constexpr auto
+       __submdspan_mapping_impl(const _Mapping& __mapping, _Slices... __slices)
+       {
+ 	using _IndexType = typename _Mapping::index_type;
+ 	static_assert((__acceptable_slice_type<_Slices, _IndexType> && ...));
+ 
+ 	constexpr auto __side = __mdspan::__mapping_side<_Mapping>();
+ 	constexpr auto __rank = sizeof...(_Slices);
+ 	using _Trait = _SubMdspanMapping<__side, __is_padded_mapping<_Mapping>>;
+ 	using _SliceView = span<const _SliceKind, __rank>;
+ 
+ 	constexpr auto __slice_kinds = __mdspan::__make_slice_kind_array<_Slices...>();
+ 	auto __offset = __mdspan::__suboffset(__mapping, __slices...);
+ 	auto __sub_exts = __mdspan::__subextents(__mapping.extents(), __slices...);
+ 	using _SubExts = decltype(__sub_exts);
+ 	constexpr auto __sub_rank = _SubExts::rank();
+ 	if constexpr (__sub_rank == 0)
+ 	  return submdspan_mapping_result{
+ 	    typename _Trait::_Layout::mapping(__sub_exts), __offset};
+ 	else if constexpr (_Trait::_S_is_unpadded_submdspan(
+ 	      _SliceView(__slice_kinds), __sub_rank))
+ 	  return submdspan_mapping_result{
+ 	    typename _Trait::_Layout::mapping(__sub_exts), __offset};
+ 	else if constexpr (
+ 	    constexpr auto __u = __padded_block_begin<__side>(
+ 		_SliceView(__slice_kinds), __sub_rank);
+ 	    __u != dynamic_extent)
+ 	  {
+ 	    constexpr auto __pad = _Trait::template _S_pad<_Mapping, __u>();
+ 	    using _Layout = typename _Trait::template _PaddedLayout<__pad>;
+ 	    return submdspan_mapping_result{
+ 	      typename _Layout::mapping(__sub_exts, __mapping.stride(__u)),
+ 	      __offset};
+ 	  }
+ 	else
+ 	  {
+ 	    auto __sub_strides
+ 	      = __mdspan::__substrides<_SubExts>(__mapping, __slices...);
+ 	    return submdspan_mapping_result{
+ 	      layout_stride::mapping(__sub_exts, __sub_strides),  __offset};
+ 	  }
+       }
  #endif // __glibcxx_submdspan
    }
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1032,1037 ****
--- 1602,1615 ----
  	  __glibcxx_assert(__mdspan::__is_representable_extents(_M_extents));
  	}
  
+ #if __glibcxx_submdspan
+       template<typename... _Slices>
+ 	requires (extents_type::rank() == sizeof...(_Slices))
+ 	friend constexpr auto
+ 	submdspan_mapping(const mapping& __mapping, _Slices... __slices)
+ 	{ return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
+ #endif // __glibcxx_submdspan
+ 
  	[[no_unique_address]] extents_type _M_extents{};
      };
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1208,1213 ****
--- 1786,1799 ----
  	  __glibcxx_assert(__mdspan::__is_representable_extents(_M_extents));
  	}
  
+ #if __glibcxx_submdspan
+       template<typename... _Slices>
+ 	requires (extents_type::rank() == sizeof...(_Slices))
+ 	friend constexpr auto
+ 	submdspan_mapping(const mapping& __mapping, _Slices... __slices)
+ 	{ return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
+ #endif // __glibcxx_submdspan
+ 
  	[[no_unique_address]] extents_type _M_extents{};
      };
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1418,1423 ****
--- 2004,2029 ----
  	}
  
      private:
+ #if __glibcxx_submdspan
+       template<typename... _Slices>
+ 	requires (extents_type::rank() == sizeof...(_Slices))
+ 	friend constexpr auto
+ 	submdspan_mapping(const mapping& __mapping, _Slices... __slices)
+ 	{
+ 	  if constexpr (sizeof...(_Slices) == 0)
+ 	    return submdspan_mapping_result{__mapping, 0};
+ 	  else
+ 	    {
+ 	      auto __offset = __mdspan::__suboffset(__mapping, __slices...);
+ 	      auto __sub_exts = __mdspan::__subextents(__mapping.extents(), __slices...);
+ 	      auto __sub_strides
+ 		= __mdspan::__substrides<decltype(__sub_exts)>(__mapping, __slices...);
+ 	      return submdspan_mapping_result{
+ 		layout_stride::mapping(__sub_exts, __sub_strides), __offset};
+ 	    }
+ 	}
+ #endif
+ 
        using _Strides = typename __array_traits<index_type,
  					       extents_type::rank()>::_Type;
        [[no_unique_address]] extents_type _M_extents;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2028,2033 ****
--- 2634,2648 ----
  	  operator==(const mapping& __self, const _LeftpadMapping& __other)
  	  noexcept
  	  { return __self._M_storage._M_equal(__other); }
+ 
+       private:
+ #if __glibcxx_submdspan
+ 	template<typename... _Slices>
+ 	  requires (extents_type::rank() == sizeof...(_Slices))
+ 	  friend constexpr auto
+ 	  submdspan_mapping(const mapping& __mapping, _Slices... __slices)
+ 	  { return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
+ #endif // __glibcxx_submdspan
        };
  
    template<size_t _PaddingValue>
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2197,2202 ****
--- 2812,2826 ----
  	  operator==(const mapping& __self, const _RightPaddedMapping& __other)
  	  noexcept
  	  { return __self._M_storage._M_equal(__other); }
+ 
+ #if __glibcxx_submdspan
+       private:
+ 	template<typename... _Slices>
+ 	  requires (extents_type::rank() == sizeof...(_Slices))
+ 	  friend constexpr auto
+ 	  submdspan_mapping(const mapping& __mapping, _Slices... __slices)
+ 	  { return __mdspan::__submdspan_mapping_impl(__mapping, __slices...); }
+ #endif // __glibcxx_submdspan
        };
  #endif // __glibcxx_padded_layouts
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2700,2767 ****
  	__impl(make_index_sequence<__rank>());
        }
  
!     template<typename _IndexType, size_t _Extent, typename _Slice>
!       consteval size_t
!       __static_slice_extent()
!       {
! 	if constexpr (same_as<_Slice, full_extent_t>)
! 	  return _Extent;
! 	else if constexpr (same_as<_Slice, constant_wrapper<_IndexType(0)>>)
! 	  return 0;
! 	else if constexpr (__is_constant_wrapper<typename _Slice::extent_type>
! 			&& __is_constant_wrapper<typename _Slice::stride_type>)
! 	  return 1 + ((typename _Slice::extent_type{}) - 1)
! 		   / (typename _Slice::stride_type{});
! 	else
! 	  return dynamic_extent;
!       }
  
!     template<size_t _K, typename _Extents, typename _Slice>
!       constexpr typename _Extents::index_type
!       __dynamic_slice_extent(const _Extents& __exts, _Slice __slice)
        {
! 	if constexpr (__is_strided_slice<_Slice>)
! 	  return __slice.extent == 0 ? 0 : 1 + (__slice.extent - 1) / __slice.stride;
! 	else
! 	  return __exts.extent(_K);
!       }
  
!     template<typename _IndexType, size_t... _Extents, typename... _Slices>
!       requires (sizeof...(_Slices) == sizeof...(_Extents))
        constexpr auto
!       __subextents(const extents<_IndexType, _Extents...>& __exts,
! 		   _Slices... __slices)
        {
! 	constexpr auto __inv_map = __mdspan::__inv_map_rank<_IndexType, _Slices...>();
! 	auto __impl = [&]<size_t... _Indices>(index_sequence<_Indices...>)
! 	{
! 	  using _SubExtents = extents<_IndexType,
! 	      (__mdspan::__static_slice_extent<_IndexType,
! 		 _Extents...[__inv_map[_Indices]],
! 		 _Slices...[__inv_map[_Indices]]>())...>;
! 	  if constexpr (_SubExtents::rank_dynamic() == 0)
! 	    return _SubExtents{};
! 	  else
! 	    {
! 	      using _StaticSubExtents = __mdspan::_StaticExtents<
! 		__mdspan::__static_extents<_SubExtents>()>;
! 	      auto __create = [&]<size_t... _Is>(index_sequence<_Is...>)
! 	      {
! 		constexpr auto __slice_idx = [__inv_map](size_t __i) consteval
! 		{
! 		  return __inv_map[_StaticSubExtents::_S_dynamic_index_inv(__i)];
! 		};
! 
! 		return _SubExtents{
! 		  (__mdspan::__dynamic_slice_extent<__slice_idx(_Is)>(
! 		     __exts, __slices...[__slice_idx(_Is)]))...};
! 	      };
! 	      constexpr auto __dyn_subrank = _SubExtents::rank_dynamic();
! 	      return __create(make_index_sequence<__dyn_subrank>());
! 	    }
! 	};
! 
! 	return __impl(make_index_sequence<__inv_map.size()>());
        }
    }
  
--- 3324,3347 ----
  	__impl(make_index_sequence<__rank>());
        }
  
!     template<typename _Slice>
!       using __full_extent_t = std::full_extent_t;
  
!     // Enables ADL-only calls from submdspan.
!     void submdspan_mapping() = delete;
! 
!     template<typename _Mapping, typename... _Slices>
!       concept __sliceable_mapping = requires(const _Mapping __m, _Slices... __slices)
        {
! 	{ submdspan_mapping(__m, __slices...) } -> __submdspan_mapping_result;
!       };
  
!     template<typename _Mapping, typename... _Slices>
        constexpr auto
!       __submapping(const _Mapping& __mapping, _Slices... __slices)
        {
! 	__mdspan::__check_valid_slices(__mapping.extents(), __slices...);
! 	return submdspan_mapping(__mapping, __slices...);
        }
    }
  
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 2792,2797 ****
--- 3372,3396 ----
        };
        return __impl(__mdspan::__slice_cast<_IndexType>(__raw_slices)...);
      }
+ 
+   template<typename _ElementType, typename _Extents, typename _Layout,
+ 	   typename _Accessor, typename... _RawSlices>
+     requires (sizeof...(_RawSlices) == _Extents::rank()
+ 	&& __mdspan::__sliceable_mapping<typename _Layout::template mapping<_Extents>,
+ 	                                 __mdspan::__full_extent_t<_RawSlices>...>)
+     constexpr auto
+     submdspan(
+ 	const mdspan<_ElementType, _Extents, _Layout, _Accessor>& __md,
+ 	_RawSlices... __raw_slices)
+     {
+       using _IndexType = typename _Extents::index_type;
+       auto [__mapping, __offset] = __mdspan::__submapping(
+ 	__md.mapping(), __mdspan::__slice_cast<_IndexType>(__raw_slices)...);
+       return std::mdspan(
+ 	       __md.accessor().offset(__md.data_handle(), __offset),
+ 	       std::move(__mapping),
+ 	       typename _Accessor::offset_policy(__md.accessor()));
+     }
  #endif // __glibcxx_submdspan
  
  _GLIBCXX_END_NAMESPACE_VERSION
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/optional gcc-16-20251214/libstdc++-v3/include/std/optional
*** gcc-16-20251207/libstdc++-v3/include/std/optional	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/optional	Sun Dec 14 22:32:17 2025
***************
*** 38,43 ****
--- 38,44 ----
  #define __glibcxx_want_optional
  #define __glibcxx_want_optional_range_support
  #define __glibcxx_want_constrained_equality
+ #define __glibcxx_want_constexpr_exceptions
  #include <bits/version.h>
  
  #ifdef __cpp_lib_optional // C++ >= 17
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 106,117 ****
      bad_optional_access() = default;
      virtual ~bad_optional_access() = default;
  
      const char* what() const noexcept override
      { return "bad optional access"; }
    };
  
    // XXX Does not belong here.
!   [[__noreturn__]] inline void
    __throw_bad_optional_access()
    { _GLIBCXX_THROW_OR_ABORT(bad_optional_access()); }
  
--- 107,127 ----
      bad_optional_access() = default;
      virtual ~bad_optional_access() = default;
  
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr
+ #endif
      const char* what() const noexcept override
      { return "bad optional access"; }
    };
  
    // XXX Does not belong here.
!   [[__noreturn__]]
! #if __cpp_lib_constexpr_exceptions >= 202502L
!   constexpr
! #else
!   inline
! #endif
!   void
    __throw_bad_optional_access()
    { _GLIBCXX_THROW_OR_ABORT(bad_optional_access()); }
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/shared_mutex gcc-16-20251214/libstdc++-v3/include/std/shared_mutex
*** gcc-16-20251207/libstdc++-v3/include/std/shared_mutex	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/shared_mutex	Sun Dec 14 22:32:17 2025
***************
*** 39,44 ****
--- 39,45 ----
  
  #include <bits/chrono.h>
  #include <bits/error_constants.h>
+ #include <bits/new_throw.h>
  #include <bits/functexcept.h>
  #include <bits/move.h>        // move, __exchange
  #include <bits/std_mutex.h>   // defer_lock_t
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/stdexcept gcc-16-20251214/libstdc++-v3/include/std/stdexcept
*** gcc-16-20251207/libstdc++-v3/include/std/stdexcept	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/stdexcept	Sun Dec 14 22:32:17 2025
***************
*** 39,265 ****
  
  #include <exception>
  #include <string>
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
  
- #if _GLIBCXX_USE_DUAL_ABI
- #if _GLIBCXX_USE_CXX11_ABI
-   // Emulates an old COW string when the new std::string is in use.
-   struct __cow_string
-   {
-     union {
-       const char* _M_p;
-       char _M_bytes[sizeof(const char*)];
-     };
- 
-     __cow_string();
-     __cow_string(const std::string&);
-     __cow_string(const char*, size_t);
-     __cow_string(const __cow_string&) _GLIBCXX_NOTHROW;
-     __cow_string& operator=(const __cow_string&) _GLIBCXX_NOTHROW;
-     ~__cow_string();
- #if __cplusplus >= 201103L
-     __cow_string(__cow_string&&) noexcept;
-     __cow_string& operator=(__cow_string&&) noexcept;
- #endif
-   };
- 
-   typedef basic_string<char> __sso_string;
- #else // _GLIBCXX_USE_CXX11_ABI
-   typedef basic_string<char> __cow_string;
- 
-   // Emulates a new SSO string when the old std::string is in use.
-   struct __sso_string
-   {
-     struct __str
-     {
-       const char* _M_p;
-       size_t _M_string_length;
-       char _M_local_buf[16];
-     };
- 
-     union {
-       __str _M_s;
-       char _M_bytes[sizeof(__str)];
-     };
- 
-     __sso_string() _GLIBCXX_NOTHROW;
-     __sso_string(const std::string&);
-     __sso_string(const char*, size_t);
-     __sso_string(const __sso_string&);
-     __sso_string& operator=(const __sso_string&);
-     ~__sso_string();
- #if __cplusplus >= 201103L
-     __sso_string(__sso_string&&) noexcept;
-     __sso_string& operator=(__sso_string&&) noexcept;
- #endif
-   };
- #endif // _GLIBCXX_USE_CXX11_ABI
- #else  // _GLIBCXX_USE_DUAL_ABI
-   typedef basic_string<char> __sso_string;
-   typedef basic_string<char> __cow_string;
- #endif
- 
    /**
     * @addtogroup exceptions
     * @{
     */
  
-   /** Logic errors represent problems in the internal logic of a program;
-    *  in theory, these are preventable, and even detectable before the
-    *  program runs (e.g., violations of class invariants).
-    *  @brief One of two subclasses of exception.
-    */
-   class logic_error : public exception
-   {
-     __cow_string _M_msg;
- 
-   public:
-     /** Takes a character string describing the error.  */
-     explicit
-     logic_error(const string& __arg) _GLIBCXX_TXN_SAFE;
- 
- #if __cplusplus >= 201103L
-     explicit
-     logic_error(const char*) _GLIBCXX_TXN_SAFE;
- 
-     logic_error(logic_error&&) noexcept;
-     logic_error& operator=(logic_error&&) noexcept;
- #endif
- 
- #if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
-     logic_error(const logic_error&) _GLIBCXX_NOTHROW;
-     logic_error& operator=(const logic_error&) _GLIBCXX_NOTHROW;
- #elif __cplusplus >= 201103L
-     logic_error(const logic_error&) = default;
-     logic_error& operator=(const logic_error&) = default;
- #endif
- 
-     virtual ~logic_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
- 
-     /** Returns a C-style character string describing the general cause of
-      *  the current error (the same string passed to the ctor).  */
-     virtual const char*
-     what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
- 
- # ifdef _GLIBCXX_TM_TS_INTERNAL
-     friend void*
-     ::_txnal_logic_error_get_msg(void* e);
- # endif
-   };
- 
-   /** Thrown by the library, or by you, to report domain errors (domain in
-    *  the mathematical sense).  */
-   class domain_error : public logic_error
-   {
-   public:
-     explicit domain_error(const string& __arg) _GLIBCXX_TXN_SAFE;
- #if __cplusplus >= 201103L
-     explicit domain_error(const char*) _GLIBCXX_TXN_SAFE;
-     domain_error(const domain_error&) = default;
-     domain_error& operator=(const domain_error&) = default;
-     domain_error(domain_error&&) = default;
-     domain_error& operator=(domain_error&&) = default;
- #endif
-     virtual ~domain_error() _GLIBCXX_NOTHROW;
-   };
- 
-   /** Thrown to report invalid arguments to functions.  */
-   class invalid_argument : public logic_error
-   {
-   public:
-     explicit invalid_argument(const string& __arg) _GLIBCXX_TXN_SAFE;
- #if __cplusplus >= 201103L
-     explicit invalid_argument(const char*) _GLIBCXX_TXN_SAFE;
-     invalid_argument(const invalid_argument&) = default;
-     invalid_argument& operator=(const invalid_argument&) = default;
-     invalid_argument(invalid_argument&&) = default;
-     invalid_argument& operator=(invalid_argument&&) = default;
- #endif
-     virtual ~invalid_argument() _GLIBCXX_NOTHROW;
-   };
- 
-   /** Thrown when an object is constructed that would exceed its maximum
-    *  permitted size (e.g., a basic_string instance).  */
-   class length_error : public logic_error
-   {
-   public:
-     explicit length_error(const string& __arg) _GLIBCXX_TXN_SAFE;
- #if __cplusplus >= 201103L
-     explicit length_error(const char*) _GLIBCXX_TXN_SAFE;
-     length_error(const length_error&) = default;
-     length_error& operator=(const length_error&) = default;
-     length_error(length_error&&) = default;
-     length_error& operator=(length_error&&) = default;
- #endif
-     virtual ~length_error() _GLIBCXX_NOTHROW;
-   };
- 
-   /** This represents an argument whose value is not within the expected
-    *  range (e.g., boundary checks in basic_string).  */
-   class out_of_range : public logic_error
-   {
-   public:
-     explicit out_of_range(const string& __arg) _GLIBCXX_TXN_SAFE;
- #if __cplusplus >= 201103L
-     explicit out_of_range(const char*) _GLIBCXX_TXN_SAFE;
-     out_of_range(const out_of_range&) = default;
-     out_of_range& operator=(const out_of_range&) = default;
-     out_of_range(out_of_range&&) = default;
-     out_of_range& operator=(out_of_range&&) = default;
- #endif
-     virtual ~out_of_range() _GLIBCXX_NOTHROW;
-   };
- 
-   /** Runtime errors represent problems outside the scope of a program;
-    *  they cannot be easily predicted and can generally only be caught as
-    *  the program executes.
-    *  @brief One of two subclasses of exception.
-    */
-   class runtime_error : public exception
-   {
-     __cow_string _M_msg;
- 
-   public:
-     /** Takes a character string describing the error.  */
-     explicit
-     runtime_error(const string& __arg) _GLIBCXX_TXN_SAFE;
- 
- #if __cplusplus >= 201103L
-     explicit
-     runtime_error(const char*) _GLIBCXX_TXN_SAFE;
- 
-     runtime_error(runtime_error&&) noexcept;
-     runtime_error& operator=(runtime_error&&) noexcept;
- #endif
- 
- #if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
-     runtime_error(const runtime_error&) _GLIBCXX_NOTHROW;
-     runtime_error& operator=(const runtime_error&) _GLIBCXX_NOTHROW;
- #elif __cplusplus >= 201103L
-     runtime_error(const runtime_error&) = default;
-     runtime_error& operator=(const runtime_error&) = default;
- #endif
- 
-     virtual ~runtime_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
- 
-     /** Returns a C-style character string describing the general cause of
-      *  the current error (the same string passed to the ctor).  */
-     virtual const char*
-     what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
- 
- # ifdef _GLIBCXX_TM_TS_INTERNAL
-     friend void*
-     ::_txnal_runtime_error_get_msg(void* e);
- # endif
-   };
- 
    /** Thrown to indicate range errors in internal computations.  */
    class range_error : public runtime_error
    {
    public:
      explicit range_error(const string& __arg) _GLIBCXX_TXN_SAFE;
  #if __cplusplus >= 201103L
      explicit range_error(const char*) _GLIBCXX_TXN_SAFE;
--- 39,70 ----
  
  #include <exception>
  #include <string>
+ #include <bits/stdexcept_except.h>
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
  _GLIBCXX_BEGIN_NAMESPACE_VERSION
  
    /**
     * @addtogroup exceptions
     * @{
     */
  
    /** Thrown to indicate range errors in internal computations.  */
    class range_error : public runtime_error
    {
    public:
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+     constexpr explicit range_error(const string& __arg) _GLIBCXX_TXN_SAFE
+     : runtime_error(__arg) { }
+     constexpr explicit range_error(const char* __arg) _GLIBCXX_TXN_SAFE
+     : runtime_error(__arg) { }
+     constexpr range_error(const range_error&) = default;
+     constexpr range_error& operator=(const range_error&) = default;
+     constexpr range_error(range_error&&) = default;
+     constexpr range_error& operator=(range_error&&) = default;
+     constexpr virtual ~range_error() noexcept { }
+ #else
      explicit range_error(const string& __arg) _GLIBCXX_TXN_SAFE;
  #if __cplusplus >= 201103L
      explicit range_error(const char*) _GLIBCXX_TXN_SAFE;
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 269,304 ****
      range_error& operator=(range_error&&) = default;
  #endif
      virtual ~range_error() _GLIBCXX_NOTHROW;
-   };
- 
-   /** Thrown to indicate arithmetic overflow.  */
-   class overflow_error : public runtime_error
-   {
-   public:
-     explicit overflow_error(const string& __arg) _GLIBCXX_TXN_SAFE;
- #if __cplusplus >= 201103L
-     explicit overflow_error(const char*) _GLIBCXX_TXN_SAFE;
-     overflow_error(const overflow_error&) = default;
-     overflow_error& operator=(const overflow_error&) = default;
-     overflow_error(overflow_error&&) = default;
-     overflow_error& operator=(overflow_error&&) = default;
  #endif
-     virtual ~overflow_error() _GLIBCXX_NOTHROW;
-   };
- 
-   /** Thrown to indicate arithmetic underflow.  */
-   class underflow_error : public runtime_error
-   {
-   public:
-     explicit underflow_error(const string& __arg) _GLIBCXX_TXN_SAFE;
- #if __cplusplus >= 201103L
-     explicit underflow_error(const char*) _GLIBCXX_TXN_SAFE;
-     underflow_error(const underflow_error&) = default;
-     underflow_error& operator=(const underflow_error&) = default;
-     underflow_error(underflow_error&&) = default;
-     underflow_error& operator=(underflow_error&&) = default;
- #endif
-     virtual ~underflow_error() _GLIBCXX_NOTHROW;
    };
  
    /// @} group exceptions
--- 74,80 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/string gcc-16-20251214/libstdc++-v3/include/std/string
*** gcc-16-20251207/libstdc++-v3/include/std/string	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/string	Sun Dec 14 22:32:17 2025
***************
*** 40,45 ****
--- 40,46 ----
  #include <bits/requires_hosted.h> // containers
  
  #include <bits/c++config.h>
+ #define __glibcxx_exc_in_string 1
  #include <bits/stringfwd.h>
  #include <bits/char_traits.h>
  #include <bits/allocator.h>
***************
*** 50,59 ****
--- 51,69 ----
  #include <bits/stl_iterator.h>
  #include <bits/stl_function.h> // For less
  #include <ext/numeric_traits.h>
+ #include <bits/stdexcept_throw.h>
  #include <bits/stl_algobase.h>
  #include <bits/range_access.h>
  #include <bits/basic_string.h>
  #include <bits/basic_string.tcc>
+ #if (_GLIBCXX_HOSTED && __cpp_exceptions && __cplusplus > 202302L \
+      && __cpp_constexpr_exceptions >= 202411L)
+ #include <bits/stdexcept_except.h>
+ #undef __glibcxx_exc_in_string
+ #include <bits/stdexcept_throw.h>
+ #else
+ #undef __glibcxx_exc_in_string
+ #endif
  
  #define __glibcxx_want_algorithm_default_value_type
  #define __glibcxx_want_allocator_traits_is_always_equal
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/string_view gcc-16-20251214/libstdc++-v3/include/std/string_view
*** gcc-16-20251207/libstdc++-v3/include/std/string_view	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/string_view	Sun Dec 14 22:32:17 2025
***************
*** 49,55 ****
  #if __cplusplus >= 201703L
  
  #include <bits/char_traits.h>
! #include <bits/functexcept.h>
  #include <bits/functional_hash.h>
  #include <bits/range_access.h>
  #include <bits/stl_algobase.h>
--- 49,58 ----
  #if __cplusplus >= 201703L
  
  #include <bits/char_traits.h>
! #ifndef __glibcxx_exc_in_string
! #define __glibcxx_exc_in_string 2
! #include <bits/stdexcept_throw.h>
! #endif
  #include <bits/functional_hash.h>
  #include <bits/range_access.h>
  #include <bits/stl_algobase.h>
*************** _GLIBCXX_END_NAMESPACE_VERSION
*** 918,923 ****
  
  #include <bits/string_view.tcc>
  
  #endif // __cplusplus <= 201402L
  
! #endif // _GLIBCXX_EXPERIMENTAL_STRING_VIEW
--- 921,934 ----
  
  #include <bits/string_view.tcc>
  
+ #if __glibcxx_exc_in_string == 2
+ #undef __glibcxx_exc_in_string
+ #if (_GLIBCXX_HOSTED && __cpp_exceptions && __cplusplus > 202302L \
+      && __cpp_constexpr_exceptions >= 202411L)
+ #include <bits/stdexcept_throw.h>
+ #endif
+ #endif
+ 
  #endif // __cplusplus <= 201402L
  
! #endif // _GLIBCXX_STRING_VIEW
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/syncstream gcc-16-20251214/libstdc++-v3/include/std/syncstream
*** gcc-16-20251207/libstdc++-v3/include/std/syncstream	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/syncstream	Sun Dec 14 22:32:17 2025
***************
*** 45,51 ****
  
  #include <bits/alloc_traits.h>
  #include <bits/allocator.h>
- #include <bits/functexcept.h>
  #include <bits/std_mutex.h>
  
  namespace std _GLIBCXX_VISIBILITY(default)
--- 45,50 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/type_traits gcc-16-20251214/libstdc++-v3/include/std/type_traits
*** gcc-16-20251207/libstdc++-v3/include/std/type_traits	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/type_traits	Sun Dec 14 22:32:17 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 826,832 ****
    // Check if a type is one of the signed integer types.
    __extension__
    template<typename _Tp>
!     using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>,
  	  signed char, signed short, signed int, signed long,
  	  signed long long
  #if defined(__GLIBCXX_TYPE_INT_N_0)
--- 826,832 ----
    // Check if a type is one of the signed integer types.
    __extension__
    template<typename _Tp>
!     using __is_signed_integer = __is_one_of<_Tp,
  	  signed char, signed short, signed int, signed long,
  	  signed long long
  #if defined(__GLIBCXX_TYPE_INT_N_0)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 841,852 ****
  #if defined(__GLIBCXX_TYPE_INT_N_3)
  	  , signed __GLIBCXX_TYPE_INT_N_3
  #endif
  	  >;
  
    // Check if a type is one of the unsigned integer types.
    __extension__
    template<typename _Tp>
!     using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>,
  	  unsigned char, unsigned short, unsigned int, unsigned long,
  	  unsigned long long
  #if defined(__GLIBCXX_TYPE_INT_N_0)
--- 841,855 ----
  #if defined(__GLIBCXX_TYPE_INT_N_3)
  	  , signed __GLIBCXX_TYPE_INT_N_3
  #endif
+ #if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
+ 	  , signed __int128
+ #endif
  	  >;
  
    // Check if a type is one of the unsigned integer types.
    __extension__
    template<typename _Tp>
!     using __is_unsigned_integer = __is_one_of<_Tp,
  	  unsigned char, unsigned short, unsigned int, unsigned long,
  	  unsigned long long
  #if defined(__GLIBCXX_TYPE_INT_N_0)
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 861,871 ****
  #if defined(__GLIBCXX_TYPE_INT_N_3)
  	  , unsigned __GLIBCXX_TYPE_INT_N_3
  #endif
  	  >;
  
    // Check if a type is one of the signed or unsigned integer types.
    template<typename _Tp>
!     using __is_standard_integer
        = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>;
  
    // __void_t (std::void_t for C++11)
--- 864,878 ----
  #if defined(__GLIBCXX_TYPE_INT_N_3)
  	  , unsigned __GLIBCXX_TYPE_INT_N_3
  #endif
+ #if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
+ 	  , unsigned __int128
+ #endif
  	  >;
  
    // Check if a type is one of the signed or unsigned integer types.
+   // i.e. an integral type except bool, char, wchar_t, and charN_t.
    template<typename _Tp>
!     using __is_signed_or_unsigned_integer
        = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>;
  
    // __void_t (std::void_t for C++11)
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/utility gcc-16-20251214/libstdc++-v3/include/std/utility
*** gcc-16-20251207/libstdc++-v3/include/std/utility	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/utility	Sun Dec 14 22:32:17 2025
***************
*** 78,84 ****
  #include <bits/utility.h>
  
  #if __cplusplus >= 202002L
! #include <ext/numeric_traits.h> // __is_standard_integer, __int_traits
  #endif
  
  #if __cplusplus > 202302L
--- 78,84 ----
  #include <bits/utility.h>
  
  #if __cplusplus >= 202002L
! #include <bits/intcmp.h>
  #endif
  
  #if __cplusplus > 202302L
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 129,204 ****
      void as_const(const _Tp&&) = delete;
  #endif
  
- #ifdef __cpp_lib_integer_comparison_functions // C++ >= 20
-   template<typename _Tp, typename _Up>
-     constexpr bool
-     cmp_equal(_Tp __t, _Up __u) noexcept
-     {
-       static_assert(__is_standard_integer<_Tp>::value);
-       static_assert(__is_standard_integer<_Up>::value);
- 
-       if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
- 	return __t == __u;
-       else if constexpr (is_signed_v<_Tp>)
- 	return __t >= 0 && make_unsigned_t<_Tp>(__t) == __u;
-       else
- 	return __u >= 0 && __t == make_unsigned_t<_Up>(__u);
-     }
- 
-   template<typename _Tp, typename _Up>
-     constexpr bool
-     cmp_not_equal(_Tp __t, _Up __u) noexcept
-     { return !std::cmp_equal(__t, __u); }
- 
-   template<typename _Tp, typename _Up>
-     constexpr bool
-     cmp_less(_Tp __t, _Up __u) noexcept
-     {
-       static_assert(__is_standard_integer<_Tp>::value);
-       static_assert(__is_standard_integer<_Up>::value);
- 
-       if constexpr (is_signed_v<_Tp> == is_signed_v<_Up>)
- 	return __t < __u;
-       else if constexpr (is_signed_v<_Tp>)
- 	return __t < 0 || make_unsigned_t<_Tp>(__t) < __u;
-       else
- 	return __u >= 0 && __t < make_unsigned_t<_Up>(__u);
-     }
- 
-   template<typename _Tp, typename _Up>
-     constexpr bool
-     cmp_greater(_Tp __t, _Up __u) noexcept
-     { return std::cmp_less(__u, __t); }
- 
-   template<typename _Tp, typename _Up>
-     constexpr bool
-     cmp_less_equal(_Tp __t, _Up __u) noexcept
-     { return !std::cmp_less(__u, __t); }
- 
-   template<typename _Tp, typename _Up>
-     constexpr bool
-     cmp_greater_equal(_Tp __t, _Up __u) noexcept
-     { return !std::cmp_less(__t, __u); }
- 
-   template<typename _Res, typename _Tp>
-     constexpr bool
-     in_range(_Tp __t) noexcept
-     {
-       static_assert(__is_standard_integer<_Res>::value);
-       static_assert(__is_standard_integer<_Tp>::value);
-       using __gnu_cxx::__int_traits;
- 
-       if constexpr (is_signed_v<_Tp> == is_signed_v<_Res>)
- 	return __int_traits<_Res>::__min <= __t
- 	  && __t <= __int_traits<_Res>::__max;
-       else if constexpr (is_signed_v<_Tp>)
- 	return __t >= 0
- 	  && make_unsigned_t<_Tp>(__t) <= __int_traits<_Res>::__max;
-       else
- 	return __t <= make_unsigned_t<_Res>(__int_traits<_Res>::__max);
-     }
- #endif // __cpp_lib_integer_comparison_functions
- 
  #ifdef __cpp_lib_to_underlying // C++ >= 23
    /// Convert an object of enumeration type to its underlying type.
    template<typename _Tp>
--- 129,134 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/std/variant gcc-16-20251214/libstdc++-v3/include/std/variant
*** gcc-16-20251207/libstdc++-v3/include/std/variant	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/std/variant	Sun Dec 14 22:32:17 2025
***************
*** 36,41 ****
--- 36,42 ----
  #define __glibcxx_want_freestanding_variant
  #define __glibcxx_want_variant
  #define __glibcxx_want_constrained_equality
+ #define __glibcxx_want_constexpr_exceptions
  #include <bits/version.h>
  
  #ifdef __cpp_lib_variant // C++ >= 17
*************** namespace __variant
*** 393,400 ****
  	_Variadic_union(in_place_index_t<_Np>, _Args&&...) = delete;
      };
  
!   template<bool __trivially_destructible, typename _First, typename... _Rest>
!     union _Variadic_union<__trivially_destructible, _First, _Rest...>
      {
        constexpr _Variadic_union() : _M_rest() { }
  
--- 394,422 ----
  	_Variadic_union(in_place_index_t<_Np>, _Args&&...) = delete;
      };
  
!   template<typename _First, typename... _Rest>
!     union _Variadic_union<true, _First, _Rest...>
!     {
!       constexpr _Variadic_union() : _M_rest() { }
! 
!       template<typename... _Args>
! 	constexpr
! 	_Variadic_union(in_place_index_t<0>, _Args&&... __args)
! 	: _M_first(in_place_index<0>, std::forward<_Args>(__args)...)
! 	{ }
! 
!       template<size_t _Np, typename... _Args>
! 	constexpr
! 	_Variadic_union(in_place_index_t<_Np>, _Args&&... __args)
! 	: _M_rest(in_place_index<_Np-1>, std::forward<_Args>(__args)...)
! 	{ }
! 
!       _Uninitialized<_First> _M_first;
!       _Variadic_union<true, _Rest...> _M_rest;
!     };
! 
!   template<typename _First, typename... _Rest>
!     union _Variadic_union<false, _First, _Rest...>
      {
        constexpr _Variadic_union() : _M_rest() { }
  
*************** namespace __variant
*** 410,433 ****
  	: _M_rest(in_place_index<_Np-1>, std::forward<_Args>(__args)...)
  	{ }
  
- #if __cpp_lib_variant >= 202106L
        _Variadic_union(const _Variadic_union&) = default;
        _Variadic_union(_Variadic_union&&) = default;
        _Variadic_union& operator=(const _Variadic_union&) = default;
        _Variadic_union& operator=(_Variadic_union&&) = default;
  
-       ~_Variadic_union() = default;
- 
        // If any alternative type is not trivially destructible then we need a
        // user-provided destructor that does nothing. The active alternative
        // will be destroyed by _Variant_storage::_M_reset() instead of here.
!       constexpr ~_Variadic_union()
! 	requires (!__trivially_destructible)
        { }
- #endif
  
        _Uninitialized<_First> _M_first;
!       _Variadic_union<__trivially_destructible, _Rest...> _M_rest;
      };
  
    // _Never_valueless_alt is true for variant alternatives that can
--- 432,450 ----
  	: _M_rest(in_place_index<_Np-1>, std::forward<_Args>(__args)...)
  	{ }
  
        _Variadic_union(const _Variadic_union&) = default;
        _Variadic_union(_Variadic_union&&) = default;
        _Variadic_union& operator=(const _Variadic_union&) = default;
        _Variadic_union& operator=(_Variadic_union&&) = default;
  
        // If any alternative type is not trivially destructible then we need a
        // user-provided destructor that does nothing. The active alternative
        // will be destroyed by _Variant_storage::_M_reset() instead of here.
!       _GLIBCXX20_CONSTEXPR ~_Variadic_union()
        { }
  
        _Uninitialized<_First> _M_first;
!       _Variadic_union<(is_trivially_destructible_v<_Rest> && ...), _Rest...> _M_rest;
      };
  
    // _Never_valueless_alt is true for variant alternatives that can
*************** namespace __detail::__variant
*** 1394,1417 ****
  		   && (is_swappable_v<_Types> && ...))>
      swap(variant<_Types...>&, variant<_Types...>&) = delete;
  
!   [[noreturn]] void __throw_bad_variant_access(unsigned);
  
    class bad_variant_access : public exception
    {
    public:
!     bad_variant_access() noexcept { }
  
!     const char* what() const noexcept override
      { return _M_reason; }
  
    private:
      // Must only be called with a string literal
      bad_variant_access(const char* __reason) noexcept : _M_reason(__reason) { }
  
      // Must point to a string with static storage duration:
      const char* _M_reason = "bad variant access";
  
!     friend void __throw_bad_variant_access([[maybe_unused]] unsigned __n)
      {
        [[maybe_unused]] static constexpr const char* __reasons[] = {
  	"std::get: wrong index for variant",
--- 1411,1443 ----
  		   && (is_swappable_v<_Types> && ...))>
      swap(variant<_Types...>&, variant<_Types...>&) = delete;
  
! #if __cpp_lib_constexpr_exceptions >= 202502L
! #define _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS constexpr
! #else
! #define _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS
! #endif
!   [[noreturn]] _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS void
!   __throw_bad_variant_access(unsigned);
  
    class bad_variant_access : public exception
    {
    public:
!     _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS bad_variant_access() noexcept { }
  
!     _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS const char* what()
!     const noexcept override
      { return _M_reason; }
  
    private:
      // Must only be called with a string literal
+     _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS
      bad_variant_access(const char* __reason) noexcept : _M_reason(__reason) { }
  
      // Must point to a string with static storage duration:
      const char* _M_reason = "bad variant access";
  
!     friend _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS void
!     __throw_bad_variant_access([[maybe_unused]] unsigned __n)
      {
        [[maybe_unused]] static constexpr const char* __reasons[] = {
  	"std::get: wrong index for variant",
*************** namespace __detail::__variant
*** 1421,1426 ****
--- 1447,1453 ----
        };
        _GLIBCXX_THROW_OR_ABORT(bad_variant_access(__reasons[__n % 4u]));
      }
+ #undef _GLIBCXX_CONSTEXPR_BAD_VARIANT_ACCESS
    };
  
    template<typename... _Types>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/tr1/array gcc-16-20251214/libstdc++-v3/include/tr1/array
*** gcc-16-20251207/libstdc++-v3/include/tr1/array	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/tr1/array	Sun Dec 14 22:32:17 2025
***************
*** 34,39 ****
--- 34,40 ----
  #endif
  
  #include <bits/requires_hosted.h> // TR1
+ #include <bits/stdexcept_throw.h>
  
  #include <bits/stl_algobase.h>
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/tr1/cmath gcc-16-20251214/libstdc++-v3/include/tr1/cmath
*** gcc-16-20251207/libstdc++-v3/include/tr1/cmath	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/tr1/cmath	Sun Dec 14 22:32:17 2025
***************
*** 34,39 ****
--- 34,40 ----
  #endif
  
  #include <bits/requires_hosted.h> // TR1
+ #include <bits/stdexcept_throw.h>
  
  #include <cmath>
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/tr1/memory gcc-16-20251214/libstdc++-v3/include/tr1/memory
*** gcc-16-20251207/libstdc++-v3/include/tr1/memory	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/tr1/memory	Sun Dec 14 22:32:17 2025
***************
*** 47,53 ****
  #include <iosfwd>           	// std::basic_ostream
  #include <ext/atomicity.h>
  #include <ext/concurrence.h>
- #include <bits/functexcept.h>
  #include <bits/stl_function.h> 	// std::less
  #include <debug/debug.h>
  #include <tr1/type_traits>
--- 47,52 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/include/tr2/dynamic_bitset gcc-16-20251214/libstdc++-v3/include/tr2/dynamic_bitset
*** gcc-16-20251207/libstdc++-v3/include/tr2/dynamic_bitset	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/include/tr2/dynamic_bitset	Sun Dec 14 22:32:17 2025
***************
*** 37,43 ****
  #include <vector>
  #include <string>
  #include <istream>
! #include <bits/functexcept.h>
  #include <bits/stl_algo.h>	// For fill
  #include <bits/cxxabi_forced.h>
  
--- 37,43 ----
  #include <vector>
  #include <string>
  #include <istream>
! #include <bits/stdexcept_throw.h>
  #include <bits/stl_algo.h>	// For fill
  #include <bits/cxxabi_forced.h>
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/libsupc++/compare gcc-16-20251214/libstdc++-v3/libsupc++/compare
*** gcc-16-20251207/libstdc++-v3/libsupc++/compare	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/libsupc++/compare	Sun Dec 14 22:32:17 2025
***************
*** 34,39 ****
--- 34,40 ----
  #pragma GCC system_header
  #endif
  
+ #define __glibcxx_want_concepts
  #define __glibcxx_want_three_way_comparison
  #define __glibcxx_want_type_order
  #include <bits/version.h>
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 499,508 ****
  
    template<typename _Tp, typename _Up, typename _Cat = partial_ordering>
      concept three_way_comparable_with
!       = three_way_comparable<_Tp, _Cat>
!       && three_way_comparable<_Up, _Cat>
!       && common_reference_with<const remove_reference_t<_Tp>&,
! 			       const remove_reference_t<_Up>&>
        && three_way_comparable<
  	  common_reference_t<const remove_reference_t<_Tp>&,
  			     const remove_reference_t<_Up>&>, _Cat>
--- 500,507 ----
  
    template<typename _Tp, typename _Up, typename _Cat = partial_ordering>
      concept three_way_comparable_with
!       = three_way_comparable<_Tp, _Cat> && three_way_comparable<_Up, _Cat>
!       && __detail::__comparison_common_type_with<_Tp, _Up>
        && three_way_comparable<
  	  common_reference_t<const remove_reference_t<_Tp>&,
  			     const remove_reference_t<_Up>&>, _Cat>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/libsupc++/new gcc-16-20251214/libstdc++-v3/libsupc++/new
*** gcc-16-20251207/libstdc++-v3/libsupc++/new	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/libsupc++/new	Sun Dec 14 22:32:17 2025
***************
*** 47,52 ****
--- 47,53 ----
  #define __glibcxx_want_destroying_delete
  #define __glibcxx_want_constexpr_new
  #include <bits/version.h>
+ #include <bits/new_except.h> // std::bad_alloc, std::bad_array_new_length
  
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wc++11-extensions" // scoped enum
*************** extern "C++" {
*** 57,119 ****
  
  namespace std 
  {
-   /**
-    *  @brief  Exception possibly thrown by @c new.
-    *  @ingroup exceptions
-    *
-    *  @c bad_alloc (or classes derived from it) is used to report allocation
-    *  errors from the throwing forms of @c new.  */
-   class bad_alloc : public exception
-   {
-   public:
-     _GLIBCXX26_CONSTEXPR bad_alloc() throw() { }
- 
- #if __cplusplus >= 201103L
-     _GLIBCXX26_CONSTEXPR bad_alloc(const bad_alloc&) = default;
-     _GLIBCXX26_CONSTEXPR bad_alloc& operator=(const bad_alloc&) = default;
- #endif
- 
- #if __cplusplus >= 202400L
-     constexpr virtual ~bad_alloc() noexcept {}
- 
-     constexpr virtual const char* what() const noexcept
-     {
-       return "std::bad_alloc";
-     }
- #else
-     // This declaration is not useless:
-     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
-     virtual ~bad_alloc() throw();
- 
-     // See comment in eh_exception.cc.
-     virtual const char* what() const throw();
- #endif
-   };
- 
- #if __cplusplus >= 201103L
-   class bad_array_new_length : public bad_alloc
-   {
-   public:
-     _GLIBCXX26_CONSTEXPR bad_array_new_length() throw() { }
- 
- #if __cplusplus >= 202400L
-     constexpr virtual ~bad_array_new_length() noexcept {}
- 
-     constexpr virtual const char* what() const noexcept
-     {
-       return "std::bad_array_new_length";
-     }
- #else
-     // This declaration is not useless:
-     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
-     virtual ~bad_array_new_length() throw();
- 
-     // See comment in eh_exception.cc.
-     virtual const char* what() const throw();
- #endif
-   };
- #endif
- 
  #if __cpp_aligned_new
    enum class align_val_t: size_t {};
  #endif
--- 58,63 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/src/c++11/cow-stdexcept.cc gcc-16-20251214/libstdc++-v3/src/c++11/cow-stdexcept.cc
*** gcc-16-20251207/libstdc++-v3/src/c++11/cow-stdexcept.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/src/c++11/cow-stdexcept.cc	Sun Dec 14 22:32:17 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 126,143 ****
--- 126,147 ----
  
      __cow_string();
      __cow_string(const std::string& s);
+     __cow_string(const char*);
      __cow_string(const char*, size_t n);
      __cow_string(const __cow_string&) noexcept;
      __cow_string& operator=(const __cow_string&) noexcept;
      ~__cow_string();
      __cow_string(__cow_string&&) noexcept;
      __cow_string& operator=(__cow_string&&) noexcept;
+     const char* c_str() const noexcept;
    };
  
    __cow_string::__cow_string() : _M_str() { }
  
    __cow_string::__cow_string(const std::string& s) : _M_str(s) { }
  
+   __cow_string::__cow_string(const char* s) : _M_str(s) { }
+ 
    __cow_string::__cow_string(const char* s, size_t n) : _M_str(s, n) { }
  
    __cow_string::__cow_string(const __cow_string& s) noexcept
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 162,167 ****
--- 166,177 ----
      return *this;
    }
  
+   const char*
+   __cow_string::c_str() const noexcept
+   {
+     return _M_str.c_str();
+   }
+ 
    static_assert(sizeof(__cow_string) == sizeof(std::string),
                  "sizeof(std::string) has changed");
    static_assert(alignof(__cow_string) == alignof(std::string),
diff -Nrcpad gcc-16-20251207/libstdc++-v3/src/c++11/functexcept.cc gcc-16-20251214/libstdc++-v3/src/c++11/functexcept.cc
*** gcc-16-20251207/libstdc++-v3/src/c++11/functexcept.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/src/c++11/functexcept.cc	Sun Dec 14 22:32:17 2025
***************
*** 20,26 ****
  // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  // <http://www.gnu.org/licenses/>.
  
- #include <bits/functexcept.h>
  #include <cstdlib>
  #include <exception>
  #include <stdexcept>
--- 20,25 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/src/c++11/regex.cc gcc-16-20251214/libstdc++-v3/src/c++11/regex.cc
*** gcc-16-20251207/libstdc++-v3/src/c++11/regex.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/src/c++11/regex.cc	Sun Dec 14 22:32:17 2025
***************
*** 24,30 ****
  
  #include <stdexcept>
  #include <bits/regex_error.h>
- #include <bits/functexcept.h>
  
  namespace std _GLIBCXX_VISIBILITY(default)
  {
--- 24,29 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/src/c++11/snprintf_lite.cc gcc-16-20251214/libstdc++-v3/src/c++11/snprintf_lite.cc
*** gcc-16-20251207/libstdc++-v3/src/c++11/snprintf_lite.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/src/c++11/snprintf_lite.cc	Sun Dec 14 22:32:17 2025
***************
*** 25,31 ****
  
  #include <stdarg.h>
  #include <stddef.h>
! #include <bits/functexcept.h>
  
  namespace __gnu_cxx {
  
--- 25,31 ----
  
  #include <stdarg.h>
  #include <stddef.h>
! #include <bits/stdexcept_throw.h>
  
  namespace __gnu_cxx {
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/src/c++11/thread.cc gcc-16-20251214/libstdc++-v3/src/c++11/thread.cc
*** gcc-16-20251207/libstdc++-v3/src/c++11/thread.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/src/c++11/thread.cc	Sun Dec 14 22:32:17 2025
***************
*** 30,35 ****
--- 30,36 ----
  #include <system_error>
  #include <cerrno>
  #include <cxxabi_forced.h>
+ #include <bits/functexcept.h>
  
  #ifndef _GLIBCXX_USE_NANOSLEEP
  # ifdef _GLIBCXX_HAVE_SLEEP
diff -Nrcpad gcc-16-20251207/libstdc++-v3/src/c++17/floating_from_chars.cc gcc-16-20251214/libstdc++-v3/src/c++17/floating_from_chars.cc
*** gcc-16-20251207/libstdc++-v3/src/c++17/floating_from_chars.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/src/c++17/floating_from_chars.cc	Sun Dec 14 22:32:17 2025
***************
*** 45,51 ****
  #include <cstdlib>
  #include <cstring>
  #include <locale.h>
- #include <bits/functexcept.h>
  #if _GLIBCXX_HAVE_XLOCALE_H
  # include <xlocale.h>
  #endif
--- 45,50 ----
diff -Nrcpad gcc-16-20251207/libstdc++-v3/src/c++23/std.cc.in gcc-16-20251214/libstdc++-v3/src/c++23/std.cc.in
*** gcc-16-20251207/libstdc++-v3/src/c++23/std.cc.in	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/src/c++23/std.cc.in	Sun Dec 14 22:32:17 2025
*************** export namespace std
*** 1899,1906 ****
    using std::submdspan_mapping_result;
    using std::submdspan_canonicalize_slices;
    using std::submdspan_extents;
  #endif
-   // FIXME mdsubspan
  }
  #endif
  
--- 1899,1906 ----
    using std::submdspan_mapping_result;
    using std::submdspan_canonicalize_slices;
    using std::submdspan_extents;
+   using std::submdspan;
  #endif
  }
  #endif
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/18_support/exception/version.cc gcc-16-20251214/libstdc++-v3/testsuite/18_support/exception/version.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/18_support/exception/version.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/18_support/exception/version.cc	Sun Dec 14 22:32:17 2025
***************
*** 3,9 ****
  
  #include <exception>
  
! #ifdef __cpp_lib_constexpr_exceptions
! # error "Feature test macro for constexpr_exceptions should not be provided by <exception>"
  #endif
- 
--- 3,10 ----
  
  #include <exception>
  
! #ifndef __cpp_lib_constexpr_exceptions
! # error "Feature test macro for constexpr_exceptions is missing in <exception>"
! #elif __cpp_lib_constexpr_exceptions < 202502L
! # error "Feature test macro for constexpr_exceptions has wrong value in <exception>"
  #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/version.cc gcc-16-20251214/libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/version.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/version.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/19_diagnostics/headers/stdexcept/version.cc	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,10 ----
+ // { dg-do preprocess { target c++26 } }
+ // { dg-add-options no_pch }
+ 
+ #include <stdexcept>
+ 
+ #ifndef __cpp_lib_constexpr_exceptions
+ # error "Feature test macro for constexpr_exceptions is missing in <stdexcept>"
+ #elif __cpp_lib_constexpr_exceptions < 202502L
+ # error "Feature test macro for constexpr_exceptions has wrong value in <stdexcept>"
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/19_diagnostics/logic_error/constexpr.cc gcc-16-20251214/libstdc++-v3/testsuite/19_diagnostics/logic_error/constexpr.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/19_diagnostics/logic_error/constexpr.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/19_diagnostics/logic_error/constexpr.cc	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,75 ----
+ // { dg-do compile { target c++26 } }
+ 
+ #include <string>
+ #include <stdexcept>
+ #include <testsuite_hooks.h>
+ 
+ template <typename T>
+ constexpr bool test01()
+ {
+   try
+     {
+       std::string s = "This is the first logic error";
+       throw T(s);
+     }
+   catch (const T &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the first logic error" );
+     }
+   try
+     {
+       throw T("This is the second logic error");
+     }
+   catch (const std::logic_error &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the second logic error" );
+     }
+   std::string s = "This is the third logic error";
+   T l(s);
+   try
+     {
+       throw T(l);
+     }
+   catch (const std::logic_error &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the third logic error" );
+     }
+   VERIFY( std::string(l.what()) == "This is the third logic error" );
+   s = "This is the fourth logic error";
+   l = T(s);
+   try
+     {
+       throw T(std::move(l));
+     }
+   catch (const T &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the fourth logic error" );
+     }
+   T l2(s);
+   l2 = T("This is the fifth logic error");
+   VERIFY( std::string(l2.what()) == "This is the fifth logic error" );
+   T l3("This is the sixth logic error");
+   VERIFY( std::string(l3.what()) == "This is the sixth logic error" );
+   l3 = l2;
+   VERIFY( std::string(l2.what()) == "This is the fifth logic error" );
+   VERIFY( std::string(l3.what()) == "This is the fifth logic error" );
+   l3 = T("This is the seventh logic error");
+   l2 = std::move(l3);
+   VERIFY( std::string(l2.what()) == "This is the seventh logic error" );
+   return true;
+ }
+ 
+ static_assert(test01<std::logic_error>());
+ static_assert(test01<std::domain_error>());
+ static_assert(test01<std::invalid_argument>());
+ static_assert(test01<std::length_error>());
+ static_assert(test01<std::out_of_range>());
+ 
+ int main(void)
+ {
+   test01<std::logic_error>();
+   test01<std::domain_error>();
+   test01<std::invalid_argument>();
+   test01<std::length_error>();
+   test01<std::out_of_range>();
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/19_diagnostics/runtime_error/constexpr.cc gcc-16-20251214/libstdc++-v3/testsuite/19_diagnostics/runtime_error/constexpr.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/19_diagnostics/runtime_error/constexpr.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/19_diagnostics/runtime_error/constexpr.cc	Sun Dec 14 22:32:17 2025
***************
*** 0 ****
--- 1,73 ----
+ // { dg-do compile { target c++26 } }
+ 
+ #include <string>
+ #include <stdexcept>
+ #include <testsuite_hooks.h>
+ 
+ template <typename T>
+ constexpr bool test01()
+ {
+   try
+     {
+       std::string s = "This is the first runtime error";
+       throw T(s);
+     }
+   catch (const T &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the first runtime error" );
+     }
+   try
+     {
+       throw T("This is the second runtime error");
+     }
+   catch (const std::runtime_error &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the second runtime error" );
+     }
+   std::string s = "This is the third runtime error";
+   T l(s);
+   try
+     {
+       throw T(l);
+     }
+   catch (const std::runtime_error &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the third runtime error" );
+     }
+   VERIFY( std::string(l.what()) == "This is the third runtime error" );
+   s = "This is the fourth runtime error";
+   l = T(s);
+   try
+     {
+       throw T(std::move(l));
+     }
+   catch (const T &x)
+     {
+       VERIFY( std::string(x.what()) == "This is the fourth runtime error" );
+     }
+   T l2(s);
+   l2 = T("This is the fifth runtime error");
+   VERIFY( std::string(l2.what()) == "This is the fifth runtime error" );
+   T l3("This is the sixth runtime error");
+   VERIFY( std::string(l3.what()) == "This is the sixth runtime error" );
+   l3 = l2;
+   VERIFY( std::string(l2.what()) == "This is the fifth runtime error" );
+   VERIFY( std::string(l3.what()) == "This is the fifth runtime error" );
+   l3 = T("This is the seventh runtime error");
+   l2 = std::move(l3);
+   VERIFY( std::string(l2.what()) == "This is the seventh runtime error" );
+   return true;
+ }
+ 
+ static_assert(test01<std::runtime_error>());
+ static_assert(test01<std::range_error>());
+ static_assert(test01<std::overflow_error>());
+ static_assert(test01<std::underflow_error>());
+ 
+ int main(void)
+ {
+   test01<std::runtime_error>();
+   test01<std::range_error>();
+   test01<std::overflow_error>();
+   test01<std::underflow_error>();
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/allocator/105975.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/allocator/105975.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/allocator/105975.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/allocator/105975.cc	Sun Dec 14 22:32:17 2025
*************** consteval bool test_pr105957()
*** 9,18 ****
  {
    std::allocator<long long> a;
    auto n = std::size_t(-1) / (sizeof(long long) - 1);
!   auto p = a.allocate(n); // { dg-error "constexpr" }
    a.deallocate(p, n);
    return true;
  }
  static_assert( test_pr105957() ); // { dg-error "non-constant" }
  
! // { dg-error "throw_bad_array_new_length" "" { target *-*-* } 0 }
--- 9,19 ----
  {
    std::allocator<long long> a;
    auto n = std::size_t(-1) / (sizeof(long long) - 1);
!   auto p = a.allocate(n); // { dg-error "constexpr" "" { target c++23_down } }
    a.deallocate(p, n);
    return true;
  }
  static_assert( test_pr105957() ); // { dg-error "non-constant" }
+ // { dg-error "uncaught exception of type 'std::bad_array_new_length'" "" { target c++26 } 16 }
  
! // { dg-error "throw_bad_array_new_length" "" { target c++23_down } 0 }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/expected/observers.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/expected/observers.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/expected/observers.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/expected/observers.cc	Sun Dec 14 22:32:17 2025
*************** test_value()
*** 77,83 ****
    return true;
  }
  
! void
  test_value_throw()
  {
    std::expected<int, int> e1 = std::unexpected(9);
--- 77,86 ----
    return true;
  }
  
! #if __cpp_lib_constexpr_exceptions >= 202502L
! constexpr
! #endif
! bool
  test_value_throw()
  {
    std::expected<int, int> e1 = std::unexpected(9);
*************** test_value_throw()
*** 87,92 ****
--- 90,97 ----
      VERIFY( false );
    } catch (const std::bad_expected_access<int>& e) {
      VERIFY( e.error() == 9 );
+     long c = e.what()[0];
+     VERIFY( c == e.what()[0] );
    }
    try {
      std::move(e1).value();
*************** test_value_throw()
*** 122,127 ****
--- 127,133 ----
    } catch (const std::bad_expected_access<int>& e) {
      VERIFY( e.error() == 8 );
    }
+   return true;
  }
  
  constexpr bool
*************** int main()
*** 218,223 ****
--- 224,232 ----
    test_has_value();
    static_assert( test_value() );
    test_value();
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+   static_assert( test_value_throw() );
+ #endif
    test_value_throw();
    static_assert( test_error() );
    test_error();
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/expected/version.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/expected/version.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/expected/version.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/expected/version.cc	Sun Dec 14 22:32:17 2025
***************
*** 15,22 ****
--- 15,31 ----
  # error "Feature-test macro for freestanding expected has wrong value in <version>"
  #endif
  
+ #if __cplusplus > 202302L
+ # ifndef __cpp_lib_constexpr_exceptions
+ #  error "Feature test macro for constexpr_exceptions is missing in <version>"
+ # elif __cpp_lib_constexpr_exceptions < 202502L
+ #  error "Feature test macro for constexpr_exceptions has wrong value in <version>"
+ # endif
+ #endif
+ 
  #undef __cpp_lib_expected
  #undef __cpp_lib_freestanding_expected
+ #undef __cpp_lib_constexpr_exceptions
  #include <expected>
  
  #ifndef __cpp_lib_expected
***************
*** 30,32 ****
--- 39,49 ----
  #elif __cpp_lib_freestanding_expected != 202311L
  # error "Feature-test macro for freestanding expected has wrong value in <expected>"
  #endif
+ 
+ #if __cplusplus > 202302L
+ # ifndef __cpp_lib_constexpr_exceptions
+ #  error "Feature test macro for constexpr_exceptions is missing in <expected>"
+ # elif __cpp_lib_constexpr_exceptions < 202502L
+ #  error "Feature test macro for constexpr_exceptions has wrong value in <expected>"
+ # endif
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/integer_comparisons/extended.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/integer_comparisons/extended.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/integer_comparisons/extended.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/integer_comparisons/extended.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,60 ----
+ // { dg-do compile { target c++20 } }
+ 
+ #include <utility>
+ 
+ template<typename T>
+ constexpr bool
+ test()
+ {
+   using S = std::make_signed_t<T>;
+   using U = std::make_unsigned_t<T>;
+ 
+   static_assert( std::cmp_less((S)-1, (U)1));
+   static_assert( ! std::cmp_less((S)20, (U)10));
+   static_assert( ! std::cmp_less((U)20, (S)10));
+ 
+   static_assert( std::cmp_greater((S)100, (U)1) );
+   static_assert( std::cmp_greater((U)100, (S)1) );
+   static_assert( ! std::cmp_greater((S)-100, (U)1) );
+ 
+   static_assert( std::cmp_less_equal((S)-1, (U)1));
+   static_assert( std::cmp_less_equal((U)10, (S)10));
+   static_assert( ! std::cmp_less_equal((U)-100, (S)-100));
+ 
+   static_assert( std::cmp_greater_equal((S)200, (U)2) );
+   static_assert( std::cmp_greater_equal((U)2000, (S)2000) );
+   static_assert( ! std::cmp_greater_equal((S)-100, (U)100) );
+ 
+   static_assert( std::cmp_equal((S)1, (U)1) );
+   static_assert( ! std::cmp_equal((S)-2, (U)-2) );
+ 
+   static_assert( std::cmp_not_equal((S)-1, (U)-1) );
+   static_assert( ! std::cmp_not_equal((S)100, (U)100) );
+ 
+   static_assert( std::in_range<S>((U)5) );
+   static_assert( std::in_range<U>((S)5) );
+   static_assert( ! std::in_range<S>((U)-5) );
+   static_assert( ! std::in_range<U>((S)-5) );
+ 
+   return true;
+ }
+ 
+ #ifdef __SIZEOF_INT128__
+ static_assert(test<__int128>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_0
+ static_assert(test<__GLIBCXX_TYPE_INT_N_0>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_1
+ static_assert(test<__GLIBCXX_TYPE_INT_N_1>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_2
+ static_assert(test<__GLIBCXX_TYPE_INT_N_2>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_3
+ static_assert(test<__GLIBCXX_TYPE_INT_N_3>());
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/optional/constexpr/observers/3.cc	Sun Dec 14 22:32:18 2025
***************
*** 18,29 ****
--- 18,62 ----
  // <http://www.gnu.org/licenses/>.
  
  #include <optional>
+ #include <testsuite_hooks.h>
  
  struct value_type
  {
    int i;
  };
  
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+ void eat(int x)
+ {
+ }
+ 
+ constexpr bool test01()
+ {
+   enum outcome_type { nothrow, caught, bad_catch };
+ 
+   outcome_type outcome {};
+   std::optional<value_type> o = std::nullopt;
+ 
+   try
+   {
+     eat(o.value().i);
+   }
+   catch(std::bad_optional_access const& x)
+   {
+     outcome = caught;
+     long c = x.what()[0];
+     VERIFY( c == x.what()[0] );
+   }
+   catch(...)
+   { outcome = bad_catch; }
+ 
+   VERIFY( outcome == caught );
+   return true;
+ }
+ 
+ static_assert( test01() );
+ #endif
+ 
  int main()
  {
    constexpr std::optional<value_type> o { value_type { 51 } };
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/optional/version.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/optional/version.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/optional/version.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/optional/version.cc	Sun Dec 14 22:32:18 2025
***************
*** 29,39 ****
--- 29,46 ----
  # elif __cpp_lib_optional_range_support != 202406L
  #  error "Feature test macro for optional range support has wrong value for C++26 in <version>"
  # endif
+ 
+ # ifndef __cpp_lib_constexpr_exceptions
+ #  error "Feature test macro for constexpr_exceptions is missing in <version>"
+ # elif __cpp_lib_constexpr_exceptions < 202502L
+ #  error "Feature test macro for constexpr_exceptions has wrong value in <version>"
+ # endif
  #endif
  
  #undef __cpp_lib_optional
  #undef __cpp_lib_freestanding_optional
  #undef __cpp_lib_optional_range_support
+ #undef __cpp_lib_constexpr_exceptions
  #include <optional>
  
  #if __cplusplus >= 202302L
***************
*** 51,54 ****
--- 58,67 ----
  # if __cpp_lib_optional_range_support != 202406L
  #  error "Feature test macro for optional range support has wrong value for C++26 in <optional>"
  # endif
+ 
+ # ifndef __cpp_lib_constexpr_exceptions
+ #  error "Feature test macro for constexpr_exceptions is missing in <optional>"
+ # elif __cpp_lib_constexpr_exceptions < 202502L
+ #  error "Feature test macro for constexpr_exceptions has wrong value in <optional>"
+ # endif
  #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/112591.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/112591.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/112591.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/112591.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,32 ----
+ // { dg-do run { target c++17 } }
+ 
+ #include <variant>
+ #include <testsuite_hooks.h>
+ 
+ struct NonEmpty { int x; };
+ struct TrivialEmpty {};
+ struct NonTrivialEmpty { ~NonTrivialEmpty() {} };
+ 
+ template<typename T>
+ struct Compose : T
+ {
+   std::variant<T, int> v;
+ };
+ 
+ template<typename T>
+ bool testAlias()
+ {
+   Compose<T> c;
+   return static_cast<T*>(&c) == &std::get<T>(c.v);
+ }
+ 
+ int main()
+ {
+   VERIFY( !testAlias<NonEmpty>() );
+   VERIFY( !testAlias<TrivialEmpty>() );
+ #if __cplusplus >= 202002L  
+   VERIFY( !testAlias<NonTrivialEmpty>() );
+ #else  
+   VERIFY( testAlias<NonTrivialEmpty>() );
+ #endif
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/87619.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/87619.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/87619.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/87619.cc	Sun Dec 14 22:32:18 2025
***************
*** 16,21 ****
--- 16,22 ----
  // <http://www.gnu.org/licenses/>.
  
  // { dg-do compile { target c++17 } }
+ // { dg-options "-ftemplate-depth=270" }
  
  #include <variant>
  #include <utility>
***************
*** 23,28 ****
--- 24,30 ----
  
  template<std::size_t I>
  struct S {
+  ~S() {}
  };
  
  template <std::size_t... Is>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/constexpr.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/constexpr.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/constexpr.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/constexpr.cc	Sun Dec 14 22:32:18 2025
***************
*** 11,16 ****
--- 11,19 ----
  # error "Feature test macro for variant has wrong value for C++20 in <variant>"
  #endif
  
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+ #include <string>
+ #endif
  #include <testsuite_hooks.h>
  
  
*************** test_assign()
*** 51,56 ****
--- 54,92 ----
  
  static_assert( test_assign() );
  
+ #if __cpp_lib_constexpr_exceptions >= 202502L
+ constexpr bool test_get()
+ {
+   VERIFY(std::get<1>(std::variant<int, std::string>("a")) == "a");
+   VERIFY(std::get<std::string>(std::variant<int, std::string>("a")) == "a");
+   {
+     try
+       {
+ 	std::get<0>(std::variant<int, std::string>("a"));
+       }
+     catch (const std::bad_variant_access& x)
+       {
+ 	long c = x.what()[0];
+ 	VERIFY( c == x.what()[0] );
+       }
+   }
+   {
+     try
+       {
+ 	std::get<int>(std::variant<int, std::string>("a"));
+       }
+     catch (const std::bad_variant_access& x)
+       {
+ 	long c = x.what()[0];
+ 	VERIFY( c == x.what()[0] );
+       }
+   }
+   return true;
+ }
+ 
+ static_assert (test_get() );
+ #endif
+ 
  constexpr bool
  test_emplace()
  {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/version.cc gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/version.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/20_util/variant/version.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/20_util/variant/version.cc	Sun Dec 14 22:32:18 2025
***************
*** 19,26 ****
--- 19,35 ----
  #endif
  #endif
  
+ #if __cplusplus > 202302L
+ #ifndef __cpp_lib_constexpr_exceptions
+ # error "Feature test macro for constexpr_exceptions is missing in <version>"
+ #elif __cpp_lib_constexpr_exceptions < 202502L
+ # error "Feature test macro for constexpr_exceptions has wrong value in <version>"
+ #endif
+ #endif
+ 
  #undef __cpp_lib_variant
  #undef __cpp_lib_freestanding_variant
+ #undef __cpp_lib_constexpr_exceptions
  #include <variant>
  
  #if __cplusplus >= 202302L
***************
*** 30,32 ****
--- 39,49 ----
  # error "Feature test macro for freestanding std::variant has wrong value in <variant>"
  #endif
  #endif
+ 
+ #if __cplusplus > 202302L
+ #ifndef __cpp_lib_constexpr_exceptions
+ # error "Feature test macro for constexpr_exceptions is missing in <variant>"
+ #elif __cpp_lib_constexpr_exceptions < 202502L
+ # error "Feature test macro for constexpr_exceptions has wrong value in <variant>"
+ #endif
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/flat_multiset/1.cc	Sun Dec 14 22:32:18 2025
***************
*** 8,13 ****
--- 8,14 ----
  #include <testsuite_hooks.h>
  
  template<template<class> class Sequence>
+ constexpr
  void
  test01()
  {
*************** test01()
*** 42,47 ****
--- 43,49 ----
    VERIFY( m.size() == 5 );
  }
  
+ constexpr
  void
  test02()
  {
*************** test02()
*** 67,72 ****
--- 69,75 ----
    VERIFY( m.count(3) == 2 );
  }
  
+ constexpr
  void
  test03()
  {
*************** test03()
*** 95,100 ****
--- 98,104 ----
    VERIFY( std::ranges::equal(m, (int[]){5}) );
  }
  
+ constexpr
  void
  test04()
  {
*************** test04()
*** 121,126 ****
--- 125,131 ----
    VERIFY( std::move(m5).extract().get_allocator().get_personality() == 44 );
  }
  
+ constexpr
  void
  test05()
  {
*************** test05()
*** 129,134 ****
--- 134,140 ----
    VERIFY( std::ranges::equal(m, (int[]){1, 2, 3, 3, 4, 5}) );
  }
  
+ constexpr
  void
  test06()
  {
*************** struct NoCatIterator {
*** 156,180 ****
    using difference_type = int;
    using value_type = int;
  
!   NoCatIterator() : v(0) {}
!   NoCatIterator(int x) : v(x) {}
  
!   int operator*() const
    { return v; }
  
!   NoCatIterator& operator++()
    {
      ++v;
      return *this;
    }
  
!   NoCatIterator operator++(int)
    {
      ++v;
      return NoCatIterator(v-1);
    }
  
!   bool operator==(const NoCatIterator& rhs) const
    { return v == rhs.v; }
  
  private:
--- 162,186 ----
    using difference_type = int;
    using value_type = int;
  
!   constexpr NoCatIterator() : v(0) {}
!   constexpr NoCatIterator(int x) : v(x) {}
  
!   constexpr int operator*() const
    { return v; }
  
!   constexpr NoCatIterator& operator++()
    {
      ++v;
      return *this;
    }
  
!   constexpr NoCatIterator operator++(int)
    {
      ++v;
      return NoCatIterator(v-1);
    }
  
!   constexpr bool operator==(const NoCatIterator& rhs) const
    { return v == rhs.v; }
  
  private:
*************** struct std::iterator_traits<NoCatIterato
*** 189,195 ****
    // no iterator_category, happens also for common_iterator
  };
  
! void test07()
  {
    std::flat_multiset<int> s;
    std::flat_multiset<int, std::less<int>, NoInsertRange<int>> s2;
--- 195,203 ----
    // no iterator_category, happens also for common_iterator
  };
  
! constexpr
! void
! test07()
  {
    std::flat_multiset<int> s;
    std::flat_multiset<int, std::less<int>, NoInsertRange<int>> s2;
*************** void test07()
*** 214,240 ****
  #endif
  }
  
  void
  test08()
  {
    // PR libstdc++/119620 -- flat_set::emplace always constructs element on the stack
!   static int copy_counter;
    struct A {
!     A() { }
!     A(const A&) { ++copy_counter; }
!     A& operator=(const A&) { ++copy_counter; return *this; }
!     auto operator<=>(const A&) const = default;
    };
    std::vector<A> v;
    v.reserve(2);
    std::flat_multiset<A> s(std::move(v));
!   A a;
    s.emplace(a);
    VERIFY( copy_counter == 1 );
    s.emplace(a);
    VERIFY( copy_counter == 2 );
  }
  
  void
  test09()
  {
--- 222,260 ----
  #endif
  }
  
+ constexpr
  void
  test08()
  {
    // PR libstdc++/119620 -- flat_set::emplace always constructs element on the stack
!   int copy_counter = 0;
! 
    struct A {
!     int *counter;
!     constexpr A(int &c) : counter(&c) {}
! 
!     constexpr A(const A &other) : counter(other.counter) { ++(*counter); }
! 
!     constexpr A &operator=(const A &other) {
!       counter = other.counter;
!       ++(*counter);
!       return *this;
!     }
! 
!     constexpr auto operator<=>(const A &) const = default;
    };
+ 
    std::vector<A> v;
    v.reserve(2);
    std::flat_multiset<A> s(std::move(v));
!   A a(copy_counter);
    s.emplace(a);
    VERIFY( copy_counter == 1 );
    s.emplace(a);
    VERIFY( copy_counter == 2 );
  }
  
+ constexpr
  void
  test09()
  {
*************** test09()
*** 245,252 ****
    VERIFY( std::ranges::equal(s, (int[]){2,2,4}) );
  }
  
! int
! main()
  {
    test01<std::vector>();
    test01<std::deque>();
--- 265,272 ----
    VERIFY( std::ranges::equal(s, (int[]){2,2,4}) );
  }
  
! void
! test()
  {
    test01<std::vector>();
    test01<std::deque>();
*************** main()
*** 259,261 ****
--- 279,308 ----
    test08();
    test09();
  }
+ 
+ constexpr
+ bool
+ test_constexpr()
+ {
+   test01<std::vector>();
+   test02();
+   test03();
+   test04();
+   test06();
+   test07();
+   test08();
+   test09();
+   return true;
+ }
+ 
+ int
+ main()
+ {
+   test();
+ #if __cplusplus > 202302L
+   static_assert(test_constexpr());
+ #if __cpp_lib_constexpr_flat_set != 202502L
+ #error "Feature-test macro __cpp_lib_constexpr_flat_set has wrong value in <flat_set>"
+ #endif
+ #endif
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/flat_set/1.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/flat_set/1.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/flat_set/1.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/flat_set/1.cc	Sun Dec 14 22:32:18 2025
***************
*** 13,18 ****
--- 13,19 ----
  #include <testsuite_hooks.h>
  
  template<template<typename> class KeyContainer>
+ constexpr
  void
  test01()
  {
*************** test01()
*** 56,61 ****
--- 57,63 ----
    VERIFY( m_copy == m );
  }
  
+ constexpr
  void
  test02()
  {
*************** test02()
*** 82,87 ****
--- 84,90 ----
    VERIFY( m.count(3) == 1 );
  }
  
+ constexpr
  void
  test03()
  {
*************** test03()
*** 110,115 ****
--- 113,119 ----
    VERIFY( std::ranges::equal(m, (int[]){5}) );
  }
  
+ constexpr
  void
  test04()
  {
*************** test04()
*** 136,141 ****
--- 140,146 ----
    VERIFY( std::move(m5).extract().get_allocator().get_personality() == 44 );
  }
  
+ constexpr
  void
  test05()
  {
*************** test05()
*** 144,149 ****
--- 149,155 ----
    VERIFY( std::ranges::equal(m, (int[]){1, 2, 3, 4, 5}) );
  }
  
+ constexpr
  void
  test06()
  {
*************** struct NoCatIterator {
*** 171,195 ****
    using difference_type = int;
    using value_type = int;
  
!   NoCatIterator() : v(0) {}
!   NoCatIterator(int x) : v(x) {}
  
!   int operator*() const
    { return v; }
  
!   NoCatIterator& operator++()
    {
      ++v;
      return *this;
    }
  
!   NoCatIterator operator++(int)
    {
      ++v;
      return NoCatIterator(v-1);
    }
  
!   bool operator==(const NoCatIterator& rhs) const
    { return v == rhs.v; }
  
  private:
--- 177,201 ----
    using difference_type = int;
    using value_type = int;
  
!   constexpr NoCatIterator() : v(0) {}
!   constexpr NoCatIterator(int x) : v(x) {}
  
!   constexpr int operator*() const
    { return v; }
  
!   constexpr NoCatIterator& operator++()
    {
      ++v;
      return *this;
    }
  
!   constexpr NoCatIterator operator++(int)
    {
      ++v;
      return NoCatIterator(v-1);
    }
  
!   constexpr bool operator==(const NoCatIterator& rhs) const
    { return v == rhs.v; }
  
  private:
*************** struct std::iterator_traits<NoCatIterato
*** 204,210 ****
    // no iterator_category, happens also for common_iterator
  };
  
! void test07()
  {
    std::flat_set<int> s;
    std::flat_set<int, std::less<int>, NoInsertRange<int>> s2;
--- 210,218 ----
    // no iterator_category, happens also for common_iterator
  };
  
! constexpr
! void
! test07()
  {
    std::flat_set<int> s;
    std::flat_set<int, std::less<int>, NoInsertRange<int>> s2;
*************** void test07()
*** 229,253 ****
  #endif
  }
  
  void
  test08()
  {
    // PR libstdc++/119620 -- flat_set::emplace always constructs element on the stack
!   static int copy_counter;
    struct A {
!     A() { }
!     A(const A&) { ++copy_counter; }
!     A& operator=(const A&) { ++copy_counter; return *this; }
!     auto operator<=>(const A&) const = default;
    };
    std::flat_set<A> s;
!   A a;
    s.emplace(a);
    VERIFY( copy_counter == 1 );
    s.emplace(a);
    VERIFY( copy_counter == 1 );
  }
  
  void
  test09()
  {
--- 237,272 ----
  #endif
  }
  
+ constexpr
  void
  test08()
  {
    // PR libstdc++/119620 -- flat_set::emplace always constructs element on the stack
!   int copy_counter = 0;
! 
    struct A {
!     int *counter;
!     constexpr A(int &c) : counter(&c) {}
! 
!     constexpr A(const A &other) : counter(other.counter) { ++(*counter); }
! 
!     constexpr A &operator=(const A &other) {
!       counter = other.counter;
!       ++(*counter);
!       return *this;
!     }
! 
!     constexpr auto operator<=>(const A &) const = default;
    };
    std::flat_set<A> s;
!   A a(copy_counter);
    s.emplace(a);
    VERIFY( copy_counter == 1 );
    s.emplace(a);
    VERIFY( copy_counter == 1 );
  }
  
+ constexpr
  void
  test09()
  {
*************** test09()
*** 258,265 ****
    VERIFY( std::ranges::equal(s, (int[]){2,4}) );
  }
  
! int
! main()
  {
    test01<std::vector>();
    test01<std::deque>();
--- 277,284 ----
    VERIFY( std::ranges::equal(s, (int[]){2,4}) );
  }
  
! void
! test()
  {
    test01<std::vector>();
    test01<std::deque>();
*************** main()
*** 272,274 ****
--- 291,320 ----
    test08();
    test09();
  }
+ 
+ constexpr
+ bool
+ test_constexpr()
+ {
+   test01<std::vector>();
+   test02();
+   test03();
+   test04();
+   test06();
+   test07();
+   test08();
+   test09();
+   return true;
+ }
+ 
+ int
+ main()
+ {
+   test();
+ #if __cplusplus > 202302L
+   static_assert(test_constexpr());
+ #if __cpp_lib_constexpr_flat_set != 202502L
+ #error "Feature-test macro __cpp_lib_constexpr_flat_set has wrong value in <flat_set>"
+ #endif
+ #endif
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/access/capacity.cc	Sun Dec 14 22:32:18 2025
*************** test_reserve()
*** 20,31 ****
    v.reserve(N);
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    try
    {
--- 20,30 ----
    v.reserve(N);
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    try
    {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/access/elem.cc	Sun Dec 14 22:32:18 2025
*************** test_out_of_capacity()
*** 14,25 ****
    std::inplace_vector<T, N> v;
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    try
    {
--- 14,24 ----
    std::inplace_vector<T, N> v;
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    try
    {
*************** test_access()
*** 82,93 ****
    VERIFY( e4a == T(5) );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    try
    {
--- 81,91 ----
    VERIFY( e4a == T(5) );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    try
    {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc	Sun Dec 14 22:32:18 2025
*************** test_n()
*** 166,175 ****
    VERIFY( z0.begin() == z0.end() );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if not consteval {
      try
      {
        std::inplace_vector<int, 2> ct(3);
--- 166,174 ----
    VERIFY( z0.begin() == z0.end() );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if not consteval {
+ #endif
      try
      {
        std::inplace_vector<int, 2> ct(3);
*************** test_n()
*** 188,195 ****
--- 187,196 ----
      {
      }
  
+ #ifndef __cpp_lib_constexpr_exceptions
    }
  #endif
+ #endif
  
  #ifdef __cpp_lib_constexpr_inplace_vector
  #error remove the consteval check
*************** test_n_val()
*** 243,252 ****
    VERIFY( z0.begin() == z0.end() );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if not consteval {
      try
      {
        std::inplace_vector<int, 2> ct(3, 11);
--- 244,252 ----
    VERIFY( z0.begin() == z0.end() );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if not consteval {
+ #endif
      try
      {
        std::inplace_vector<int, 2> ct(3, 11);
*************** test_n_val()
*** 264,271 ****
--- 264,273 ----
      catch (std::bad_alloc const&)
      {
      }
+ #ifndef __cpp_lib_constexpr_exceptions
    }
  #endif
+ #endif
  
  #ifdef __cpp_lib_constexpr_inplace_vector
  #error remove the consteval check
*************** test_initializer_list()
*** 319,328 ****
    VERIFY( z0.begin() == z0.end() );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if not consteval {
      try
      {
        std::inplace_vector<int, 2> ct{11, 22, 33};
--- 321,329 ----
    VERIFY( z0.begin() == z0.end() );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if not consteval {
+ #endif
      try
      {
        std::inplace_vector<int, 2> ct{11, 22, 33};
*************** test_initializer_list()
*** 340,347 ****
--- 341,350 ----
      catch (std::bad_alloc const&)
      {
      }
+ #ifndef __cpp_lib_constexpr_exceptions
    }
  #endif
+ #endif
  
  #ifdef __cpp_lib_constexpr_inplace_vector
  #error remove the consteval check
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/from_range.cc	Sun Dec 14 22:32:18 2025
*************** do_test_it()
*** 41,52 ****
    VERIFY( eq<T>(v4, {a, 4}) );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    bounds = typename It::ContainerType(a, a+9);
    try
--- 41,51 ----
    VERIFY( eq<T>(v4, {a, 4}) );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    bounds = typename It::ContainerType(a, a+9);
    try
*************** do_test_r()
*** 104,115 ****
    VERIFY( eq<T>(v4, {a, 4}) );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
    
    try
    {
--- 103,113 ----
    VERIFY( eq<T>(v4, {a, 4}) );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
    
    try
    {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/assign.cc	Sun Dec 14 22:32:18 2025
*************** test_assign_empty_it()
*** 60,71 ****
    VERIFY( v.empty() );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    static_assert(N < 9);
  
--- 60,70 ----
    VERIFY( v.empty() );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    static_assert(N < 9);
  
*************** test_assign_empty_other()
*** 136,147 ****
    VERIFY( v.empty() );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    static_assert(N < 9);
  
--- 135,145 ----
    VERIFY( v.empty() );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    static_assert(N < 9);
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/multi_insert.cc	Sun Dec 14 22:32:18 2025
*************** test_add_to_full_it()
*** 105,116 ****
    VERIFY( rit4.base() == a+2 );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    try
    {
--- 105,115 ----
    VERIFY( rit4.base() == a+2 );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    try
    {
*************** test_add_to_full_other()
*** 191,202 ****
    VERIFY( it == v.begin() );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    v = std::inplace_vector<T, N>(std::from_range, std::span(a, a+N));
    try
--- 190,200 ----
    VERIFY( it == v.begin() );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    v = std::inplace_vector<T, N>(std::from_range, std::span(a, a+N));
    try
*************** test_append_range()
*** 249,260 ****
    VERIFY( eq<T>(v, {a, 15}) );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    try
    {
--- 247,257 ----
    VERIFY( eq<T>(v, {a, 15}) );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    try
    {
*************** test_insert_range()
*** 313,324 ****
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    const bool seg = std::ranges::sized_range<Range> || std::ranges::forward_range<Range>;
    auto vc = v;
--- 310,320 ----
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    const bool seg = std::ranges::sized_range<Range> || std::ranges::forward_range<Range>;
    auto vc = v;
*************** test_insert_iterators()
*** 390,401 ****
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    const bool seg = std::forward_iterator<It>;
    auto vc = v;
--- 386,396 ----
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    const bool seg = std::forward_iterator<It>;
    auto vc = v;
*************** test_insert_initializer_list()
*** 457,468 ****
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    std::initializer_list<T> il
    = {T(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9)};
--- 452,462 ----
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    std::initializer_list<T> il
    = {T(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(9)};
*************** test_insert_repeated()
*** 520,531 ****
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    try
    {
--- 514,524 ----
    VERIFY( it == v.begin() + 5 );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    try
    {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/inplace_vector/modifiers/single_insert.cc	Sun Dec 14 22:32:18 2025
*************** test_add_to_full()
*** 48,59 ****
    VERIFY( eq<T>(v, {a, N}) );
  
  #ifdef __cpp_exceptions
! #ifdef __cpp_lib_constexpr_exceptions
! #error remove the consteval check
! #endif
    if consteval {
      return;
    }
  
    try
    {
--- 48,58 ----
    VERIFY( eq<T>(v, {a, N}) );
  
  #ifdef __cpp_exceptions
! #ifndef __cpp_lib_constexpr_exceptions
    if consteval {
      return;
    }
+ #endif
  
    try
    {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/extents/ctor_ints.cc	Sun Dec 14 22:32:18 2025
*************** static_assert(!std::is_constructible_v<s
*** 16,21 ****
--- 16,28 ----
  // Not constructible from non integer-like objects.
  static_assert(!std::is_constructible_v<std::extents<int, 1>, int, A>);
  
+ #ifdef __SIZEOF_INT128__
+ static_assert(std::is_constructible_v<std::extents<__int128, 1, 2>,
+ 				      __int128, unsigned __int128>);
+ static_assert(std::is_constructible_v<std::extents<unsigned __int128, 1, 2>,
+ 				      unsigned int, int>);
+ #endif
+ 
  // No implicit conversion from integer-like objects.
  template<typename Extent, typename... OExtents>
    constexpr bool
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/layout_traits.h gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/layout_traits.h
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/layout_traits.h	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/layout_traits.h	Sun Dec 14 22:32:18 2025
*************** template<>
*** 87,92 ****
--- 87,94 ----
    {
      using layout_same = std::layout_left;
      using layout_other = std::layout_right;
+     template<size_t PaddingValue>
+       using layout_same_padded = std::layout_left_padded<PaddingValue>;
  
      template<typename Extents>
        using extents_type = Extents;
*************** template<>
*** 126,131 ****
--- 128,135 ----
    struct LayoutTraits<PaddingSide::Right>
    {
      using layout_same = std::layout_right;
+     template<size_t PaddingValue>
+       using layout_same_padded = std::layout_right_padded<PaddingValue>;
      using layout_other = std::layout_left;
  
      template<typename IndexType, size_t... Extents>
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/generic.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/generic.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/generic.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/generic.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,71 ----
+ // { dg-do compile { target c++26 } }
+ #include <mdspan>
+ 
+ namespace adl
+ {
+   struct NoFriend
+   {
+     template<typename Extents>
+       class mapping
+       {
+       public:
+ 	using extents_type = Extents;
+ 	using index_type = typename extents_type::index_type;
+       };
+   };
+ 
+   struct NoFull
+   {
+     template<typename Extents>
+       class mapping
+       {
+       public:
+ 	using extents_type = Extents;
+ 	using index_type = typename extents_type::index_type;
+ 
+       private:
+ 	friend constexpr auto
+ 	submdspan_mapping(mapping, int)
+ 	{ return std::submdspan_mapping_result{mapping{}, 0}; }
+       };
+   };
+ 
+   struct WrongReturnValue
+   {
+     template<typename Extents>
+       class mapping
+       {
+       public:
+ 	using extents_type = Extents;
+ 	using index_type = typename extents_type::index_type;
+ 
+       private:
+ 	friend constexpr int
+ 	submdspan_mapping(mapping, std::full_extent_t)
+ 	{ return 42; }
+       };
+   };
+ }
+ 
+ template<typename MdSpan, typename... Slices>
+   concept submdspan_exists = requires (MdSpan md, Slices... slices)
+   {
+     std::submdspan(md, slices...);
+   };
+ 
+ template<typename Layout, bool Expected>
+ constexpr bool
+ test_invalid_mapping()
+ {
+   using Extents = std::extents<int, 3>;
+   using MdSpan = std::mdspan<double, Extents, Layout>;
+   static_assert(submdspan_exists<MdSpan, int> == Expected);
+   static_assert(submdspan_exists<MdSpan, std::full_extent_t> == Expected);
+   static_assert(!submdspan_exists<MdSpan>);
+   static_assert(!submdspan_exists<MdSpan, int, int>);
+   return true;
+ }
+ static_assert(test_invalid_mapping<std::layout_left, true>());
+ static_assert(test_invalid_mapping<adl::NoFriend, false>());
+ static_assert(test_invalid_mapping<adl::NoFull, false>());
+ static_assert(test_invalid_mapping<adl::WrongReturnValue, false>());
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,9 ----
+ // { dg-do run { target c++26 } }
+ #include "testcases.h"
+ 
+ int
+ main()
+ {
+   test_all<std::layout_left>();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left_padded.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left_padded.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left_padded.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/left_padded.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do run { target c++26 } }
+ // { dg-timeout-factor 2 }
+ #include "testcases.h"
+ 
+ int
+ main()
+ {
+   test_all<std::layout_left_padded<1>>();
+   test_all<std::layout_left_padded<8>>();
+   test_all<std::layout_left_padded<dyn>>();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,9 ----
+ // { dg-do run { target c++26 } }
+ #include "testcases.h"
+ 
+ int
+ main()
+ {
+   test_all<std::layout_right>();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right_padded.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right_padded.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right_padded.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/right_padded.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,12 ----
+ // { dg-do run { target c++26 } }
+ // { dg-timeout-factor 2 }
+ #include "testcases.h"
+ 
+ int
+ main()
+ {
+   test_all<std::layout_right_padded<1>>();
+   test_all<std::layout_right_padded<8>>();
+   test_all<std::layout_right_padded<dyn>>();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/stride.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/stride.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/stride.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/stride.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,9 ----
+ // { dg-do run { target c++26 } }
+ #include "testcases.h"
+ 
+ int
+ main()
+ {
+   test_all<std::layout_stride>();
+   return 0;
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,360 ----
+ #include <mdspan>
+ 
+ #include <vector>
+ #include <numeric>
+ #include "../../layout_traits.h"
+ #include <testsuite_hooks.h>
+ 
+ constexpr size_t dyn = std::dynamic_extent;
+ constexpr auto all = std::full_extent;
+ 
+ template<typename T>
+   constexpr bool is_strided_slice = false;
+ 
+ template<typename O, typename E, typename S>
+   constexpr bool is_strided_slice<std::strided_slice<O, E, S>> = true;
+ 
+ template<typename MDSpan>
+   constexpr void
+   fill(const MDSpan& md)
+   {
+     using IndexType = typename MDSpan::index_type;
+     auto exts = md.extents();
+     if constexpr (exts.rank() == 3)
+       for(IndexType i = 0; i < exts.extent(0); ++i)
+ 	for(IndexType j = 0; j < exts.extent(1); ++j)
+ 	  for(IndexType k = 0; k < exts.extent(2); ++k)
+ 	    md[i, j, k] = 100 * i + 10 * j + k;
+   }
+ 
+ template<typename Int, size_t Rank>
+   class multi_index_generator
+   {
+     struct sentinel
+     { };
+ 
+     class iterator
+     {
+     public:
+       constexpr
+       iterator(const std::array<Int, Rank>& shape)
+ 	: M_shape(shape)
+       { }
+ 
+       constexpr iterator&
+       operator++()
+       {
+ 	if constexpr (Rank > 0)
+ 	  {
+ 	    ++M_indices[Rank-1];
+ 	    for(size_t i = Rank; i > 1; --i)
+ 	      if (M_indices[i-1] == M_shape[i-1])
+ 		{
+ 		  M_indices[i-1] = 0;
+ 		  ++M_indices[i-2];
+ 		}
+ 	  }
+ 	return *this;
+       }
+ 
+       constexpr auto
+       operator*()
+       { return M_indices; }
+ 
+     private:
+       friend constexpr bool
+       operator==(const iterator& it, sentinel)
+       {
+ 	if constexpr (Rank > 0)
+ 	  return it.M_indices[0] == it.M_shape[0];
+ 	else
+ 	  return true;
+       }
+ 
+       std::array<Int, Rank> M_indices{};
+       std::array<Int, Rank> M_shape;
+     };
+ 
+   public:
+     constexpr
+     multi_index_generator(std::array<Int, Rank> shape)
+       : M_shape(shape)
+     { }
+ 
+     constexpr iterator
+     begin() const
+     { return iterator(M_shape); }
+ 
+     constexpr sentinel
+     end() const
+     { return sentinel{}; }
+ 
+   private:
+     std::array<Int, Rank> M_shape;
+   };
+ 
+ constexpr bool
+ test_multi_index()
+ {
+   auto shape = std::array{3, 5, 7, 1};
+   auto gen = multi_index_generator(shape);
+   auto it = gen.begin();
+   auto end = gen.end();
+   for (int i = 0; i < shape[0]; ++i)
+     for (int j = 0; j < shape[1]; ++j)
+       for (int k = 0; k < shape[2]; ++k)
+ 	for (int l = 0; l < shape[3]; ++l)
+ 	  {
+ 	    VERIFY(it != end);
+ 	    VERIFY(*it == std::array{i, j, k, l});
+ 	    ++it;
+ 	  }
+   return true;
+ }
+ static_assert(test_multi_index());
+ 
+ struct
+ collapse
+ { };
+ 
+ template<typename... Slices>
+   consteval auto
+   inv_collapsed_index_map()
+   {
+     constexpr size_t rank = sizeof...(Slices);
+     auto is_collapsing = std::array{std::same_as<Slices, collapse>...};
+     constexpr auto collapsed_rank = ((!std::same_as<Slices, collapse>) + ... + 0);
+ 
+     std::array<size_t, collapsed_rank> ret;
+     if constexpr (collapsed_rank > 0)
+       for(size_t k = 0, i = 0; i < rank; ++i)
+ 	if (!is_collapsing[i])
+ 	  ret[k++] = i;
+     return ret;
+   }
+ 
+ static_assert(inv_collapsed_index_map<collapse, collapse, collapse>()
+ 	      == std::array<size_t, 0>{});
+ 
+ static_assert(inv_collapsed_index_map<collapse, decltype(all), collapse>()
+ 	      == std::array<size_t, 1>{1});
+ 
+ template<typename IndexType, typename Slice>
+   constexpr std::vector<IndexType>
+   make_selection(IndexType extent, const Slice& slice)
+   {
+     if constexpr (std::convertible_to<Slice, IndexType>)
+       return {static_cast<IndexType>(slice)};
+     else if constexpr (std::same_as<Slice, std::full_extent_t>)
+       {
+ 	auto ret = std::vector<IndexType>(static_cast<size_t>(extent));
+ 	std::ranges::iota(ret, 0);
+ 	return ret;
+       }
+     else if constexpr (is_strided_slice<Slice>)
+       {
+ 	auto ret = std::vector<IndexType>{};
+ 	size_t n = static_cast<size_t>(slice.extent);
+ 	for(size_t i = 0; i < n; i += slice.stride)
+ 	  ret.push_back(slice.offset + i);
+ 	return ret;
+       }
+     else
+       {
+ 	auto [begin, end] = slice;
+ 	auto ret = std::vector<IndexType>(static_cast<size_t>(end - begin));
+ 	std::ranges::iota(ret, begin);
+ 	return ret;
+       }
+   }
+ 
+ template<typename Layout, size_t... I, typename... Slices>
+   constexpr bool
+   check_selection(std::index_sequence<I...>, auto md, Slices... slices)
+   {
+     auto exts = md.extents();
+     auto outer_shape = std::array{exts.extent(0), exts.extent(1), exts.extent(2)};
+ 
+     constexpr auto full_index = inv_collapsed_index_map<Slices...>();
+     auto make_slice = [](size_t i, auto slice)
+     {
+       if constexpr (std::same_as<decltype(slice), collapse>)
+ 	return i;
+       else
+ 	return slice;
+     };
+ 
+     auto loop_body = [&]<size_t... J>(std::index_sequence<J...>, auto ijk,
+ 				      auto... slices)
+     {
+       auto submd = submdspan(md, slices...[I]...);
+       auto selection = std::tuple{make_selection(exts.extent(I), slices...[I])...};
+       auto inner_shape = std::array<size_t, full_index.size()>{
+ 	std::get<full_index[J]>(selection).size()...
+       };
+ 
+       for (auto ij : multi_index_generator(inner_shape))
+       {
+ 	((ijk[full_index[J]] = get<full_index[J]>(selection)[ij[J]]),...);
+ 	VERIFY(submd[ij] == md[ijk]);
+       }
+     };
+ 
+     for (auto ijk : multi_index_generator(outer_shape))
+       loop_body(std::make_index_sequence<full_index.size()>(), ijk,
+ 		make_slice(ijk[I], slices...[I])...);
+     return true;
+   }
+ 
+ template<typename Layout, typename...MD, typename... Slices>
+   constexpr bool
+   check_selection(std::mdspan<MD...> md, Slices... slices)
+   {
+     auto indices = std::make_index_sequence<sizeof...(slices)>();
+     return check_selection<Layout>(indices, md, slices...);
+   }
+ 
+ template<typename Layout, typename IndexType, size_t... Extents,
+ 	 typename... Slices>
+   constexpr bool
+   check_selection(std::extents<IndexType, Extents...>exts, Slices... slices)
+   {
+     auto run = [&](auto m)
+     {
+       auto storage = std::vector<double>(m.required_span_size());
+       auto md = std::mdspan(storage.data(), m);
+       fill(md);
+       return check_selection<Layout>(md, slices...);
+     };
+ 
+     if constexpr (std::same_as<Layout, std::layout_stride>)
+       {
+ 	auto m = typename Layout::mapping(exts, std::array{15, 2, 50});
+ 	return run(m);
+       }
+     else
+       {
+ 	auto m = typename Layout::mapping(exts);
+ 	return run(m);
+       }
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_scalar_selection(auto exts)
+   {
+     check_selection<Layout>(exts, collapse{}, collapse{}, collapse{});
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_full_lines(auto exts)
+   {
+     check_selection<Layout>(exts, all, collapse{}, collapse{});
+     check_selection<Layout>(exts, collapse{}, all, collapse{});
+     check_selection<Layout>(exts, collapse{}, collapse{}, all);
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_full_blocks(auto exts)
+   {
+     check_selection<Layout>(exts, all, all, collapse{});
+     check_selection<Layout>(exts, all, collapse{}, all);
+     check_selection<Layout>(exts, collapse{}, all, all);
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_cubes(auto exts)
+   {
+     auto s0 = std::pair{0, 2};
+     auto s1 = std::pair{1, 4};
+     auto s2 = std::pair{3, 7};
+ 
+     check_selection<Layout>(exts, all, all, all);
+     check_selection<Layout>(exts, all, all, s2);
+     check_selection<Layout>(exts, s0, all, all);
+     check_selection<Layout>(exts, s0, all, s2);
+     check_selection<Layout>(exts, s0, s1, s2);
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_strided_line_selection(auto exts)
+   {
+     auto check = [&](auto s)
+     {
+       check_selection<Layout>(exts, collapse{}, s, collapse{});
+     };
+ 
+     check(std::strided_slice(0, 2, 2));
+     check(std::strided_slice(0, 3, 2));
+     check(std::strided_slice(1, 3, 2));
+     check(std::strided_slice(1, std::cw<3>, std::cw<2>));
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_strided_box_selection(auto exts)
+   {
+     auto s0 = std::strided_slice(0, 3, 2);
+     auto s1 = std::strided_slice(1, 4, 2);
+     auto s2 = std::strided_slice(0, 7, 3);
+ 
+     check_selection<Layout>(exts, s0, s1, s2);
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_all_cheap()
+   {
+     constexpr auto dyn_exts = std::extents(3, 5, 7);
+     constexpr auto sta_exts = std::extents<int, 3, 5, 7>{};
+ 
+     test_scalar_selection<Layout>(dyn_exts);
+     test_scalar_selection<Layout>(sta_exts);
+     static_assert(test_scalar_selection<Layout>(dyn_exts));
+     static_assert(test_scalar_selection<Layout>(sta_exts));
+ 
+     test_full_lines<Layout>(dyn_exts);
+     test_full_lines<Layout>(sta_exts);
+     static_assert(test_full_lines<Layout>(dyn_exts));
+     static_assert(test_full_lines<Layout>(sta_exts));
+ 
+     test_strided_box_selection<Layout>(dyn_exts);
+     test_strided_box_selection<Layout>(sta_exts);
+     static_assert(test_strided_box_selection<Layout>(dyn_exts));
+     static_assert(test_strided_box_selection<Layout>(sta_exts));
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_all_expensive()
+   {
+     auto run = [](auto exts)
+     {
+       test_full_blocks<Layout>(exts);
+       test_cubes<Layout>(exts);
+     };
+ 
+     run(std::extents(3, 5, 7));
+     run(std::extents<int, 3, 5, 7>{});
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_all()
+   {
+     test_all_cheap<Layout>();
+     test_all_expensive<Layout>();
+     return true;
+   }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc	Sun Dec 14 22:32:18 2025
*************** test_all()
*** 34,39 ****
--- 34,42 ----
    test_initializers(0, 1, 2);
    test_initializers(std::integral_constant<short, 0>{}, size_t{1}, std::cw<2>);
    test_initializers(-1, 2, 2);
+ #ifdef __SIZEOF_INT128__
+   test_initializers((__int128)1, (unsigned __int128)-2, std::cw<(__int128)3>);
+ #endif
    return true;
  }
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,301 ----
+ // { dg-do run { target c++26 } }
+ #include <mdspan>
+ 
+ #include <iostream> // TODO remove
+ #include "../layout_traits.h"
+ #include <testsuite_hooks.h>
+ 
+ constexpr size_t dyn = std::dynamic_extent;
+ constexpr auto all = std::full_extent;
+ 
+ template<typename Mapping, typename... Slices>
+   constexpr auto
+   call_submdspan_mapping(const Mapping& m, std::tuple<Slices...> slices)
+   {
+     auto impl = [&]<size_t... I>(std::index_sequence<I...>)
+     { return submdspan_mapping(m, get<I>(slices)...); };
+     return impl(std::make_index_sequence<sizeof...(Slices)>());
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_layout_common_return_types()
+   {
+     constexpr auto padding_side = DeducePaddingSide::from_typename<Layout>();
+     using Traits = LayoutTraits<padding_side>;
+     using layout_unpadded = typename Traits::layout_same;
+ 
+     {
+       auto m0 = typename Layout::mapping(std::extents());
+       auto result = submdspan_mapping(m0);
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       static_assert(std::same_as<layout_type, Layout>);
+     }
+ 
+     auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13));
+     auto m = typename Layout::mapping(exts);
+     auto s251 = std::strided_slice{2, 5, std::cw<1>};
+ 
+     {
+       auto slices = std::tuple{0, 0, 0, 0, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       static_assert(std::same_as<layout_type, layout_unpadded>);
+     }
+ 
+     {
+       auto s0 = std::strided_slice{1, 1, std::cw<1>};
+       auto slices = std::tuple{s0, all, all, s251, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       static_assert(is_same_padded<padding_side, layout_type>);
+     }
+ 
+     {
+       auto s0 = std::strided_slice{1, 2, std::cw<1>};
+       auto slices = std::tuple{s0, all, all, s251, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       static_assert(is_same_padded<padding_side, layout_type>);
+     }
+ 
+     {
+       auto s0 = std::strided_slice{1, 2, std::cw<1>};
+       auto slices = std::tuple{s0, 0, all, s251, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       static_assert(is_same_padded<padding_side, layout_type>);
+     }
+ 
+     {
+       auto s0 = std::strided_slice{1, 2, 1};
+       auto slices = std::tuple{s0, all, all, s251, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = decltype(result.mapping)::layout_type;
+       static_assert(std::same_as<layout_type, std::layout_stride>);
+     }
+ 
+     {
+       auto slices = std::tuple{1, all, all, s251, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = decltype(result.mapping)::layout_type;
+       static_assert(std::same_as<layout_type, std::layout_stride>);
+     }
+ 
+     {
+       auto s3 = std::strided_slice{2, std::cw<7>, std::cw<2>};
+       auto slices = std::tuple{all, all, all, s3, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = decltype(result.mapping)::layout_type;
+       static_assert(std::same_as<layout_type, std::layout_stride>);
+     }
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_layout_unpadded_return_types()
+   {
+     constexpr auto padding_side = DeducePaddingSide::from_typename<Layout>();
+     using Traits = LayoutTraits<padding_side>;
+ 
+     auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13));
+     auto m = typename Layout::mapping(exts);
+     auto s251 = std::strided_slice{2, 5, std::cw<1>};
+ 
+     {
+       auto slices = std::tuple{all, all, all, s251, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       static_assert(std::same_as<layout_type, Layout>);
+     }
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_layout_padded_return_types()
+   {
+     constexpr auto padding_side = DeducePaddingSide::from_typename<Layout>();
+     using Traits = LayoutTraits<padding_side>;
+ 
+     auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13));
+     auto m = typename Layout::mapping(exts);
+     auto s251 = std::strided_slice{2, 5, std::cw<1>};
+ 
+     {
+       auto slices = std::tuple{all, all, all, s251, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       using layout_expected = typename Traits::layout_same_padded<dyn>;
+       static_assert(std::same_as<layout_type, layout_expected>);
+     }
+ 
+     {
+       auto slices = std::tuple{all, 0, 0, 0, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       using layout_expected = typename Traits::layout_same;
+       static_assert(std::same_as<layout_type, layout_expected>);
+     }
+ 
+     {
+       auto s121 = std::strided_slice{1, 2, std::cw<1>};
+       auto slices = std::tuple{s121, 0, 0, 0, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       using layout_expected = typename Traits::layout_same;
+       static_assert(std::same_as<layout_type, layout_expected>);
+     }
+ 
+     {
+       auto s121 = std::strided_slice{1, 2, std::cw<1>};
+       auto slices = std::tuple{0, s121, 0, 0, 0};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       using layout_type = typename decltype(result.mapping)::layout_type;
+       static_assert(std::same_as<layout_type, std::layout_stride>);
+     }
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_layout_unpadded_padding_value()
+   {
+     using Traits = LayoutTraits<DeducePaddingSide::from_typename<Layout>()>;
+     auto s0 = std::strided_slice{size_t(1), size_t(2), std::cw<size_t(1)>};
+     auto s3 = std::strided_slice{size_t(2), size_t(5), std::cw<size_t(1)>};
+ 
+     auto check = [&](auto exts, size_t expected)
+     {
+       auto m = typename Layout::mapping(Traits::make_extents(exts));
+       auto slices = std::tuple{s0, size_t(0), all, s3, size_t(0)};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       auto padding_value = decltype(result.mapping)::padding_value;
+       VERIFY(padding_value == expected);
+     };
+ 
+     check(std::extents(std::cw<3>, std::cw<5>, std::cw<7>, 11, 13), 3*5);
+     check(std::extents(std::cw<3>, std::cw<5>, 7, 11, 13), 3*5);
+     check(std::extents(std::cw<3>, 5, 7, 11, 13), dyn);
+     check(std::extents(3, 5, 7, 11, 13), dyn);
+     return true;
+   }
+ 
+ template<typename Layout>
+ constexpr size_t static_padding_value = 1;
+ 
+ template<size_t PaddingValue>
+ constexpr size_t static_padding_value<std::layout_left_padded<PaddingValue>> = PaddingValue;
+ 
+ template<size_t PaddingValue>
+ constexpr size_t static_padding_value<std::layout_right_padded<PaddingValue>> = PaddingValue;
+ 
+ template<typename Layout>
+   constexpr bool
+   test_layout_padded_padding_value()
+   {
+     using Traits = LayoutTraits<DeducePaddingSide::from_typename<Layout>()>;
+     auto s0 = std::strided_slice{size_t(1), size_t(2), std::cw<size_t(1)>};
+     auto s3 = std::strided_slice{size_t(2), size_t(5), std::cw<size_t(1)>};
+ 
+     auto check = [&](auto exts, size_t expected)
+     {
+       auto m = typename Layout::mapping(Traits::make_extents(exts));
+       auto slices = std::tuple{s0, size_t(0), all, s3, size_t(0)};
+       auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
+       auto padding_value = decltype(result.mapping)::padding_value;
+       VERIFY(padding_value == expected);
+     };
+ 
+     auto pad = [](int n, int m) -> size_t
+     {
+       constexpr auto padding_value = static_padding_value<Layout>;
+       if constexpr (padding_value != dyn)
+ 	{
+ 	  auto npad = ((n + padding_value - 1) / padding_value) * padding_value;
+ 	  return npad * m;
+ 	}
+       else
+ 	return dyn;
+     };
+ 
+     check(std::extents(std::cw<3>, std::cw<5>, std::cw<7>, 11, 13), pad(3, 5));
+     check(std::extents(std::cw<3>, std::cw<5>, 7, 11, 13), pad(3, 5));
+     check(std::extents(std::cw<3>, std::cw<6>, 7, 11, 13), pad(3, 6));
+     check(std::extents(std::cw<3>, 5, 7, 11, 13), dyn);
+     check(std::extents(3, 5, 7, 11, 13), dyn);
+     return true;
+   }
+ 
+ constexpr bool
+ test_layout_stride_return_types()
+ {
+   auto exts = std::extents(3, 5);
+   auto m = std::layout_stride::mapping(exts, std::array{2, 12});
+ 
+   using index_type = decltype(exts)::index_type;
+   auto s1 = std::strided_slice{index_type(2), index_type(2),
+ 			       std::cw<index_type(2)>};
+   auto result = submdspan_mapping(m, index_type(1), s1);
+   using layout_type = decltype(result.mapping)::layout_type;
+   static_assert(std::same_as<layout_type, std::layout_stride>);
+   return true;
+ }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_return_types_all()
+   {
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_return_types_unpadded_all()
+   {
+     test_layout_common_return_types<Layout>();
+     static_assert(test_layout_common_return_types<Layout>());
+ 
+     test_layout_unpadded_return_types<Layout>();
+     static_assert(test_layout_unpadded_return_types<Layout>());
+ 
+     test_layout_unpadded_padding_value<Layout>();
+     static_assert(test_layout_unpadded_padding_value<Layout>());
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_return_types_padded_all()
+   {
+     test_layout_common_return_types<Layout>();
+     static_assert(test_layout_common_return_types<Layout>());
+ 
+     test_layout_padded_return_types<Layout>();
+     static_assert(test_layout_padded_return_types<Layout>());
+ 
+     test_layout_padded_padding_value<Layout>();
+     static_assert(test_layout_padded_padding_value<Layout>());
+     return true;
+   }
+ 
+ int
+ main()
+ {
+   test_return_types_unpadded_all<std::layout_left>();
+   test_return_types_unpadded_all<std::layout_right>();
+ 
+   test_return_types_padded_all<std::layout_left_padded<1>>();
+   test_return_types_padded_all<std::layout_left_padded<2>>();
+   test_return_types_padded_all<std::layout_left_padded<dyn>>();
+ 
+   test_return_types_padded_all<std::layout_right_padded<1>>();
+   test_return_types_padded_all<std::layout_right_padded<2>>();
+   test_return_types_padded_all<std::layout_right_padded<dyn>>();
+ 
+   test_layout_stride_return_types();
+   static_assert(test_layout_stride_return_types());
+   return 0;
+ }
+ 
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,122 ----
+ // { dg-do compile { target c++26 } }
+ #include <mdspan>
+ 
+ #include <vector>
+ 
+ template<typename Layout, typename... Slices>
+   constexpr bool
+   check_slice_range(Slices... slices)
+   {
+     auto m = typename Layout::mapping<std::extents<int, 3, 5, 7>>{};
+     auto storage = std::vector<double>(m.required_span_size());
+     auto md = std::mdspan(storage.data(), m);
+ 
+     auto submd = submdspan(md, slices...);           // { dg-error "expansion of" }
+     (void) submd;
+     return true;
+   }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_int_under()
+   {
+     check_slice_range<Layout>(1, -1, 2);             // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_int_under<std::layout_left>());   // { dg-error "expansion of" }
+ static_assert(test_int_under<std::layout_right>());  // { dg-error "expansion of" }
+ static_assert(test_int_under<std::layout_stride>()); // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_int_over()
+   {
+     check_slice_range<Layout>(1, 5, 2);              // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_int_over<std::layout_left>());    // { dg-error "expansion of" }
+ static_assert(test_int_over<std::layout_right>());   // { dg-error "expansion of" }
+ static_assert(test_int_over<std::layout_stride>());  // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_tuple_under()
+   {
+     check_slice_range<Layout>(1, std::tuple{-1, 2}, 2);  // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_tuple_under<std::layout_left>());     // { dg-error "expansion of" }
+ static_assert(test_tuple_under<std::layout_right>());    // { dg-error "expansion of" }
+ static_assert(test_tuple_under<std::layout_stride>());   // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_tuple_reversed()
+   {
+     check_slice_range<Layout>(1, std::tuple{3, 2}, 2);   // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_tuple_reversed<std::layout_left>());   // { dg-error "expansion of" }
+ static_assert(test_tuple_reversed<std::layout_right>());  // { dg-error "expansion of" }
+ static_assert(test_tuple_reversed<std::layout_stride>()); // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_tuple_over()
+   {
+     check_slice_range<Layout>(1, std::tuple{0, 6}, 2); // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_tuple_over<std::layout_left>());   // { dg-error "expansion of" }
+ static_assert(test_tuple_over<std::layout_right>());  // { dg-error "expansion of" }
+ static_assert(test_tuple_over<std::layout_stride>()); // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_strided_slice_zero()
+   {
+     check_slice_range<Layout>(1, std::strided_slice{1, 1, 0}, 2);  // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_strided_slice_zero<std::layout_left>());   // { dg-error "expansion of" }
+ static_assert(test_strided_slice_zero<std::layout_right>());  // { dg-error "expansion of" }
+ static_assert(test_strided_slice_zero<std::layout_stride>()); // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_strided_slice_offset_under()
+   {
+     check_slice_range<Layout>(1, std::strided_slice{-1, 1, 1}, 2);   // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_strided_slice_offset_under<std::layout_left>());   // { dg-error "expansion of" }
+ static_assert(test_strided_slice_offset_under<std::layout_right>());  // { dg-error "expansion of" }
+ static_assert(test_strided_slice_offset_under<std::layout_stride>()); // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_strided_slice_offset_over()
+   {
+     check_slice_range<Layout>(1, std::strided_slice{6, 0, 1}, 2);    // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_strided_slice_offset_over<std::layout_left>());   // { dg-error "expansion of" }
+ static_assert(test_strided_slice_offset_over<std::layout_right>());  // { dg-error "expansion of" }
+ static_assert(test_strided_slice_offset_over<std::layout_stride>()); // { dg-error "expansion of" }
+ 
+ template<typename Layout>
+   constexpr bool
+   test_strided_slice_extent_over()
+   {
+     check_slice_range<Layout>(1, std::strided_slice{1, 5, 1}, 2);    // { dg-error "expansion of" }
+     return true;
+   }
+ static_assert(test_strided_slice_extent_over<std::layout_left>());   // { dg-error "expansion of" }
+ static_assert(test_strided_slice_extent_over<std::layout_right>());  // { dg-error "expansion of" }
+ static_assert(test_strided_slice_extent_over<std::layout_stride>()); // { dg-error "expansion of" }
+ 
+ // { dg-prune-output "static assertion failed" }
+ // { dg-prune-output "__glibcxx_assert_fail" }
+ // { dg-prune-output "non-constant condition" }
+ // { dg-prune-output "no matching function" }
+ // { dg-prune-output "does not satisfy placeholder constraints" }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc gcc-16-20251214/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,55 ----
+ // { dg-do compile { target c++26 } }
+ 
+ #include <numeric>
+ #include <limits>
+ 
+ template<typename T>
+ constexpr bool
+ test()
+ {
+   using S = std::make_signed_t<T>;
+   using U = std::make_unsigned_t<T>;
+ 
+   constexpr S smax = std::numeric_limits<S>::max();
+   constexpr S smin = std::numeric_limits<S>::min();
+   constexpr U umax = std::numeric_limits<U>::max();
+ 
+   static_assert( std::add_sat(smax, (S)1) == smax );
+   static_assert( std::add_sat(smin, (S)-2) == smin );
+   static_assert( std::add_sat(umax, (U)3) == umax );
+ 
+   static_assert( std::sub_sat(smax, (S)-1) == smax );
+   static_assert( std::sub_sat(smin, (S)2) == smin );
+   static_assert( std::sub_sat((U)0, (U)3) == (U)0 );
+ 
+   static_assert( std::mul_sat((S)(smax >> 1), (S)3) == smax );
+   static_assert( std::mul_sat((S)(smin >> 1), (S)5) == smin );
+   static_assert( std::mul_sat((U)(umax >> 1), (U)7) == umax );
+ 
+   static_assert( std::div_sat(smax, (S)2) == (smax >> 1) );
+   static_assert( std::div_sat(smin, (S)4) == (smin >> 2) );
+   static_assert( std::div_sat(smin, (S)-1) == smax );
+   static_assert( std::div_sat(umax, (U)8) == (umax >> 3) );
+ 
+   return true;
+ }
+ 
+ #ifdef __SIZEOF_INT128__
+ static_assert(test<__int128>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_0
+ static_assert(test<__GLIBCXX_TYPE_INT_N_0>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_1
+ static_assert(test<__GLIBCXX_TYPE_INT_N_1>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_2
+ static_assert(test<__GLIBCXX_TYPE_INT_N_2>());
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_3
+ static_assert(test<__GLIBCXX_TYPE_INT_N_3>());
+ #endif
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/26_numerics/stdckdint/extended.cc gcc-16-20251214/libstdc++-v3/testsuite/26_numerics/stdckdint/extended.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/26_numerics/stdckdint/extended.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/26_numerics/stdckdint/extended.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,65 ----
+ // { dg-do run { target c++26 } }
+ 
+ #include <stdckdint.h>
+ #include <limits>
+ #include <testsuite_hooks.h>
+ 
+ template<typename T>
+ void
+ test()
+ {
+   using S = std::make_signed_t<T>;
+   using U = std::make_unsigned_t<T>;
+ 
+   constexpr S smax = std::numeric_limits<S>::max();
+   constexpr S smin = std::numeric_limits<S>::min();
+   constexpr U umax = std::numeric_limits<U>::max();
+   S sout{};
+   U uout{};
+ 
+   VERIFY( ckd_add(&sout, smax, (S)1) );
+   VERIFY( ! ckd_add(&uout, smax, (U)1) && uout == ((U)smax + (U)1) );
+   VERIFY( ! ckd_add(&sout, smin, (S)99) && sout == (smin + 99) );
+   VERIFY( ckd_add(&uout, smin, (S)99) );
+   VERIFY( ckd_add(&sout, smin, (S)-2) );
+   VERIFY( ckd_add(&uout, umax, (U)3) );
+   VERIFY( ! ckd_add(&sout, (U)9, (U)3) && sout == 12 );
+ 
+   VERIFY( ckd_sub(&sout, smax, (S)-1) );
+   VERIFY( ! ckd_sub(&uout, smax, (S)-1) && uout == ((U)smax + (U)1) );
+   VERIFY( ckd_sub(&sout, smin, (S)2) );
+   VERIFY( ! ckd_sub(&sout, smin, (S)-2) && sout == (smin + 2) );
+   VERIFY( ! ckd_sub(&sout, (U)0, (U)3) && sout == -3 );
+   VERIFY( ckd_sub(&uout, (U)0, (U)3) );
+ 
+   VERIFY( ! ckd_mul(&sout, (S)(smax >> 2), (S)3) && sout == (smax/4*3) );
+   VERIFY( ckd_mul(&sout, (S)(smax >> 1), (S)3) );
+   VERIFY( ! ckd_mul(&uout, (S)(smax >> 1), (S)3) );
+   VERIFY( ckd_mul(&sout, (S)(smin >> 1), (S)5) );
+   VERIFY( ! ckd_mul(&uout, (U)(umax >> 2), (U)3) );
+   VERIFY( ckd_mul(&sout, (U)(umax >> 2), (U)3) );
+   VERIFY( ckd_mul(&uout, (U)(umax >> 1), (U)7) );
+ }
+ 
+ int main()
+ {
+ #ifdef __SIZEOF_INT128__
+   test<__int128>();
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_0
+   test<__GLIBCXX_TYPE_INT_N_0>();
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_1
+   test<__GLIBCXX_TYPE_INT_N_1>();
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_2
+   test<__GLIBCXX_TYPE_INT_N_2>();
+ #endif
+ 
+ #ifdef __GLIBCXX_TYPE_INT_N_3
+   test<__GLIBCXX_TYPE_INT_N_3>();
+ #endif
+ }
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/Makefile.am gcc-16-20251214/libstdc++-v3/testsuite/Makefile.am
*** gcc-16-20251207/libstdc++-v3/testsuite/Makefile.am	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/Makefile.am	Sun Dec 14 22:32:18 2025
*************** check-performance-parallel: testsuite_fi
*** 247,253 ****
  # By adding these files here, automake will remove them for 'make clean'
  CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
  	     testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \
! 	     *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb
  
  # To remove directories.
  clean-local:
--- 247,253 ----
  # By adding these files here, automake will remove them for 'make clean'
  CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
  	     testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \
! 	     *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb gcm.cache
  
  # To remove directories.
  clean-local:
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/Makefile.in gcc-16-20251214/libstdc++-v3/testsuite/Makefile.in
*** gcc-16-20251207/libstdc++-v3/testsuite/Makefile.in	Sun Dec  7 22:32:18 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/Makefile.in	Sun Dec 14 22:32:18 2025
*************** parallel_flags = "unix/-D_GLIBCXX_PARALL
*** 435,441 ****
  # By adding these files here, automake will remove them for 'make clean'
  CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
  	     testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \
! 	     *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb
  
  all: all-am
  
--- 435,441 ----
  # By adding these files here, automake will remove them for 'make clean'
  CLEANFILES = *.txt *.tst *.exe core* filebuf_* tmp* ostream_* *.log *.sum \
  	     testsuite_* site.exp abi_check baseline_symbols *TEST* *.dat \
! 	     *.ii *.s *.o *.cc *.x *.a *.so *.xml *.raw *.out *.gdb gcm.cache
  
  all: all-am
  
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/lib/dg-options.exp gcc-16-20251214/libstdc++-v3/testsuite/lib/dg-options.exp
*** gcc-16-20251207/libstdc++-v3/testsuite/lib/dg-options.exp	Sun Dec  7 22:32:19 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/lib/dg-options.exp	Sun Dec 14 22:32:18 2025
*************** proc add_options_for_no_pch { flags } {
*** 290,296 ****
      # Remove any inclusion of bits/stdc++.h from the options.
      regsub -all -- "-include bits/stdc...h" $flags "" flags
      # This forces any generated and possibly included PCH to be invalid.
!     return "$flags -D__GLIBCXX__=99999999"
  }
  
  # Add to FLAGS all the target-specific flags needed for networking.
--- 290,296 ----
      # Remove any inclusion of bits/stdc++.h from the options.
      regsub -all -- "-include bits/stdc...h" $flags "" flags
      # This forces any generated and possibly included PCH to be invalid.
!     return "$flags -fno-modules -D__GLIBCXX__=99999999"
  }
  
  # Add to FLAGS all the target-specific flags needed for networking.
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/lib/libstdc++.exp gcc-16-20251214/libstdc++-v3/testsuite/lib/libstdc++.exp
*** gcc-16-20251207/libstdc++-v3/testsuite/lib/libstdc++.exp	Sun Dec  7 22:32:19 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/lib/libstdc++.exp	Sun Dec 14 22:32:18 2025
*************** if [info exists env(GLIBCXX_TESTSUITE_ST
*** 496,505 ****
--- 496,511 ----
      set v3_std_list [split $env(GLIBCXX_TESTSUITE_STDS) ","]
  }
  
+ # Allow adjusting which -std we test with -fmodules.
+ if ![info exists v3_modules_std] {
+     set v3_modules_std "26"
+ }
+ 
  # Modified dg-runtest that runs tests in multiple standard modes,
  # unless they specifically specify one standard.
  proc v3-dg-runtest { testcases flags default-extra-flags } {
      global runtests
+     global v3_modules_std
  
      foreach test $testcases {
  	# If we're only testing specific files and this isn't one of them, skip it.
*************** proc v3-dg-runtest { testcases flags def
*** 546,551 ****
--- 552,558 ----
  	    set option_list { }
  	    foreach x $std_list {
  		if { $x eq "impcx" } then { set x "26 -fimplicit-constexpr" }
+ 		if { $x eq "modules" } then { set x "$v3_modules_std -fmodules -flang-info-include-translate" }
  		lappend option_list "${std_prefix}$x"
  	    }
  	} else {
*************** proc v3_target_compile_as_c { source des
*** 739,744 ****
--- 746,752 ----
  proc v3-build_support { } {
      global env
      global srcdir
+     global blddir
      global v3-wchar_t
      global v3-threads
      global v3-symver
*************** proc v3-build_support { } {
*** 748,753 ****
--- 756,762 ----
      set v3-wchar_t 0
      set v3-threads 0
      set v3-symver 0
+     set v3-modules 0
      set libtest_objs ""
  
      set config_src "config.cc"
*************** proc v3-build_support { } {
*** 787,792 ****
--- 796,832 ----
  	}
      }
  
+     global v3_std_list
+     global v3_modules_std
+     if { "modules" in $v3_std_list } {
+ 	verbose -log "modules testing requested"
+ 	set v3-modules 1
+     }
+ 
+     # If we're doing modules testing, compile module std, std.compat, and the
+     # bits/stdc++.h header unit.
+     if { ${v3-modules} == 1 } {
+ 	set std_file "$blddir/include/bits/std.cc"
+ 	set std_compat_file "$blddir/include/bits/std.compat.cc"
+ 
+ 	if { ([v3_target_compile bits/stdc++.h /dev/null object \
+ 		   [list "additional_flags=-std=gnu++$v3_modules_std -fmodules -g -w -fsearch-include-path"]]
+ 	      != "") } {
+ 	    error "could not compile bits/stdc++.h"
+ 	}
+ 	if { ([v3_target_compile $std_file std.o object \
+ 		   [list "additional_flags=-std=gnu++$v3_modules_std -fmodules -g -w"]]
+ 	      != "") } {
+ 	    error "could not compile std.cc"
+ 	}
+ 	if { ([v3_target_compile $std_compat_file std.compat.o object \
+ 		   [list "additional_flags=-std=gnu++$v3_modules_std -fmodules -g -w"]]
+ 	      != "") } {
+ 	    error "could not compile std.compat.cc"
+ 	}
+ 	append libtest_objs "std.o std.compat.o "
+     }
+ 
      # Build the support objects.
      set source_files [list testsuite_abi.cc testsuite_allocator.cc \
  			  testsuite_character.cc testsuite_hooks.cc \
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/std/concepts/concepts.compare/move_only.cc gcc-16-20251214/libstdc++-v3/testsuite/std/concepts/concepts.compare/move_only.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/std/concepts/concepts.compare/move_only.cc	Thu Jan  1 00:00:00 1970
--- gcc-16-20251214/libstdc++-v3/testsuite/std/concepts/concepts.compare/move_only.cc	Sun Dec 14 22:32:18 2025
***************
*** 0 ****
--- 1,28 ----
+ // { dg-do compile { target c++20 } }
+ 
+ #include <concepts>
+ #include <compare>
+ 
+ // P2404R3 Move-only types for equality_comparable_with,
+ // totally_ordered_with, and three_way_comparable_with
+ 
+ // This was approved for C++23 but we treat it as a DR for C++20.
+ 
+ #ifndef __cpp_lib_concepts
+ # error "Feature-test macro __cpp_lib_concepts is missing in <compare>"
+ #elif __cpp_lib_concepts < 202207L
+ # error "Feature-test macro __cpp_lib_concepts has wrong value in <compare>"
+ #endif
+ 
+ struct MoveOnly
+ {
+   MoveOnly(int);
+   MoveOnly(MoveOnly&&) = default;
+   auto operator<=>(const MoveOnly&) const = default;
+   std::strong_ordering operator<=>(int) const;
+   bool operator==(const MoveOnly&) const;
+ };
+ 
+ static_assert(std::equality_comparable_with<MoveOnly, int>);
+ static_assert(std::totally_ordered_with<MoveOnly, int>);
+ static_assert(std::three_way_comparable_with<MoveOnly, int>);
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc gcc-16-20251214/libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc
*** gcc-16-20251207/libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc	Sun Dec  7 22:32:19 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/util/io/verified_cmd_line_input.cc	Sun Dec 14 22:32:18 2025
***************
*** 38,44 ****
  #include <limits.h>
  #include <utility>
  #include <stdlib.h>
! #include <bits/functexcept.h>
  
  namespace __gnu_pbds
  {
--- 38,44 ----
  #include <limits.h>
  #include <utility>
  #include <stdlib.h>
! #include <bits/exception_defines.h>
  
  namespace __gnu_pbds
  {
diff -Nrcpad gcc-16-20251207/libstdc++-v3/testsuite/util/testsuite_hooks.h gcc-16-20251214/libstdc++-v3/testsuite/util/testsuite_hooks.h
*** gcc-16-20251207/libstdc++-v3/testsuite/util/testsuite_hooks.h	Sun Dec  7 22:32:19 2025
--- gcc-16-20251214/libstdc++-v3/testsuite/util/testsuite_hooks.h	Sun Dec 14 22:32:18 2025
***************
*** 44,50 ****
  #define _GLIBCXX_TESTSUITE_HOOKS_H
  
  #include <bits/c++config.h>
! #include <bits/functexcept.h>
  #include <ctime>
  #include <stdio.h>
  
--- 44,50 ----
  #define _GLIBCXX_TESTSUITE_HOOKS_H
  
  #include <bits/c++config.h>
! #include <bits/stdexcept_throw.h>
  #include <ctime>
  #include <stdio.h>
  
